module GpdCont.SymmetricContainer.WildCat where
open import GpdCont.Prelude hiding (id) renaming (_∘_ to _∘fun_)
open import GpdCont.SymmetricContainer.Base
open import GpdCont.SymmetricContainer.Morphism
open import GpdCont.SymmetricContainer.Eval
open import GpdCont.SymmetricContainer.EvalHom
open import GpdCont.WildCat.NatTrans using (WildNatTransPath)
open import GpdCont.WildCat.TypeOfHLevel
open import GpdCont.WildCat.HomotopyCategory using (ho)
open import Cubical.Categories.Category.Base using (Category)
open import Cubical.Categories.Instances.Discrete using (DiscreteCategory)
open import Cubical.WildCat.Base using (WildCat ; _[_,_] ; concatMor)
open import Cubical.WildCat.Functor using (WildFunctor ; WildNatTrans ; compWildNatTrans)
import Cubical.Foundations.GroupoidLaws as GL
import Cubical.Foundations.Transport as Transport
open WildCat hiding (_⋆_)
module _ (ℓ : Level) where
SymmContWildCat : WildCat (ℓ-suc ℓ) ℓ
SymmContWildCat .ob = SymmetricContainer ℓ
SymmContWildCat .Hom[_,_] = Morphism
SymmContWildCat .id = idMorphism _
SymmContWildCat .WildCat._⋆_ = compMorphism
SymmContWildCat .⋆IdL = compMorphismIdL
SymmContWildCat .⋆IdR = compMorphismIdR
SymmContWildCat .⋆Assoc = compMorphismAssoc
hoSymmCont : Category _ _
hoSymmCont = ho SymmContWildCat
SymmContLocalCat : (C D : SymmetricContainer ℓ) → Category _ _
SymmContLocalCat C D = DiscreteCategory (Morphism C D , isGroupoidMorphism)
private
variable
ℓ : Level
Eval : (G : SymmetricContainer ℓ) → WildFunctor (hGroupoidCat ℓ) (hGroupoidCat ℓ)
Eval G .WildFunctor.F-ob = ⟦ G ⟧
Eval G .WildFunctor.F-hom {x} {y} = ⟦ G ⟧-map x y
Eval G .WildFunctor.F-id {x} = ⟦ G ⟧-map-id x
Eval G .WildFunctor.F-seq {x} {y} {z} = ⟦ G ⟧-map-comp x y z
module EvalFunctor where
private
variable
G H : SymmetricContainer ℓ
on-hom : (α : Morphism G H) → WildNatTrans _ _ (Eval G) (Eval H)
on-hom α .WildNatTrans.N-ob = Hom⟦ α ⟧₀
on-hom α .WildNatTrans.N-hom {x} {y} = Hom⟦ α ⟧₀-natural x y
on-hom-id-ob : ∀ (X : hGroupoidCat ℓ .ob) → Hom⟦ idMorphism G ⟧₀ X ≡ id (hGroupoidCat ℓ) {x = ⟦ G ⟧ X}
on-hom-id-ob {G} X = funExt $ Hom⟦_⟧₀-id {G = G} X
on-hom-id : on-hom (idMorphism G) ≡ hGroupoidEndo ℓ .id {x = Eval G}
on-hom-id = WildNatTransPath
on-hom-id-ob
λ f i → refl
open Morphism
module _ {G H K : SymmetricContainer ℓ} (α : Morphism G H) (β : Morphism H K) where
on-hom-seq-ob : (X : hGroupoidCat ℓ .ob) → Hom⟦ α ⋆⟨ SymmContWildCat ℓ ⟩ β ⟧₀ X ≡ Hom⟦ β ⟧₀ X ∘fun Hom⟦ α ⟧₀ X
on-hom-seq-ob X = refl
on-hom-seq : on-hom (α ⋆⟨ SymmContWildCat ℓ ⟩ β) ≡ on-hom α ⋆⟨ hGroupoidEndo ℓ ⟩ on-hom β
on-hom-seq = WildNatTransPath
on-hom-seq-ob λ {x} {y} → goal x y
where module _ (x y : hGroupoidCat ℓ .ob) (f : hGroupoidCat _ [ x , y ]) where
p : Path _
(Hom⟦ β ⟧₀ y ∘fun Hom⟦ α ⟧₀ y ∘fun (⟦ G ⟧-map x y f))
(Hom⟦ α ⋆⟨ SymmContWildCat ℓ ⟩ β ⟧₀ y ∘fun (⟦ G ⟧-map x y f))
p i = ⟦ G ⟧-map x y f ⋆⟨hGpd[ ⟦ G ⟧ x , ⟦ G ⟧ y , ⟦ K ⟧ y ]⟩ (on-hom-seq-ob y (~ i))
q : Path _ _ _
q = Hom⟦ α ⋆Mor β ⟧₀-natural x y f
r : Path _
(⟦ K ⟧-map x y f ∘fun Hom⟦ α ⋆⟨ SymmContWildCat ℓ ⟩ β ⟧₀ x)
(⟦ K ⟧-map x y f ∘fun Hom⟦ β ⟧₀ x ∘fun Hom⟦ α ⟧₀ x)
r i = (on-hom-seq-ob x i) ⋆⟨hGpd[ ⟦ G ⟧ x , ⟦ K ⟧ x , ⟦ K ⟧ y ]⟩ ⟦ K ⟧-map x y f
s : Path _ _ _
s = ⊛-hom _ (on-hom α) (on-hom β) x y f
_ : s ≡ p ∙∙ q ∙∙ r
_ = refl
goal : PathP (λ i → p (~ i) ≡ r i) q s
goal = doubleCompPath-filler p q r
EvalFunctor : WildFunctor (SymmContWildCat ℓ) (hGroupoidEndo ℓ)
EvalFunctor .WildFunctor.F-ob = Eval
EvalFunctor .WildFunctor.F-hom = EvalFunctor.on-hom
EvalFunctor .WildFunctor.F-id = EvalFunctor.on-hom-id
EvalFunctor .WildFunctor.F-seq = EvalFunctor.on-hom-seq