{-# OPTIONS --cubical --no-import-sorts #-}
open import Cubical.Foundations.Everything renaming (_⁻¹ to _⁻¹ᵖ; assoc to ∙-assoc)
open import Function.Base using (_∋_)
import Cubical.Algebra.Group as Std
open import MorePropAlgebra.Bundles
module MorePropAlgebra.Properties.Group {ℓ} (assumptions : Group {ℓ}) where
open Group assumptions renaming (Carrier to G)
import MorePropAlgebra.Properties.Monoid
module Monoid'Properties = MorePropAlgebra.Properties.Monoid (record { Group assumptions })
module Monoid' = Monoid (record { Group assumptions })
( Monoid') = Monoid ∋ (record { Group assumptions })
stdIsGroup : Std.IsGroup 0g _+_ (-_)
stdIsGroup .Std.IsGroup.isMonoid = Monoid'Properties.stdIsMonoid
stdIsGroup .Std.IsGroup.inverse = is-inverse
stdGroup : Std.Group {ℓ}
stdGroup = record { Group assumptions ; isGroup = stdIsGroup }
module GroupLemmas' = Std.GroupLemmas stdGroup
abstract
invUniqueL : {g h : G} → g + h ≡ 0g → g ≡ - h
invUniqueL {g} {h} p = GroupLemmas'.simplR h (p ∙ sym (is-invl h))
private
right-helper : ∀ x y → y ≡ - x + (x + y)
right-helper x y = (
y ≡⟨ sym (snd (is-identity y)) ⟩
0g + y ≡⟨ cong₂ _+_ (sym (snd (is-inverse x))) refl ⟩
((- x) + x) + y ≡⟨ sym (is-assoc (- x) x y) ⟩
(- x) + (x + y) ∎)
-involutive : ∀ x → - - x ≡ x
-involutive x = (
(- (- x)) ≡⟨ sym (fst (is-identity _)) ⟩
(- (- x)) + 0g ≡⟨ cong₂ _+_ refl (sym (snd (is-inverse _))) ⟩
(- (- x)) + (- x + x) ≡⟨ sym (right-helper (- x) x) ⟩
x ∎)