open import GpdCont.Prelude
open import GpdCont.ActionContainer.Base
open import GpdCont.GroupAction.Equivariant using (isEquivariantMap[_][_,_])
open import Cubical.Foundations.Equiv
open import Cubical.Foundations.HLevels
open import Cubical.Algebra.Group.Morphisms using (GroupHom ; IsGroupHom)
open import Cubical.Algebra.Group.MorphismProperties using (isPropIsGroupHom)
module GpdCont.ActionContainer.Morphism {ℓ} (C D : ActionContainer ℓ) where
private
open module C = ActionContainer C using ()
renaming
( Shape to S
; Pos to P
; Symm to G
; action to σ
)
open module D = ActionContainer D using ()
renaming
( Shape to T
; Pos to Q
; Symm to H
; action to τ
)
isEquivariantPosMap : {u : S → T} (f : ∀ s → Q (u s) → P s) (φ : ∀ s → G s → H (u s)) → Type ℓ
isEquivariantPosMap f φ = ∀ (s : S) (g : G s) → equivFun (σ g) ∘ f s ≡ f s ∘ equivFun (τ (φ s g))
isPropIsEquivariantPosMap : {u : S → T} (f : ∀ s → Q (u s) → P s) (φ : ∀ s → G s → H (u s))
→ isProp (isEquivariantPosMap f φ)
isPropIsEquivariantPosMap f φ = isPropΠ2 λ s g → isOfHLevelPath' 1 (isSet→ (C.is-set-pos s)) _ _
isSymmGroupHom : {u : S → T} (φ : ∀ s → G s → H (u s)) → Type ℓ
isSymmGroupHom {u} φ = ∀ (s : S) → IsGroupHom (C.symm-group-str s) (φ s) (D.symm-group-str (u s))
isPropIsSymmGroupHom : ∀ {u} {φ} → isProp (isSymmGroupHom {u} φ)
isPropIsSymmGroupHom = isPropΠ λ s → isPropIsGroupHom _ _
record Morphismᴰ (shape-map : S → T) : Type ℓ where
constructor mkMorphismᴰ
field
pos-map : ∀ s → Q (shape-map s) → P s
symm-map : ∀ s → G s → H (shape-map s)
field
is-group-hom-symm-map : isSymmGroupHom symm-map
is-equivariant-pos-map : isEquivariantPosMap pos-map symm-map
symm-hom : ∀ s → GroupHom (C.SymmGroup s) (D.SymmGroup $ shape-map s)
symm-hom s .fst = symm-map s
symm-hom s .snd = is-group-hom-symm-map s
is-equivariant-pos-map' : ∀ s → isEquivariantMap[ symm-hom s , pos-map s ][ C.symmAction s , D.symmAction (shape-map s) ]
is-equivariant-pos-map' = is-equivariant-pos-map
unquoteDecl MorphismᴰIsoΣ = declareRecordIsoΣ MorphismᴰIsoΣ (quote Morphismᴰ)
instance
MorphismᴰToΣ : ∀ {u} → RecordToΣ (Morphismᴰ u)
MorphismᴰToΣ = toΣ MorphismᴰIsoΣ
opaque
isSetMorphismᴰ : ∀ u → isSet (Morphismᴰ u)
isSetMorphismᴰ u = recordIsOfHLevel 2 $ isSetΣ
(isSetΠ2 (λ _ _ → C.is-set-pos _))
λ f → isSetΣ
(isSetΠ2 (λ _ _ → D.isSetSymm (u _)))
λ φ → isProp→isSet (isProp× isPropIsSymmGroupHom (isPropΠ2 λ s g → isSet→ (C.is-set-pos s) _ _))
record Morphism : Type ℓ where
constructor _▷[_]
field
shape-map : S → T
mor-str : Morphismᴰ shape-map
open Morphismᴰ mor-str public
unquoteDecl MorphismIsoΣ = declareRecordIsoΣ MorphismIsoΣ (quote Morphism)
instance
MorphismToΣ : RecordToΣ Morphism
MorphismToΣ = toΣ MorphismIsoΣ
opaque
isSetMorphism : isSet Morphism
isSetMorphism = recordIsOfHLevel 2 $ isSetΣ (isSet→ D.is-set-shape) isSetMorphismᴰ
open Morphismᴰ
open Morphism
mkMorphism : (u : S → T) (f : ∀ s → Q (u s) → P s) (φ : ∀ s → G s → H (u s))
→ isEquivariantPosMap f φ
→ isSymmGroupHom φ
→ Morphism
mkMorphism u f φ is-equivariant-f is-group-hom-φ = λ where
.shape-map → u
.mor-str .pos-map → f
.mor-str .symm-map → φ
.mor-str .is-equivariant-pos-map → is-equivariant-f
.mor-str .is-group-hom-symm-map → is-group-hom-φ
mkMorphism-syntax : (u : S → T) (φ : ∀ s → GroupHom (C.SymmGroup s) (D.SymmGroup (u s))) (f : Σ[ f ∈ _ ] isEquivariantPosMap f (fst ∘ φ))
→ Morphism
mkMorphism-syntax u φ f = mkMorphism u (f .fst) (fst ∘ φ) (f .snd) (snd ∘ φ)
syntax mkMorphism-syntax u φ f = u ▷ f ◁ φ
mkMorphismBundled : (u : S → T)
→ (φ : ∀ s → GroupHom (C.SymmGroup s) (D.SymmGroup (u s)))
→ Σ[ f ∈ (∀ s → Q (u s) → P s) ] isEquivariantPosMap f (fst ∘ φ)
→ Morphism
mkMorphismBundled u φ (f , is-equivariant-f) = mkMorphism u f (fst ∘ φ) is-equivariant-f (snd ∘ φ)
Morphism≡ : {f g : Morphism}
→ (shape : f .shape-map ≡ g .shape-map)
→ (pos : PathP (λ i → ∀ s → Q (shape i s) → P s) (f .pos-map) (g .pos-map))
→ PathP (λ i → ∀ s → G s → H (shape i s)) (f .symm-map) (g .symm-map)
→ f ≡ g
Morphism≡ shape pos symm i .shape-map = shape i
Morphism≡ shape pos symm i .mor-str .pos-map = pos i
Morphism≡ shape pos symm i .mor-str .symm-map = symm i
Morphism≡ {f} {g} shape pos symm i .mor-str .is-group-hom-symm-map =
isProp→PathP (λ i → isPropIsSymmGroupHom {u = shape i} {φ = symm i})
(f .is-group-hom-symm-map)
(g .is-group-hom-symm-map)
i
Morphism≡ {f} {g} shape pos symm i .mor-str .is-equivariant-pos-map =
isProp→PathP (λ i → isPropIsEquivariantPosMap (pos i) (symm i))
(f .is-equivariant-pos-map)
(g .is-equivariant-pos-map)
i