{-# OPTIONS --safe --without-K #-}
open import Algebra.Bundles using (Group)
module Algebra.Group.Symmetric.Inclusion {g₁ g₂} (𝓖 : Group g₁ g₂) where
open Group 𝓖
open import Algebra.Group.Symmetric 𝓖
open import Algebra.Group.Symmetric.Equality 𝓖
open import Algebra.Morphism
open import Function.Inverse using (Inverse; _∘_; _InverseOf_)
open import Function.LeftInverse using (_LeftInverseOf_)
open import Function.Equality using (_⟶_; Π)
open import Function using (_$_)
open import Function.Definitions _≈_ _≣_
open import Relation.Binary using (Setoid)
open Π
open Inverse
open _InverseOf_
open import Relation.Binary.Reasoning.Setoid setoid
open import Algebra.Morphism.Group
open GroupMorphism
⟦_⟧ : Carrier → Sym
⟦ a ⟧ .to ⟨$⟩ x = a ∙ x
⟦ a ⟧ .to .cong i≈j = ∙-congˡ i≈j
⟦ a ⟧ .from ⟨$⟩ x = a ⁻¹ ∙ x
⟦ a ⟧ .from .cong i≈j = ∙-congˡ i≈j
⟦ a ⟧ .inverse-of .left-inverse-of x = begin
a ⁻¹ ∙ (a ∙ x) ≈˘⟨ assoc (a ⁻¹) a x ⟩
(a ⁻¹ ∙ a) ∙ x ≈⟨ ∙-congʳ $ inverseˡ a ⟩
ε ∙ x ≈⟨ identityˡ x ⟩
x ∎
⟦ a ⟧ .inverse-of .right-inverse-of x = begin
a ∙ (a ⁻¹ ∙ x) ≈˘⟨ assoc a (a ⁻¹) x ⟩
(a ∙ a ⁻¹) ∙ x ≈⟨ ∙-congʳ $ inverseʳ a ⟩
ε ∙ x ≈⟨ identityˡ x ⟩
x ∎
open IsGroupMorphism
open IsMonoidMorphism
open IsSemigroupMorphism
⟦⟧-IsGroupMorphism : ⟦_⟧ Is 𝓖 -Group⟶ SymGroup
⟦⟧-IsGroupMorphism .mn-homo .sm-homo .⟦⟧-cong g≈h .eq = ∙-cong g≈h
⟦⟧-IsGroupMorphism .mn-homo .sm-homo .∙-homo g h .eq {x} {y} x≈y = begin
g ∙ h ∙ x ≈⟨ ∙-congˡ x≈y ⟩
g ∙ h ∙ y ≈⟨ assoc g h y ⟩
g ∙ (h ∙ y) ∎
⟦⟧-IsGroupMorphism .mn-homo .ε-homo .eq {x} {y} x≈y = begin
ε ∙ x ≈⟨ identityˡ x ⟩
x ≈⟨ x≈y ⟩
y ∎
⟦⟧-injective : Injective ⟦_⟧
⟦⟧-injective {x} {y} ⟦x⟧≣⟦y⟧ = begin
x ≈˘⟨ identityʳ x ⟩
(to ⟦ x ⟧ ⟨$⟩ ε) ≈⟨ eq ⟦x⟧≣⟦y⟧ S.refl ⟩
(to ⟦ y ⟧ ⟨$⟩ ε) ≈⟨ identityʳ y ⟩
y ∎
⟦⟧ : GroupMorphism 𝓖 SymGroup
⟦⟧ .morphism = ⟦_⟧
⟦⟧ .isGroupMorphism = ⟦⟧-IsGroupMorphism