{-# OPTIONS --without-K --rewriting #-} module Pi.Coxeter.Lehmer2CoxeterEquiv where open import lib.Base open import lib.NType open import lib.NType2 open import lib.Equivalence open import lib.PathGroupoid open import lib.types.Fin open import lib.types.List open import lib.types.LoopSpace open import Pi.Lehmer.Lehmer2 open import Pi.Lehmer.Lehmer renaming (Lehmer to Lehmer1) open import Pi.Coxeter.Sn open import Pi.Coxeter.Coxeter import Pi.Coxeter.LehmerCoxeterEquiv as L1 open import Pi.Common.Extra open import Pi.Common.Misc open import Pi.UFin.UFin immersion : {n : ℕ} -> Lehmer n -> List (Fin n) immersion {n} c = L1.immersion (<– Lehmer1-Lehmer2-equiv c) immersion⁻¹ : {n : ℕ} -> List (Fin n) → Lehmer n immersion⁻¹ {n} c = –> Lehmer1-Lehmer2-equiv (L1.immersion⁻¹ c) immersion⁻¹-respects≈ : {n : ℕ} -> {m1 m2 : List (Fin n)} → m1 ≈* m2 → immersion⁻¹ m1 == immersion⁻¹ m2 immersion⁻¹-respects≈ {n} p = ap (–> Lehmer1-Lehmer2-equiv) (L1.immersion⁻¹-respects≈ p) immersion∘immersion⁻¹ : {n : ℕ} -> (m : List (Fin n)) → immersion (immersion⁻¹ m) ≈* m immersion∘immersion⁻¹ {n} c = let r = L1.immersion∘immersion⁻¹ c t = ap L1.immersion (<–-inv-l Lehmer1-Lehmer2-equiv (L1.immersion⁻¹ c)) in (idp≃ _ _ t) ■ r immersion⁻¹∘immersion : {n : ℕ} -> (cl : Lehmer n) → immersion⁻¹ (immersion cl) == cl immersion⁻¹∘immersion {n} c = let r = ap (–> Lehmer1-Lehmer2-equiv) $ L1.immersion⁻¹∘immersion (<– Lehmer1-Lehmer2-equiv c) t = <–-inv-r Lehmer1-Lehmer2-equiv c in r ∙ t