LeanPool.Polylean.ConjInvLength.ProvedBound #
Split with the first piece empty when the head matches the splitting letter.
Instances For
Prepend a letter to the first component of a proved split.
Equations
Instances For
All proved splits of a word around a letter.
Equations
Instances For
A length function on words.
Equations
Instances For
A length function invariant under conjugation by letters.
Equations
- LeanPool.Polylean.conjInv l = ∀ (x : LeanPool.Polylean.Letter) (g : LeanPool.Polylean.Word), l (g ^ x) = l g
Instances For
The triangle inequality for a length function.
Equations
- LeanPool.Polylean.triangIneq l = ∀ (g h : LeanPool.Polylean.Word), l (g ++ h) ≤ l g + l h
Instances For
A length function normalized on single letters.
Equations
- LeanPool.Polylean.normalized l = ∀ (x : LeanPool.Polylean.Letter), l [x] = 1
Instances For
A length function that sends the empty word to zero.
Equations
- LeanPool.Polylean.emptyWord l = (l [] = 0)
Instances For
A certified upper bound for the length of a word.
- bound : ℕ
The numeric upper bound.
- pf (l : Length) : Polylean.emptyWord l → normalized l → conjInv l → triangIneq l → l g ≤ self.bound
The proof that every normalized conjugation-invariant length is bounded by
bound.
Instances For
Combine certified bounds across a split around a conjugating letter.
Equations
Instances For
Prepend a letter to a certified bound.
Instances For
The zero bound for the empty word.
Equations
Instances For
Choose the better bound from a nonempty list of alternatives.
Equations
- head.min tail = List.foldl (fun (pb1 pb2 : LeanPool.Polylean.ProvedBound w) => if pb1.bound ≤ pb2.bound then pb1 else pb2) head tail
Instances For
Compute a certified length bound for a word.
Equations
- One or more equations did not get rendered due to their size.
- LeanPool.Polylean.provedBound [] = LeanPool.Polylean.ProvedBound.emptyWord