{-# OPTIONS --lossy-unification #-}
open import GpdCont.QuotientContainer.Base as QC using (QCont)
module GpdCont.QuotientContainer.Delooping {ℓ} (Q : QCont ℓ) where
open import GpdCont.Prelude hiding (Lift)
open import GpdCont.SymmetricContainer.Base using (SymmetricContainer ; mkSymmetricContainer)
open import GpdCont.GroupAction.AssociatedBundle using (associatedBundle)
open import GpdCont.GroupAction.Faithful using (isFaithful→isSetTruncAssociatedBundle)
import GpdCont.Delooping
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.HLevels
open import Cubical.Algebra.Group.Base
open import Cubical.Data.Sigma using (Σ-assoc-≃)
private
module Q = QCont Q
𝔹 : (G : Group ℓ) → Type ℓ
𝔹 = GpdCont.Delooping.𝔹
module 𝔹 {s : Q.Shape} = GpdCont.Delooping (Q.SymmGroup s)
DeloopingShape : hGroupoid ℓ
DeloopingShape .fst = Σ[ s ∈ Q.Shape ] 𝔹 (Q.SymmGroup s)
DeloopingShape .snd = isGroupoidΣ (isSet→isGroupoid Q.is-set-shape) λ s → 𝔹.isGroupoid𝔹
DeloopingPos : ⟨ DeloopingShape ⟩ → hSet ℓ
DeloopingPos = uncurry λ s → associatedBundle (Q.symmAction s)
QContDelooping : SymmetricContainer ℓ
QContDelooping = mkSymmetricContainer DeloopingShape DeloopingPos
hasSetFibersDeloopingPos : (Y : hSet ℓ) → isSet (fiber DeloopingPos Y)
hasSetFibersDeloopingPos Y = isOfHLevelRespectEquiv 2 fiber-equiv isSet-Σfiber where
fiber-equiv : (Σ[ s ∈ Q.Shape ] fiber (associatedBundle (Q.symmAction s)) Y) ≃ fiber DeloopingPos Y
isSet-Σfiber : isSet (Σ[ s ∈ Q.Shape ] fiber (associatedBundle (Q.symmAction s)) Y)
isSet-Σfiber = isSetΣ
Q.is-set-shape
λ s → isFaithful→isSetTruncAssociatedBundle (Q.isFaithfulSymmAction s) Y
fiber-equiv = invEquiv (Σ-assoc-≃ {A = Q.Shape} {B = λ s → 𝔹 (Q.SymmGroup s)} {C = λ s x → associatedBundle (Q.symmAction s) x ≡ Y})