module Group where
{-
This file contains the definitions of group and group action
along with some examples.
-}
open import Basics
open import Atoms
open import Perms
--------------------------------------------------------------------------------------------------------------------------------
--Definition of Group
--------------------------------------------------------------------------------------------------------------------------------
record Group : Set₁ where
field
Gₛ : Set
_≈ₛ_ : Rel Gₛ
eq≈ₛ : isEquivalence Gₛ _≈ₛ_
_∙_ : Op₂ Gₛ
e : Gₛ
_⁻¹ : Op₁ Gₛ
asso : assoc {Gₛ}{_∙_}{_≈ₛ_}
id : idax {Gₛ}{_∙_}{_⁻¹}{_≈ₛ_} e
cong∙ : _∙_ Preserves₂ _≈ₛ_ ⟶ _≈ₛ_ ⟶ _≈ₛ_
cong⁻¹ : _⁻¹ Preserves _≈ₛ_ ⟶ _≈ₛ_
open Group public
-------------------------------------------------------------------------------------------------------------------------------
--Definition of group action
-------------------------------------------------------------------------------------------------------------------------------
record GAct (G : Group) : Set₁ where
field
AₛP : Set
≈ₐP : Rel AₛP
eq≈ₐP : isEquivalence AₛP ≈ₐP
ActP : (Gₛ G) → AₛP → AₛP
resP : ActP Preserves₂ (_≈ₛ_ G) ⟶ ≈ₐP ⟶ ≈ₐP
p₁p₂↠P : p₁p₂Act {Gₛ G}{AₛP}{_∙_ G}{≈ₐP}{ActP}
ι↠P : ιAct {Gₛ G}{AₛP}{≈ₐP}{ActP} (e G)
open GAct public
-----------------------------------------------------------------------------------------------------------------------------
--Perm is a group
-----------------------------------------------------------------------------------------------------------------------------
PermG : Group
PermG = record { Gₛ = Perm
; _≈ₛ_ = pEquiv
; eq≈ₛ = pEquiv≡
; _∙_ = _++_
; e = ι
; _⁻¹ = invPerm
; asso = PermAssoc≈
; id = λ p → (p⁻¹p≡ι p) , (pp⁻¹≡ι p)
; cong∙ = λ {p₁ p₂ q₁ q₂} → cong++ {p₁} {p₂} {q₁} {q₂}
; cong⁻¹ = λ {p q} → ( λ p≈q → p≈q⇒p⁻¹≈q⁻¹ p q p≈q)
}
-----------------------------------------------------------------------------------------------------------------------------
--Permutation action on atoms is a group action
----------------------------------------------------------------------------------------------------------------------------
PermGA : GAct PermG
PermGA = record { AₛP = Atom
; ≈ₐP = _≡_
; eq≈ₐP = aEquiv≡ Atom
; ActP = PermAct
; resP = λ {p₁ p₂ a₁ a₂} p₁≈p₂ a₁≡a₂ → PermAct p₁ a₁ ≡< cong (λ w → PermAct p₁ w) a₁≡a₂ > (PermAct p₁ a₂ ≡< p₁≈p₂ {a₂} > ((PermAct p₂ a₂) ▪))
; p₁p₂↠P = λ p₁ p₂ → (λ {x} → sym (p₁++p₂≡p₂p₁ {x} p₂ p₁))
; ι↠P = λ {x} → refl
}
--------------------------------------------------------------------------------------------------------------------------
--Permutation action on itself (composition) is a group action
--------------------------------------------------------------------------------------------------------------------------
Perms : GAct PermG
Perms = record {AₛP = Perm
; ≈ₐP = pEquiv
; eq≈ₐP = pEquiv≡
; ActP = λ π → λ σ → σ ++ π
; resP = λ {p₁}{p₂}{q₁}{q₂} p₁≈p₂ q₁≈q₂ → cong++ {q₁}{q₂}{p₁}{p₂} q₁≈q₂ p₁≈p₂
; p₁p₂↠P = λ p₁ p₂ {p₃} {x} → sym (cong (λ w → PermAct w x) (PermAssoc p₃ p₂ p₁))
; ι↠P = λ {p} → ιp p
}
-----------------------------------------------------------------------------------------------------------------------------------
--Permutation action on itself (conjugation) is a group action
-----------------------------------------------------------------------------------------------------------------------------------
PermGP : GAct PermG
PermGP = record { AₛP = Perm
; ≈ₐP = pEquiv
; eq≈ₐP = pEquiv≡
; ActP = PPAct
; resP = λ {π₁ π₂ p₁ p₂} π₁≈π₂ p₁≈p₂ → resPP π₁ π₂ p₁ p₂ π₁≈π₂ p₁≈p₂
; p₁p₂↠P = λ p₁ p₂ → (λ {p} → sym (p₁++p₂≡p₂p₁p p₂ p₁ p))
; ι↠P = λ {p} → ιp p
}
----------------------------------------------------------------------------------------------