@@ -87,6 +87,11 @@ theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
8787 let ⟨t, ht⟩ := fg_def.1 hs
8888 fg_def.2 ⟨f '' t, ht.1 .image _, by rw [span_image, ht.2 ]⟩
8989
90+ /-- Maps from a finite module have a finite range. -/
91+ @[simp] lemma fg_range [Module.Finite R M] (f : M →ₛₗ[σ] P) : f.range.FG := by
92+ rw [LinearMap.range_eq_map]
93+ exact Module.Finite.fg_top.map f
94+
9095theorem fg_of_fg_map_injective (hf : Function.Injective f) {N : Submodule R M}
9196 (hfn : (N.map f).FG) : N.FG :=
9297 let ⟨t, ht⟩ := hfn
@@ -97,6 +102,10 @@ theorem fg_of_fg_map_injective (hf : Function.Injective f) {N : Submodule R M}
97102 rw [← LinearMap.coe_range, ← span_le, ht, ← map_top]
98103 exact map_mono le_top⟩
99104
105+ theorem fg_map_iff (hf : Function.Injective f) {N : Submodule R M} :
106+ (N.map f).FG ↔ N.FG :=
107+ ⟨(fg_of_fg_map_injective _ hf ·), (.map _)⟩
108+
100109end
101110
102111variable {P : Type *} [AddCommMonoid P] [Module R P]
@@ -108,10 +117,13 @@ theorem fg_of_fg_map {R M P : Type*} [Ring R] [AddCommGroup M] [Module R M] [Add
108117 (hfn : (N.map f).FG) : N.FG :=
109118 fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
110119
111- theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).FG ↔ N.FG :=
112- ⟨fun h => N.range_subtype ▸ map_top N.subtype ▸ h.map _, fun h =>
113- fg_of_fg_map_injective N.subtype Subtype.val_injective <| by rwa [map_top, range_subtype]⟩
120+ /-- The top submodule of another submodule `N` is FG iff `N` is `FG`.
121+
122+ See also `Module.Finite.fg_top`. -/
123+ protected theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).FG ↔ N.FG := by
124+ rw [← fg_map_iff N.subtype Subtype.val_injective, map_top, range_subtype]
114125
126+ /-- See also `Module.Finite.equiv_iff`. -/
115127theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).FG) : (⊤ : Submodule R M).FG :=
116128 e.symm.range ▸ map_top (e.symm : P →ₗ[R] M) ▸ h.map _
117129
@@ -294,28 +306,36 @@ instance [Module.Finite R M] : Module.Finite R Mᵐᵒᵖ := equiv (MulOpposite.
294306
295307instance ulift [Module.Finite R M] : Module.Finite R (ULift M) := equiv ULift.moduleEquiv.symm
296308
309+ /-- A submodule is finite as a module iff it is finitely generated. -/
297310theorem iff_fg {N : Submodule R M} : Module.Finite R N ↔ N.FG := Module.finite_def.trans N.fg_top
298311
312+ /-- A finitely-generated submodule is finite as a module. -/
313+ alias ⟨_, of_fg⟩ := iff_fg
314+
315+ /-- A submodule that is finite as a module is finitely generated. -/
316+ theorem _root_.Submodule.FG.of_finite {N : Submodule R M} [Module.Finite R N] : N.FG :=
317+ iff_fg.1 ‹_›
318+
299319variable (R M)
300320
301- instance bot : Module.Finite R (⊥ : Submodule R M) := iff_fg.mpr fg_bot
321+ instance bot : Module.Finite R (⊥ : Submodule R M) := .of_fg fg_bot
302322
303- instance top [Module.Finite R M] : Module.Finite R (⊤ : Submodule R M) := iff_fg.mpr fg_top
323+ instance top [Module.Finite R M] : Module.Finite R (⊤ : Submodule R M) := .of_fg fg_top
304324
305325variable {M}
306326
307327/-- The submodule generated by a finite set is `R`-finite. -/
308328theorem span_of_finite {A : Set M} (hA : Set.Finite A) :
309329 Module.Finite R (Submodule.span R A) :=
310- ⟨(Submodule.fg_top _).mpr ⟨hA.toFinset, hA.coe_toFinset.symm ▸ rfl⟩ ⟩
330+ .of_fg ⟨hA.toFinset, hA.coe_toFinset.symm ▸ rfl⟩
311331
312332/-- The submodule generated by a single element is `R`-finite. -/
313333instance span_singleton (x : M) : Module.Finite R (R ∙ x) :=
314334 Module.Finite.span_of_finite R <| Set.finite_singleton _
315335
316336/-- The submodule generated by a finset is `R`-finite. -/
317337instance span_finset (s : Finset M) : Module.Finite R (span R (s : Set M)) :=
318- ⟨(Submodule.fg_top _).mpr ⟨s, rfl⟩ ⟩
338+ .of_fg ⟨s, rfl⟩
319339
320340variable {R}
321341
@@ -364,8 +384,8 @@ variable {R V} [Ring R] [AddCommGroup V] [Module R V]
364384/-- The sup of two fg submodules is finite. Also see `Submodule.FG.sup`. -/
365385instance finite_sup (S₁ S₂ : Submodule R V) [h₁ : Module.Finite R S₁]
366386 [h₂ : Module.Finite R S₂] : Module.Finite R (S₁ ⊔ S₂ : Submodule R V) := by
367- rw [finite_def ] at *
368- exact (fg_top _). 2 (((fg_top S₁). 1 h₁).sup ((fg_top S₂). 1 h₂))
387+ rw [Finite.iff_fg ] at *
388+ exact .sup h₁ h₂
369389
370390/-- The submodule generated by a finite supremum of finite-dimensional submodules is
371391finite-dimensional.
0 commit comments