@@ -29,6 +29,22 @@ theorem Submodule.fg_iff_exists_fin_linearMap {N : Submodule R M} :
2929 simp_rw [fg_iff_exists_fin_generating_family, ← ((Pi.basisFun R _).constr ℕ).exists_congr_right]
3030 simp [Basis.constr_range]
3131
32+ theorem AddSubmonoid.fg_iff_exists_fin_addMonoidHom {M : Type *} [AddCommMonoid M]
33+ {S : AddSubmonoid M} : S.FG ↔ ∃ (n : ℕ) (f : (Fin n → ℕ) →+ M), AddMonoidHom.mrange f = S := by
34+ rw [← S.toNatSubmodule_toAddSubmonoid, ← Submodule.fg_iff_addSubmonoid_fg,
35+ Submodule.fg_iff_exists_fin_linearMap]
36+ exact exists_congr fun n => ⟨fun ⟨f, hf⟩ => ⟨f, hf ▸ LinearMap.range_toAddSubmonoid _⟩,
37+ fun ⟨f, hf⟩ => ⟨f.toNatLinearMap, Submodule.toAddSubmonoid_inj.mp <|
38+ hf ▸ LinearMap.range_toAddSubmonoid _⟩⟩
39+
40+ theorem AddSubgroup.fg_iff_exists_fin_addMonoidHom {M : Type *} [AddCommGroup M]
41+ {H : AddSubgroup M} : H.FG ↔ ∃ (n : ℕ) (f : (Fin n → ℤ) →+ M), AddMonoidHom.range f = H := by
42+ rw [← H.toIntSubmodule_toAddSubgroup, ← Submodule.fg_iff_addSubgroup_fg,
43+ Submodule.fg_iff_exists_fin_linearMap]
44+ refine exists_congr fun n => ⟨fun ⟨f, hf⟩ => ⟨f, hf ▸ LinearMap.range_toAddSubgroup _⟩,
45+ fun ⟨f, hf⟩ => ⟨f.toIntLinearMap, Submodule.toAddSubmonoid_inj.mp ?_⟩⟩
46+ simp [hf]
47+
3248namespace Module
3349
3450namespace Finite
0 commit comments