{-# OPTIONS --without-K --rewriting #-}

open import lib.Basics
open import lib.types.Pointed

module lib.wild-cats.Ptd-wc where

open import lib.wild-cats.WildCat public
open import lib.wild-cats.WildFunctor public

Ptd-wc : (i : ULevel)  WildCat
ob (Ptd-wc i) = Ptd i
hom (Ptd-wc _) X Y = X ⊙→ Y
id₁ (Ptd-wc _) X = ⊙idf X
_▢_ (Ptd-wc _) g f = g ⊙∘ f
ρ (Ptd-wc _) f = ⊙-crd∼-to-== (⊙∘-runit f) 
lamb (Ptd-wc _) f = ⊙-crd∼-to-== (⊙∘-lunit f)
α (Ptd-wc _) h g f = ⊙-crd∼-to-== (⊙∘-α-crd h g f)

PtdFunctor : (i j : ULevel)  Type (lsucc (lmax i j))
PtdFunctor i j = Functor-wc (Ptd-wc i) (Ptd-wc j)

module _ {i} {X Y : Ptd i} where

  ⊙≃-to-equiv-wc : (e : X ⊙≃ Y)  equiv-wc (Ptd-wc i) (fst e)
  fst (⊙≃-to-equiv-wc e) = ⊙<– e
  fst (snd (⊙≃-to-equiv-wc e)) = ! (⊙λ= (⊙<–-inv-l e))
  snd (snd (⊙≃-to-equiv-wc e)) = ! (⊙λ= (⊙<–-inv-r e))

  ⊙≃-from-equiv-wc : {f : X ⊙→ Y}  equiv-wc (Ptd-wc i) f  X ⊙≃ Y
  fst (⊙≃-from-equiv-wc {f} e) = f
  snd (⊙≃-from-equiv-wc {f} e) = is-eq (fst f) (fst (<–-wc (Ptd-wc _) e))
     x  ! (fst (⊙app= (<–-wc-rinv (Ptd-wc _) e)) x))
    λ x  ! (fst (⊙app= (<–-wc-linv (Ptd-wc _) e)) x)