Source code on Github{-# OPTIONS --safe #-}
module Prelude.Group where
open import Prelude.Init; open SetAsType
open import Prelude.Semigroup
open import Prelude.Monoid
open import Prelude.Setoid
record Group (A : Type ℓ) ⦃ _ : Semigroup A ⦄ ⦃ _ : Monoid A ⦄ : Type ℓ where
field _⁻¹ : Op₁ A
open Group ⦃...⦄ public
record GroupLaws (A : Type ℓ)
⦃ _ : ISetoid A ⦄ ⦃ _ : SetoidLaws A ⦄
⦃ _ : Semigroup A ⦄ ⦃ _ : Monoid A ⦄ ⦃ _ : Group A ⦄
: Type (ℓ ⊔ₗ relℓ) where
open Alg≈
field
inverse : Inverse ε _⁻¹ _◇_
⁻¹-cong : Congruent₁ _⁻¹
open GroupLaws ⦃...⦄ public
GroupLaws≡ : (A : Type ℓ)
⦃ _ : Semigroup A ⦄ ⦃ _ : Monoid A ⦄ ⦃ _ : Group A ⦄ → Type ℓ
GroupLaws≡ A = GroupLaws A
where instance _ = mkISetoid≡; _ = mkSetoidLaws≡
module _ where
open Integer
instance _ = mkISetoid≡; _ = mkSetoidLaws≡
_ = Semigroup-ℤ-+
_ = Monoid-ℤ-+
Group-ℤ-+ = Group ℤ ∋ λ where ._⁻¹ → -_
instance _ = Group-ℤ-+
GroupLaws-ℤ-+ = GroupLaws≡ ℤ ∋ record {inverse = +-inverse ; ⁻¹-cong = cong (-_)}
module _ (G : Type ℓ) ⦃ _ : Semigroup G ⦄ ⦃ _ : Monoid G ⦄ ⦃ _ : Group G ⦄ where
module _ (X : Type ℓ′) ⦃ _ : ISetoid X ⦄ where
record Actionˡ : Type (ℓ ⊔ₗ ℓ′ ⊔ₗ relℓ) where
infixr 5 _·_
field _·_ : G → X → X
identity : ∀ {x : X} → ε · x ≈ x
compatibility : ∀ {g h : G} {x : X} → g · h · x ≈ (g ◇ h) · x
record Actionʳ : Type (ℓ ⊔ₗ ℓ′ ⊔ₗ relℓ) where
infixl 5 _·_
field _·_ : X → G → X
identity : ∀ {x : X} → x · ε ≈ x
compatibility : ∀ {x : X} {g h : G} → x · g · h ≈ x · (g ◇ h)
open Actionˡ ⦃...⦄ public renaming
(identity to ·-identity; compatibility to ·-compatibility)
record GSet : Typeω where
field ⦃ action ⦄ : Actionˡ
open GSet ⦃...⦄ public
record GSet′ : Typeω where
field
{ℓₓ} : Level
X : Type ℓₓ
⦃ setoidX ⦄ : ISetoid X
action′ : Actionˡ X
open GSet′ public
module GSet-Morphisms (X Y : Type ℓ′)
⦃ _ : ISetoid X ⦄ ⦃ _ : ISetoid Y ⦄
⦃ _ : GSet X ⦄ ⦃ _ : GSet Y ⦄ where
record _—𝔾→_ : Type (ℓ ⊔ₗ ℓ′ ⊔ₗ relℓ) where
field
F : X → Y
equivariant : ∀ {g : G} {x : X} → F (g · x) ≈ g · F x
open _—𝔾→_ public renaming (F to _𝔾⟨$⟩_)