{-# OPTIONS --without-K --exact-split --rewriting #-} module Pi.FSMG.FSMG.Properties where open import lib.Base open import lib.Equivalence open import lib.Equivalence2 open import lib.Funext open import lib.PathGroupoid open import lib.NType open import lib.types.Truncation open import Pi.Common.Extra open import Pi.FSMG.FSMG as F open import Pi.FSMG.SMG module _ {i} {A : Type i} where instance FSMG-SMGStructure : SMGStructure (FSMG A) SMGStructure.I FSMG-SMGStructure = F.I SMGStructure._⊗_ FSMG-SMGStructure = F._⊗_ SMGStructure.α FSMG-SMGStructure = F.α SMGStructure.Λ FSMG-SMGStructure = F.Λ SMGStructure.ρ FSMG-SMGStructure = F.ρ SMGStructure.β FSMG-SMGStructure = F.β SMGStructure.⬠ FSMG-SMGStructure = F.⬠ SMGStructure.▽ FSMG-SMGStructure = F.▽ SMGStructure.⬡ FSMG-SMGStructure = F.⬡ SMGStructure.β² FSMG-SMGStructure = F.β² module _ {j} {M : Type j} {{_ : has-level 1 M}} {{GM : SMGStructure M}} where private module M = SMGStructure GM module _ (f : A → M) where private module R = FSMGRec {P = M} f M.I M._⊗_ M.α M.Λ M.ρ M.β M.⬠ M.▽ M.⬡ M.β² ⟨⟩ private f♯ : FSMG A → M f♯ = R.f _♯ : SMFunctor (FSMG A) M SMFunctor.f _♯ = f♯ SMFunctor.f-I _♯ = idp SMFunctor.f-⊗ _♯ = idp SMFunctor.f-α _♯ = ∙-unit-r _ ∙ R.f-α-β SMFunctor.f-Λ _♯ = R.f-Λ-β SMFunctor.f-ρ _♯ = R.f-ρ-β SMFunctor.f-β _♯ = ∙-unit-r _ ∙ R.f-β-β module _ (f : A → M) (H : SMFunctor (FSMG A) M) (H-η : (H .SMFunctor.f) ∘ η == f) where f♯-uniq : (f ♯) == H f♯-uniq = sm-functor= (f ♯) H (! (λ= p)) TODO TODO where p : (X : FSMG A) → SMFunctor.f H X == SMFunctor.f (f ♯) X p = FSMGElimSet.f {{TODO}} (app= H-η) (SMFunctor.f-I H) (λ {X} {Y} X* Y* → SMFunctor.f-⊗ H {X} {Y} ∙ ap (M._⊗ _) X* ∙ ap (_ M.⊗_) Y*) TODO TODO TODO TODO FSMG-Universal : SMFunctor (FSMG A) M ≃ (A → M) FSMG-Universal = equiv (λ F → F .SMFunctor.f ∘ η) (λ f → f ♯) (λ _ → idp) h where h : (F : SMFunctor (FSMG A) M) → ((F .SMFunctor.f ∘ η) ♯) == F h F = sm-functor= ((S.f ∘ η) ♯) F TODO TODO TODO where module S = SMFunctor F