12345678910111213141516171819202122232425262728293031323334353637383940{-# 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 Morphismimport Categories.Morphism.Properties as MorphismPropsimport Categories.Morphism.Reasoning as MR open Groupoid Gopen Morphism categoryopen MorphismProps categoryopen HomReasoningopen MR category private variable A B C : Obj mono : {f : A ⇒ B} → Mono fmono = Iso⇒Mono iso epi : {f : A ⇒ B} → Epi fepi = Iso⇒Epi iso id-inverse : id {A = A} ⁻¹ ≈ idid-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 ∎ )