Formal lattice-linear expressions #
This file defines formal lattice-linear expressions in finitely many variables and their evaluation in an arbitrary real vector lattice. It also develops a normal-form API: every expression is converted to a signed difference of finite suprema of real linear combinations, with evaluation preserved in every vector lattice.
The main application is the Yudin theorem: a lattice-linear identity between
formal expressions holds in every vector lattice as soon as it holds on ℝ.
A formal lattice-linear expression in n variables, built from the
variables by addition, real scalar multiplication, and the binary lattice
operations ⊔ and ⊓.
- zero {n : ℕ} : LLexpr n
- var {n : ℕ} : Fin n → LLexpr n
- add {n : ℕ} : LLexpr n → LLexpr n → LLexpr n
- smul {n : ℕ} : ℝ → LLexpr n → LLexpr n
- sup {n : ℕ} : LLexpr n → LLexpr n → LLexpr n
- inf {n : ℕ} : LLexpr n → LLexpr n → LLexpr n
Instances For
Evaluation of a formal lattice-linear expression at an n-tuple of vectors
in a vector lattice.
Equations
- LLexpr.eval x LLexpr.zero = 0
- LLexpr.eval x (LLexpr.var i) = x i
- LLexpr.eval x (e₁.add e₂) = LLexpr.eval x e₁ + LLexpr.eval x e₂
- LLexpr.eval x (LLexpr.smul r e) = r • LLexpr.eval x e
- LLexpr.eval x (e₁.sup e₂) = LLexpr.eval x e₁ ⊔ LLexpr.eval x e₂
- LLexpr.eval x (e₁.inf e₂) = LLexpr.eval x e₁ ⊓ LLexpr.eval x e₂
Instances For
Rename the variables of an expression along f.
This is used when two expressions depending on different finite tuples are viewed as expressions in one concatenated tuple, and when a tuple is compressed to the distinct elements in its range.
Equations
- LLexpr.reindexExpr f LLexpr.zero = LLexpr.zero
- LLexpr.reindexExpr f (LLexpr.var i) = LLexpr.var (f i)
- LLexpr.reindexExpr f (e₁.add e₂) = (LLexpr.reindexExpr f e₁).add (LLexpr.reindexExpr f e₂)
- LLexpr.reindexExpr f (LLexpr.smul r e) = LLexpr.smul r (LLexpr.reindexExpr f e)
- LLexpr.reindexExpr f (e₁.sup e₂) = (LLexpr.reindexExpr f e₁).sup (LLexpr.reindexExpr f e₂)
- LLexpr.reindexExpr f (e₁.inf e₂) = (LLexpr.reindexExpr f e₁).inf (LLexpr.reindexExpr f e₂)
Instances For
Any finite family factors through an injective finite family listing its range.
The map f records, for each original index, the corresponding index in the
range listing. This is useful when reducing an arbitrary finite tuple to a
tuple of distinct entries.
Lattice-linear combinations of a tuple #
The set of lattice-linear combinations of a tuple x : Fin n → X, i.e. the
image of LLexpr n under evaluation at x.
Equations
Instances For
Yudin's theorem #
A formal lattice-linear expression vanishes on a vector lattice X if its
evaluation is zero for every substitution by vectors of X.
Equations
- LLexpr.Vanishes X e = ∀ (x : Fin n → X), LLexpr.eval x e = 0
Instances For
A finite nonempty supremum of real linear combinations in n variables.
A value A : SupLinearCombination n stores a finite nonempty set of coefficient
vectors. Evaluating it at x : Fin n → X gives the supremum of the corresponding
linear combinations of the entries of x.
The finite set of coefficient vectors.
Nonemptiness of the coefficient set, avoiding any ambient completeness assumption.
Instances For
Evaluate a finite supremum of linear combinations at a tuple in a vector lattice.
Instances For
The supremum consisting of a single linear combination with coefficient vector a.
Instances For
Evaluating a singleton supremum gives the corresponding linear combination.
Add two finite suprema by adding each coefficient vector from the first to each coefficient vector from the second.
Equations
Instances For
Evaluation turns addition of finite suprema into addition in the vector lattice.
The pointwise supremum of two finite suprema, obtained by taking the union of their coefficient sets.
Instances For
Evaluation turns SupLinearCombination.sup into lattice supremum.
Scale every coefficient vector in a finite supremum by the scalar r.
Equations
- LLexpr.SupLinearCombination.smul r A = { coeffs := Finset.image (fun (a : Fin n → ℝ) => r • a) A.coeffs, nonempty := ⋯ }
Instances For
For non-negative scalars, evaluation turns coefficient scaling into scalar multiplication.
If one finite supremum of linear combinations is pointwise below another on
ℝ^n, then the same inequality holds after evaluation in any vector lattice.
If two finite suprema of linear combinations agree pointwise on ℝ^n, then
they agree after evaluation in any vector lattice.
A signed normal form pos - neg, where both sides are finite suprema of
linear combinations.
- pos : SupLinearCombination n
The positive finite supremum in the signed representation.
- neg : SupLinearCombination n
The negative finite supremum in the signed representation.
Instances For
Evaluate a signed normal form at a tuple in a vector lattice.
Instances For
The zero normal form.
Equations
- LLexpr.NormalForm.zero = { pos := LLexpr.SupLinearCombination.singleton fun (x : Fin n) => 0, neg := LLexpr.SupLinearCombination.singleton fun (x : Fin n) => 0 }
Instances For
The normal form for the i-th variable.
Equations
- LLexpr.NormalForm.var i = { pos := LLexpr.SupLinearCombination.singleton (Pi.single i 1), neg := LLexpr.SupLinearCombination.singleton fun (x : Fin n) => 0 }
Instances For
Add two signed normal forms.
Instances For
Negate a signed normal form by swapping its positive and negative parts.
Instances For
Scalar multiplication of signed normal forms.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The lattice infimum of two signed normal forms.
Instances For
Evaluating the zero normal form gives zero.
Evaluating a variable normal form gives the corresponding tuple entry.
Evaluation turns addition of normal forms into addition.
Evaluation turns negation of normal forms into negation.
Evaluation turns scalar multiplication of normal forms into scalar multiplication.
Evaluation turns supremum of normal forms into lattice supremum.
Evaluation turns infimum of normal forms into lattice infimum.
Convert an arbitrary lattice-linear expression into a signed supremum of linear combinations, preserving evaluation in every vector lattice.
Equations
- LLexpr.zero.normalize = LLexpr.NormalForm.zero
- (LLexpr.var i).normalize = LLexpr.NormalForm.var i
- (e₁.add e₂).normalize = e₁.normalize.add e₂.normalize
- (LLexpr.smul r e).normalize = LLexpr.NormalForm.smul r e.normalize
- (e₁.sup e₂).normalize = e₁.normalize.sup e₂.normalize
- (e₁.inf e₂).normalize = e₁.normalize.inf e₂.normalize
Instances For
The normal form of an expression has the same evaluation as the expression.
Yudin's theorem: a formal lattice-linear expression that vanishes on ℝ
vanishes on every vector lattice.
If the difference of two formal expressions vanishes on the reals, their evaluations agree in every vector lattice.