{-# OPTIONS --rewriting --without-K --exact-split --overlapping-instances #-} module Pi.Lehmer.Lehmer2FinEquiv where open import HoTT hiding (_≤_; _<_; ≤-has-all-paths ; ltS ; ltSR) import lib.types.Nat as N open import Pi.Common.Misc open import Pi.Lehmer.FinExcept open import Pi.Lehmer.Lehmer2 open import Pi.Coxeter.InvTransform open import Pi.UFin.BAut open import Pi.Common.Extra open import Pi.Lehmer.FinExcept Fin≃Lehmer-aux : {n : ℕ} -> Aut (Fin (S n)) ≃ Lehmer n Fin≃Lehmer-aux {O} = Aut (Fin (S O)) ≃⟨ contr-equiv-Unit (Aut-level {{Fin1-level}}) ⟩ Unit ≃⟨ contr-equiv-Unit Fin1-level ⁻¹ ⟩ Lehmer O ≃∎ Fin≃Lehmer-aux {S m} = Fin (S (S m)) ≃ Fin (S (S m)) ≃⟨ i ⟩ Σ (Fin (S (S m))) (λ k → FinExcept fzero ≃ FinExcept k) ≃⟨ Σ-cong-equiv-snd ii ⟩ Fin (S (S m)) × (Fin (S m) ≃ Fin (S m)) ≃⟨ _ , ×-isemap-r (Fin (S (S m))) (snd (Fin≃Lehmer-aux {m})) ⟩ Fin (S (S m)) × Lehmer m ≃∎ Fin≃Lehmer : {n : ℕ} -> Aut (Fin (S n)) ≃ Lehmer n Fin≃Lehmer = Fin≃Lehmer-aux ∘e inv-transform-equiv