Documentation

Atlas.CombinatorialOptimization.code.LP.StrongDuality

noncomputable def sdAugMat {m n : } (A : Matrix (Fin m) (Fin n) ) (c : Fin n) :
Matrix (Fin (m + 1)) (Fin (n + 1))
Instances For
    noncomputable def sdAugRhs {m : } (b : Fin m) (v : ) :
    Fin (m + 1)
    Instances For
      theorem augSys_to_primal {m n : } (A : Matrix (Fin m) (Fin n) ) (c : Fin n) (b : Fin m) (v : ) (z : Fin (n + 1)) (hz_nn : ∀ (j : Fin (n + 1)), 0 z j) (hBz : (sdAugMat A c).mulVec z = sdAugRhs b v) :
      have x := fun (j : Fin n) => z j.castSucc; (∀ (j : Fin n), 0 x j) A.mulVec x = b c ⬝ᵥ x v
      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) :
      noncomputable def dualAugMat {m n : } (A : Matrix (Fin m) (Fin n) ) (b : Fin m) :
      Matrix (Fin (n + 1)) (Fin (m + (m + (n + 1))))
      Instances For
        noncomputable def dualAugRhs {n : } (c : Fin n) (v : ) :
        Fin (n + 1)
        Instances For
          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 = bc ⬝ᵥ 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) :
          theorem strong_duality {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) (y₀ : Fin m) (hATy₀ : ∀ (j : Fin n), c j A.transpose.mulVec y₀ j) :
          ∃ (x_opt : Fin n), (∀ (j : Fin n), 0 x_opt j) A.mulVec x_opt = b ∃ (y_opt : Fin m), (∀ (j : Fin n), c j A.transpose.mulVec y_opt j) c ⬝ᵥ x_opt = b ⬝ᵥ y_opt