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:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user