Imports

29.3 Dual linear programs

For a primal maximization program max cᵀx with Ax ≤ b and x ≥ 0, a dual assignment satisfies y ≥ 0 and Aᵀy ≥ c; its objective is bᵀy.

Main declarations:

  • StandardLP.IsDualFeasible.

  • StandardLP.dualObjective.

Downstream layers:

  • Weak duality is proved in the next module.

  • Strong duality and complementary slackness are proved by the later Section 29.3 modules together with the initialized solver (online material).

namespace CLRSnamespace Chapter29open Matrixnamespace StandardLP

A nonnegative vector satisfying c ≤ Aᵀy is dual feasible.

def IsDualFeasible {m n : } (P : StandardLP m n) (y : Fin m ) : Prop := IsNonnegative y j, P.c j (P.A.transpose *ᵥ y) j

The dual objective value bᵀy.

def dualObjective {m n : } (P : StandardLP m n) (y : Fin m ) : := P.b ⬝ᵥ y
namespace IsDualFeasible

A dual-feasible assignment is coordinatewise nonnegative.

theorem nonnegative {m n : } {P : StandardLP m n} {y : Fin m } (hy : P.IsDualFeasible y) : IsNonnegative y := hy.1

A dual-feasible assignment bounds each primal objective coefficient by the corresponding coordinate of Aᵀy.

theorem coefficient_le {m n : } {P : StandardLP m n} {y : Fin m } (hy : P.IsDualFeasible y) : j, P.c j (P.A.transpose *ᵥ y) j := hy.2
end IsDualFeasibleend StandardLPend Chapter29end CLRS