/- Port of `Lattice/Unit.agda`. The lattice structure itself (`_⊔_`, `_⊓_`, all semilattice/lattice laws) is lifted into mathlib: `PUnit.instLinearOrder` provides `Lattice PUnit`. What remains is the fixed-height structure: the unit lattice has height 0. -/ import Spa.Lattice namespace Spa /-- Chains in a subsingleton order are bounded by any `n` (Agda: the `bounded` field of `Lattice/Unit.agda`'s `fixedHeight`, generalized). -/ theorem 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 _ _) /-- Agda: `Lattice/Unit.agda`'s `fixedHeight`/`isFiniteHeightLattice`. -/ instance : FiniteHeightLattice PUnit where height := 0 fixedHeight := { bot := PUnit.unit top := PUnit.unit longestChain := RelSeries.singleton _ PUnit.unit head_longestChain := rfl last_longestChain := rfl length_longestChain := rfl bounded := boundedChains_of_subsingleton PUnit 0 } end Spa