{-# OPTIONS --safe --without-K #-}
open import Algebra.Bundles using (Group)
module Algebra.Group.Properties {g₁ g₂} (𝓖 : Group g₁ g₂) where
module Part1 {h₁ h₂} (𝓗 : Group h₁ h₂) where
open Group 𝓗
open import Algebra.Definitions _≈_
invˡ : LeftInverse ε _⁻¹ _∙_
invˡ = inverseˡ
invʳ : RightInverse ε _⁻¹ _∙_
invʳ = inverseʳ
module Part2 {h₁ h₂} (𝓗 : Group h₁ h₂) where
open Group 𝓗
open import Algebra.Definitions _≈_
open import Algebra.Group.Symmetric 𝓗
open import Algebra.Group.Symmetric.Equality 𝓗
open Part1 SymGroup
open import Algebra.Group.Reasoning 𝓗
test : ∀ a b → a ≈ b → ⟦ a ⟧ ≣ ⟦ b ⟧
test a b p = ⟨ ⟦⟧ ⟩⦅ p ⦆
test2 : ∀ a b → a ∙ b ≈ b → ⟦ a ⟧ ∘ ⟦ b ⟧ ≣ ⟦ b ⟧
test2 a b p = ⟨ ⟦⟧ ⟩⦅ p ⦆
test3 : ∀ x y z → x ∙ (y ⁻¹ ∙ ε) ≈ z ∙ z → ⟦ x ⟧ ∘ (inv ⟦ y ⟧ ∘ e) ≣ ⟦ z ⟧ ∘ ⟦ z ⟧
test3 x y z p = ⟨ ⟦⟧ ⟩⦅ p ⦆
identity-is-unique-strong : ∀ a b → a ∙ b ≈ b → a ≈ ε
identity-is-unique-strong a b p = begin⟨ ⟦⟧ ⟩
⟦ a ⟧ ∘⟨⟩≣˘⟨ invʳ ⟦ b ⟧ ⟩
⟨ ⟦ a ⟧ ∘ ⟦ b ⟧ ⟩∘ inv ⟦ b ⟧ ≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
⟨ ⟦ b ⟧ ∘ inv ⟦ b ⟧ ⟩≣⟨ invʳ ⟦ b ⟧ ⟩
e ∎
inverse-is-unique : ∀ g h → g ∙ h ≈ ε → h ≈ g ⁻¹
inverse-is-unique g h p = begin⟨ ⟦⟧ ⟩
⟨⟩∘ ⟦ h ⟧ ≣˘⟨ invˡ ⟦ g ⟧ ⟩
inv ⟦ g ⟧ ∘⟨ ⟦ g ⟧ ∘ ⟦ h ⟧ ⟩≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
inv ⟦ g ⟧ ∎
inverse-is-unique' : ∀ g h → g ∙ h ≈ ε → g ≈ h ⁻¹
inverse-is-unique' g h p = begin⟨ ⟦⟧ ⟩
⟦ g ⟧ ∘⟨⟩≣˘⟨ invʳ ⟦ h ⟧ ⟩
⟨ ⟦ g ⟧ ∘ ⟦ h ⟧ ⟩∘ inv ⟦ h ⟧ ≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
inv ⟦ h ⟧ ∎
right-cancellation : ∀ g h x → g ∙ x ≈ h ∙ x → g ≈ h
right-cancellation g h x p = begin⟨ ⟦⟧ ⟩
⟦ g ⟧ ∘⟨⟩≣˘⟨ invʳ ⟦ x ⟧ ⟩
⟨ ⟦ g ⟧ ∘ ⟦ x ⟧ ⟩∘ inv ⟦ x ⟧ ≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
⟦ h ⟧ ∘⟨ ⟦ x ⟧ ∘ inv ⟦ x ⟧ ⟩≣⟨ invʳ ⟦ x ⟧ ⟩
⟦ h ⟧ ∎
left-cancellation : ∀ g h x → x ∙ g ≈ x ∙ h → g ≈ h
left-cancellation g h x p = begin⟨ ⟦⟧ ⟩
⟨⟩∘ ⟦ g ⟧ ≣˘⟨ invˡ ⟦ x ⟧ ⟩
inv ⟦ x ⟧ ∘⟨ ⟦ x ⟧ ∘ ⟦ g ⟧ ⟩≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
⟨ inv ⟦ x ⟧ ∘ ⟦ x ⟧ ⟩∘ ⟦ h ⟧ ≣⟨ invˡ ⟦ x ⟧ ⟩
⟦ h ⟧ ∎
inv-of-composite : ∀ g h → (g ∙ h) ⁻¹ ≈ h ⁻¹ ∙ g ⁻¹
inv-of-composite g h = begin⟨ ⟦⟧ ⟩
inv (⟦ g ⟧ ∘ ⟦ h ⟧) ∘⟨⟩≣˘⟨ invʳ ⟦ g ⟧ ⟩
inv (⟦ g ⟧ ∘ ⟦ h ⟧) ∘ ⟦ g ⟧ ∘⟨⟩∘ inv ⟦ g ⟧ ≣˘⟨ invʳ ⟦ h ⟧ ⟩
⟨ inv (⟦ g ⟧ ∘ ⟦ h ⟧) ∘ (⟦ g ⟧ ∘ ⟦ h ⟧) ⟩∘ inv ⟦ h ⟧ ∘ inv ⟦ g ⟧ ≣⟨ invˡ (⟦ g ⟧ ∘ ⟦ h ⟧) ⟩
(inv ⟦ h ⟧ ∘ inv ⟦ g ⟧) ∎
inv-involution : ∀ g → (g ⁻¹) ⁻¹ ≈ g
inv-involution g = sym (inverse-is-unique (g ⁻¹) g (inverseˡ g))
inv-e : ε ⁻¹ ≈ ε
inv-e = sym (inverse-is-unique ε ε (identityˡ ε))
module Part3 {h₁ h₂} (𝓗 : Group h₁ h₂) where
open Group 𝓗
open import Algebra.Definitions _≈_
open import Algebra.Group.Symmetric 𝓗
open import Algebra.Group.Symmetric.Equality 𝓗
open Part1 SymGroup
open Part2 SymGroup
open import Algebra.Group.Reasoning 𝓗
[_,_] : Carrier → Carrier → Carrier
[ g , h ] = g ⁻¹ ∙ h ⁻¹ ∙ g ∙ h
commute-[,]≣e : ∀ g h → g ∙ h ≈ h ∙ g → [ g , h ] ≈ ε
commute-[,]≣e g h p = begin⟨ ⟦⟧ ⟩
inv ⟦ g ⟧ ∘ inv ⟦ h ⟧ ∘⟨ ⟦ g ⟧ ∘ ⟦ h ⟧ ⟩≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
inv ⟦ g ⟧ ∘⟨ inv ⟦ h ⟧ ∘ ⟦ h ⟧ ⟩∘ ⟦ g ⟧ ≣⟨ invˡ ⟦ h ⟧ ⟩
⟨ inv ⟦ g ⟧ ∘ ⟦ g ⟧ ⟩≣⟨ invˡ ⟦ g ⟧ ⟩
e ∎
[,]≣e-commute : ∀ g h → [ g , h ] ≈ ε → g ∙ h ≈ h ∙ g
[,]≣e-commute g h p = begin⟨ ⟦⟧ ⟩
⟨⟩∘ ⟦ g ⟧ ∘ ⟦ h ⟧ ≣˘⟨ invʳ ⟦ h ⟧ ⟩
⟦ h ⟧ ∘⟨⟩∘ inv ⟦ h ⟧ ∘ ⟦ g ⟧ ∘ ⟦ h ⟧ ≣˘⟨ invʳ ⟦ g ⟧ ⟩
⟦ h ⟧ ∘ ⟦ g ⟧ ∘⟨ inv ⟦ g ⟧ ∘ inv ⟦ h ⟧ ∘ ⟦ g ⟧ ∘ ⟦ h ⟧ ⟩≣⟨ ⟨ ⟦⟧ ⟩⦅ p ⦆ ⟩
⟦ h ⟧ ∘ ⟦ g ⟧ ∎
inv-[,]-swap : ∀ g h → [ g , h ] ⁻¹ ≈ [ h , g ]
inv-[,]-swap g h = begin⟨ ⟦⟧ ⟩
⟨ inv (inv ⟦ g ⟧ ∘ inv ⟦ h ⟧ ∘ ⟦ g ⟧ ∘ ⟦ h ⟧) ⟩≣⟨ inv-of-composite (inv ⟦ g ⟧ ∘ inv ⟦ h ⟧ ∘ ⟦ g ⟧) ⟦ h ⟧ ⟩
inv ⟦ h ⟧ ∘⟨ inv (inv ⟦ g ⟧ ∘ inv ⟦ h ⟧ ∘ ⟦ g ⟧) ⟩≣⟨ inv-of-composite (inv ⟦ g ⟧ ∘ inv ⟦ h ⟧) ⟦ g ⟧ ⟩
inv ⟦ h ⟧ ∘ inv ⟦ g ⟧ ∘⟨ inv (inv ⟦ g ⟧ ∘ inv ⟦ h ⟧) ⟩≣⟨ inv-of-composite (inv ⟦ g ⟧) (inv ⟦ h ⟧) ⟩
inv ⟦ h ⟧ ∘ inv ⟦ g ⟧ ∘⟨ inv (inv ⟦ h ⟧) ⟩∘ inv (inv ⟦ g ⟧) ≣⟨ inv-involution ⟦ h ⟧ ⟩
inv ⟦ h ⟧ ∘ inv ⟦ g ⟧ ∘ ⟦ h ⟧ ∘⟨ inv (inv ⟦ g ⟧) ⟩≣⟨ inv-involution ⟦ g ⟧ ⟩
inv ⟦ h ⟧ ∘ inv ⟦ g ⟧ ∘ ⟦ h ⟧ ∘ ⟦ g ⟧ ∎
open Part1 𝓖 public
open Part2 𝓖 public
open Part3 𝓖 public