{-# OPTIONS --lossy-unification #-}
open import GpdCont.Prelude
module GpdCont.ActionContainer.AsFamily (ℓ : Level) where
open import GpdCont.ActionContainer.Base
open import GpdCont.ActionContainer.Morphism
open import GpdCont.Group.MapConjugator using (Conjugator)
open import GpdCont.GroupAction.Base using (Action ; _⁺_)
open import GpdCont.GroupAction.Equivariant using (isEquivariantMap[_][_,_])
open import GpdCont.GroupAction.TwoCategory using (GroupAction ; isLocallyStrictGroupAction)
open import GpdCont.GroupAction.Delooping as ActionDelooping using (ActionDelooping)
open import GpdCont.SetBundle.Base ℓ using (SetBundle)
open import GpdCont.TwoCategory.Base using (TwoCategory)
open import GpdCont.TwoCategory.StrictFunctor using (StrictFunctor)
open import GpdCont.TwoCategory.StrictFunctor.LocalFunctor as LocalFunctor using (LocalFunctor)
open import GpdCont.TwoCategory.Displayed.Base using (TwoCategoryᴰ)
open import GpdCont.TwoCategory.Family.Base using (Fam ; Famᴰ)
open import GpdCont.TwoCategory.Family.Functor using (FamFunctor)
open import GpdCont.TwoCategory.HomotopySet using (SetEq)
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.HLevels
import Cubical.Foundations.Path as Path
open import Cubical.Data.Sigma
import Cubical.Data.Equality as Eq
open import Cubical.Algebra.Group.Base
open import Cubical.Algebra.Group.Morphisms
{-# INJECTIVE_FOR_INFERENCE ⟨_⟩ #-}
module SetEq = TwoCategory (SetEq ℓ)
FamSetBundle : TwoCategory (ℓ-suc ℓ) ℓ ℓ
FamSetBundle = Fam SetBundle ℓ
FamActionᴰ : TwoCategoryᴰ _ (ℓ-suc ℓ) ℓ ℓ
FamActionᴰ = Famᴰ (GroupAction ℓ) ℓ
FamAction : TwoCategory (ℓ-suc ℓ) ℓ ℓ
FamAction = Fam (GroupAction ℓ) ℓ
private
module GroupAction = TwoCategory (GroupAction ℓ)
module FamAction where
open TwoCategory FamAction public
open TwoCategoryᴰ FamActionᴰ public
obEquiv : FamAction.ob ≃ ActionContainer ℓ
obEquiv =
(Σ[ S ∈ hSet ℓ ] (⟨ S ⟩ → Σ[ G ∈ Group ℓ ] Σ[ P ∈ hSet ℓ ] Action G P)) ≃⟨ Σ-cong-equiv-snd shuffle≃ ⟩
(Σ[ S ∈ hSet ℓ ] Σ[ P ∈ (⟨ S ⟩ → hSet ℓ) ] Σ[ G ∈ (⟨ S ⟩ → Group ℓ) ] ((s : ⟨ S ⟩) → Action (G s) (P s))) ≃⟨ invEquiv ActionContainer≃Σ ⟩
ActionContainer ℓ ≃∎
where module _ (S : hSet ℓ) where
shuffle : (⟨ S ⟩ → Σ[ G ∈ Group ℓ ] Σ[ P ∈ hSet ℓ ] Action G P) → (Σ[ P ∈ (⟨ S ⟩ → hSet ℓ) ] Σ[ G ∈ (⟨ S ⟩ → Group ℓ) ] ((s : ⟨ S ⟩) → Action (G s) (P s)))
shuffle act .fst = λ s → act s .snd .fst
shuffle act .snd .fst = λ s → act s .fst
shuffle act .snd .snd = λ s → act s .snd .snd
unshuffle : (Σ[ P ∈ (⟨ S ⟩ → hSet ℓ) ] Σ[ G ∈ (⟨ S ⟩ → Group ℓ) ] ((s : ⟨ S ⟩) → Action (G s) (P s))) → (⟨ S ⟩ → Σ[ G ∈ Group ℓ ] Σ[ P ∈ hSet ℓ ] Action G P)
unshuffle (P , G , σ) = λ s → G s , P s , σ s
shuffle≃ : _ ≃ _
shuffle≃ = strictEquiv shuffle unshuffle
ob→ = equivFun obEquiv
homEquiv : (x y : FamAction.ob) → FamAction.hom x y ≃ Morphism (ob→ x) (ob→ y)
homEquiv x@(S , xᴰ) y@(T , yᴰ) =
Σ[ u ∈ (⟨ S ⟩ → ⟨ T ⟩) ] (∀ s → Σ[ φ ∈ GroupHom _ _ ] Σ[ f ∈ _ ] isEquivariantMap[ φ , f ][ σ s , τ (u s) ]) ≃⟨ Σ-cong-equiv-snd shuffle ⟩
Σ[ u ∈ (⟨ S ⟩ → ⟨ T ⟩) ]
Σ[ f ∈ ((s : ⟨ S ⟩) → ⟨ Q (u s) ⟩ → ⟨ P s ⟩) ]
Σ[ φ ∈ (∀ s → ⟨ G s ⟩ → ⟨ H (u s) ⟩) ]
Σ[ _ ∈ (∀ s → IsGroupHom (str $ G s) (φ s) (str $ H (u s))) ]
(∀ s (g : ⟨ G s ⟩) → (((σ s) ⁺ g) ∘ (f s)) ≡ (f s ∘ (τ (u s) ⁺ φ s g)))
≃⟨ Σ-cong-equiv-snd (λ u → Σ≃ _) ⟩
Σ[ u ∈ (⟨ S ⟩ → ⟨ T ⟩) ] (Morphismᴰ (ob→ x) (ob→ y) u) ≃⟨ Σ≃ _ ⟩
Morphism (ob→ x) (ob→ y) ≃∎
where
open GpdCont.ActionContainer.Morphism (ob→ x) (ob→ y) using (MorphismᴰToΣ ; MorphismToΣ)
module _ (s : ⟨ S ⟩) where
G = xᴰ s .fst
P = xᴰ s .snd .fst
σ = xᴰ s .snd .snd
module _ (t : ⟨ T ⟩) where
H = yᴰ t .fst
Q = yᴰ t .snd .fst
τ = yᴰ t .snd .snd
shuffle-iso : (u : ⟨ S ⟩ → ⟨ T ⟩)
→ Iso
(∀ s → Σ[ φ ∈ GroupHom _ _ ] Σ[ f ∈ _ ] isEquivariantMap[ φ , f ][ σ s , τ (u s) ])
( Σ[ f ∈ ((s : ⟨ S ⟩) → ⟨ Q (u s) ⟩ → ⟨ P s ⟩) ]
Σ[ φ ∈ (∀ s → ⟨ G s ⟩ → ⟨ H (u s) ⟩) ]
Σ[ _ ∈ (∀ s → IsGroupHom (str $ G s) (φ s) (str $ H (u s))) ]
(∀ s (g : ⟨ G s ⟩) → (((σ s) ⁺ g) ∘ (f s)) ≡ (f s ∘ (τ (u s) ⁺ φ s g)))
)
shuffle-iso u .Iso.fun f = (fst ∘ snd ∘ f) , (fst ∘ fst ∘ f) , (snd ∘ fst ∘ f) , (snd ∘ snd ∘ f)
shuffle-iso u .Iso.inv (f , φ , φ-hom , f-eqva) s = (φ s , φ-hom s) , f s , f-eqva s
shuffle-iso u .Iso.rightInv _ = refl
shuffle-iso u .Iso.leftInv _ = refl
shuffle : ∀ u → _ ≃ _
shuffle u = strictIsoToEquiv (shuffle-iso u)
module _
((J , x) (K , y) : FamAction.ob)
(u : ⟨ J ⟩ → ⟨ K ⟩)
(f g : FamAction.hom[ u ] x y)
where
private
module _ (j : ⟨ J ⟩) where
φ = f j .fst
f′ = f j .snd .fst
ψ = g j .fst
g′ = g j .snd .fst
module _ (k : ⟨ K ⟩) where
τ = equivFun ∘ ((y k .snd .snd) .Action.action)
isContr-u≡u : isContr (u Eq.≡ u)
isContr-u≡u = inhProp→isContr Eq.refl $
isPropRetract
Eq.eqToPath
Eq.pathToEq
Eq.pathToEq-eqToPath
(isSet→ (str K) u u)
relEquiv : FamAction.rel {y = (K , y)} (u , f) (u , g) ≃ ((j : ⟨ J ⟩) → Σ[ (r , _) ∈ Conjugator (φ j) (ψ j) ] f′ j ≡ g′ j ∘ (τ (u j) r))
relEquiv = Σ-contractFst isContr-u≡u
private
𝔹ᴬ = ActionDelooping ℓ
module 𝔹ᴬ = StrictFunctor 𝔹ᴬ
Fam𝔹 : StrictFunctor FamAction FamSetBundle
Fam𝔹 = FamFunctor (ActionDelooping ℓ) ℓ
private
module Fam𝔹 where
open StrictFunctor Fam𝔹 public
open import GpdCont.TwoCategory.Family.Properties (ActionDelooping ℓ) ℓ public
module _ where
open import GpdCont.Axioms.TruncatedChoice renaming (ASC to AxiomOfSetChoice)
open LocalFunctor Fam𝔹
isLocallyFullyFaithfulFam𝔹 : isLocallyFullyFaithful
isLocallyFullyFaithfulFam𝔹 = Fam𝔹.isLocallyFullyFaithfulFam (ActionDelooping.isLocallyFullyFaithfulDelooping ℓ)
module _ (choice : AxiomOfSetChoice ℓ ℓ) where
isLocallyEssentiallySurjectiveFam𝔹 : isLocallyEssentiallySurjective
isLocallyEssentiallySurjectiveFam𝔹 = Fam𝔹.isLocallyEssentiallySurjectiveFam
choice
(isLocallyStrictGroupAction ℓ)
(ActionDelooping.isEssentiallySurjectiveDelooping ℓ)
isLocallyWeakEquivalenceFam𝔹 : isLocallyWeakEquivalence
isLocallyWeakEquivalenceFam𝔹 = isLocallyFullyFaithful×EssentiallySurjective→isLocallyWeakEquivalence
isLocallyFullyFaithfulFam𝔹
isLocallyEssentiallySurjectiveFam𝔹