{-# OPTIONS --without-K --safe #-} open import Categories.Category.Groupoid module Categories.Category.Groupoid.Properties {o ℓ e} (G : Groupoid o ℓ e) where import Categories.Morphism as Morphism import Categories.Morphism.Properties as MorphismProps import Categories.Morphism.Reasoning as MR open Groupoid G open Morphism category open MorphismProps category open HomReasoning open MR category private variable A B C : Obj mono : {f : A ⇒ B} → Mono f mono = Iso⇒Mono iso epi : {f : A ⇒ B} → Epi f epi = Iso⇒Epi iso id-inverse : id {A = A} ⁻¹ ≈ id id-inverse = ⟺ identityˡ ○ iso.isoʳ ⁻¹-involutive : {f : A ⇒ B} → f ⁻¹ ⁻¹ ≈ f ⁻¹-involutive {f = f} = begin f ⁻¹ ⁻¹ ≈⟨ introʳ iso.isoˡ ⟩ f ⁻¹ ⁻¹ ∘ f ⁻¹ ∘ f ≈⟨ sym-assoc ○ elimˡ iso.isoˡ ⟩ f ∎ ⁻¹-commute : {f : A ⇒ B} {g : C ⇒ A} → (f ∘ g) ⁻¹ ≈ g ⁻¹ ∘ f ⁻¹ ⁻¹-commute {f = f} {g} = epi _ _ ( begin (f ∘ g) ⁻¹ ∘ f ∘ g ≈⟨ iso.isoˡ ⟩ id ≈˘⟨ iso.isoˡ ⟩ g ⁻¹ ∘ g ≈˘⟨ cancelInner iso.isoˡ ⟩ (g ⁻¹ ∘ f ⁻¹) ∘ f ∘ g ∎ )