2026-06-09 18:36:43 -07:00
|
|
|
|
import Spa.Lattice
|
|
|
|
|
|
|
|
|
|
|
|
namespace Spa
|
|
|
|
|
|
|
|
|
|
|
|
def FiniteHeightLattice.transport {α β : Type*} [Lattice α] [Lattice β]
|
2026-06-22 18:33:48 -05:00
|
|
|
|
[I : FiniteHeightLattice α] (f : α → β) (g : β → α)
|
2026-06-09 18:36:43 -07:00
|
|
|
|
(hf : Monotone f) (hg : Monotone g)
|
|
|
|
|
|
(hgf : ∀ a, g (f a) = a) (hfg : ∀ b, f (g b) = b) :
|
|
|
|
|
|
FiniteHeightLattice β where
|
2026-06-22 18:33:48 -05:00
|
|
|
|
bot := f ⊥
|
|
|
|
|
|
top := f ⊤
|
2026-06-09 18:36:43 -07:00
|
|
|
|
height := I.height
|
2026-06-23 11:49:45 -05:00
|
|
|
|
longestChain :=
|
2026-06-22 18:33:48 -05:00
|
|
|
|
{ series :=
|
2026-06-23 11:49:45 -05:00
|
|
|
|
I.longestChain.series.map f
|
2026-06-22 18:33:48 -05:00
|
|
|
|
(hf.strictMono_of_injective (Function.LeftInverse.injective hgf))
|
2026-06-23 11:49:45 -05:00
|
|
|
|
head_series := congrArg f I.longestChain.head_series
|
|
|
|
|
|
last_series := congrArg f I.longestChain.last_series
|
|
|
|
|
|
length_series := I.longestChain.length_series }
|
2026-06-22 18:33:48 -05:00
|
|
|
|
chains_bounded := fun c =>
|
|
|
|
|
|
I.chains_bounded
|
|
|
|
|
|
(c.map g (hg.strictMono_of_injective (Function.LeftInverse.injective hfg)))
|
2026-06-09 18:36:43 -07:00
|
|
|
|
|
|
|
|
|
|
end Spa
|