-- open import Algebra.Group.Free hiding (Free⊣Forget ; Free) open import Algebra.Group open import Cat.Functor.Adjoint.Monadic open import Cat.Functor.Equivalence open import Cat.Diagram.Initial open import Cat.Functor.Adjoint open import Cat.Instances.Comma open import Cat.Diagram.Monad hiding (Free ; Forget ; Free⊣Forget) open import Cat.Functor.Base open import Cat.Prelude module wip.test where {- import Algebra.Group.Free as F Groups : ∀ ℓ → Precategory (lsuc ℓ) ℓ Groups ℓ = c where open Precategory open Group-hom open Group-on c : Precategory _ _ c .Ob = Group ℓ c .Hom A B = Group[ A ⇒ B ] c .Hom-set _ (B , bg) = Σ-is-hlevel 2 (fun-is-hlevel 2 (bg .has-is-set)) λ _ → is-prop→is-set Group-hom-is-prop c .id .fst = λ x → x c .id .snd = record { pres-⋆ = λ _ _ → refl } c ._∘_ {x} {y} {z} (f , fh) (g , gh) = (λ x → f (g x)) , fogh where abstract fogh : Group-hom x z (λ x → f (g x)) fogh .pres-⋆ x y = ap f (gh .pres-⋆ x y) ∙ fh .pres-⋆ _ _ c .idr f = Σ-prop-path (λ _ → Group-hom-is-prop) refl c .idl f = Σ-prop-path (λ _ → Group-hom-is-prop) refl c .assoc f g h = Σ-prop-path (λ _ → Group-hom-is-prop) refl private variable ℓ : Level open Functor Forget : Functor (Groups ℓ) (Sets ℓ) Forget .F₀ (G , gg) = G , gg .Group-on.has-is-set Forget .F₁ = fst Forget .F-id = refl Forget .F-∘ _ _ = refl Forget-has-univ : ∀ s → Universal-morphism s (Forget {ℓ}) Forget-has-univ (S , S-set) = um where open Group-hom open Group-on open Initial open ↓Obj open ↓Hom it : ↓Obj _ _ it .x = tt it .y = F.Free S it .map = inc um : Initial _ um .bot = it um .has⊥ other = contr factor unique where factor : ↓Hom _ _ it other factor .α = tt factor .β = equiv→inverse (F.Free⊣Forget {A = S , S-set} .snd) (other .map) factor .sq = refl unique : ∀ x → factor ≡ x unique factoring = ↓Hom-path _ _ refl path where abstract path : factor .β ≡ factoring .β path = Σ-prop-path (λ _ → Group-hom-is-prop) (funext (Free-elim-prop _ (λ _ → y other .snd .has-is-set _ _) (λ x → happly (factoring .sq) _) (λ _ _ p q → ap₂ (other .y .snd ._⋆_) p q ∙ sym (factoring .β .snd .pres-⋆ _ _)) (λ _ p → ap (other .y .snd .inverse) p ∙ sym (pres-inv (factoring .β .snd) _)) (sym (pres-id (factoring .β .snd))))) Free : Functor (Sets ℓ) (Groups ℓ) Free = universal-maps→L _ Forget-has-univ Free⊣Forget : Free {ℓ} ⊣ Forget Free⊣Forget = universal-maps→L⊣R _ Forget-has-univ {- Group-is-monadic : is-monadic (Free⊣Forget {ℓ}) Group-is-monadic {ℓ} = ff+split-eso→is-equivalence ff seso where C = Comparison (Free⊣Forget {ℓ}) module C = Functor C ff : is-fully-faithful C ff = is-iso→is-equiv (iso from rinv linv) where open Algebra-hom open Group-hom from : Algebra-hom _ _ _ → Group[ _ ⇒ _ ] from map .fst = map .morphism from map .snd .pres-⋆ x y = happly (map .commutes) (inc x ◆ inc y) rinv : is-right-inverse from C.₁ rinv x = Algebra-hom-path refl linv : is-left-inverse from C.₁ linv x = Σ-prop-path (λ _ → Group-hom-is-prop) refl import Cat.Reasoning (Eilenberg-Moore (L∘R (Free⊣Forget {ℓ}))) as EM seso : is-split-eso C seso (Y , Y-alg) .fst = F.Free (Y .fst) seso (Y , Y-alg) .snd = EM.make-iso f g {! !} {! !} where open Algebra-hom open Algebra-on open Group-hom f : Algebra-hom _ _ (Y , Y-alg) f .morphism = Y-alg .ν f .commutes = {! !} linv : is-left-inverse inc (Y-alg .ν) linv x = Free-elim-prop (λ x₁ → inc (Y-alg .ν x) ≡ x) {! !} {! !} {! !} {! !} {! !} {! x !} g : Algebra-hom _ (Y , Y-alg) _ g .morphism = inc g .commutes = funext (Free-elim-prop _ (λ _ → squash _ _) (λ x → ap inc (happly (Y-alg .ν-unit) x)) (λ x y p q → ap inc (sym (happly (Y-alg .ν-mult) (inc x ◆ inc y))) ·· ap₂ (λ a b → inc (Y-alg .ν (a ◆ b))) p q ·· {! refl !}) {! !} {! !}) -} -}