import Spa.Lattice

namespace Spa

def FiniteHeightLattice.transport {α β : Type*} [Lattice β]
    [I : FiniteHeightLattice α] (f : α → β) (g : β → α)
    (hf : Monotone f) (hg : Monotone g)
    (hgf : Function.LeftInverse g f) (hfg : Function.LeftInverse f g) :
    FiniteHeightLattice β where
  toLattice := inferInstance
  longestChain :=
    I.longestChain.map f (hf.strictMono_of_injective hgf.injective)
  chains_bounded := fun c =>
    I.chains_bounded (c.map g (hg.strictMono_of_injective hfg.injective))

end Spa
