{-# OPTIONS --lossy-unification #-}
module GpdCont.ActionContainer.Delooping where
open import GpdCont.Prelude
open import GpdCont.ActionContainer.Base using (ActionContainer)
import GpdCont.ActionContainer.Morphism as ActionContainerMorphism
open import GpdCont.GroupAction.AssociatedBundle using (associatedBundle ; associatedBundleMap)
open import GpdCont.SymmetricContainer.Base using (SymmetricContainer ; mkSymmetricContainer)
import GpdCont.SymmetricContainer.Morphism as Symm
import GpdCont.Delooping
open import Cubical.Foundations.HLevels
open import Cubical.Algebra.Group.Base
module Container {ℓ} (F : ActionContainer ℓ) where
private
module F = ActionContainer F
open module 𝔹 {s : F.Shape} = GpdCont.Delooping (F.SymmGroup s) hiding (𝔹) public
𝔹Symm : (s : F.Shape) → Type ℓ
𝔹Symm s = 𝔹.𝔹 {s = s}
DeloopingShape : hGroupoid ℓ
DeloopingShape .fst = Σ[ s ∈ F.Shape ] 𝔹Symm s
DeloopingShape .snd = isGroupoidΣ (isSet→isGroupoid F.is-set-shape) λ s → 𝔹.isGroupoid𝔹
DeloopingPos : ⟨ DeloopingShape ⟩ → hSet ℓ
DeloopingPos = uncurry λ s → associatedBundle (F.symmAction s)
Delooping : SymmetricContainer ℓ
Delooping = mkSymmetricContainer DeloopingShape DeloopingPos
module Morphism {ℓ} {F G : ActionContainer ℓ} (α : ActionContainerMorphism.Morphism F G) where
open import GpdCont.Delooping.Map using (map)
open ActionContainerMorphism
private
module F = ActionContainer F
module G = ActionContainer G
module α = Morphism α
shape-mor : ⟨ Container.DeloopingShape F ⟩ → ⟨ Container.DeloopingShape G ⟩
shape-mor (s , x) .fst = α.shape-map s
shape-mor (s , x) .snd = map (α.symm-hom s) x
pos-mor : ∀ s* → ⟨ Container.DeloopingPos G (shape-mor s*) ⟩ → ⟨ Container.DeloopingPos F s* ⟩
pos-mor = uncurry λ s → associatedBundleMap
(F.symmAction s) (G.symmAction (α.shape-map s))
(α.symm-hom s)
(α.pos-map s)
(α.is-equivariant-pos-map' s)
Delooping : Symm.Morphism (Container.Delooping F) (Container.Delooping G)
Delooping .Symm.Morphism.shape-map = shape-mor
Delooping .Symm.Morphism.pos-map = pos-mor
module Functor (ℓ : Level) where
open import GpdCont.ActionContainer.Category using (Act)
open import GpdCont.SymmetricContainer.WildCat using (SymmContWildCat ; hoSymmCont)
open import GpdCont.WildCat.HomotopyCategory using (ho) renaming (module Notation to HoNotation)
open import Cubical.Categories.Category.Base
open import Cubical.Categories.Functor.Base
open import Cubical.WildCat.Base hiding (_[_,_])
private
module SymmContWild = WildCat (SymmContWildCat ℓ)
module hoSymmCont where
open Category (hoSymmCont ℓ) public
open HoNotation (SymmContWildCat ℓ) using (trunc-hom) public
trunc-path : ∀ {F G} {f g : SymmContWild.Hom[ F , G ]} → f ≡ g → trunc-hom f ≡ trunc-hom g
trunc-path = cong trunc-hom
module Act = Category (Act {ℓ})
Delooping₀ = Container.Delooping
Delooping₁ : ∀ {F G : ActionContainer ℓ} → ActionContainerMorphism.Morphism F G → (hoSymmCont ℓ) [ Container.Delooping F , Container.Delooping G ]
Delooping₁ = hoSymmCont.trunc-hom ∘ Morphism.Delooping
Delooping : Functor (Act {ℓ}) (hoSymmCont ℓ)
Delooping .Functor.F-ob = Delooping₀
Delooping .Functor.F-hom = Delooping₁
Delooping .Functor.F-id {x = F} = hoSymmCont.trunc-path (Symm.Morphism≡ {G = Delooping₀ F} {H = Delooping₀ F} shape-id pos-id) where
module F = ActionContainer F
module 𝔹F = Container F
shape-id : Morphism.shape-mor (Act.id {F}) ≡ id ⟨ Container.DeloopingShape F ⟩
shape-id = funExt $ uncurry goal where
module _ (s : F.Shape) where
is-set-shape-mor-path : (x : Container.𝔹Symm F s) → isSet (Morphism.shape-mor Act.id (s , x) ≡ (s , x))
is-set-shape-mor-path x = str 𝔹F.DeloopingShape _ (s , x)
goal : (x : 𝔹F.𝔹Symm s) → Morphism.shape-mor Act.id (s , x) ≡ (s , x)
goal = 𝔹F.elimSet is-set-shape-mor-path refl λ g i j → s , 𝔹F.loop g i
pos-id : (s* : ⟨ 𝔹F.DeloopingShape ⟩) → PathP (λ i → ⟨ 𝔹F.DeloopingPos (shape-id i s*) ⟩ → ⟨ 𝔹F.DeloopingPos s* ⟩) (Morphism.pos-mor Act.id s*) (id _)
pos-id = uncurry pos-id-ext where
pos-id-ext : (s : F.Shape) (x : 𝔹F.𝔹Symm s) → PathP (λ i → ⟨ 𝔹F.DeloopingPos (shape-id i (s , x)) ⟩ → ⟨ 𝔹F.DeloopingPos (s , x) ⟩) _ _
pos-id-ext s = 𝔹F.elimProp (λ x → isOfHLevelPathP' 1 (isSetΠ λ _ → str (𝔹F.DeloopingPos (s , x))) _ _) refl
Delooping .Functor.F-seq {x = F} {y = G} {z = H} f g = hoSymmCont.trunc-path (Symm.Morphism≡ {G = Delooping₀ F} {H = Delooping₀ H} shape-seq pos-seq) where
module F = ActionContainer F
module H = ActionContainer H
module 𝔹F = Container F
module 𝔹H = Container H
module f⋆g = ActionContainerMorphism.Morphism (f Act.⋆ g)
shape-seq : Morphism.shape-mor (f Act.⋆ g) ≡ Symm.Morphism.shape-map (Morphism.Delooping f SymmContWild.⋆ Morphism.Delooping g)
shape-seq = funExt $ uncurry λ s → 𝔹F.elimSet (λ _ → str 𝔹H.DeloopingShape _ _) refl λ g i j → f⋆g.shape-map s , 𝔹H.loop (f⋆g.symm-map s g) i
pos-seq : (s* : ⟨ 𝔹F.DeloopingShape ⟩) → PathP _ _ _
pos-seq = uncurry λ s → 𝔹F.elimProp (λ x → isOfHLevelPathP' 1 (isSetΠ λ _ → str (𝔹F.DeloopingPos (s , x))) _ _) refl