28 lines
869 B
Lean4
28 lines
869 B
Lean4
import Spa.Lattice
|
||
|
||
/-!
|
||
|
||
# Unit Lattice
|
||
|
||
This file provides a proof that in addition to being a lattice,
|
||
`PUnit` is a `Spa.FiniteHeightLattice`. This is fairly trivial result,
|
||
but the unit is used as a placeholder in various contexts (e.g.,
|
||
as a base case for the iterated product `Spa/Lattice/IterProd.lean`). -/
|
||
|
||
namespace Spa
|
||
|
||
/-- 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 _ _)
|
||
|
||
instance : FiniteHeightLattice PUnit where
|
||
toLattice := inferInstance
|
||
longestChain := RelSeries.singleton _ PUnit.unit
|
||
chains_bounded := boundedChains_of_subsingleton PUnit 0
|
||
|
||
end Spa
|