module Cubical.Algebra.AbGroup.FinitePresentation where
open import Cubical.Foundations.Prelude
open import Cubical.Data.Nat
open import Cubical.Data.Int
open import Cubical.HITs.PropositionalTruncation
open import Cubical.Algebra.Group
open import Cubical.Algebra.Group.Morphisms
open import Cubical.Algebra.Group.MorphismProperties
open import Cubical.Algebra.AbGroup
open import Cubical.Algebra.AbGroup.Instances.FreeAbGroup
open import Cubical.Algebra.Group.QuotientGroup
open import Cubical.Algebra.Group.Subgroup
private
variable
ℓ : Level
record FinitePresentation (A : AbGroup ℓ) : Type ℓ where
field
nGens : ℕ
nRels : ℕ
rels : AbGroupHom ℤ[Fin nRels ] ℤ[Fin nGens ]
fpiso : AbGroupIso A (ℤ[Fin nGens ] /Im rels)
isFinitelyPresented : AbGroup ℓ → Type ℓ
isFinitelyPresented G = ∥ FinitePresentation G ∥₁
open FinitePresentation
GrIsoPresFinitePresentation : ∀ {ℓ ℓ'} {A : AbGroup ℓ} {B : AbGroup ℓ'}
→ AbGroupIso A B → FinitePresentation A → FinitePresentation B
nGens (GrIsoPresFinitePresentation abG fpA) = nGens fpA
nRels (GrIsoPresFinitePresentation abG fpA) = nRels fpA
rels (GrIsoPresFinitePresentation abG fpA) = rels fpA
fpiso (GrIsoPresFinitePresentation abG fpA) =
compGroupIso (invGroupIso abG) (fpiso fpA)