{-# OPTIONS --without-K --safe #-} open import Algebra.Bundles using (Group) module Algebra.Group.Symmetric.Equality {g₁ g₂} (𝓖 : Group g₁ g₂) where open Group hiding (setoid) open Group 𝓖 open import Algebra.Group.Symmetric 𝓖 open import Algebra.Structures using (IsMagma; IsSemigroup; IsMonoid; IsGroup) open import Data.Product open import Function using (_$_) open import Function.Equality using (_⇨_;Π;_⟶_) renaming (_∘_ to _*_) open import Function.Inverse using (Inverse) open import Level open import Relation.Binary using (Setoid; _⇒_) open Π open Inverse funcSetoid : Setoid _ _ funcSetoid = setoid ⇨ setoid open module S = Setoid setoid using () open module F = Setoid funcSetoid using () renaming (_≈_ to _≃_) record SymEq (f g : Sym) : Set (suc (g₁ ⊔ g₂)) where field eq : to f ≃ to g open SymEq public ≣-setoid : Setoid _ _ ≣-setoid = record { Carrier = Sym ; _≈_ = SymEq ; isEquivalence = record { refl = λ {x} → record { eq = F.refl {to x} } ; sym = λ {f g} f≃g → record { eq = F.sym {to f} {to g} (eq f≃g) } ; trans = λ {f g h} f≃g g≃h → record { eq = F.trans {to f} {to g} {to h} (eq f≃g) (eq g≃h) } } } open Setoid ≣-setoid renaming (_≈_ to _≣_; sym to ≣-sym; trans to ≣-trans; refl to ≣-refl) hiding (Carrier) public open Setoid open IsMagma hiding (setoid) open IsSemigroup hiding (setoid) open IsMonoid hiding (setoid) open IsGroup hiding (setoid) ∘-isMagma : IsMagma _≣_ _∘_ ∘-isMagma .isEquivalence = isEquivalence ≣-setoid ∘-isMagma .∙-cong x≣y u≣v .eq x∼y = eq x≣y (eq u≣v x∼y) ∘-isSemiGroup : IsSemigroup _≣_ _∘_ ∘-isSemiGroup .isMagma = ∘-isMagma ∘-isSemiGroup .assoc h g f .eq x∼y = cong (to h) (cong (to g) (cong (to f) x∼y)) ∘-e-isMonoid : IsMonoid _≣_ _∘_ e ∘-e-isMonoid .isSemigroup = ∘-isSemiGroup ∘-e-isMonoid .identity .proj₁ g .eq = cong (to g) ∘-e-isMonoid .identity .proj₂ g .eq = cong (to g) ∘-e-inv-isGroup : IsGroup _≣_ _∘_ e inv ∘-e-inv-isGroup .isMonoid = ∘-e-isMonoid ∘-e-inv-isGroup .inverse .proj₁ g .eq {x} x∼y = S.trans (left-inverse-of g x) x∼y ∘-e-inv-isGroup .inverse .proj₂ g .eq {x} x∼y = S.trans (right-inverse-of g x) x∼y ∘-e-inv-isGroup .⁻¹-cong {f} {g} f≣g .eq {x} {y} x∼y = begin from f ⟨$⟩ x ≈˘⟨ left-inverse-of g $ from f ⟨$⟩ x ⟩ from g * to g * from f ⟨$⟩ x ≈˘⟨ cong (from g) $ eq f≣g S.refl ⟩ from g * to f * from f ⟨$⟩ x ≈⟨ cong (from g) $ right-inverse-of f x ⟩ from g ⟨$⟩ x ≈⟨ cong (from g) x∼y ⟩ from g ⟨$⟩ y ∎ where open import Relation.Binary.Reasoning.Setoid setoid SymGroup : Group (g₁ ⊔ g₂) (suc (g₁ ⊔ g₂)) Carrier SymGroup = Sym _≈_ SymGroup = _≣_ _∙_ SymGroup = _∘_ ε SymGroup = e SymGroup ⁻¹ = inv isGroup SymGroup = ∘-e-inv-isGroup