EconCSLib.Math.Minimax.Loomis #
LRS-style direct induction proof of the general (positive-B) Loomis theorem [MFoGT, Theorem 2.5.1]:
For matrices
A, B : I → J → ℝwithBentrywise positive there existx : Δ(I),y : Δ(J), andv : ℝwithxA ≥ v · xBandAy ≤ v · By.
This file begins with the scaffolding layer:
positivity of the aggregates xB and By, the ratio-form auxiliaries
lamB.aux and muB.aux, and the Loomis scalars lamB0, muB0.
Subsequent layers (continuity / attainment / weak duality / induction /
packaged theorem) build on that scaffolding. The simplified-Loomis
(von Neumann minimax) MinimaxLoomis.lam0 = MinimaxLoomis.mu0 is re-derived
as the B = 𝟙 corollary minmax_from_general at the end of this file.
Blueprint #
docs/knowledge/nodes/zero_sum/loomis_theorem.mddocs/knowledge/nodes/zero_sum/loomis_induction_proof.mddocs/knowledge/nodes/zero_sum/loomis_induction_proof.positive_aggregate.md
Attribution #
Structurally parallel to EconCSLib.Math.Minimax.MinimaxLoomis (ported from
math-xmum/gametheory's GameTheory/Zerosum.lean), with B factors
threaded through where the simplified-Loomis route had 1.
Entrywise positivity predicate #
Vector aggregates: xA, xB, Ay, By, and their positivity #
The generic positivity lemma wsum_pos lives in Math.Simplex; the
Loomis-flavored aggregates below are one-line applications of it.
Positivity of the row aggregate when B is entrywise positive.
Positivity of the column aggregate when B is entrywise positive.
Row player's per-column Loomis ratio (xA)_j / (xB)_j.
Equations
- Loomis.colRatio A B x j = Loomis.xA A x j / Loomis.xB B x j
Instances For
Column player's per-row Loomis ratio (Ay)_i / (By)_i.
Equations
- Loomis.rowRatio A B y i = Loomis.Ay A y i / Loomis.By B y i
Instances For
Player I's guaranteed Loomis ratio under mixed strategy x: infimum over
pure columns.
Equations
- Loomis.lamB.aux A B x = Finset.univ.inf' ⋯ fun (j : J) => Loomis.colRatio A B x j
Instances For
Player II's Loomis-ratio cap under mixed strategy y: supremum over
pure rows.
Equations
- Loomis.muB.aux A B y = Finset.univ.sup' ⋯ fun (i : I) => Loomis.rowRatio A B y i
Instances For
Maxmin Loomis scalar λ₀ = sup_x λ_aux(x).
Equations
- Loomis.lamB0 A B = iSup (Loomis.lamB.aux A B)
Instances For
Minmax Loomis scalar μ₀ = inf_y μ_aux(y).
Equations
- Loomis.muB0 A B = iInf (Loomis.muB.aux A B)
Instances For
Continuity, boundedness, and attainment #
The Loomis ratios are continuous on the compact simplex (positive denominators by
xB_pos / By_pos), so the inf'/sup' aggregates are continuous and
their extrema lamB0 / muB0 are attained.
Each column ratio (xA)_j / (xB)_j is continuous on Δ(I).
Each row ratio (Ay)_i / (By)_i is continuous on Δ(J).
Base case of the Loomis induction: a 1×1 matrix pair has the single
ratio A i₀ j₀ / B i₀ j₀ as the common Loomis value.
Induction step #
We linearise the Loomis inequalities by introducing the offset functionals
G(x, j) := (xA)_j - λ₀ · (xB)_j and H(y, i) := μ₀ · (By)_i - (Ay)_i,
turning the inequalities xA ≥ λ₀ · xB and Ay ≤ μ₀ · By into nonneg
conditions on functions linear in their simplex argument. Convex
combinations then reduce to the constant-c = 0 linear_comb_* and
mix_*_nbh lemmas from Core.Simplex.
Equivalence of the ratio form and the offset form #
Column / row extension to the unrestricted simplex #
The strong induction loomis_value_eq #
Packaged Loomis theorem #
Loomis Theorem [MFoGT, Theorem 2.5.1].
For any pair of matrices A B : I → J → ℝ with B entrywise positive,
there exist mixed strategies x : Δ(I), y : Δ(J) and a value v : ℝ
such that for every column j ∈ J and every row i ∈ I,
$$ v \cdot (xB)_j \le (xA)_j, \qquad (Ay)_i \le v \cdot (By)_i. $$
The common value v = lamB0 A B = muB0 A B.
Corollary: simplified Loomis = B = 1 specialisation #
The simplified-Loomis development in MinimaxLoomis proves
lam0 A = mu0 A directly by inlining the B = 𝟙 specialisation of the
induction. This section re-derives that statement from the general
positive-B Loomis theorem above, validating the
minimax_from_loomis blueprint node's "all-ones specialisation"
claim.
Simplified Loomis as a corollary of the general theorem: the finite
von Neumann minimax MinimaxLoomis.lam0 A = MinimaxLoomis.mu0 A follows by
instantiating loomis_value_eq at the all-ones matrix B = 𝟙.
This is the canonical "B = 𝟙 specialisation" route recorded by the
[[minimax_from_loomis]] blueprint node, and the sole route to the finite
von Neumann minimax: MinimaxLoomis keeps only the shared foundational layer
(aggregates, attainment, weak duality, drop/extend infra), and its scalar
equality is exported here rather than re-proved by a standalone induction.