theorem
sd_farkas_alternative_false
{m n : ℕ}
(A : Matrix (Fin m) (Fin n) ℝ)
(b : Fin m → ℝ)
(c x₀ : Fin n → ℝ)
(hx₀_nn : ∀ (j : Fin n), 0 ≤ x₀ j)
(hAx₀ : A.mulVec x₀ = b)
(v : ℝ)
(hv_ub : ∀ (y : Fin m → ℝ), (∀ (j : Fin n), c j ≤ A.transpose.mulVec y j) → v ≤ b ⬝ᵥ y)
(w : Fin (m + 1) → ℝ)
(hw_nn : ∀ (j : Fin (n + 1)), 0 ≤ (sdAugMat A c).transpose.mulVec w j)
(hw_dot : sdAugRhs b v ⬝ᵥ w < 0)
:
theorem
augDualSys_to_dual
{m n : ℕ}
(A : Matrix (Fin m) (Fin n) ℝ)
(b : Fin m → ℝ)
(c : Fin n → ℝ)
(v : ℝ)
(z : Fin (m + (m + (n + 1))) → ℝ)
(hz_nn : ∀ (k : Fin (m + (m + (n + 1)))), 0 ≤ z k)
(hCz : (dualAugMat A b).mulVec z = dualAugRhs c v)
:
have y_opt := fun (i : Fin m) => z (Fin.castAdd (m + (n + 1)) i) - z (Fin.natAdd m (Fin.castAdd (n + 1) i));
(∀ (j : Fin n), c j ≤ A.transpose.mulVec y_opt j) ∧ b ⬝ᵥ y_opt ≤ v
theorem
sd_dual_farkas_alternative_false
{m n : ℕ}
(A : Matrix (Fin m) (Fin n) ℝ)
(b : Fin m → ℝ)
(c : Fin n → ℝ)
(v : ℝ)
(hv_is_ub : ∀ (x : Fin n → ℝ), (∀ (j : Fin n), 0 ≤ x j) → A.mulVec x = b → c ⬝ᵥ x ≤ v)
(x₀ : Fin n → ℝ)
(hx₀_nn : ∀ (j : Fin n), 0 ≤ x₀ j)
(hAx₀ : A.mulVec x₀ = b)
(w : Fin (n + 1) → ℝ)
(hw_nn : ∀ (k : Fin (m + (m + (n + 1)))), 0 ≤ (dualAugMat A b).transpose.mulVec w k)
(hw_dot : dualAugRhs c v ⬝ᵥ w < 0)
: