-- open import Cat.Functor.Adjoint.Monadic -- open import Cat.Functor.Adjoint.Monad -- 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.Univalent -- open import Cat.Prelude module wip.test3 where -- Props : ∀ ℓ → Precategory (lsuc ℓ) ℓ -- Props ℓ = c where -- open Precategory -- c : Precategory _ _ -- c .Ob = n-Type ℓ 1 -- c .Hom A B = ∣ A ∣ → B -- c .Hom-set _ (_ , bp) = is-prop→is-set (Π-is-hlevel 1 λ _ → bp) -- c .id = λ x → x -- c ._∘_ f g = λ x → f (g x) -- c .idr f = refl -- c .idl f = refl -- c .assoc f g h = refl -- private variable ℓ : Level -- open Functor -- Forget : Functor (Props ℓ) (Sets ℓ) -- Forget .F₀ (A , ap) = A , is-prop→is-set ap -- Forget .F₁ = λ x → x -- Forget .F-id = refl -- Forget .F-∘ f g = refl -- open Initial -- open ↓Obj -- open ↓Hom -- Forget-has-univ : ∀ c → Universal-morphism c (Forget {ℓ}) -- Forget-has-univ (C , _) = um where -- it : ↓Obj _ _ -- it .x = tt -- it .y = ∥ C ∥ , squash -- it .map = inc -- um : Universal-morphism (C , _) _ -- um .bot = it -- um .has⊥ arr = contr dh pull where -- codomain : Prop _ -- codomain = arr .y -- dh : ↓Hom _ _ _ _ -- dh .α = tt -- dh .β = ∥-∥-elim (λ _ → arr .y .snd) (arr .map) -- dh .sq i x = arr .map x -- pull : ∀ x → dh ≡ x -- pull x = ↓Hom-path _ _ refl (funext (λ _ → arr .y .snd _ _)) -- Free : Functor (Sets ℓ) (Props ℓ) -- Free = universal-maps→L _ Forget-has-univ -- Free⊣Forget : Free {ℓ} ⊣ Forget -- Free⊣Forget = universal-maps→L⊣R _ Forget-has-univ -- test : is-monadic (Free⊣Forget {ℓ}) -- test {ℓ} = ff+split-eso→is-equivalence ff seso where -- ff : is-fully-faithful (Comparison Free⊣Forget) -- ff = is-iso→is-equiv (iso alg rinv linv) where -- alg : Algebra-hom _ _ _ → _ → _ -- alg = Algebra-hom.morphism -- rinv : is-right-inverse alg (F₁ (Comparison Free⊣Forget)) -- rinv x = Algebra-hom-path refl -- linv : is-left-inverse alg (F₁ (Comparison Free⊣Forget)) -- linv x = refl -- seso : is-split-eso (Comparison Free⊣Forget) -- seso ((T , tset) , alg) = (∥ T ∥ , squash) , c where -- module alg = Algebra-on alg -- import Cat.Reasoning (Eilenberg-Moore (L∘R (Free⊣Forget {ℓ}))) as R -- abstract -- T-prop : is-prop T -- T-prop x y = -- sym (happly alg.ν-unit _) -- ·· ap alg.ν (squash (inc x) (inc y)) -- ·· happly alg.ν-unit _ -- f : Algebra-hom _ _ _ -- f .Algebra-hom.morphism = alg.ν -- f .Algebra-hom.commutes = funext (λ _ → T-prop _ _) -- g : Algebra-hom _ _ _ -- g .Algebra-hom.morphism = inc -- g .Algebra-hom.commutes = funext (λ _ → squash _ _) -- c : _ R.≅ _ -- c = R.make-iso f g (Algebra-hom-path (funext (λ _ → T-prop _ _))) -- (Algebra-hom-path (funext (λ _ → squash _ _))) -- module -- _ {o o₁ ℓ ℓ₁} -- {A : Precategory o ℓ} {B : Precategory o₁ ℓ₁} -- {F : Functor A B} -- where -- private module F = Functor F -- import Cat.Reasoning A as A -- import Cat.Reasoning B as B -- faithful-reflects-monic -- : ∀ {a b} {f : A.Hom a b} -- → is-faithful F → B.is-monic (F.₁ f) → A.is-monic f -- faithful-reflects-monic {f = f} faith mon g h p = faith (mon _ _ l) where -- l = -- F.₁ f B.∘ F.₁ g ≡˘⟨ F.F-∘ _ _ ⟩ -- F.₁ (f A.∘ g) ≡⟨ ap F.₁ p ⟩ -- F.₁ (f A.∘ h) ≡⟨ F.F-∘ _ _ ⟩ -- F.₁ f B.∘ F.₁ h ∎ -- faithful-reflects-epic -- : ∀ {a b} {f : A.Hom a b} -- → is-faithful F → B.is-epic (F.₁ f) → A.is-epic f -- faithful-reflects-epic {f = f} faith epi g h p = faith (epi _ _ l) where -- l = -- F.₁ g B.∘ F.₁ f ≡˘⟨ F.F-∘ _ _ ⟩ -- F.₁ (g A.∘ f) ≡⟨ ap F.₁ p ⟩ -- F.₁ (h A.∘ f) ≡⟨ F.F-∘ _ _ ⟩ -- F.₁ h B.∘ F.₁ f ∎