Imports

29.1 Slack-variable construction

The canonical slack vector for an assignment x is b - Ax. Primal feasibility makes this vector nonnegative and converts every row inequality into an equality.

Main results:

  • slack_nonnegative_of_feasible.

  • slack_equation.

  • slackExtension_of_feasible.

namespace CLRSnamespace Chapter29open Matrixnamespace StandardLP

The canonical slack vector b - Ax.

def slack {m n : } (P : StandardLP m n) (x : Fin n ) : Fin m := fun i => P.b i - (P.A *ᵥ x) i

A nonnegative slack extension satisfies Ax + s = b coordinatewise.

def IsSlackExtension {m n : } (P : StandardLP m n) (x : Fin n ) (s : Fin m ) : Prop := IsNonnegative x IsNonnegative s i, (P.A *ᵥ x) i + s i = P.b i

A feasible assignment has a nonnegative canonical slack vector.

theorem slack_nonnegative_of_feasible {m n : } {P : StandardLP m n} {x : Fin n } (hx : P.IsFeasible x) : IsNonnegative (P.slack x) := by intro i exact sub_nonneg.mpr (hx.2 i)

The canonical slack vector satisfies Ax + slack(x) = b.

theorem slack_equation {m n : } (P : StandardLP m n) (x : Fin n ) : i, (P.A *ᵥ x) i + P.slack x i = P.b i := by intro i simp [slack]

Every primal-feasible assignment extends canonically to a nonnegative equality-form assignment.

theorem slackExtension_of_feasible {m n : } {P : StandardLP m n} {x : Fin n } (hx : P.IsFeasible x) : P.IsSlackExtension x (P.slack x) := by exact hx.1, slack_nonnegative_of_feasible hx, P.slack_equation x
end StandardLPend Chapter29end CLRS