Delete unused code and moved some lemmas into Lattice.lean

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-26 10:17:25 -05:00
parent 352e0bb8cc
commit 1a843747bf
3 changed files with 16 additions and 21 deletions

View File

@@ -67,6 +67,14 @@ end Folds
def BoundedChains (α : Type*) [Preorder α] (n : ) : Prop := def BoundedChains (α : Type*) [Preorder α] (n : ) : Prop :=
c : LTSeries α, c.length n c : LTSeries α, c.length n
/-- Since a singleton type's preorder has no nonempty `<` chains,
they are vacuously bounded by any minimum height. -/
lemma boundedChains_of_subsingleton (α : Type*) [Preorder α] [Subsingleton α]
(n : ) : BoundedChains α n := fun c => by
by_contra hc
push_neg at hc
exact (c.step 0, by omega).ne (Subsingleton.elim _ _)
/-- A finite height lattice is a lattice in which all chains $a < \ldots < z$ have a maximum height `height`. -/ /-- A finite height lattice is a lattice in which all chains $a < \ldots < z$ have a maximum height `height`. -/
class FiniteHeightLattice (α : Type*) extends Lattice α where class FiniteHeightLattice (α : Type*) extends Lattice α where
longestChain : LTSeries α longestChain : LTSeries α
@@ -126,6 +134,13 @@ def transport {α β : Type*} [Lattice β]
chains_bounded := fun c => chains_bounded := fun c =>
I.chains_bounded (c.map g (hg.strictMono_of_injective hfg.injective)) I.chains_bounded (c.map g (hg.strictMono_of_injective hfg.injective))
/-- A `Unique` lattice trivially has finite height: its only chain is the singleton
`[default]`, and there are no nontrivial `<` chains in a subsingleton. -/
def ofUnique (α : Type*) [Lattice α] [Unique α] : FiniteHeightLattice α where
toLattice := inferInstance
longestChain := RelSeries.singleton _ default
chains_bounded := boundedChains_of_subsingleton α 0
end FiniteHeightLattice end FiniteHeightLattice
end Spa end Spa

View File

@@ -13,15 +13,6 @@ namespace IterProd
variable {A B : Type u} variable {A B : Type u}
instance decidableEq [DecidableEq A] [DecidableEq B] :
k, DecidableEq (IterProd A B k)
| 0 => inferInstanceAs (DecidableEq B)
| k + 1 => @instDecidableEqProd A (IterProd A B k) _ (decidableEq k)
def build (a : A) (b : B) : (k : ) IterProd A B k
| 0 => b
| k + 1 => (a, build a b k)
def fixedHeight [FiniteHeightLattice A] [FiniteHeightLattice B] : def fixedHeight [FiniteHeightLattice A] [FiniteHeightLattice B] :
k, FiniteHeightLattice (IterProd A B k) k, FiniteHeightLattice (IterProd A B k)
| 0 => inferInstanceAs (FiniteHeightLattice B) | 0 => inferInstanceAs (FiniteHeightLattice B)

View File

@@ -11,17 +11,6 @@ as a base case for the iterated product `Spa/Lattice/IterProd.lean`). -/
namespace Spa namespace Spa
/-- Since a singleton type's preorder has no nonempty `<` chains, instance : FiniteHeightLattice PUnit := FiniteHeightLattice.ofUnique PUnit
they are vacuously bounded by any minimum height. -/
lemma boundedChains_of_subsingleton (α : Type*) [Preorder α] [Subsingleton α]
(n : ) : BoundedChains α n := fun c => by
by_contra hc
push_neg at hc
exact (c.step 0, by omega).ne (Subsingleton.elim _ _)
instance : FiniteHeightLattice PUnit where
toLattice := inferInstance
longestChain := RelSeries.singleton _ PUnit.unit
chains_bounded := boundedChains_of_subsingleton PUnit 0
end Spa end Spa