ring_theory.finiteness
⟷
Mathlib.RingTheory.Finiteness
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
finset.sup_finset_image
(#18893)
in favor of the identical finset.sup_image
(up to argument order) in the same file.
@@ -345,7 +345,7 @@ begin
{ suffices : u.sup id ≤ s, from le_antisymm husup this,
rw [sSup, finset.sup_id_eq_Sup], exact Sup_le_Sup huspan, },
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan,
- rw [finset.sup_finset_image, function.comp.left_id, finset.sup_eq_supr, supr_rw,
+ rw [finset.sup_image, function.comp.left_id, finset.sup_eq_supr, supr_rw,
←span_eq_supr_of_singleton_spans, eq_comm] at ssup,
exact ⟨t, ssup⟩, },
end
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
module.finite.trans
(#18880)
This was stated for algebras but holds more generally for modules.
This now can be used to prove finite_dimensional.trans
.
A few downstream proofs were providing the instances arguments explicitly and consequently broke.
Passing those instances via haveI
fixes those proofs and makes them less fragile.
@@ -522,13 +522,13 @@ of_surjective (e : M →ₗ[R] N) e.surjective
section algebra
-lemma trans {R : Type*} (A B : Type*) [comm_semiring R] [comm_semiring A] [algebra R A]
- [semiring B] [algebra R B] [algebra A B] [is_scalar_tower R A B] :
- ∀ [finite R A] [finite A B], finite R B
+lemma trans {R : Type*} (A M : Type*) [comm_semiring R] [semiring A] [algebra R A]
+ [add_comm_monoid M] [module R M] [module A M] [is_scalar_tower R A M] :
+ ∀ [finite R A] [finite A M], finite R M
| ⟨⟨s, hs⟩⟩ ⟨⟨t, ht⟩⟩ := ⟨submodule.fg_def.2
- ⟨set.image2 (•) (↑s : set A) (↑t : set B),
+ ⟨set.image2 (•) (↑s : set A) (↑t : set M),
set.finite.image2 _ s.finite_to_set t.finite_to_set,
- by rw [set.image2_smul, submodule.span_smul_of_span_eq_top hs (↑t : set B),
+ by rw [set.image2_smul, submodule.span_smul_of_span_eq_top hs (↑t : set M),
ht, submodule.restrict_scalars_top]⟩⟩
end algebra
@@ -584,14 +584,15 @@ begin
end
lemma comp {g : B →+* C} {f : A →+* B} (hg : g.finite) (hf : f.finite) : (g.comp f).finite :=
-@module.finite.trans A B C _ _ f.to_algebra _ (g.comp f).to_algebra g.to_algebra
begin
- fconstructor,
- intros a b c,
- simp only [algebra.smul_def, ring_hom.map_mul, mul_assoc],
- refl
+ letI := f.to_algebra,
+ letI := g.to_algebra,
+ letI := (g.comp f).to_algebra,
+ letI : is_scalar_tower A B C := restrict_scalars.is_scalar_tower A B C,
+ letI : module.finite A B := hf,
+ letI : module.finite B C := hg,
+ exact module.finite.trans B C,
end
-hf hg
lemma of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).finite) : g.finite :=
begin
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
module.finite
(#18811)
This generalize the following from finite_dimensional
over division rings to module.finite
over free modules:
finite_dimensional.nonempty_linear_equiv_of_finrank_eq
(moved from nonempty_linear_equiv_of_finrank_eq
)finite_dimensional.nonempty_linear_equiv_iff_finrank_eq
(moved from nonempty_linear_equiv_iff_finrank_eq
)linear_equiv.of_finrank_eq
module.finite.map
(moved from finite_dimensional.submodule.map.finite_dimensional
). This is the only lemma moved across the porting tide.submodule.finrank_map_le
(moved from finite_dimensional.finrank_map_le
)submodule.finrank_map_subtype_eq
(moved from finite_dimensional.finrank_map_subtype_eq
, needs no finite or free assumptions at all)submodule.finrank_le_finrank_of_le
@@ -479,6 +479,10 @@ end⟩
instance range [finite R M] (f : M →ₗ[R] N) : finite R f.range :=
of_surjective f.range_restrict $ λ ⟨x, y, hy⟩, ⟨y, subtype.ext hy⟩
+/-- Pushforwards of finite submodules are finite. -/
+instance map (p : submodule R M) [finite R p] (f : M →ₗ[R] N) : finite R (p.map f) :=
+of_surjective (f.restrict $ λ _, mem_map_of_mem) $ λ ⟨x, y, hy, hy'⟩, ⟨⟨_, hy⟩, subtype.ext hy'⟩
+
variables (R)
instance self : finite R R :=
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
@@ -475,6 +475,10 @@ lemma of_surjective [hM : finite R M] (f : M →ₗ[R] N) (hf : surjective f) :
exact hM.1.map f
end⟩
+/-- The range of a linear map from a finite module is finite. -/
+instance range [finite R M] (f : M →ₗ[R] N) : finite R f.range :=
+of_surjective f.range_restrict $ λ ⟨x, y, hy⟩, ⟨y, subtype.ext hy⟩
+
variables (R)
instance self : finite R R :=
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -119,7 +119,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
rw [mem_smul_span_singleton] at hy; rcases hy with ⟨c, hci, rfl⟩
use r - c; constructor
· rw [sub_right_comm]; exact I.sub_mem hr1 hci
- · rw [sub_smul, ← hyz, add_sub_cancel']; exact hz
+ · rw [sub_smul, ← hyz, add_sub_cancel_left]; exact hz
rcases this with ⟨c, hc1, hci⟩; refine' ⟨c * r, _, _, hs.2⟩
· simpa only [mul_sub, mul_one, sub_add_sub_cancel] using I.add_mem (I.mul_mem_left c hr1) hc1
· intro n hn; specialize hrn hn; rw [mem_comap, mem_sup] at hrn
@@ -322,7 +322,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
mem_sup.2
⟨(Finsupp.total M M R id).toFun ((Finsupp.lmapDomain R R g : (P →₀ R) → M →₀ R) l), _,
x - Finsupp.total M M R id ((Finsupp.lmapDomain R R g : (P →₀ R) → M →₀ R) l), _,
- add_sub_cancel'_right _ _⟩
+ add_sub_cancel _ _⟩
· rw [← Set.image_id (g '' ↑t1), Finsupp.mem_span_image_iff_total]; refine' ⟨_, _, rfl⟩
haveI : Inhabited P := ⟨0⟩
rw [← Finsupp.lmapDomain_supported _ _ g, mem_map]
@@ -468,7 +468,7 @@ theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
#print Submodule.FG.pow /-
theorem FG.pow (h : M.FG) (n : ℕ) : (M ^ n).FG :=
- Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
+ Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ'] using h.mul ih
#align submodule.fg.pow Submodule.FG.pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -98,7 +98,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) :=
by
- rw [fg_def] at hn ; rcases hn with ⟨s, hfs, hs⟩
+ rw [fg_def] at hn; rcases hn with ⟨s, hfs, hs⟩
have : ∃ r : R, r - 1 ∈ I ∧ N ≤ (I • span R s).comap (LinearMap.lsmul R M r) ∧ s ⊆ N :=
by
refine' ⟨1, _, _, _⟩
@@ -108,23 +108,23 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
clear hin hs; revert this
refine' Set.Finite.dinduction_on hfs (fun H => _) fun i s his hfs ih H => _
· rcases H with ⟨r, hr1, hrn, hs⟩; refine' ⟨r, hr1, fun n hn => _⟩; specialize hrn hn
- rwa [mem_comap, span_empty, smul_bot, mem_bot] at hrn
+ rwa [mem_comap, span_empty, smul_bot, mem_bot] at hrn
apply ih; rcases H with ⟨r, hr1, hrn, hs⟩
- rw [← Set.singleton_union, span_union, smul_sup] at hrn
- rw [Set.insert_subset_iff] at hs
+ rw [← Set.singleton_union, span_union, smul_sup] at hrn
+ rw [Set.insert_subset_iff] at hs
have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s :=
by
- specialize hrn hs.1; rw [mem_comap, mem_sup] at hrn
- rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • i at hyz
- rw [mem_smul_span_singleton] at hy ; rcases hy with ⟨c, hci, rfl⟩
+ specialize hrn hs.1; rw [mem_comap, mem_sup] at hrn
+ rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • i at hyz
+ rw [mem_smul_span_singleton] at hy; rcases hy with ⟨c, hci, rfl⟩
use r - c; constructor
· rw [sub_right_comm]; exact I.sub_mem hr1 hci
· rw [sub_smul, ← hyz, add_sub_cancel']; exact hz
rcases this with ⟨c, hc1, hci⟩; refine' ⟨c * r, _, _, hs.2⟩
· simpa only [mul_sub, mul_one, sub_add_sub_cancel] using I.add_mem (I.mul_mem_left c hr1) hc1
- · intro n hn; specialize hrn hn; rw [mem_comap, mem_sup] at hrn
- rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • n at hyz
- rw [mem_smul_span_singleton] at hy ; rcases hy with ⟨d, hdi, rfl⟩
+ · intro n hn; specialize hrn hn; rw [mem_comap, mem_sup] at hrn
+ rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • n at hyz
+ rw [mem_smul_span_singleton] at hy; rcases hy with ⟨d, hdi, rfl⟩
change _ • _ ∈ I • span R s
rw [mul_smul, ← hyz, smul_add, smul_smul, mul_comm, mul_smul]
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
@@ -312,11 +312,11 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
· refine' sup_le (span_le.2 <| image_subset_iff.2 _) (span_le.2 _)
· intro y hy; exact (hg y hy).1
· intro x hx; have := subset_span hx
- rw [ht2] at this
+ rw [ht2] at this
exact this.1
intro x hx
have : f x ∈ map f s := by rw [mem_map]; exact ⟨x, hx, rfl⟩
- rw [← ht1, ← Set.image_id ↑t1, Finsupp.mem_span_image_iff_total] at this
+ rw [← ht1, ← Set.image_id ↑t1, Finsupp.mem_span_image_iff_total] at this
rcases this with ⟨l, hl1, hl2⟩
refine'
mem_sup.2
@@ -424,7 +424,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
rw [Finset.sup_image, Function.id_comp, Finset.sup_eq_iSup, supr_rw, ←
- span_eq_supr_of_singleton_spans, eq_comm] at ssup
+ span_eq_supr_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
-/
@@ -627,7 +627,7 @@ theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A]
obtain ⟨S, hSfin, hSgen⟩ := hM
refine' ⟨S, hSfin, eq_top_iff.2 _⟩
have := Submodule.span_le_restrictScalars R A S
- rw [hSgen] at this
+ rw [hSgen] at this
exact this
#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrictScalars_finite
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -382,8 +382,8 @@ theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algeb
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-/
-#print Submodule.FG.stablizes_of_iSup_eq /-
-theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
+#print Submodule.FG.stabilizes_of_iSup_eq /-
+theorem FG.stabilizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
(H : iSup N = M') : ∃ n, M' = N n :=
by
obtain ⟨S, hS⟩ := hM'
@@ -397,7 +397,7 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
intro s hs
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]; exact le_iSup _ _
-#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
+#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stabilizes_of_iSup_eq
-/
#print Submodule.fg_iff_compact /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -274,7 +274,13 @@ theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : s
#print Submodule.fg_pi /-
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
- (Submodule.pi Set.univ p).FG := by classical
+ (Submodule.pi Set.univ p).FG := by
+ classical
+ simp_rw [fg_def] at hsb ⊢
+ choose t htf hts using hsb
+ refine'
+ ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
+ simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
-/
@@ -342,7 +348,12 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
#print Submodule.fg_induction /-
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
- (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by classical
+ (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
+ classical
+ obtain ⟨s, rfl⟩ := hN
+ induction s using Finset.induction
+ · rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]; apply h₁
+ · rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
#align submodule.fg_induction Submodule.fg_induction
-/
@@ -393,13 +404,31 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
+ -- Introduce shorthand for span of an element
+ let sp : M → Submodule R M := fun a => span R {a}
+ -- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
+ have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
+ constructor
+ · rintro ⟨t, rfl⟩
+ rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
+ apply CompleteLattice.isCompactElement_finsetSup
+ exact fun n _ => singleton_span_is_compact_element n
+ · intro h
+ -- s is the Sup of the spans of its elements.
+ have sSup : s = Sup (sp '' ↑s) := by
+ rw [sSup_eq_iSup, iSup_image, ← span_eq_supr_of_singleton_spans, eq_comm, span_eq]
+ -- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
+ obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
+ have ssup : s = u.sup id := by
+ suffices : u.sup id ≤ s; exact le_antisymm husup this
+ rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
+ obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
+ rw [Finset.sup_image, Function.id_comp, Finset.sup_eq_iSup, supr_rw, ←
+ span_eq_supr_of_singleton_spans, eq_comm] at ssup
+ exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
-/
--- Introduce shorthand for span of an element
--- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
--- s is the Sup of the spans of its elements.
--- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
end Submodule
namespace Submodule
@@ -465,7 +494,11 @@ def FG (I : Ideal R) : Prop :=
This is the `ideal` version of `submodule.fg.map`. -/
theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
- (I.map f).FG := by classical
+ (I.map f).FG := by
+ classical
+ obtain ⟨s, hs⟩ := h
+ refine' ⟨s.image f, _⟩
+ rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.FG.map
-/
@@ -647,7 +680,19 @@ end Module
#print Module.Finite.base_change /-
instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M]
- [Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by classical
+ [Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by
+ classical
+ obtain ⟨s, hs⟩ := h.out
+ refine' ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr fun x _ => _⟩⟩
+ apply TensorProduct.induction_on x
+ · exact zero_mem _
+ · intro x y
+ rw [Finset.coe_image, ← Submodule.span_span_of_tower R, Submodule.span_image, hs,
+ Submodule.map_top, LinearMap.range_coe]
+ change _ ∈ Submodule.span A (Set.range <| TensorProduct.mk R A M 1)
+ rw [← mul_one x, ← smul_eq_mul, ← TensorProduct.smul_tmul']
+ exact Submodule.smul_mem _ x (Submodule.subset_span <| Set.mem_range_self y)
+ · exact fun _ _ => Submodule.add_mem _
#align module.finite.base_change Module.Finite.base_change
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -274,13 +274,7 @@ theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : s
#print Submodule.fg_pi /-
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
- (Submodule.pi Set.univ p).FG := by
- classical
- simp_rw [fg_def] at hsb ⊢
- choose t htf hts using hsb
- refine'
- ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
- simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
+ (Submodule.pi Set.univ p).FG := by classical
#align submodule.fg_pi Submodule.fg_pi
-/
@@ -348,12 +342,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
#print Submodule.fg_induction /-
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
- (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
- classical
- obtain ⟨s, rfl⟩ := hN
- induction s using Finset.induction
- · rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]; apply h₁
- · rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
+ (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by classical
#align submodule.fg_induction Submodule.fg_induction
-/
@@ -404,31 +393,13 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
- -- Introduce shorthand for span of an element
- let sp : M → Submodule R M := fun a => span R {a}
- -- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
- have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
- constructor
- · rintro ⟨t, rfl⟩
- rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
- apply CompleteLattice.isCompactElement_finsetSup
- exact fun n _ => singleton_span_is_compact_element n
- · intro h
- -- s is the Sup of the spans of its elements.
- have sSup : s = Sup (sp '' ↑s) := by
- rw [sSup_eq_iSup, iSup_image, ← span_eq_supr_of_singleton_spans, eq_comm, span_eq]
- -- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
- obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
- have ssup : s = u.sup id := by
- suffices : u.sup id ≤ s; exact le_antisymm husup this
- rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
- obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
- rw [Finset.sup_image, Function.id_comp, Finset.sup_eq_iSup, supr_rw, ←
- span_eq_supr_of_singleton_spans, eq_comm] at ssup
- exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
-/
+-- Introduce shorthand for span of an element
+-- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
+-- s is the Sup of the spans of its elements.
+-- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
end Submodule
namespace Submodule
@@ -494,11 +465,7 @@ def FG (I : Ideal R) : Prop :=
This is the `ideal` version of `submodule.fg.map`. -/
theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
- (I.map f).FG := by
- classical
- obtain ⟨s, hs⟩ := h
- refine' ⟨s.image f, _⟩
- rw [Finset.coe_image, ← Ideal.map_span, hs]
+ (I.map f).FG := by classical
#align ideal.fg.map Ideal.FG.map
-/
@@ -680,19 +647,7 @@ end Module
#print Module.Finite.base_change /-
instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M]
- [Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by
- classical
- obtain ⟨s, hs⟩ := h.out
- refine' ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr fun x _ => _⟩⟩
- apply TensorProduct.induction_on x
- · exact zero_mem _
- · intro x y
- rw [Finset.coe_image, ← Submodule.span_span_of_tower R, Submodule.span_image, hs,
- Submodule.map_top, LinearMap.range_coe]
- change _ ∈ Submodule.span A (Set.range <| TensorProduct.mk R A M 1)
- rw [← mul_one x, ← smul_eq_mul, ← TensorProduct.smul_tmul']
- exact Submodule.smul_mem _ x (Submodule.subset_span <| Set.mem_range_self y)
- · exact fun _ _ => Submodule.add_mem _
+ [Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by classical
#align module.finite.base_change Module.Finite.base_change
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -423,7 +423,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
suffices : u.sup id ≤ s; exact le_antisymm husup this
rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
- rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
+ rw [Finset.sup_image, Function.id_comp, Finset.sup_eq_iSup, supr_rw, ←
span_eq_supr_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -411,7 +411,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
constructor
· rintro ⟨t, rfl⟩
rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
- apply CompleteLattice.finset_sup_compact_of_compact
+ apply CompleteLattice.isCompactElement_finsetSup
exact fun n _ => singleton_span_is_compact_element n
· intro h
-- s is the Sup of the spans of its elements.
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-/
-import Mathbin.Algebra.Algebra.RestrictScalars
-import Mathbin.Algebra.Algebra.Subalgebra.Basic
-import Mathbin.GroupTheory.Finiteness
-import Mathbin.RingTheory.Ideal.Operations
+import Algebra.Algebra.RestrictScalars
+import Algebra.Algebra.Subalgebra.Basic
+import GroupTheory.Finiteness
+import RingTheory.Ideal.Operations
#align_import ring_theory.finiteness from "leanprover-community/mathlib"@"c813ed7de0f5115f956239124e9b30f3a621966f"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit c813ed7de0f5115f956239124e9b30f3a621966f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Algebra.RestrictScalars
import Mathbin.Algebra.Algebra.Subalgebra.Basic
import Mathbin.GroupTheory.Finiteness
import Mathbin.RingTheory.Ideal.Operations
+#align_import ring_theory.finiteness from "leanprover-community/mathlib"@"c813ed7de0f5115f956239124e9b30f3a621966f"
+
/-!
# Finiteness conditions in commutative algebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b981918a93bc45a8600de608cde7944a80d92b9
@@ -114,7 +114,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
rwa [mem_comap, span_empty, smul_bot, mem_bot] at hrn
apply ih; rcases H with ⟨r, hr1, hrn, hs⟩
rw [← Set.singleton_union, span_union, smul_sup] at hrn
- rw [Set.insert_subset] at hs
+ rw [Set.insert_subset_iff] at hs
have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s :=
by
specialize hrn hs.1; rw [mem_comap, mem_sup] at hrn
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -55,6 +55,7 @@ def FG (N : Submodule R M) : Prop :=
#align submodule.fg Submodule.FG
-/
+#print Submodule.fg_def /-
theorem fg_def {N : Submodule R M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
by
@@ -62,6 +63,7 @@ theorem fg_def {N : Submodule R M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ span R
rcases finite.exists_finset_coe h with ⟨t, rfl⟩
exact ⟨t, rfl⟩⟩
#align submodule.fg_def Submodule.fg_def
+-/
#print Submodule.fg_iff_addSubmonoid_fg /-
theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.FG ↔ P.toAddSubmonoid.FG :=
@@ -70,12 +72,15 @@ theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.FG ↔ P.toAddSubmonoid
#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_addSubmonoid_fg
-/
+#print Submodule.fg_iff_add_subgroup_fg /-
theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ G) :
P.FG ↔ P.toAddSubgroup.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩⟩
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
+-/
+#print Submodule.fg_iff_exists_fin_generating_family /-
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), span R (range s) = N :=
by
@@ -87,7 +92,9 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
· rintro ⟨n, s, hs⟩
refine' ⟨range s, finite_range s, hs⟩
#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_family
+-/
+#print Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul /-
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
@@ -125,7 +132,9 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
rw [mul_smul, ← hyz, smul_add, smul_smul, mul_comm, mul_smul]
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul
+-/
+#print Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul /-
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r ∈ I, ∀ n ∈ N, r • n = n :=
@@ -133,16 +142,22 @@ theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {
obtain ⟨r, hr, hr'⟩ := N.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul I hn hin
exact ⟨-(r - 1), I.neg_mem hr, fun n hn => by simpa [sub_smul] using hr' n hn⟩
#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul
+-/
+#print Submodule.fg_bot /-
theorem fg_bot : (⊥ : Submodule R M).FG :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
+-/
+#print Subalgebra.fg_bot_toSubmodule /-
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
(⊥ : Subalgebra R A).toSubmodule.FG :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
+-/
+#print Submodule.fg_unit /-
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).FG :=
by
@@ -154,11 +169,14 @@ theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I :
refine' mul_le_mul_left (le_trans _ <| mul_le_mul_right <| span_le.mpr hT')
rwa [one_le, span_mul_span]
#align submodule.fg_unit Submodule.fg_unit
+-/
+#print Submodule.fg_of_isUnit /-
theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
(hI : IsUnit I) : I.FG :=
fg_unit hI.Unit
#align submodule.fg_of_is_unit Submodule.fg_of_isUnit
+-/
#print Submodule.fg_span /-
theorem fg_span {s : Set M} (hs : s.Finite) : FG (span R s) :=
@@ -166,40 +184,53 @@ theorem fg_span {s : Set M} (hs : s.Finite) : FG (span R s) :=
#align submodule.fg_span Submodule.fg_span
-/
+#print Submodule.fg_span_singleton /-
theorem fg_span_singleton (x : M) : FG (R ∙ x) :=
fg_span (finite_singleton x)
#align submodule.fg_span_singleton Submodule.fg_span_singleton
+-/
+#print Submodule.FG.sup /-
theorem FG.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [span_union, ht₁.2, ht₂.2]⟩
#align submodule.fg.sup Submodule.FG.sup
+-/
+#print Submodule.fg_finset_sup /-
theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
(s.sup N).FG :=
Finset.sup_induction fg_bot (fun a ha b hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
+-/
+#print Submodule.fg_biSup /-
theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
(⨆ i ∈ s, N i).FG := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_biSup
+-/
+#print Submodule.fg_iSup /-
theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) : (iSup N).FG :=
by cases nonempty_fintype ι; simpa using fg_bsupr Finset.univ N fun i hi => h i
#align submodule.fg_supr Submodule.fg_iSup
+-/
variable {P : Type _} [AddCommMonoid P] [Module R P]
variable (f : M →ₗ[R] P)
+#print Submodule.FG.map /-
theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
let ⟨t, ht⟩ := fg_def.1 hs
fg_def.2 ⟨f '' t, ht.1.image _, by rw [span_image, ht.2]⟩
#align submodule.fg.map Submodule.FG.map
+-/
variable {f}
+#print Submodule.fg_of_fg_map_injective /-
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
(hfn : (N.map f).FG) : N.FG :=
let ⟨t, ht⟩ := hfn
@@ -210,21 +241,29 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
Set.inter_eq_self_of_subset_left, ht]
rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]; exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
+-/
+#print Submodule.fg_of_fg_map /-
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).FG) : N.FG :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
#align submodule.fg_of_fg_map Submodule.fg_of_fg_map
+-/
+#print Submodule.fg_top /-
theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).FG ↔ N.FG :=
⟨fun h => N.range_subtype ▸ map_top N.Subtype ▸ h.map _, fun h =>
fg_of_fg_map_injective N.Subtype Subtype.val_injective <| by rwa [map_top, range_subtype]⟩
#align submodule.fg_top Submodule.fg_top
+-/
+#print Submodule.fg_of_linearEquiv /-
theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).FG) : (⊤ : Submodule R M).FG :=
e.symm.range ▸ map_top (e.symm : P →ₗ[R] M) ▸ h.map _
#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquiv
+-/
+#print Submodule.FG.prod /-
theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : sc.FG) :
(sb.Prod sc).FG :=
let ⟨tb, htb⟩ := fg_def.1 hsb
@@ -233,7 +272,9 @@ theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : s
⟨LinearMap.inl R M P '' tb ∪ LinearMap.inr R M P '' tc, (htb.1.image _).union (htc.1.image _),
by rw [LinearMap.span_inl_union_inr, htb.2, htc.2]⟩
#align submodule.fg.prod Submodule.FG.prod
+-/
+#print Submodule.fg_pi /-
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
(Submodule.pi Set.univ p).FG := by
@@ -244,7 +285,9 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
+-/
+#print Submodule.fg_of_fg_map_of_fg_inf_ker /-
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
@@ -303,7 +346,9 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
rw [f.map_smul, (hg y (hl1 hy)).2]
· exact zero_smul _; · exact fun _ _ _ => add_smul _ _ _
#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_ker
+-/
+#print Submodule.fg_induction /-
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
(h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
@@ -313,7 +358,9 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
· rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]; apply h₁
· rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
#align submodule.fg_induction Submodule.fg_induction
+-/
+#print Submodule.fg_ker_comp /-
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
@@ -325,7 +372,9 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
· rwa [Submodule.map_comap_eq, LinearMap.range_eq_top.2 hsur, top_inf_eq]
· rwa [inf_of_le_right (show f.ker ≤ comap f g.ker from comap_mono bot_le)]
#align submodule.fg_ker_comp Submodule.fg_ker_comp
+-/
+#print Submodule.fg_restrictScalars /-
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
(hfin : N.FG) (h : Function.Surjective (algebraMap R S)) : (Submodule.restrictScalars R N).FG :=
@@ -334,7 +383,9 @@ theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algeb
use X
exact (Submodule.restrictScalars_span R S h ↑X).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
+-/
+#print Submodule.FG.stablizes_of_iSup_eq /-
theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
(H : iSup N = M') : ∃ n, M' = N n :=
by
@@ -350,7 +401,9 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]; exact le_iSup _ _
#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
+-/
+#print Submodule.fg_iff_compact /-
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
@@ -377,6 +430,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
span_eq_supr_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
+-/
end Submodule
@@ -390,6 +444,7 @@ variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
variable [Module R M] [Module R N] [Module R P]
+#print Submodule.FG.map₂ /-
theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.FG)
(hq : q.FG) : (map₂ f p q).FG :=
let ⟨sm, hfm, hm⟩ := fg_def.1 hp
@@ -398,6 +453,7 @@ theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submo
⟨Set.image2 (fun m n => f m n) sm sn, hfm.image2 _ hfn,
map₂_span_span R f sm sn ▸ hm ▸ hn ▸ rfl⟩
#align submodule.fg.map₂ Submodule.FG.map₂
+-/
end Map₂
@@ -407,13 +463,17 @@ variable {R : Type _} {A : Type _} [CommSemiring R] [Semiring A] [Algebra R A]
variable {M N : Submodule R A}
+#print Submodule.FG.mul /-
theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
hm.zipWith _ hn
#align submodule.fg.mul Submodule.FG.mul
+-/
+#print Submodule.FG.pow /-
theorem FG.pow (h : M.FG) (n : ℕ) : (M ^ n).FG :=
Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
#align submodule.fg.pow Submodule.FG.pow
+-/
end Mul
@@ -432,6 +492,7 @@ def FG (I : Ideal R) : Prop :=
#align ideal.fg Ideal.FG
-/
+#print Ideal.FG.map /-
/-- The image of a finitely generated ideal is finitely generated.
This is the `ideal` version of `submodule.fg.map`. -/
@@ -442,7 +503,9 @@ theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG)
refine' ⟨s.image f, _⟩
rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.FG.map
+-/
+#print Ideal.fg_ker_comp /-
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
(g.comp f).ker.FG := by
@@ -454,6 +517,7 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
let g₁ := (IsScalarTower.toAlgHom R S A).toLinearMap
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars g.ker hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
+-/
#print Ideal.exists_radical_pow_le_of_fg /-
theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
@@ -492,10 +556,12 @@ namespace Module
variable [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid N] [Module R N]
+#print Module.finite_def /-
theorem finite_def {R M} [Semiring R] [AddCommMonoid M] [Module R M] :
Finite R M ↔ (⊤ : Submodule R M).FG :=
⟨fun h => h.1, fun h => ⟨h⟩⟩
#align module.finite_def Module.finite_def
+-/
namespace Finite
@@ -508,22 +574,28 @@ theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M
#align module.finite.iff_add_monoid_fg Module.Finite.iff_addMonoid_fg
-/
+#print Module.Finite.iff_addGroup_fg /-
theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.FG G :=
⟨fun h => AddGroup.fg_def.2 <| (fg_iff_add_subgroup_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (fg_iff_add_subgroup_fg ⊤).2 (AddGroup.fg_def.1 h)⟩
#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fg
+-/
variable {R M N}
+#print Module.Finite.exists_fin /-
theorem exists_fin [Finite R M] : ∃ (n : ℕ) (s : Fin n → M), span R (range s) = ⊤ :=
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
+-/
+#print Module.Finite.of_surjective /-
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
rw [← LinearMap.range_eq_top.2 hf, ← Submodule.map_top]
exact hM.1.map f⟩
#align module.finite.of_surjective Module.Finite.of_surjective
+-/
#print Module.Finite.range /-
/-- The range of a linear map from a finite module is finite. -/
@@ -550,6 +622,7 @@ instance self : Finite R R :=
variable (M)
+#print Module.Finite.of_restrictScalars_finite /-
theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
[Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] : Finite A M :=
by
@@ -560,14 +633,17 @@ theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A]
rw [hSgen] at this
exact this
#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrictScalars_finite
+-/
variable {R M}
+#print Module.Finite.prod /-
instance prod [hM : Finite R M] [hN : Finite R N] : Finite R (M × N) :=
⟨by
rw [← Submodule.prod_top]
exact hM.1.Prod hN.1⟩
#align module.finite.prod Module.Finite.prod
+-/
#print Module.Finite.pi /-
instance pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
@@ -578,12 +654,15 @@ instance pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid
#align module.finite.pi Module.Finite.pi
-/
+#print Module.Finite.equiv /-
theorem equiv [hM : Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
of_surjective (e : M →ₗ[R] N) e.Surjective
#align module.finite.equiv Module.Finite.equiv
+-/
section Algebra
+#print Module.Finite.trans /-
theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra R A]
[AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
∀ [Finite R A] [Finite A M], Finite R M
@@ -594,6 +673,7 @@ theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra
rw [Set.image2_smul, Submodule.span_smul_of_span_eq_top hs (↑t : Set M), ht,
Submodule.restrictScalars_top]⟩⟩
#align module.finite.trans Module.Finite.trans
+-/
end Algebra
@@ -619,11 +699,13 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
#align module.finite.base_change Module.Finite.base_change
-/
+#print Module.Finite.tensorProduct /-
instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module R M]
[AddCommMonoid N] [Module R N] [hM : Module.Finite R M] [hN : Module.Finite R N] :
Module.Finite R (TensorProduct R M N)
where out := (TensorProduct.map₂_mk_top_top_eq_top R M N).subst (hM.out.zipWith _ hN.out)
#align module.finite.tensor_product Module.Finite.tensorProduct
+-/
end ModuleAndAlgebra
@@ -651,11 +733,14 @@ theorem id : Finite (RingHom.id A) :=
variable {A}
+#print RingHom.Finite.of_surjective /-
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.to_algebra
Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
#align ring_hom.finite.of_surjective RingHom.Finite.of_surjective
+-/
+#print RingHom.Finite.comp /-
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
by
letI := f.to_algebra
@@ -666,7 +751,9 @@ theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (
letI : Module.Finite B C := hg
exact Module.Finite.trans B C
#align ring_hom.finite.comp RingHom.Finite.comp
+-/
+#print RingHom.Finite.of_comp_finite /-
theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) : g.Finite :=
by
letI := f.to_algebra
@@ -676,6 +763,7 @@ theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) :
letI : Module.Finite A C := h
exact Module.Finite.of_restrictScalars_finite A B C
#align ring_hom.finite.of_comp_finite RingHom.Finite.of_comp_finite
+-/
end Finite
@@ -701,23 +789,31 @@ namespace Finite
variable (R A)
+#print AlgHom.Finite.id /-
theorem id : Finite (AlgHom.id R A) :=
RingHom.Finite.id A
#align alg_hom.finite.id AlgHom.Finite.id
+-/
variable {R A}
+#print AlgHom.Finite.comp /-
theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
RingHom.Finite.comp hg hf
#align alg_hom.finite.comp AlgHom.Finite.comp
+-/
+#print AlgHom.Finite.of_surjective /-
theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
RingHom.Finite.of_surjective f hf
#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjective
+-/
+#print AlgHom.Finite.of_comp_finite /-
theorem of_comp_finite {f : A →ₐ[R] B} {g : B →ₐ[R] C} (h : (g.comp f).Finite) : g.Finite :=
RingHom.Finite.of_comp_finite h
#align alg_hom.finite.of_comp_finite AlgHom.Finite.of_comp_finite
+-/
end Finite
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -238,11 +238,11 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
(Submodule.pi Set.univ p).FG := by
classical
- simp_rw [fg_def] at hsb ⊢
- choose t htf hts using hsb
- refine'
- ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
- simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
+ simp_rw [fg_def] at hsb ⊢
+ choose t htf hts using hsb
+ refine'
+ ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
+ simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
@@ -308,10 +308,10 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
(h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
classical
- obtain ⟨s, rfl⟩ := hN
- induction s using Finset.induction
- · rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]; apply h₁
- · rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
+ obtain ⟨s, rfl⟩ := hN
+ induction s using Finset.induction
+ · rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]; apply h₁
+ · rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
#align submodule.fg_induction Submodule.fg_induction
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
@@ -354,28 +354,28 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
- -- Introduce shorthand for span of an element
- let sp : M → Submodule R M := fun a => span R {a}
- -- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
- have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
- constructor
- · rintro ⟨t, rfl⟩
- rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
- apply CompleteLattice.finset_sup_compact_of_compact
- exact fun n _ => singleton_span_is_compact_element n
- · intro h
- -- s is the Sup of the spans of its elements.
- have sSup : s = Sup (sp '' ↑s) := by
- rw [sSup_eq_iSup, iSup_image, ← span_eq_supr_of_singleton_spans, eq_comm, span_eq]
- -- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
- obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
- have ssup : s = u.sup id := by
- suffices : u.sup id ≤ s; exact le_antisymm husup this
- rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
- obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
- rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
- span_eq_supr_of_singleton_spans, eq_comm] at ssup
- exact ⟨t, ssup⟩
+ -- Introduce shorthand for span of an element
+ let sp : M → Submodule R M := fun a => span R {a}
+ -- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
+ have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
+ constructor
+ · rintro ⟨t, rfl⟩
+ rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
+ apply CompleteLattice.finset_sup_compact_of_compact
+ exact fun n _ => singleton_span_is_compact_element n
+ · intro h
+ -- s is the Sup of the spans of its elements.
+ have sSup : s = Sup (sp '' ↑s) := by
+ rw [sSup_eq_iSup, iSup_image, ← span_eq_supr_of_singleton_spans, eq_comm, span_eq]
+ -- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
+ obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
+ have ssup : s = u.sup id := by
+ suffices : u.sup id ≤ s; exact le_antisymm husup this
+ rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
+ obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
+ rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
+ span_eq_supr_of_singleton_spans, eq_comm] at ssup
+ exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
end Submodule
@@ -438,9 +438,9 @@ This is the `ideal` version of `submodule.fg.map`. -/
theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
(I.map f).FG := by
classical
- obtain ⟨s, hs⟩ := h
- refine' ⟨s.image f, _⟩
- rw [Finset.coe_image, ← Ideal.map_span, hs]
+ obtain ⟨s, hs⟩ := h
+ refine' ⟨s.image f, _⟩
+ rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.FG.map
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
@@ -605,17 +605,17 @@ end Module
instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M]
[Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by
classical
- obtain ⟨s, hs⟩ := h.out
- refine' ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr fun x _ => _⟩⟩
- apply TensorProduct.induction_on x
- · exact zero_mem _
- · intro x y
- rw [Finset.coe_image, ← Submodule.span_span_of_tower R, Submodule.span_image, hs,
- Submodule.map_top, LinearMap.range_coe]
- change _ ∈ Submodule.span A (Set.range <| TensorProduct.mk R A M 1)
- rw [← mul_one x, ← smul_eq_mul, ← TensorProduct.smul_tmul']
- exact Submodule.smul_mem _ x (Submodule.subset_span <| Set.mem_range_self y)
- · exact fun _ _ => Submodule.add_mem _
+ obtain ⟨s, hs⟩ := h.out
+ refine' ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr fun x _ => _⟩⟩
+ apply TensorProduct.induction_on x
+ · exact zero_mem _
+ · intro x y
+ rw [Finset.coe_image, ← Submodule.span_span_of_tower R, Submodule.span_image, hs,
+ Submodule.map_top, LinearMap.range_coe]
+ change _ ∈ Submodule.span A (Set.range <| TensorProduct.mk R A M 1)
+ rw [← mul_one x, ← smul_eq_mul, ← TensorProduct.smul_tmul']
+ exact Submodule.smul_mem _ x (Submodule.subset_span <| Set.mem_range_self y)
+ · exact fun _ _ => Submodule.add_mem _
#align module.finite.base_change Module.Finite.base_change
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -77,7 +77,7 @@ theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
- N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N :=
+ N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), span R (range s) = N :=
by
rw [fg_def]
constructor
@@ -94,7 +94,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) :=
by
- rw [fg_def] at hn; rcases hn with ⟨s, hfs, hs⟩
+ rw [fg_def] at hn ; rcases hn with ⟨s, hfs, hs⟩
have : ∃ r : R, r - 1 ∈ I ∧ N ≤ (I • span R s).comap (LinearMap.lsmul R M r) ∧ s ⊆ N :=
by
refine' ⟨1, _, _, _⟩
@@ -104,23 +104,23 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
clear hin hs; revert this
refine' Set.Finite.dinduction_on hfs (fun H => _) fun i s his hfs ih H => _
· rcases H with ⟨r, hr1, hrn, hs⟩; refine' ⟨r, hr1, fun n hn => _⟩; specialize hrn hn
- rwa [mem_comap, span_empty, smul_bot, mem_bot] at hrn
+ rwa [mem_comap, span_empty, smul_bot, mem_bot] at hrn
apply ih; rcases H with ⟨r, hr1, hrn, hs⟩
- rw [← Set.singleton_union, span_union, smul_sup] at hrn
- rw [Set.insert_subset] at hs
+ rw [← Set.singleton_union, span_union, smul_sup] at hrn
+ rw [Set.insert_subset] at hs
have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s :=
by
- specialize hrn hs.1; rw [mem_comap, mem_sup] at hrn
- rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • i at hyz
- rw [mem_smul_span_singleton] at hy; rcases hy with ⟨c, hci, rfl⟩
+ specialize hrn hs.1; rw [mem_comap, mem_sup] at hrn
+ rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • i at hyz
+ rw [mem_smul_span_singleton] at hy ; rcases hy with ⟨c, hci, rfl⟩
use r - c; constructor
· rw [sub_right_comm]; exact I.sub_mem hr1 hci
· rw [sub_smul, ← hyz, add_sub_cancel']; exact hz
rcases this with ⟨c, hc1, hci⟩; refine' ⟨c * r, _, _, hs.2⟩
· simpa only [mul_sub, mul_one, sub_add_sub_cancel] using I.add_mem (I.mul_mem_left c hr1) hc1
- · intro n hn; specialize hrn hn; rw [mem_comap, mem_sup] at hrn
- rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • n at hyz
- rw [mem_smul_span_singleton] at hy; rcases hy with ⟨d, hdi, rfl⟩
+ · intro n hn; specialize hrn hn; rw [mem_comap, mem_sup] at hrn
+ rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • n at hyz
+ rw [mem_smul_span_singleton] at hy ; rcases hy with ⟨d, hdi, rfl⟩
change _ • _ ∈ I • span R s
rw [mul_smul, ← hyz, smul_add, smul_smul, mul_comm, mul_smul]
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
@@ -238,7 +238,7 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
(Submodule.pi Set.univ p).FG := by
classical
- simp_rw [fg_def] at hsb⊢
+ simp_rw [fg_def] at hsb ⊢
choose t htf hts using hsb
refine'
⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
@@ -272,11 +272,11 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
· refine' sup_le (span_le.2 <| image_subset_iff.2 _) (span_le.2 _)
· intro y hy; exact (hg y hy).1
· intro x hx; have := subset_span hx
- rw [ht2] at this
+ rw [ht2] at this
exact this.1
intro x hx
have : f x ∈ map f s := by rw [mem_map]; exact ⟨x, hx, rfl⟩
- rw [← ht1, ← Set.image_id ↑t1, Finsupp.mem_span_image_iff_total] at this
+ rw [← ht1, ← Set.image_id ↑t1, Finsupp.mem_span_image_iff_total] at this
rcases this with ⟨l, hl1, hl2⟩
refine'
mem_sup.2
@@ -374,7 +374,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
- span_eq_supr_of_singleton_spans, eq_comm] at ssup
+ span_eq_supr_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
@@ -515,7 +515,7 @@ theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔
variable {R M N}
-theorem exists_fin [Finite R M] : ∃ (n : ℕ)(s : Fin n → M), span R (range s) = ⊤ :=
+theorem exists_fin [Finite R M] : ∃ (n : ℕ) (s : Fin n → M), span R (range s) = ⊤ :=
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
@@ -553,11 +553,11 @@ variable (M)
theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
[Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] : Finite A M :=
by
- rw [finite_def, fg_def] at hM⊢
+ rw [finite_def, fg_def] at hM ⊢
obtain ⟨S, hSfin, hSgen⟩ := hM
refine' ⟨S, hSfin, eq_top_iff.2 _⟩
have := Submodule.span_le_restrictScalars R A S
- rw [hSgen] at this
+ rw [hSgen] at this
exact this
#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrictScalars_finite
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -40,7 +40,7 @@ In this file we define a notion of finiteness that is common in commutative alge
open Function (Surjective)
-open BigOperators
+open scoped BigOperators
namespace Submodule
@@ -455,6 +455,7 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars g.ker hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
+#print Ideal.exists_radical_pow_le_of_fg /-
theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
@@ -472,6 +473,7 @@ theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R)
· refine' ideal.mul_le_left.trans ((Ideal.pow_le_pow _).trans hm)
rw [add_comm, Nat.add_sub_assoc h.le]; apply Nat.le_add_right
#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fg
+-/
end Ideal
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -55,12 +55,6 @@ def FG (N : Submodule R M) : Prop :=
#align submodule.fg Submodule.FG
-/
-/- warning: submodule.fg_def -> Submodule.fg_def is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u2} (Set.{u2} M) (fun (S : Set.{u2} M) => And (Set.Finite.{u2} M S) (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 S) N)))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 S) N)))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_def Submodule.fg_defₓ'. -/
theorem fg_def {N : Submodule R M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
by
@@ -76,24 +70,12 @@ theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.FG ↔ P.toAddSubmonoid
#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_addSubmonoid_fg
-/
-/- warning: submodule.fg_iff_add_subgroup_fg -> Submodule.fg_iff_add_subgroup_fg is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.FG.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.ring _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
-but is expected to have type
- forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.FG.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.instRingInt _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fgₓ'. -/
theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ G) :
P.FG ↔ P.toAddSubgroup.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩⟩
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
-/- warning: submodule.fg_iff_exists_fin_generating_family -> Submodule.fg_iff_exists_fin_generating_family is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u2} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Set.range.{u2, 1} M (Fin n) s)) N)))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Set.range.{u1, 1} M (Fin n) s)) N)))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_familyₓ'. -/
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N :=
by
@@ -106,9 +88,6 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
refine' ⟨range s, finite_range s, hs⟩
#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_family
-/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
@@ -147,9 +126,6 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul
-/- warning: submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul -> Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r ∈ I, ∀ n ∈ N, r • n = n :=
@@ -158,27 +134,15 @@ theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {
exact ⟨-(r - 1), I.neg_mem hr, fun n hn => by simpa [sub_smul] using hr' n hn⟩
#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul
-/- warning: submodule.fg_bot -> Submodule.fg_bot is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2], Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasBot.{u1, u2} R M _inst_1 _inst_2 _inst_3))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2], Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.instBotSubmodule.{u2, u1} R M _inst_1 _inst_2 _inst_3))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_bot Submodule.fg_botₓ'. -/
theorem fg_bot : (⊥ : Submodule R M).FG :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
-/- warning: subalgebra.fg_bot_to_submodule -> Subalgebra.fg_bot_toSubmodule is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
(⊥ : Subalgebra R A).toSubmodule.FG :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
-/- warning: submodule.fg_unit -> Submodule.fg_unit is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submodule.fg_unit Submodule.fg_unitₓ'. -/
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).FG :=
by
@@ -191,12 +155,6 @@ theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I :
rwa [one_le, span_mul_span]
#align submodule.fg_unit Submodule.fg_unit
-/- warning: submodule.fg_of_is_unit -> Submodule.fg_of_isUnit is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] {I : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) I)
-but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] {I : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) I)
-Case conversion may be inaccurate. Consider using '#align submodule.fg_of_is_unit Submodule.fg_of_isUnitₓ'. -/
theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
(hI : IsUnit I) : I.FG :=
fg_unit hI.Unit
@@ -208,55 +166,25 @@ theorem fg_span {s : Set M} (hs : s.Finite) : FG (span R s) :=
#align submodule.fg_span Submodule.fg_span
-/
-/- warning: submodule.fg_span_singleton -> Submodule.fg_span_singleton is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (x : M), Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (x : M), Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_span_singleton Submodule.fg_span_singletonₓ'. -/
theorem fg_span_singleton (x : M) : FG (R ∙ x) :=
fg_span (finite_singleton x)
#align submodule.fg_span_singleton Submodule.fg_span_singleton
-/- warning: submodule.fg.sup -> Submodule.FG.sup is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N₁ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N₁ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.sup Submodule.FG.supₓ'. -/
theorem FG.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [span_union, ht₁.2, ht₂.2]⟩
#align submodule.fg.sup Submodule.FG.sup
-/- warning: submodule.fg_finset_sup -> Submodule.fg_finset_sup is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u2, u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3)))) (Submodule.orderBot.{u1, u2} R M _inst_1 _inst_2 _inst_3) s N))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u1, u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) (Submodule.instOrderBotSubmoduleToLEToPreorderInstPartialOrderSetLike.{u2, u1} R M _inst_1 _inst_2 _inst_3) s N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_finset_sup Submodule.fg_finset_supₓ'. -/
theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
(s.sup N).FG :=
Finset.sup_induction fg_bot (fun a ha b hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-/- warning: submodule.fg_bsupr -> Submodule.fg_biSup is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_biSupₓ'. -/
theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
(⨆ i ∈ s, N i).FG := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_biSup
-/- warning: submodule.fg_supr -> Submodule.fg_iSup is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι N))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_supr Submodule.fg_iSupₓ'. -/
theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) : (iSup N).FG :=
by cases nonempty_fintype ι; simpa using fg_bsupr Finset.univ N fun i hi => h i
#align submodule.fg_supr Submodule.fg_iSup
@@ -265,12 +193,6 @@ variable {P : Type _} [AddCommMonoid P] [Module R P]
variable (f : M →ₗ[R] P)
-/- warning: submodule.fg.map -> Submodule.FG.map is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N))
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.map Submodule.FG.mapₓ'. -/
theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
let ⟨t, ht⟩ := fg_def.1 hs
fg_def.2 ⟨f '' t, ht.1.image _, by rw [span_image, ht.2]⟩
@@ -278,12 +200,6 @@ theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
variable {f}
-/- warning: submodule.fg_of_fg_map_injective -> Submodule.fg_of_fg_map_injective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u3} M P (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) => M -> P) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (forall {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N)) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N))
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injectiveₓ'. -/
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
(hfn : (N.map f).FG) : N.FG :=
let ⟨t, ht⟩ := hfn
@@ -295,44 +211,20 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]; exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
-/- warning: submodule.fg_of_fg_map -> Submodule.fg_of_fg_map is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map Submodule.fg_of_fg_mapₓ'. -/
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).FG) : N.FG :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
#align submodule.fg_of_fg_map Submodule.fg_of_fg_map
-/- warning: submodule.fg_top -> Submodule.fg_top is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u2} (Submodule.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.hasTop.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u1} (Submodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.instTopSubmodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)
-Case conversion may be inaccurate. Consider using '#align submodule.fg_top Submodule.fg_topₓ'. -/
theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).FG ↔ N.FG :=
⟨fun h => N.range_subtype ▸ map_top N.Subtype ▸ h.map _, fun h =>
fg_of_fg_map_injective N.Subtype Subtype.val_injective <| by rwa [map_top, range_subtype]⟩
#align submodule.fg_top Submodule.fg_top
-/- warning: submodule.fg_of_linear_equiv -> Submodule.fg_of_linearEquiv is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4], (LinearEquiv.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomInvPair.ids.{u1} R _inst_1) (RingHomInvPair.ids.{u1} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Top.top.{u3} (Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5) (Submodule.hasTop.{u1, u3} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasTop.{u1, u2} R M _inst_1 _inst_2 _inst_3)))
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4], (LinearEquiv.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomInvPair.ids.{u3} R _inst_1) (RingHomInvPair.ids.{u3} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Top.top.{u1} (Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5) (Submodule.instTopSubmodule.{u3, u1} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.instTopSubmodule.{u3, u2} R M _inst_1 _inst_2 _inst_3)))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquivₓ'. -/
theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).FG) : (⊤ : Submodule R M).FG :=
e.symm.range ▸ map_top (e.symm : P →ₗ[R] M) ▸ h.map _
#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquiv
-/- warning: submodule.fg.prod -> Submodule.FG.prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] {sb : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.FG.{u1, max u2 u3} R (Prod.{u2, u3} M P) _inst_1 (Prod.addCommMonoid.{u2, u3} M P _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u1, u2, u3} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] {sb : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5}, (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.FG.{u3, max u2 u1} R (Prod.{u2, u1} M P) _inst_1 (Prod.instAddCommMonoidSum.{u2, u1} M P _inst_2 _inst_4) (Prod.module.{u3, u2, u1} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u3, u2, u1} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.prod Submodule.FG.prodₓ'. -/
theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : sc.FG) :
(sb.Prod sc).FG :=
let ⟨tb, htb⟩ := fg_def.1 hsb
@@ -342,12 +234,6 @@ theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : s
by rw [LinearMap.span_inl_union_inr, htb.2, htc.2]⟩
#align submodule.fg.prod Submodule.FG.prod
-/- warning: submodule.fg_pi -> Submodule.fg_pi is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u2}} {M : ι -> Type.{u3}} [_inst_6 : Finite.{succ u2} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u3} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u3} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.FG.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.FG.{u1, max u2 u3} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u2, u3} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u2} ι) p))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u3}} {M : ι -> Type.{u2}} [_inst_6 : Finite.{succ u3} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u2} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u2} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.FG.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.FG.{u1, max u3 u2} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u3, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u3, u2, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u3, u2} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u3} ι) p))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_pi Submodule.fg_piₓ'. -/
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
(Submodule.pi Set.univ p).FG := by
@@ -359,12 +245,6 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
-/- warning: submodule.fg_of_fg_map_of_fg_inf_ker -> Submodule.fg_of_fg_map_of_fg_inf_ker is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
-Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_kerₓ'. -/
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
@@ -424,12 +304,6 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
· exact zero_smul _; · exact fun _ _ _ => add_smul _ _ _
#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_ker
-/- warning: submodule.fg_induction -> Submodule.fg_induction is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (M : Type.{u2}) [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7] (P : (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))) -> (forall (M₁ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u1, u2} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (Submodule.FG.{u1, u2} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
-but is expected to have type
- forall (R : Type.{u2}) (M : Type.{u1}) [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7] (P : (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))) -> (forall (M₁ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u2, u1} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (Submodule.FG.{u2, u1} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_induction Submodule.fg_inductionₓ'. -/
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
(h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
@@ -440,9 +314,6 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
· rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
#align submodule.fg_induction Submodule.fg_induction
-/- warning: submodule.fg_ker_comp -> Submodule.fg_ker_comp is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
@@ -455,9 +326,6 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
· rwa [inf_of_le_right (show f.ker ≤ comap f g.ker from comap_mono bot_le)]
#align submodule.fg_ker_comp Submodule.fg_ker_comp
-/- warning: submodule.fg_restrict_scalars -> Submodule.fg_restrictScalars is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submodule.fg_restrict_scalars Submodule.fg_restrictScalarsₓ'. -/
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
(hfin : N.FG) (h : Function.Surjective (algebraMap R S)) : (Submodule.restrictScalars R N).FG :=
@@ -467,12 +335,6 @@ theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algeb
exact (Submodule.restrictScalars_span R S h ↑X).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-/- warning: submodule.fg.stablizes_of_supr_eq -> Submodule.FG.stablizes_of_iSup_eq is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {M' : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (iSup.{u2, 1} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) Nat (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M' (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N n))))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {M' : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (iSup.{u1, 1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) Nat (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M' (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N n))))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eqₓ'. -/
theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
(H : iSup N = M') : ∃ n, M' = N n :=
by
@@ -489,12 +351,6 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
· rw [← H]; exact le_iSup _ _
#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
-/- warning: submodule.fg_iff_compact -> Submodule.fg_iff_compact is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (s : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3) s)
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (s : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3) s)
-Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_compact Submodule.fg_iff_compactₓ'. -/
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
@@ -534,9 +390,6 @@ variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
variable [Module R M] [Module R N] [Module R P]
-/- warning: submodule.fg.map₂ -> Submodule.FG.map₂ is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submodule.fg.map₂ Submodule.FG.map₂ₓ'. -/
theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.FG)
(hq : q.FG) : (map₂ f p q).FG :=
let ⟨sm, hfm, hm⟩ := fg_def.1 hp
@@ -554,22 +407,10 @@ variable {R : Type _} {A : Type _} [CommSemiring R] [Semiring A] [Algebra R A]
variable {M N : Submodule R A}
-/- warning: submodule.fg.mul -> Submodule.FG.mul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u2, u2, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u1, u2} R _inst_1 A _inst_2 _inst_3)) M N))
-but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u2, u1} R _inst_1 A _inst_2 _inst_3)) M N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.mul Submodule.FG.mulₓ'. -/
theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
hm.zipWith _ hn
#align submodule.fg.mul Submodule.FG.mul
-/- warning: submodule.fg.pow -> Submodule.FG.pow is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u2, 0, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u2, 0} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u1, u2} R _inst_1 A _inst_2 _inst_3)))))) M n))
-but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u1, 0, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u1, 0} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u2, u1} R _inst_1 A _inst_2 _inst_3)))))) M n))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.pow Submodule.FG.powₓ'. -/
theorem FG.pow (h : M.FG) (n : ℕ) : (M ^ n).FG :=
Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
#align submodule.fg.pow Submodule.FG.pow
@@ -591,12 +432,6 @@ def FG (I : Ideal R) : Prop :=
#align ideal.fg Ideal.FG
-/
-/- warning: ideal.fg.map -> Ideal.FG.map is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_4 : Semiring.{u1} R] [_inst_5 : Semiring.{u2} S] {I : Ideal.{u1} R _inst_4}, (Ideal.FG.{u1} R _inst_4 I) -> (forall (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)), Ideal.FG.{u2} S _inst_5 (Ideal.map.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) _inst_4 _inst_5 (RingHom.ringHomClass.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) f I))
-but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_4 : Semiring.{u2} R] [_inst_5 : Semiring.{u1} S] {I : Ideal.{u2} R _inst_4}, (Ideal.FG.{u2} R _inst_4 I) -> (forall (f : RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)), Ideal.FG.{u1} S _inst_5 (Ideal.map.{u2, u1, max u2 u1} R S (RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) _inst_4 _inst_5 (RingHom.instRingHomClassRingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) f I))
-Case conversion may be inaccurate. Consider using '#align ideal.fg.map Ideal.FG.mapₓ'. -/
/-- The image of a finitely generated ideal is finitely generated.
This is the `ideal` version of `submodule.fg.map`. -/
@@ -608,12 +443,6 @@ theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG)
rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.FG.map
-/- warning: ideal.fg_ker_comp -> Ideal.fg_ker_comp is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {A : Type.{u3}} [_inst_4 : CommRing.{u1} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u3} A] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))), (Ideal.FG.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u3, max u2 u3} S A (RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) g)) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u3, max u1 u3} R A (RingHom.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (RingHom.comp.{u1, u2, u3} R S A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6))) g f)))
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))), (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))))) f)) -> (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6))) g f)))
-Case conversion may be inaccurate. Consider using '#align ideal.fg_ker_comp Ideal.fg_ker_compₓ'. -/
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
(g.comp f).ker.FG := by
@@ -626,12 +455,6 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars g.ker hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
-/- warning: ideal.exists_radical_pow_le_of_fg -> Ideal.exists_radical_pow_le_of_fg is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommSemiring.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)), (Ideal.FG.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4) (Ideal.radical.{u1} R _inst_4 I)) -> (Exists.{1} Nat (fun (n : Nat) => LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Preorder.toHasLe.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4))))))) (HPow.hPow.{u1, 0, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (instHPow.{u1, 0} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Monoid.Pow.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (MonoidWithZero.toMonoid.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Semiring.toMonoidWithZero.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (IdemSemiring.toSemiring.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.idemSemiring.{u1, u1} R _inst_4 R (CommSemiring.toSemiring.{u1} R _inst_4) (Algebra.id.{u1} R _inst_4))))))) (Ideal.radical.{u1} R _inst_4 I) n) I))
-but is expected to have type
- forall {R : Type.{u1}} [_inst_4 : CommSemiring.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)), (Ideal.FG.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4) (Ideal.radical.{u1} R _inst_4 I)) -> (Exists.{1} Nat (fun (n : Nat) => LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4))))))) (HPow.hPow.{u1, 0, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (instHPow.{u1, 0} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Monoid.Pow.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (MonoidWithZero.toMonoid.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Semiring.toMonoidWithZero.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (IdemSemiring.toSemiring.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.idemSemiring.{u1, u1} R _inst_4 R (CommSemiring.toSemiring.{u1} R _inst_4) (Algebra.id.{u1} R _inst_4))))))) (Ideal.radical.{u1} R _inst_4 I) n) I))
-Case conversion may be inaccurate. Consider using '#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fgₓ'. -/
theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
@@ -667,12 +490,6 @@ namespace Module
variable [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid N] [Module R N]
-/- warning: module.finite_def -> Module.finite_def is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7], Iff (Module.Finite.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.FG.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.hasTop.{u1, u2} R M _inst_6 _inst_7 _inst_8)))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7], Iff (Module.Finite.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.FG.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Top.top.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.instTopSubmodule.{u2, u1} R M _inst_6 _inst_7 _inst_8)))
-Case conversion may be inaccurate. Consider using '#align module.finite_def Module.finite_defₓ'. -/
theorem finite_def {R M} [Semiring R] [AddCommMonoid M] [Module R M] :
Finite R M ↔ (⊤ : Submodule R M).FG :=
⟨fun h => h.1, fun h => ⟨h⟩⟩
@@ -689,12 +506,6 @@ theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M
#align module.finite.iff_add_monoid_fg Module.Finite.iff_addMonoid_fg
-/
-/- warning: module.finite.iff_add_group_fg -> Module.Finite.iff_addGroup_fg is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
-but is expected to have type
- forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
-Case conversion may be inaccurate. Consider using '#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fgₓ'. -/
theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.FG G :=
⟨fun h => AddGroup.fg_def.2 <| (fg_iff_add_subgroup_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (fg_iff_add_subgroup_fg ⊤).2 (AddGroup.fg_def.1 h)⟩
@@ -702,22 +513,10 @@ theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔
variable {R M N}
-/- warning: module.finite.exists_fin -> Module.Finite.exists_fin is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_6 : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3], Exists.{1} Nat (fun (n : Nat) => Exists.{succ u2} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Set.range.{u2, 1} M (Fin n) s)) (Top.top.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasTop.{u1, u2} R M _inst_1 _inst_2 _inst_3))))
-but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] [_inst_6 : Module.Finite.{u2, u1} R M _inst_1 _inst_2 _inst_3], Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Set.range.{u1, 1} M (Fin n) s)) (Top.top.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.instTopSubmodule.{u2, u1} R M _inst_1 _inst_2 _inst_3))))
-Case conversion may be inaccurate. Consider using '#align module.finite.exists_fin Module.Finite.exists_finₓ'. -/
theorem exists_fin [Finite R M] : ∃ (n : ℕ)(s : Fin n → M), span R (range s) = ⊤ :=
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
-/- warning: module.finite.of_surjective -> Module.Finite.of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5)
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
-Case conversion may be inaccurate. Consider using '#align module.finite.of_surjective Module.Finite.of_surjectiveₓ'. -/
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
rw [← LinearMap.range_eq_top.2 hf, ← Submodule.map_top]
@@ -749,12 +548,6 @@ instance self : Finite R R :=
variable (M)
-/- warning: module.finite.of_restrict_scalars_finite -> Module.Finite.of_restrictScalars_finite is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (A : Type.{u2}) (M : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : AddCommMonoid.{u3} M] [_inst_9 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_8] [_inst_10 : Module.{u2, u3} A M _inst_7 _inst_8] [_inst_11 : Algebra.{u1, u2} R A _inst_6 _inst_7] [_inst_12 : IsScalarTower.{u1, u2, u3} R A M (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_11))))) (SMulZeroClass.toHasSmul.{u2, u3} A M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (SMulWithZero.toSmulZeroClass.{u2, u3} A M (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (MulActionWithZero.toSMulWithZero.{u2, u3} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (Module.toMulActionWithZero.{u2, u3} A M _inst_7 _inst_8 _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_8 _inst_9))))] [hM : Module.Finite.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_8 _inst_9], Module.Finite.{u2, u3} A M _inst_7 _inst_8 _inst_10
-but is expected to have type
- forall (R : Type.{u3}) (A : Type.{u2}) (M : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : AddCommMonoid.{u1} M] [_inst_9 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_8] [_inst_10 : Module.{u2, u1} A M _inst_7 _inst_8] [_inst_11 : Algebra.{u3, u2} R A _inst_6 _inst_7] [_inst_12 : IsScalarTower.{u3, u2, u1} R A M (Algebra.toSMul.{u3, u2} R A _inst_6 _inst_7 _inst_11) (SMulZeroClass.toSMul.{u2, u1} A M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (SMulWithZero.toSMulZeroClass.{u2, u1} A M (MonoidWithZero.toZero.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (MulActionWithZero.toSMulWithZero.{u2, u1} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (Module.toMulActionWithZero.{u2, u1} A M _inst_7 _inst_8 _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_8 _inst_9))))] [hM : Module.Finite.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_8 _inst_9], Module.Finite.{u2, u1} A M _inst_7 _inst_8 _inst_10
-Case conversion may be inaccurate. Consider using '#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrictScalars_finiteₓ'. -/
theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
[Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] : Finite A M :=
by
@@ -768,12 +561,6 @@ theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A]
variable {R M}
-/- warning: module.finite.prod -> Module.Finite.prod is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5], Module.Finite.{u1, max u2 u3} R (Prod.{u2, u3} M N) _inst_1 (Prod.addCommMonoid.{u2, u3} M N _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M N _inst_1 _inst_2 _inst_4 _inst_3 _inst_5)
-but is expected to have type
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5], Module.Finite.{u1, max u3 u2} R (Prod.{u2, u3} M N) _inst_1 (Prod.instAddCommMonoidSum.{u2, u3} M N _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M N _inst_1 _inst_2 _inst_4 _inst_3 _inst_5)
-Case conversion may be inaccurate. Consider using '#align module.finite.prod Module.Finite.prodₓ'. -/
instance prod [hM : Finite R M] [hN : Finite R N] : Finite R (M × N) :=
⟨by
rw [← Submodule.prod_top]
@@ -789,24 +576,12 @@ instance pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid
#align module.finite.pi Module.Finite.pi
-/
-/- warning: module.finite.equiv -> Module.Finite.equiv is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3], (LinearEquiv.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomInvPair.ids.{u1} R _inst_1) (RingHomInvPair.ids.{u1} R _inst_1) M N _inst_2 _inst_4 _inst_3 _inst_5) -> (Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5)
-but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3], (LinearEquiv.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomInvPair.ids.{u3} R _inst_1) (RingHomInvPair.ids.{u3} R _inst_1) M N _inst_2 _inst_4 _inst_3 _inst_5) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
-Case conversion may be inaccurate. Consider using '#align module.finite.equiv Module.Finite.equivₓ'. -/
theorem equiv [hM : Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
of_surjective (e : M →ₗ[R] N) e.Surjective
#align module.finite.equiv Module.Finite.equiv
section Algebra
-/- warning: module.finite.trans -> Module.Finite.trans is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} (A : Type.{u2}) (M : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : Algebra.{u1, u2} R A _inst_6 _inst_7] [_inst_9 : AddCommMonoid.{u3} M] [_inst_10 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9] [_inst_11 : Module.{u2, u3} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u1, u2, u3} R A M (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} A M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (SMulWithZero.toSmulZeroClass.{u2, u3} A M (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (MulActionWithZero.toSMulWithZero.{u2, u3} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (Module.toMulActionWithZero.{u2, u3} A M _inst_7 _inst_9 _inst_11)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9 _inst_10))))] [_inst_13 : Module.Finite.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_8)] [_inst_14 : Module.Finite.{u2, u3} A M _inst_7 _inst_9 _inst_11], Module.Finite.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9 _inst_10
-but is expected to have type
- forall {R : Type.{u3}} (A : Type.{u2}) (M : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : Algebra.{u3, u2} R A _inst_6 _inst_7] [_inst_9 : AddCommMonoid.{u1} M] [_inst_10 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_9] [_inst_11 : Module.{u2, u1} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u3, u2, u1} R A M (Algebra.toSMul.{u3, u2} R A _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} A M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (SMulWithZero.toSMulZeroClass.{u2, u1} A M (MonoidWithZero.toZero.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (MulActionWithZero.toSMulWithZero.{u2, u1} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (Module.toMulActionWithZero.{u2, u1} A M _inst_7 _inst_9 _inst_11)))) (SMulZeroClass.toSMul.{u3, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_9 _inst_10))))] [_inst_13 : Module.Finite.{u3, u2} R A (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u3, u2} R A _inst_6 _inst_7 _inst_8)] [_inst_14 : Module.Finite.{u2, u1} A M _inst_7 _inst_9 _inst_11], Module.Finite.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_9 _inst_10
-Case conversion may be inaccurate. Consider using '#align module.finite.trans Module.Finite.transₓ'. -/
theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra R A]
[AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
∀ [Finite R A] [Finite A M], Finite R M
@@ -842,12 +617,6 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
#align module.finite.base_change Module.Finite.base_change
-/
-/- warning: module.finite.tensor_product -> Module.Finite.tensorProduct is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (M : Type.{u2}) (N : Type.{u3}) [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] [hM : Module.Finite.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_5], Module.Finite.{u1, max u2 u3} R (TensorProduct.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (CommSemiring.toSemiring.{u1} R _inst_1) (TensorProduct.addCommMonoid.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (TensorProduct.module.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5)
-but is expected to have type
- forall (R : Type.{u1}) (M : Type.{u2}) (N : Type.{u3}) [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] [hM : Module.Finite.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_5], Module.Finite.{u1, max u3 u2} R (TensorProduct.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (CommSemiring.toSemiring.{u1} R _inst_1) (TensorProduct.addCommMonoid.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5)
-Case conversion may be inaccurate. Consider using '#align module.finite.tensor_product Module.Finite.tensorProductₓ'. -/
instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module R M]
[AddCommMonoid N] [Module R N] [hM : Module.Finite R M] [hN : Module.Finite R N] :
Module.Finite R (TensorProduct R M N)
@@ -880,23 +649,11 @@ theorem id : Finite (RingHom.id A) :=
variable {A}
-/- warning: ring_hom.finite.of_surjective -> RingHom.Finite.of_surjective is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u1}} {B : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] (f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))), (Function.Surjective.{succ u1, succ u2} A B (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) (fun (_x : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) => A -> B) (RingHom.hasCoeToFun.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) f)) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f)
-but is expected to have type
- forall {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u2} A] [_inst_2 : CommRing.{u1} B] (f : RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonUnitalNonAssocSemiring.toMul.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))) (RingHom.instRingHomClassRingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))))) f)) -> (RingHom.Finite.{u2, u1} A B _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_surjective RingHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.to_algebra
Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
#align ring_hom.finite.of_surjective RingHom.Finite.of_surjective
-/- warning: ring_hom.finite.comp -> RingHom.Finite.comp is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u1}} {B : Type.{u2}} {C : Type.{u3}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u3} C] {g : RingHom.{u2, u3} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3)))} {f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))}, (RingHom.Finite.{u2, u3} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u3} A C _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3))) g f))
-but is expected to have type
- forall {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u3} B] [_inst_3 : CommRing.{u2} C] {g : RingHom.{u3, u2} B C (Semiring.toNonAssocSemiring.{u3} B (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_2))) (Semiring.toNonAssocSemiring.{u2} C (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_3)))} {f : RingHom.{u1, u3} A B (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_1))) (Semiring.toNonAssocSemiring.{u3} B (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_2)))}, (RingHom.Finite.{u3, u2} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u3} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u2} A C _inst_1 _inst_3 (RingHom.comp.{u1, u3, u2} A B C (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_1))) (Semiring.toNonAssocSemiring.{u3} B (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_2))) (Semiring.toNonAssocSemiring.{u2} C (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_3))) g f))
-Case conversion may be inaccurate. Consider using '#align ring_hom.finite.comp RingHom.Finite.compₓ'. -/
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
by
letI := f.to_algebra
@@ -908,12 +665,6 @@ theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (
exact Module.Finite.trans B C
#align ring_hom.finite.comp RingHom.Finite.comp
-/- warning: ring_hom.finite.of_comp_finite -> RingHom.Finite.of_comp_finite is a dubious translation:
-lean 3 declaration is
- forall {A : Type.{u1}} {B : Type.{u2}} {C : Type.{u3}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u3} C] {f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))} {g : RingHom.{u2, u3} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3)))}, (RingHom.Finite.{u1, u3} A C _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u3} B C _inst_2 _inst_3 g)
-but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u3} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u1} C] {f : RingHom.{u3, u2} A B (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Semiring.toNonAssocSemiring.{u2} B (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_2)))} {g : RingHom.{u2, u1} B C (Semiring.toNonAssocSemiring.{u2} B (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_2))) (Semiring.toNonAssocSemiring.{u1} C (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_3)))}, (RingHom.Finite.{u3, u1} A C _inst_1 _inst_3 (RingHom.comp.{u3, u2, u1} A B C (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Semiring.toNonAssocSemiring.{u2} B (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_2))) (Semiring.toNonAssocSemiring.{u1} C (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u1} B C _inst_2 _inst_3 g)
-Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_comp_finite RingHom.Finite.of_comp_finiteₓ'. -/
theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) : g.Finite :=
by
letI := f.to_algebra
@@ -948,41 +699,20 @@ namespace Finite
variable (R A)
-/- warning: alg_hom.finite.id -> AlgHom.Finite.id is a dubious translation:
-lean 3 declaration is
- forall (R : Type.{u1}) (A : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))], AlgHom.Finite.{u1, u2, u2} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)
-but is expected to have type
- forall (R : Type.{u2}) (A : Type.{u1}) [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u1} A] [_inst_5 : Algebra.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2))], AlgHom.Finite.{u2, u1, u1} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2)) _inst_5)
-Case conversion may be inaccurate. Consider using '#align alg_hom.finite.id AlgHom.Finite.idₓ'. -/
theorem id : Finite (AlgHom.id R A) :=
RingHom.Finite.id A
#align alg_hom.finite.id AlgHom.Finite.id
variable {R A}
-/- warning: alg_hom.finite.comp -> AlgHom.Finite.comp is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {C : Type.{u4}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u4} C] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u1, u4} R C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4))] {g : AlgHom.{u1, u3, u4} R B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u1, u3, u4} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u1, u2, u4} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u1, u2, u3, u4} R A B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
-but is expected to have type
- forall {R : Type.{u4}} {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u1} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u2} C] [_inst_5 : Algebra.{u4, u1} R A (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2))] [_inst_6 : Algebra.{u4, u3} R B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3))] [_inst_7 : Algebra.{u4, u2} R C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_4))] {g : AlgHom.{u4, u3, u2} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3)) (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u4, u1, u3} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2)) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u4, u3, u2} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u4, u1, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u4, u1, u2} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u1, u3, u2} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2)) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3)) (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
-Case conversion may be inaccurate. Consider using '#align alg_hom.finite.comp AlgHom.Finite.compₓ'. -/
theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
RingHom.Finite.comp hg hf
#align alg_hom.finite.comp AlgHom.Finite.comp
-/- warning: alg_hom.finite.of_surjective -> AlgHom.Finite.of_surjective is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
RingHom.Finite.of_surjective f hf
#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjective
-/- warning: alg_hom.finite.of_comp_finite -> AlgHom.Finite.of_comp_finite is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {C : Type.{u4}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u4} C] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u1, u4} R C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4))] {f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u1, u3, u4} R B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u1, u2, u4} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u1, u2, u3, u4} R A B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u1, u3, u4} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
-but is expected to have type
- forall {R : Type.{u4}} {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u3} A] [_inst_3 : CommRing.{u2} B] [_inst_4 : CommRing.{u1} C] [_inst_5 : Algebra.{u4, u3} R A (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_2))] [_inst_6 : Algebra.{u4, u2} R B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3))] [_inst_7 : Algebra.{u4, u1} R C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_4))] {f : AlgHom.{u4, u3, u2} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_2)) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u4, u2, u1} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3)) (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u4, u3, u1} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u3, u2, u1} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_2)) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3)) (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u4, u2, u1} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
-Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_comp_finite AlgHom.Finite.of_comp_finiteₓ'. -/
theorem of_comp_finite {f : A →ₐ[R] B} {g : B →ₐ[R] C} (h : (g.comp f).Finite) : g.Finite :=
RingHom.Finite.of_comp_finite h
#align alg_hom.finite.of_comp_finite AlgHom.Finite.of_comp_finite
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -115,56 +115,33 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) :=
by
- rw [fg_def] at hn
- rcases hn with ⟨s, hfs, hs⟩
+ rw [fg_def] at hn; rcases hn with ⟨s, hfs, hs⟩
have : ∃ r : R, r - 1 ∈ I ∧ N ≤ (I • span R s).comap (LinearMap.lsmul R M r) ∧ s ⊆ N :=
by
refine' ⟨1, _, _, _⟩
- · rw [sub_self]
- exact I.zero_mem
- · rw [hs]
- intro n hn
- rw [mem_comap]
- change (1 : R) • n ∈ I • N
- rw [one_smul]
- exact hin hn
- · rw [← span_le, hs]
- exact le_refl N
- clear hin hs
- revert this
+ · rw [sub_self]; exact I.zero_mem
+ · rw [hs]; intro n hn; rw [mem_comap]; change (1 : R) • n ∈ I • N; rw [one_smul]; exact hin hn
+ · rw [← span_le, hs]; exact le_refl N
+ clear hin hs; revert this
refine' Set.Finite.dinduction_on hfs (fun H => _) fun i s his hfs ih H => _
- · rcases H with ⟨r, hr1, hrn, hs⟩
- refine' ⟨r, hr1, fun n hn => _⟩
- specialize hrn hn
+ · rcases H with ⟨r, hr1, hrn, hs⟩; refine' ⟨r, hr1, fun n hn => _⟩; specialize hrn hn
rwa [mem_comap, span_empty, smul_bot, mem_bot] at hrn
- apply ih
- rcases H with ⟨r, hr1, hrn, hs⟩
+ apply ih; rcases H with ⟨r, hr1, hrn, hs⟩
rw [← Set.singleton_union, span_union, smul_sup] at hrn
rw [Set.insert_subset] at hs
have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s :=
by
- specialize hrn hs.1
- rw [mem_comap, mem_sup] at hrn
- rcases hrn with ⟨y, hy, z, hz, hyz⟩
- change y + z = r • i at hyz
- rw [mem_smul_span_singleton] at hy
- rcases hy with ⟨c, hci, rfl⟩
- use r - c
- constructor
- · rw [sub_right_comm]
- exact I.sub_mem hr1 hci
- · rw [sub_smul, ← hyz, add_sub_cancel']
- exact hz
- rcases this with ⟨c, hc1, hci⟩
- refine' ⟨c * r, _, _, hs.2⟩
+ specialize hrn hs.1; rw [mem_comap, mem_sup] at hrn
+ rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • i at hyz
+ rw [mem_smul_span_singleton] at hy; rcases hy with ⟨c, hci, rfl⟩
+ use r - c; constructor
+ · rw [sub_right_comm]; exact I.sub_mem hr1 hci
+ · rw [sub_smul, ← hyz, add_sub_cancel']; exact hz
+ rcases this with ⟨c, hc1, hci⟩; refine' ⟨c * r, _, _, hs.2⟩
· simpa only [mul_sub, mul_one, sub_add_sub_cancel] using I.add_mem (I.mul_mem_left c hr1) hc1
- · intro n hn
- specialize hrn hn
- rw [mem_comap, mem_sup] at hrn
- rcases hrn with ⟨y, hy, z, hz, hyz⟩
- change y + z = r • n at hyz
- rw [mem_smul_span_singleton] at hy
- rcases hy with ⟨d, hdi, rfl⟩
+ · intro n hn; specialize hrn hn; rw [mem_comap, mem_sup] at hrn
+ rcases hrn with ⟨y, hy, z, hz, hyz⟩; change y + z = r • n at hyz
+ rw [mem_smul_span_singleton] at hy; rcases hy with ⟨d, hdi, rfl⟩
change _ • _ ∈ I • span R s
rw [mul_smul, ← hyz, smul_add, smul_smul, mul_comm, mul_smul]
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
@@ -205,10 +182,7 @@ Case conversion may be inaccurate. Consider using '#align submodule.fg_unit Subm
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).FG :=
by
- have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) :=
- by
- rw [I.mul_inv]
- exact one_le.mp le_rfl
+ have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) := by rw [I.mul_inv]; exact one_le.mp le_rfl
obtain ⟨T, T', hT, hT', one_mem⟩ := mem_span_mul_finite_of_mem_mul this
refine' ⟨T, span_eq_of_le _ hT _⟩
rw [← one_mul ↑I, ← mul_one (span R ↑T)]
@@ -284,9 +258,7 @@ but is expected to have type
forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_supr Submodule.fg_iSupₓ'. -/
theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) : (iSup N).FG :=
- by
- cases nonempty_fintype ι
- simpa using fg_bsupr Finset.univ N fun i hi => h i
+ by cases nonempty_fintype ι; simpa using fg_bsupr Finset.univ N fun i hi => h i
#align submodule.fg_supr Submodule.fg_iSup
variable {P : Type _} [AddCommMonoid P] [Module R P]
@@ -320,8 +292,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
by
rw [f.map_span, Finset.coe_preimage, Set.image_preimage_eq_inter_range,
Set.inter_eq_self_of_subset_left, ht]
- rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]
- exact map_mono le_top⟩
+ rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]; exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
/- warning: submodule.fg_of_fg_map -> Submodule.fg_of_fg_map is a dubious translation:
@@ -400,44 +371,31 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
[AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M} (hs1 : (s.map f).FG)
(hs2 : (s ⊓ f.ker).FG) : s.FG :=
by
- haveI := Classical.decEq R
- haveI := Classical.decEq M
- haveI := Classical.decEq P
- cases' hs1 with t1 ht1
- cases' hs2 with t2 ht2
+ haveI := Classical.decEq R; haveI := Classical.decEq M; haveI := Classical.decEq P
+ cases' hs1 with t1 ht1; cases' hs2 with t2 ht2
have : ∀ y ∈ t1, ∃ x ∈ s, f x = y := by
intro y hy
- have : y ∈ map f s := by
- rw [← ht1]
- exact subset_span hy
+ have : y ∈ map f s := by rw [← ht1]; exact subset_span hy
rcases mem_map.1 this with ⟨x, hx1, hx2⟩
exact ⟨x, hx1, hx2⟩
have : ∃ g : P → M, ∀ y ∈ t1, g y ∈ s ∧ f (g y) = y :=
by
choose g hg1 hg2
exists fun y => if H : y ∈ t1 then g y H else 0
- intro y H
- constructor
- · simp only [dif_pos H]
- apply hg1
- · simp only [dif_pos H]
- apply hg2
- cases' this with g hg
- clear this
+ intro y H; constructor
+ · simp only [dif_pos H]; apply hg1
+ · simp only [dif_pos H]; apply hg2
+ cases' this with g hg; clear this
exists t1.image g ∪ t2
rw [Finset.coe_union, span_union, Finset.coe_image]
apply le_antisymm
· refine' sup_le (span_le.2 <| image_subset_iff.2 _) (span_le.2 _)
- · intro y hy
- exact (hg y hy).1
- · intro x hx
- have := subset_span hx
+ · intro y hy; exact (hg y hy).1
+ · intro x hx; have := subset_span hx
rw [ht2] at this
exact this.1
intro x hx
- have : f x ∈ map f s := by
- rw [mem_map]
- exact ⟨x, hx, rfl⟩
+ have : f x ∈ map f s := by rw [mem_map]; exact ⟨x, hx, rfl⟩
rw [← ht1, ← Set.image_id ↑t1, Finsupp.mem_span_image_iff_total] at this
rcases this with ⟨l, hl1, hl2⟩
refine'
@@ -445,21 +403,17 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
⟨(Finsupp.total M M R id).toFun ((Finsupp.lmapDomain R R g : (P →₀ R) → M →₀ R) l), _,
x - Finsupp.total M M R id ((Finsupp.lmapDomain R R g : (P →₀ R) → M →₀ R) l), _,
add_sub_cancel'_right _ _⟩
- · rw [← Set.image_id (g '' ↑t1), Finsupp.mem_span_image_iff_total]
- refine' ⟨_, _, rfl⟩
+ · rw [← Set.image_id (g '' ↑t1), Finsupp.mem_span_image_iff_total]; refine' ⟨_, _, rfl⟩
haveI : Inhabited P := ⟨0⟩
rw [← Finsupp.lmapDomain_supported _ _ g, mem_map]
refine' ⟨l, hl1, _⟩
rfl
- rw [ht2, mem_inf]
- constructor
+ rw [ht2, mem_inf]; constructor
· apply s.sub_mem hx
rw [Finsupp.total_apply, Finsupp.lmapDomain_apply, Finsupp.sum_mapDomain_index]
refine' s.sum_mem _
- · intro y hy
- exact s.smul_mem _ (hg y (hl1 hy)).1
- · exact zero_smul _
- · exact fun _ _ _ => add_smul _ _ _
+ · intro y hy; exact s.smul_mem _ (hg y (hl1 hy)).1
+ · exact zero_smul _; · exact fun _ _ _ => add_smul _ _ _
· rw [LinearMap.mem_ker, f.map_sub, ← hl2]
rw [Finsupp.total_apply, Finsupp.total_apply, Finsupp.lmapDomain_apply]
rw [Finsupp.sum_mapDomain_index, Finsupp.sum, Finsupp.sum, f.map_sum]
@@ -467,8 +421,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
refine' Finset.sum_congr rfl fun y hy => _
unfold id
rw [f.map_smul, (hg y (hl1 hy)).2]
- · exact zero_smul _
- · exact fun _ _ _ => add_smul _ _ _
+ · exact zero_smul _; · exact fun _ _ _ => add_smul _ _ _
#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_ker
/- warning: submodule.fg_induction -> Submodule.fg_induction is a dubious translation:
@@ -483,10 +436,8 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
classical
obtain ⟨s, rfl⟩ := hN
induction s using Finset.induction
- · rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]
- apply h₁
- · rw [Finset.coe_insert, Submodule.span_insert]
- apply h₂ <;> apply_assumption
+ · rw [Finset.coe_empty, Submodule.span_empty, ← Submodule.span_zero_singleton]; apply h₁
+ · rw [Finset.coe_insert, Submodule.span_insert]; apply h₂ <;> apply_assumption
#align submodule.fg_induction Submodule.fg_induction
/- warning: submodule.fg_ker_comp -> Submodule.fg_ker_comp is a dubious translation:
@@ -527,10 +478,7 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
by
obtain ⟨S, hS⟩ := hM'
have : ∀ s : S, ∃ n, (s : M) ∈ N n := fun s =>
- (Submodule.mem_iSup_of_chain N s).mp
- (by
- rw [H, ← hS]
- exact Submodule.subset_span s.2)
+ (Submodule.mem_iSup_of_chain N s).mp (by rw [H, ← hS]; exact Submodule.subset_span s.2)
choose f hf
use S.attach.sup f
apply le_antisymm
@@ -538,8 +486,7 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
rw [Submodule.span_le]
intro s hs
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
- · rw [← H]
- exact le_iSup _ _
+ · rw [← H]; exact le_iSup _ _
#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
/- warning: submodule.fg_iff_compact -> Submodule.fg_iff_compact is a dubious translation:
@@ -567,10 +514,8 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
-- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
have ssup : s = u.sup id := by
- suffices : u.sup id ≤ s
- exact le_antisymm husup this
- rw [sSup, Finset.sup_id_eq_sSup]
- exact sSup_le_sSup huspan
+ suffices : u.sup id ≤ s; exact le_antisymm husup this
+ rw [sSup, Finset.sup_id_eq_sSup]; exact sSup_le_sSup huspan
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
span_eq_supr_of_singleton_spans, eq_comm] at ssup
@@ -691,8 +636,7 @@ theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R)
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
refine' Submodule.fg_induction _ _ (fun J => J ≤ I.radical → ∃ n : ℕ, J ^ n ≤ I) _ _ _ h
- · intro x hx
- obtain ⟨n, hn⟩ := hx (subset_span (Set.mem_singleton x))
+ · intro x hx; obtain ⟨n, hn⟩ := hx (subset_span (Set.mem_singleton x))
exact ⟨n, by rwa [← Ideal.span, span_singleton_pow, span_le, Set.singleton_subset_iff]⟩
· intro J K hJ hK hJK
obtain ⟨n, hn⟩ := hJ fun x hx => hJK <| Ideal.mem_sup_left hx
@@ -703,8 +647,7 @@ theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R)
obtain h | h := le_or_lt n i
· exact ideal.mul_le_right.trans ((Ideal.pow_le_pow h).trans hn)
· refine' ideal.mul_le_left.trans ((Ideal.pow_le_pow _).trans hm)
- rw [add_comm, Nat.add_sub_assoc h.le]
- apply Nat.le_add_right
+ rw [add_comm, Nat.add_sub_assoc h.le]; apply Nat.le_add_right
#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fg
end Ideal
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -107,10 +107,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_family
/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
-but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.FG.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
+<too large>
Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
@@ -174,10 +171,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul
/- warning: submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul -> Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
-but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.FG.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
+<too large>
Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
@@ -198,10 +192,7 @@ theorem fg_bot : (⊥ : Submodule R M).FG :=
#align submodule.fg_bot Submodule.fg_bot
/- warning: subalgebra.fg_bot_to_submodule -> Subalgebra.fg_bot_toSubmodule is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
-but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
+<too large>
Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
(⊥ : Subalgebra R A).toSubmodule.FG :=
@@ -209,10 +200,7 @@ theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
/- warning: submodule.fg_unit -> Submodule.fg_unit is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] (I : Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))), Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (coeBase.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Units.hasCoe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))))))) I)
-but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] (I : Units.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6))))), Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Units.val.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I)
+<too large>
Case conversion may be inaccurate. Consider using '#align submodule.fg_unit Submodule.fg_unitₓ'. -/
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).FG :=
@@ -502,10 +490,7 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
#align submodule.fg_induction Submodule.fg_induction
/- warning: submodule.fg_ker_comp -> Submodule.fg_ker_comp is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
-but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u3 u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u2 u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+<too large>
Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
@@ -520,10 +505,7 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
#align submodule.fg_ker_comp Submodule.fg_ker_comp
/- warning: submodule.fg_restrict_scalars -> Submodule.fg_restrictScalars is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u1, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u3} M] [_inst_10 : Module.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_11 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_12 : IsScalarTower.{u1, u2, u3} R S M (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} S M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u2, u3} S M (MulZeroClass.toHasZero.{u2} S (MulZeroOneClass.toMulZeroClass.{u2} S (MonoidWithZero.toMulZeroOneClass.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u2, u3} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11))))] (N : Submodule.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10), (Submodule.FG.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (algebraMap.{u1, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11 (Submodule.restrictScalars.{u1, u2, u3} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) (CommSemiring.toSemiring.{u1} R _inst_6) _inst_11 _inst_10 (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) _inst_12 N))
-but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {M : Type.{u1}} [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u3, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u1} M] [_inst_10 : Module.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_11 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_12 : IsScalarTower.{u3, u2, u1} R S M (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} S M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u2, u1} S M (MonoidWithZero.toZero.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u2, u1} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11))))] (N : Submodule.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10), (Submodule.FG.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7))))) (algebraMap.{u3, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11 (Submodule.restrictScalars.{u3, u2, u1} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) (CommSemiring.toSemiring.{u3} R _inst_6) _inst_11 _inst_10 (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) _inst_12 N))
+<too large>
Case conversion may be inaccurate. Consider using '#align submodule.fg_restrict_scalars Submodule.fg_restrictScalarsₓ'. -/
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
@@ -608,10 +590,7 @@ variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
variable [Module R M] [Module R N] [Module R P]
/- warning: submodule.fg.map₂ -> Submodule.FG.map₂ is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : AddCommMonoid.{u3} N] [_inst_4 : AddCommMonoid.{u4} P] [_inst_5 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_6 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_7 : Module.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] (f : LinearMap.{u1, u1, u2, max u3 u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) M (LinearMap.{u1, u1, u3, u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u1, u1, u3, u4} R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) _inst_5 (LinearMap.module.{u1, u1, u1, u3, u4} R R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_7 (smulCommClass_self.{u1, u4} R P (CommSemiring.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u4} R P (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (AddZeroClass.toHasZero.{u4} P (AddMonoid.toAddZeroClass.{u4} P (AddCommMonoid.toAddMonoid.{u4} P _inst_4))) (Module.toMulActionWithZero.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6}, (Submodule.FG.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.FG.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.FG.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u1, u2, u3, u4} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
-but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u1}} {P : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M] [_inst_3 : AddCommMonoid.{u1} N] [_inst_4 : AddCommMonoid.{u2} P] [_inst_5 : Module.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_6 : Module.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_7 : Module.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4] (f : LinearMap.{u4, u4, u3, max u2 u1} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) M (LinearMap.{u4, u4, u1, u2} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u4, u4, u1, u2} R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)))) _inst_5 (LinearMap.instModuleLinearMapAddCommMonoid.{u4, u4, u4, u1, u2} R R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_7 (smulCommClass_self.{u4, u2} R P (CommSemiring.toCommMonoid.{u4} R _inst_1) (MulActionWithZero.toMulAction.{u4, u2} R P (Semiring.toMonoidWithZero.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)) (AddMonoid.toZero.{u2} P (AddCommMonoid.toAddMonoid.{u2} P _inst_4)) (Module.toMulActionWithZero.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6}, (Submodule.FG.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.FG.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.FG.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u4, u3, u1, u2} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
+<too large>
Case conversion may be inaccurate. Consider using '#align submodule.fg.map₂ Submodule.FG.map₂ₓ'. -/
theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.FG)
(hq : q.FG) : (map₂ f p q).FG :=
@@ -1049,10 +1028,7 @@ theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Fin
#align alg_hom.finite.comp AlgHom.Finite.comp
/- warning: alg_hom.finite.of_surjective -> AlgHom.Finite.of_surjective is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] (f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) (fun (_x : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) => A -> B) ([anonymous].{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) f)) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
-but is expected to have type
- forall {R : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u3} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u1} B] [_inst_5 : Algebra.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))] [_inst_6 : Algebra.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))] (f : AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : A) => B) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (SMulZeroClass.toSMul.{u3, u2} R A (AddMonoid.toZero.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} R A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} R A (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5))))) (SMulZeroClass.toSMul.{u3, u1} R B (AddMonoid.toZero.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribSMul.toSMulZeroClass.{u3, u1} R B (AddMonoid.toAddZeroClass.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribMulAction.toDistribSMul.{u3, u1} R B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, u2, u1, max u2 u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6 (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) (AlgHom.algHomClass.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6))))) f)) -> (AlgHom.Finite.{u3, u2, u1} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
+<too large>
Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
RingHom.Finite.of_surjective f hf
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -322,7 +322,7 @@ variable {f}
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u3} M P (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) => M -> P) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (forall {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N)) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injectiveₓ'. -/
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
(hfn : (N.map f).FG) : N.FG :=
@@ -505,7 +505,7 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u3 u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u2 u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u3 u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u2 u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
@@ -794,7 +794,7 @@ theorem exists_fin [Finite R M] : ∃ (n : ℕ)(s : Fin n → M), span R (range
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5)
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
+ forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6193 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align module.finite.of_surjective Module.Finite.of_surjectiveₓ'. -/
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
@@ -1052,7 +1052,7 @@ theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Fin
lean 3 declaration is
forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] (f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) (fun (_x : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) => A -> B) ([anonymous].{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) f)) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
but is expected to have type
- forall {R : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u3} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u1} B] [_inst_5 : Algebra.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))] [_inst_6 : Algebra.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))] (f : AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : A) => B) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (SMulZeroClass.toSMul.{u3, u2} R A (AddMonoid.toZero.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} R A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} R A (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5))))) (SMulZeroClass.toSMul.{u3, u1} R B (AddMonoid.toZero.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribSMul.toSMulZeroClass.{u3, u1} R B (AddMonoid.toAddZeroClass.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribMulAction.toDistribSMul.{u3, u1} R B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, u2, u1, max u2 u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6 (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) (AlgHom.algHomClass.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6))))) f)) -> (AlgHom.Finite.{u3, u2, u1} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
+ forall {R : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u3} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u1} B] [_inst_5 : Algebra.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))] [_inst_6 : Algebra.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))] (f : AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2187 : A) => B) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (SMulZeroClass.toSMul.{u3, u2} R A (AddMonoid.toZero.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} R A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} R A (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5))))) (SMulZeroClass.toSMul.{u3, u1} R B (AddMonoid.toZero.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribSMul.toSMulZeroClass.{u3, u1} R B (AddMonoid.toAddZeroClass.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribMulAction.toDistribSMul.{u3, u1} R B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, u2, u1, max u2 u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6 (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) (AlgHom.algHomClass.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6))))) f)) -> (AlgHom.Finite.{u3, u2, u1} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
RingHom.Finite.of_surjective f hf
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -201,7 +201,7 @@ theorem fg_bot : (⊥ : Submodule R M).FG :=
lean 3 declaration is
forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.869 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.684 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.682 x._@.Mathlib.Order.Hom.Basic._hyg.684) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.699 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.697 x._@.Mathlib.Order.Hom.Basic._hyg.699))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
(⊥ : Subalgebra R A).toSubmodule.FG :=
@@ -523,7 +523,7 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u1, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u3} M] [_inst_10 : Module.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_11 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_12 : IsScalarTower.{u1, u2, u3} R S M (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} S M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u2, u3} S M (MulZeroClass.toHasZero.{u2} S (MulZeroOneClass.toMulZeroClass.{u2} S (MonoidWithZero.toMulZeroOneClass.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u2, u3} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11))))] (N : Submodule.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10), (Submodule.FG.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (algebraMap.{u1, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11 (Submodule.restrictScalars.{u1, u2, u3} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) (CommSemiring.toSemiring.{u1} R _inst_6) _inst_11 _inst_10 (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) _inst_12 N))
but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {M : Type.{u1}} [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u3, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u1} M] [_inst_10 : Module.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_11 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_12 : IsScalarTower.{u3, u2, u1} R S M (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} S M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u2, u1} S M (MonoidWithZero.toZero.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u2, u1} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11))))] (N : Submodule.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10), (Submodule.FG.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7))))) (algebraMap.{u3, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11 (Submodule.restrictScalars.{u3, u2, u1} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) (CommSemiring.toSemiring.{u3} R _inst_6) _inst_11 _inst_10 (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) _inst_12 N))
+ forall {R : Type.{u3}} {S : Type.{u2}} {M : Type.{u1}} [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u3, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u1} M] [_inst_10 : Module.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_11 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_12 : IsScalarTower.{u3, u2, u1} R S M (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} S M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u2, u1} S M (MonoidWithZero.toZero.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u2, u1} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11))))] (N : Submodule.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10), (Submodule.FG.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7))))) (algebraMap.{u3, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11 (Submodule.restrictScalars.{u3, u2, u1} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) (CommSemiring.toSemiring.{u3} R _inst_6) _inst_11 _inst_10 (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) _inst_12 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_restrict_scalars Submodule.fg_restrictScalarsₓ'. -/
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
@@ -688,7 +688,7 @@ theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG)
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {A : Type.{u3}} [_inst_4 : CommRing.{u1} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u3} A] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))), (Ideal.FG.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u3, max u2 u3} S A (RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) g)) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u3, max u1 u3} R A (RingHom.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (RingHom.comp.{u1, u2, u3} R S A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6))) g f)))
but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))), (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))))) f)) -> (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6))) g f)))
+ forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))), (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))))) f)) -> (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6))) g f)))
Case conversion may be inaccurate. Consider using '#align ideal.fg_ker_comp Ideal.fg_ker_compₓ'. -/
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
@@ -962,7 +962,7 @@ variable {A}
lean 3 declaration is
forall {A : Type.{u1}} {B : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] (f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))), (Function.Surjective.{succ u1, succ u2} A B (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) (fun (_x : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) => A -> B) (RingHom.hasCoeToFun.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) f)) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f)
but is expected to have type
- forall {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u2} A] [_inst_2 : CommRing.{u1} B] (f : RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonUnitalNonAssocSemiring.toMul.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))) (RingHom.instRingHomClassRingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))))) f)) -> (RingHom.Finite.{u2, u1} A B _inst_1 _inst_2 f)
+ forall {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u2} A] [_inst_2 : CommRing.{u1} B] (f : RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonUnitalNonAssocSemiring.toMul.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))) (RingHom.instRingHomClassRingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))))) f)) -> (RingHom.Finite.{u2, u1} A B _inst_1 _inst_2 f)
Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_surjective RingHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.to_algebra
mathlib commit https://github.com/leanprover-community/mathlib/commit/c89fe2d59ae06402c3f55f978016d1ada444f57e
@@ -309,7 +309,7 @@ variable (f : M →ₗ[R] P)
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N))
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N))
Case conversion may be inaccurate. Consider using '#align submodule.fg.map Submodule.FG.mapₓ'. -/
theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
let ⟨t, ht⟩ := fg_def.1 hs
@@ -322,7 +322,7 @@ variable {f}
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u3} M P (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) => M -> P) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (forall {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N)) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injectiveₓ'. -/
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
(hfn : (N.map f).FG) : N.FG :=
@@ -340,7 +340,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map Submodule.fg_of_fg_mapₓ'. -/
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).FG) : N.FG :=
@@ -404,7 +404,7 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_kerₓ'. -/
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
@@ -505,7 +505,7 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u3 u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u2 u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u3 u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u2 u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
@@ -794,7 +794,7 @@ theorem exists_fin [Finite R M] : ∃ (n : ℕ)(s : Fin n → M), span R (range
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5)
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
+ forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6191 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
Case conversion may be inaccurate. Consider using '#align module.finite.of_surjective Module.Finite.of_surjectiveₓ'. -/
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
@@ -802,28 +802,20 @@ theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f)
exact hM.1.map f⟩
#align module.finite.of_surjective Module.Finite.of_surjective
-/- warning: module.finite.range -> Module.Finite.range is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [_inst_6 : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (coeSort.{succ u3, succ (succ u3)} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f)) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f))
-but is expected to have type
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [_inst_6 : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (Subtype.{succ u3} N (fun (x : N) => Membership.mem.{u3, u3} N (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) (SetLike.instMembership.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) x (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f))) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f))
-Case conversion may be inaccurate. Consider using '#align module.finite.range Module.Finite.rangeₓ'. -/
+#print Module.Finite.range /-
/-- The range of a linear map from a finite module is finite. -/
instance range [Finite R M] (f : M →ₗ[R] N) : Finite R f.range :=
of_surjective f.range_restrict fun ⟨x, y, hy⟩ => ⟨y, Subtype.ext hy⟩
#align module.finite.range Module.Finite.range
+-/
-/- warning: module.finite.map -> Module.Finite.map is a dubious translation:
-lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] (p : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) [_inst_6 : Module.Finite.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) p) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 p) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 p)] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (coeSort.{succ u3, succ (succ u3)} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p)) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p))
-but is expected to have type
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] (p : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) [_inst_6 : Module.Finite.{u1, u2} R (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) x p)) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 p) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 p)] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (Subtype.{succ u3} N (fun (x : N) => Membership.mem.{u3, u3} N (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) (SetLike.instMembership.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) x (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p))) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p))
-Case conversion may be inaccurate. Consider using '#align module.finite.map Module.Finite.mapₓ'. -/
+#print Module.Finite.map /-
/-- Pushforwards of finite submodules are finite. -/
instance map (p : Submodule R M) [Finite R p] (f : M →ₗ[R] N) : Finite R (p.map f) :=
of_surjective (f.restrict fun _ => mem_map_of_mem) fun ⟨x, y, hy, hy'⟩ =>
⟨⟨_, hy⟩, Subtype.ext hy'⟩
#align module.finite.map Module.Finite.map
+-/
variable (R)
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -340,7 +340,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map Submodule.fg_of_fg_mapₓ'. -/
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).FG) : N.FG :=
@@ -404,7 +404,7 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u2 u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_kerₓ'. -/
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
@@ -505,7 +505,7 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u2 u3} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u1 u2} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (Submodule.instSLMC.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (Submodule.asFun.{u4, u3, u2} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 N _inst_9 _inst_10 f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u3 u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u2 u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -108,7 +108,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
but is expected to have type
forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.FG.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
@@ -175,7 +175,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
/- warning: submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul -> Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
but is expected to have type
forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.FG.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
@@ -199,7 +199,7 @@ theorem fg_bot : (⊥ : Submodule R M).FG :=
/- warning: subalgebra.fg_bot_to_submodule -> Subalgebra.fg_bot_toSubmodule is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toHasLe.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toHasLe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
but is expected to have type
forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
@@ -702,7 +702,12 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars g.ker hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
-#print Ideal.exists_radical_pow_le_of_fg /-
+/- warning: ideal.exists_radical_pow_le_of_fg -> Ideal.exists_radical_pow_le_of_fg is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_4 : CommSemiring.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)), (Ideal.FG.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4) (Ideal.radical.{u1} R _inst_4 I)) -> (Exists.{1} Nat (fun (n : Nat) => LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Preorder.toHasLe.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4))))))) (HPow.hPow.{u1, 0, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (instHPow.{u1, 0} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Monoid.Pow.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (MonoidWithZero.toMonoid.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Semiring.toMonoidWithZero.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (IdemSemiring.toSemiring.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.idemSemiring.{u1, u1} R _inst_4 R (CommSemiring.toSemiring.{u1} R _inst_4) (Algebra.id.{u1} R _inst_4))))))) (Ideal.radical.{u1} R _inst_4 I) n) I))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_4 : CommSemiring.{u1} R] (I : Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)), (Ideal.FG.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4) (Ideal.radical.{u1} R _inst_4 I)) -> (Exists.{1} Nat (fun (n : Nat) => LE.le.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Preorder.toLE.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (PartialOrder.toPreorder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.completeLattice.{u1, u1} R R (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)))) (Semiring.toModule.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4))))))) (HPow.hPow.{u1, 0, u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (instHPow.{u1, 0} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) Nat (Monoid.Pow.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (MonoidWithZero.toMonoid.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Semiring.toMonoidWithZero.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (IdemSemiring.toSemiring.{u1} (Ideal.{u1} R (CommSemiring.toSemiring.{u1} R _inst_4)) (Submodule.idemSemiring.{u1, u1} R _inst_4 R (CommSemiring.toSemiring.{u1} R _inst_4) (Algebra.id.{u1} R _inst_4))))))) (Ideal.radical.{u1} R _inst_4 I) n) I))
+Case conversion may be inaccurate. Consider using '#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fgₓ'. -/
theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
@@ -722,7 +727,6 @@ theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R)
rw [add_comm, Nat.add_sub_assoc h.le]
apply Nat.le_add_right
#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fg
--/
end Ideal
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -48,20 +48,20 @@ variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
open Set
-#print Submodule.Fg /-
+#print Submodule.FG /-
/-- A submodule of `M` is finitely generated if it is the span of a finite subset of `M`. -/
-def Fg (N : Submodule R M) : Prop :=
+def FG (N : Submodule R M) : Prop :=
∃ S : Finset M, Submodule.span R ↑S = N
-#align submodule.fg Submodule.Fg
+#align submodule.fg Submodule.FG
-/
/- warning: submodule.fg_def -> Submodule.fg_def is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u2} (Set.{u2} M) (fun (S : Set.{u2} M) => And (Set.Finite.{u2} M S) (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 S) N)))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u2} (Set.{u2} M) (fun (S : Set.{u2} M) => And (Set.Finite.{u2} M S) (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 S) N)))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 S) N)))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 S) N)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_def Submodule.fg_defₓ'. -/
-theorem fg_def {N : Submodule R M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
+theorem fg_def {N : Submodule R M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
by
rintro ⟨t', h, rfl⟩
@@ -70,7 +70,7 @@ theorem fg_def {N : Submodule R M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ span R
#align submodule.fg_def Submodule.fg_def
#print Submodule.fg_iff_addSubmonoid_fg /-
-theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.Fg ↔ P.toAddSubmonoid.Fg :=
+theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.FG ↔ P.toAddSubmonoid.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_nat_eq_add_submonoid_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_nat_eq_add_submonoid_closure] using hS⟩⟩
#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_addSubmonoid_fg
@@ -78,24 +78,24 @@ theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.Fg ↔ P.toAddSubmonoid
/- warning: submodule.fg_iff_add_subgroup_fg -> Submodule.fg_iff_add_subgroup_fg is a dubious translation:
lean 3 declaration is
- forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.Fg.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.ring _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
+ forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.FG.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.ring _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
but is expected to have type
- forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.Fg.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.instRingInt _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
+ forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.FG.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.instRingInt _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fgₓ'. -/
theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ G) :
- P.Fg ↔ P.toAddSubgroup.Fg :=
+ P.FG ↔ P.toAddSubgroup.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩⟩
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
/- warning: submodule.fg_iff_exists_fin_generating_family -> Submodule.fg_iff_exists_fin_generating_family is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u2} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Set.range.{u2, 1} M (Fin n) s)) N)))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u2} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Set.range.{u2, 1} M (Fin n) s)) N)))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Set.range.{u1, 1} M (Fin n) s)) N)))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Set.range.{u1, 1} M (Fin n) s)) N)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_familyₓ'. -/
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
- N.Fg ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N :=
+ N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N :=
by
rw [fg_def]
constructor
@@ -108,14 +108,14 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.FG.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
- [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
+ [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) :=
by
rw [fg_def] at hn
@@ -175,12 +175,12 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
/- warning: submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul -> Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.FG.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
- [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
+ [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r ∈ I, ∀ n ∈ N, r • n = n :=
by
obtain ⟨r, hr, hr'⟩ := N.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul I hn hin
@@ -189,33 +189,33 @@ theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {
/- warning: submodule.fg_bot -> Submodule.fg_bot is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2], Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasBot.{u1, u2} R M _inst_1 _inst_2 _inst_3))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2], Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasBot.{u1, u2} R M _inst_1 _inst_2 _inst_3))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2], Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.instBotSubmodule.{u2, u1} R M _inst_1 _inst_2 _inst_3))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2], Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.instBotSubmodule.{u2, u1} R M _inst_1 _inst_2 _inst_3))
Case conversion may be inaccurate. Consider using '#align submodule.fg_bot Submodule.fg_botₓ'. -/
-theorem fg_bot : (⊥ : Submodule R M).Fg :=
+theorem fg_bot : (⊥ : Submodule R M).FG :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
/- warning: subalgebra.fg_bot_to_submodule -> Subalgebra.fg_bot_toSubmodule is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
- (⊥ : Subalgebra R A).toSubmodule.Fg :=
+ (⊥ : Subalgebra R A).toSubmodule.FG :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
/- warning: submodule.fg_unit -> Submodule.fg_unit is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] (I : Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))), Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (coeBase.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Units.hasCoe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))))))) I)
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] (I : Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))), Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (coeBase.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Units.hasCoe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))))))) I)
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] (I : Units.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6))))), Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Units.val.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I)
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] (I : Units.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6))))), Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Units.val.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I)
Case conversion may be inaccurate. Consider using '#align submodule.fg_unit Submodule.fg_unitₓ'. -/
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
- (I : Submodule R A).Fg :=
+ (I : Submodule R A).FG :=
by
have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) :=
by
@@ -231,71 +231,71 @@ theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I :
/- warning: submodule.fg_of_is_unit -> Submodule.fg_of_isUnit is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] {I : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) I)
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] {I : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) I)
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] {I : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) I)
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] {I : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) I)
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_is_unit Submodule.fg_of_isUnitₓ'. -/
theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
- (hI : IsUnit I) : I.Fg :=
+ (hI : IsUnit I) : I.FG :=
fg_unit hI.Unit
#align submodule.fg_of_is_unit Submodule.fg_of_isUnit
#print Submodule.fg_span /-
-theorem fg_span {s : Set M} (hs : s.Finite) : Fg (span R s) :=
+theorem fg_span {s : Set M} (hs : s.Finite) : FG (span R s) :=
⟨hs.toFinset, by rw [hs.coe_to_finset]⟩
#align submodule.fg_span Submodule.fg_span
-/
/- warning: submodule.fg_span_singleton -> Submodule.fg_span_singleton is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (x : M), Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (x : M), Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (x : M), Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (x : M), Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
Case conversion may be inaccurate. Consider using '#align submodule.fg_span_singleton Submodule.fg_span_singletonₓ'. -/
-theorem fg_span_singleton (x : M) : Fg (R ∙ x) :=
+theorem fg_span_singleton (x : M) : FG (R ∙ x) :=
fg_span (finite_singleton x)
#align submodule.fg_span_singleton Submodule.fg_span_singleton
-/- warning: submodule.fg.sup -> Submodule.Fg.sup is a dubious translation:
+/- warning: submodule.fg.sup -> Submodule.FG.sup is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N₁ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N₁ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N₁ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.sup Submodule.Fg.supₓ'. -/
-theorem Fg.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.Fg) (hN₂ : N₂.Fg) : (N₁ ⊔ N₂).Fg :=
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N₁ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.sup Submodule.FG.supₓ'. -/
+theorem FG.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [span_union, ht₁.2, ht₂.2]⟩
-#align submodule.fg.sup Submodule.Fg.sup
+#align submodule.fg.sup Submodule.FG.sup
/- warning: submodule.fg_finset_sup -> Submodule.fg_finset_sup is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u2, u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3)))) (Submodule.orderBot.{u1, u2} R M _inst_1 _inst_2 _inst_3) s N))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u2, u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3)))) (Submodule.orderBot.{u1, u2} R M _inst_1 _inst_2 _inst_3) s N))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u1, u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) (Submodule.instOrderBotSubmoduleToLEToPreorderInstPartialOrderSetLike.{u2, u1} R M _inst_1 _inst_2 _inst_3) s N))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u1, u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) (Submodule.instOrderBotSubmoduleToLEToPreorderInstPartialOrderSetLike.{u2, u1} R M _inst_1 _inst_2 _inst_3) s N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_finset_sup Submodule.fg_finset_supₓ'. -/
-theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
- (s.sup N).Fg :=
+theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
+ (s.sup N).FG :=
Finset.sup_induction fg_bot (fun a ha b hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
/- warning: submodule.fg_bsupr -> Submodule.fg_biSup is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_biSupₓ'. -/
-theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
- (⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
+theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
+ (⨆ i ∈ s, N i).FG := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_biSup
/- warning: submodule.fg_supr -> Submodule.fg_iSup is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι N))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι N))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_supr Submodule.fg_iSupₓ'. -/
-theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) : (iSup N).Fg :=
+theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) : (iSup N).FG :=
by
cases nonempty_fintype ι
simpa using fg_bsupr Finset.univ N fun i hi => h i
@@ -305,27 +305,27 @@ variable {P : Type _} [AddCommMonoid P] [Module R P]
variable (f : M →ₗ[R] P)
-/- warning: submodule.fg.map -> Submodule.Fg.map is a dubious translation:
+/- warning: submodule.fg.map -> Submodule.FG.map is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.map Submodule.Fg.mapₓ'. -/
-theorem Fg.map {N : Submodule R M} (hs : N.Fg) : (N.map f).Fg :=
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.map Submodule.FG.mapₓ'. -/
+theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
let ⟨t, ht⟩ := fg_def.1 hs
fg_def.2 ⟨f '' t, ht.1.image _, by rw [span_image, ht.2]⟩
-#align submodule.fg.map Submodule.Fg.map
+#align submodule.fg.map Submodule.FG.map
variable {f}
/- warning: submodule.fg_of_fg_map_injective -> Submodule.fg_of_fg_map_injective is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u3} M P (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) => M -> P) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (forall {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N)) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u3} M P (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) => M -> P) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (forall {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N)) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injectiveₓ'. -/
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
- (hfn : (N.map f).Fg) : N.Fg :=
+ (hfn : (N.map f).FG) : N.FG :=
let ⟨t, ht⟩ := hfn
⟨t.Preimage f fun x _ y _ h => hf h,
Submodule.map_injective_of_injective hf <|
@@ -338,60 +338,60 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
/- warning: submodule.fg_of_fg_map -> Submodule.fg_of_fg_map is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+ forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map Submodule.fg_of_fg_mapₓ'. -/
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
- [Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).Fg) : N.Fg :=
+ [Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).FG) : N.FG :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
#align submodule.fg_of_fg_map Submodule.fg_of_fg_map
/- warning: submodule.fg_top -> Submodule.fg_top is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u2} (Submodule.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.hasTop.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u2} (Submodule.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.hasTop.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u1} (Submodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.instTopSubmodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u1} (Submodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.instTopSubmodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)
Case conversion may be inaccurate. Consider using '#align submodule.fg_top Submodule.fg_topₓ'. -/
-theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).Fg ↔ N.Fg :=
+theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).FG ↔ N.FG :=
⟨fun h => N.range_subtype ▸ map_top N.Subtype ▸ h.map _, fun h =>
fg_of_fg_map_injective N.Subtype Subtype.val_injective <| by rwa [map_top, range_subtype]⟩
#align submodule.fg_top Submodule.fg_top
/- warning: submodule.fg_of_linear_equiv -> Submodule.fg_of_linearEquiv is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4], (LinearEquiv.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomInvPair.ids.{u1} R _inst_1) (RingHomInvPair.ids.{u1} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Top.top.{u3} (Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5) (Submodule.hasTop.{u1, u3} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasTop.{u1, u2} R M _inst_1 _inst_2 _inst_3)))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4], (LinearEquiv.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomInvPair.ids.{u1} R _inst_1) (RingHomInvPair.ids.{u1} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Top.top.{u3} (Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5) (Submodule.hasTop.{u1, u3} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasTop.{u1, u2} R M _inst_1 _inst_2 _inst_3)))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4], (LinearEquiv.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomInvPair.ids.{u3} R _inst_1) (RingHomInvPair.ids.{u3} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Top.top.{u1} (Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5) (Submodule.instTopSubmodule.{u3, u1} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.instTopSubmodule.{u3, u2} R M _inst_1 _inst_2 _inst_3)))
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4], (LinearEquiv.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomInvPair.ids.{u3} R _inst_1) (RingHomInvPair.ids.{u3} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Top.top.{u1} (Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5) (Submodule.instTopSubmodule.{u3, u1} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.instTopSubmodule.{u3, u2} R M _inst_1 _inst_2 _inst_3)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquivₓ'. -/
-theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).Fg) : (⊤ : Submodule R M).Fg :=
+theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).FG) : (⊤ : Submodule R M).FG :=
e.symm.range ▸ map_top (e.symm : P →ₗ[R] M) ▸ h.map _
#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquiv
-/- warning: submodule.fg.prod -> Submodule.Fg.prod is a dubious translation:
+/- warning: submodule.fg.prod -> Submodule.FG.prod is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] {sb : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.Fg.{u1, max u2 u3} R (Prod.{u2, u3} M P) _inst_1 (Prod.addCommMonoid.{u2, u3} M P _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u1, u2, u3} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] {sb : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.FG.{u1, u3} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.FG.{u1, max u2 u3} R (Prod.{u2, u3} M P) _inst_1 (Prod.addCommMonoid.{u2, u3} M P _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u1, u2, u3} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] {sb : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5}, (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.Fg.{u3, max u2 u1} R (Prod.{u2, u1} M P) _inst_1 (Prod.instAddCommMonoidSum.{u2, u1} M P _inst_2 _inst_4) (Prod.module.{u3, u2, u1} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u3, u2, u1} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.prod Submodule.Fg.prodₓ'. -/
-theorem Fg.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.Fg) (hsc : sc.Fg) :
- (sb.Prod sc).Fg :=
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] {sb : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5}, (Submodule.FG.{u3, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.FG.{u3, u1} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.FG.{u3, max u2 u1} R (Prod.{u2, u1} M P) _inst_1 (Prod.instAddCommMonoidSum.{u2, u1} M P _inst_2 _inst_4) (Prod.module.{u3, u2, u1} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u3, u2, u1} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.prod Submodule.FG.prodₓ'. -/
+theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : sc.FG) :
+ (sb.Prod sc).FG :=
let ⟨tb, htb⟩ := fg_def.1 hsb
let ⟨tc, htc⟩ := fg_def.1 hsc
fg_def.2
⟨LinearMap.inl R M P '' tb ∪ LinearMap.inr R M P '' tc, (htb.1.image _).union (htc.1.image _),
by rw [LinearMap.span_inl_union_inr, htb.2, htc.2]⟩
-#align submodule.fg.prod Submodule.Fg.prod
+#align submodule.fg.prod Submodule.FG.prod
/- warning: submodule.fg_pi -> Submodule.fg_pi is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u2}} {M : ι -> Type.{u3}} [_inst_6 : Finite.{succ u2} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u3} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u3} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.Fg.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.Fg.{u1, max u2 u3} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u2, u3} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u2} ι) p))
+ forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u2}} {M : ι -> Type.{u3}} [_inst_6 : Finite.{succ u2} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u3} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u3} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.FG.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.FG.{u1, max u2 u3} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u2, u3} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u2} ι) p))
but is expected to have type
- forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u3}} {M : ι -> Type.{u2}} [_inst_6 : Finite.{succ u3} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u2} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u2} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.Fg.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.Fg.{u1, max u3 u2} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u3, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u3, u2, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u3, u2} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u3} ι) p))
+ forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u3}} {M : ι -> Type.{u2}} [_inst_6 : Finite.{succ u3} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u2} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u2} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.FG.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.FG.{u1, max u3 u2} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u3, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u3, u2, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u3, u2} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u3} ι) p))
Case conversion may be inaccurate. Consider using '#align submodule.fg_pi Submodule.fg_piₓ'. -/
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
- [∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).Fg) :
- (Submodule.pi Set.univ p).Fg := by
+ [∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
+ (Submodule.pi Set.univ p).FG := by
classical
simp_rw [fg_def] at hsb⊢
choose t htf hts using hsb
@@ -402,15 +402,15 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
/- warning: submodule.fg_of_fg_map_of_fg_inf_ker -> Submodule.fg_of_fg_map_of_fg_inf_ker is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+ forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.FG.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.FG.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_kerₓ'. -/
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
- [AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M} (hs1 : (s.map f).Fg)
- (hs2 : (s ⊓ f.ker).Fg) : s.Fg :=
+ [AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M} (hs1 : (s.map f).FG)
+ (hs2 : (s ⊓ f.ker).FG) : s.FG :=
by
haveI := Classical.decEq R
haveI := Classical.decEq M
@@ -485,13 +485,13 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
/- warning: submodule.fg_induction -> Submodule.fg_induction is a dubious translation:
lean 3 declaration is
- forall (R : Type.{u1}) (M : Type.{u2}) [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7] (P : (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))) -> (forall (M₁ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u1, u2} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (Submodule.Fg.{u1, u2} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
+ forall (R : Type.{u1}) (M : Type.{u2}) [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7] (P : (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))) -> (forall (M₁ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u1, u2} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (Submodule.FG.{u1, u2} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
but is expected to have type
- forall (R : Type.{u2}) (M : Type.{u1}) [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7] (P : (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))) -> (forall (M₁ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u2, u1} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (Submodule.Fg.{u2, u1} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
+ forall (R : Type.{u2}) (M : Type.{u1}) [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7] (P : (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))) -> (forall (M₁ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u2, u1} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (Submodule.FG.{u2, u1} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_induction Submodule.fg_inductionₓ'. -/
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
- (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.Fg) : P N := by
+ (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
classical
obtain ⟨s, rfl⟩ := hN
induction s using Finset.induction
@@ -503,15 +503,15 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
/- warning: submodule.fg_ker_comp -> Submodule.fg_ker_comp is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.Fg.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.FG.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u2 u3} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.Fg.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u1 u2} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (Submodule.instSLMC.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (Submodule.asFun.{u4, u3, u2} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 N _inst_9 _inst_10 f)) -> (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u2 u3} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.FG.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u1 u2} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (Submodule.instSLMC.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (Submodule.asFun.{u4, u3, u2} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 N _inst_9 _inst_10 f)) -> (Submodule.FG.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
- [Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P) (hf1 : f.ker.Fg)
- (hf2 : g.ker.Fg) (hsur : Function.Surjective f) : (g.comp f).ker.Fg :=
+ [Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P) (hf1 : f.ker.FG)
+ (hf2 : g.ker.FG) (hsur : Function.Surjective f) : (g.comp f).ker.FG :=
by
rw [LinearMap.ker_comp]
apply fg_of_fg_map_of_fg_inf_ker f
@@ -521,26 +521,26 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
/- warning: submodule.fg_restrict_scalars -> Submodule.fg_restrictScalars is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u1, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u3} M] [_inst_10 : Module.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_11 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_12 : IsScalarTower.{u1, u2, u3} R S M (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} S M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u2, u3} S M (MulZeroClass.toHasZero.{u2} S (MulZeroOneClass.toMulZeroClass.{u2} S (MonoidWithZero.toMulZeroOneClass.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u2, u3} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11))))] (N : Submodule.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10), (Submodule.Fg.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (algebraMap.{u1, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.Fg.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11 (Submodule.restrictScalars.{u1, u2, u3} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) (CommSemiring.toSemiring.{u1} R _inst_6) _inst_11 _inst_10 (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) _inst_12 N))
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u1, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u3} M] [_inst_10 : Module.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_11 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_12 : IsScalarTower.{u1, u2, u3} R S M (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} S M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u2, u3} S M (MulZeroClass.toHasZero.{u2} S (MulZeroOneClass.toMulZeroClass.{u2} S (MonoidWithZero.toMulZeroOneClass.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u2, u3} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11))))] (N : Submodule.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10), (Submodule.FG.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (algebraMap.{u1, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11 (Submodule.restrictScalars.{u1, u2, u3} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) (CommSemiring.toSemiring.{u1} R _inst_6) _inst_11 _inst_10 (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) _inst_12 N))
but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {M : Type.{u1}} [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u3, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u1} M] [_inst_10 : Module.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_11 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_12 : IsScalarTower.{u3, u2, u1} R S M (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} S M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u2, u1} S M (MonoidWithZero.toZero.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u2, u1} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11))))] (N : Submodule.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10), (Submodule.Fg.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7))))) (algebraMap.{u3, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.Fg.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11 (Submodule.restrictScalars.{u3, u2, u1} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) (CommSemiring.toSemiring.{u3} R _inst_6) _inst_11 _inst_10 (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) _inst_12 N))
+ forall {R : Type.{u3}} {S : Type.{u2}} {M : Type.{u1}} [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u3, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u1} M] [_inst_10 : Module.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_11 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_12 : IsScalarTower.{u3, u2, u1} R S M (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} S M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u2, u1} S M (MonoidWithZero.toZero.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u2, u1} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11))))] (N : Submodule.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10), (Submodule.FG.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7))))) (algebraMap.{u3, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.FG.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11 (Submodule.restrictScalars.{u3, u2, u1} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) (CommSemiring.toSemiring.{u3} R _inst_6) _inst_11 _inst_10 (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) _inst_12 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_restrict_scalars Submodule.fg_restrictScalarsₓ'. -/
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
- (hfin : N.Fg) (h : Function.Surjective (algebraMap R S)) : (Submodule.restrictScalars R N).Fg :=
+ (hfin : N.FG) (h : Function.Surjective (algebraMap R S)) : (Submodule.restrictScalars R N).FG :=
by
obtain ⟨X, rfl⟩ := hfin
use X
exact (Submodule.restrictScalars_span R S h ↑X).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-/- warning: submodule.fg.stablizes_of_supr_eq -> Submodule.Fg.stablizes_of_iSup_eq is a dubious translation:
+/- warning: submodule.fg.stablizes_of_supr_eq -> Submodule.FG.stablizes_of_iSup_eq is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {M' : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (iSup.{u2, 1} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) Nat (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M' (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N n))))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {M' : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (iSup.{u2, 1} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) Nat (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M' (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N n))))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {M' : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (iSup.{u1, 1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) Nat (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M' (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N n))))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_iSup_eqₓ'. -/
-theorem Fg.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {M' : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (iSup.{u1, 1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) Nat (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M' (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N n))))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eqₓ'. -/
+theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
(H : iSup N = M') : ∃ n, M' = N n :=
by
obtain ⟨S, hS⟩ := hM'
@@ -558,16 +558,16 @@ theorem Fg.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]
exact le_iSup _ _
-#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_iSup_eq
+#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
/- warning: submodule.fg_iff_compact -> Submodule.fg_iff_compact is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (s : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3) s)
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (s : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u1, u2} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3) s)
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (s : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3) s)
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (s : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.FG.{u2, u1} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3) s)
Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_compact Submodule.fg_iff_compactₓ'. -/
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
-theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactElement s := by
+theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
-- Introduce shorthand for span of an element
let sp : M → Submodule R M := fun a => span R {a}
@@ -607,20 +607,20 @@ variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
variable [Module R M] [Module R N] [Module R P]
-/- warning: submodule.fg.map₂ -> Submodule.Fg.map₂ is a dubious translation:
+/- warning: submodule.fg.map₂ -> Submodule.FG.map₂ is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : AddCommMonoid.{u3} N] [_inst_4 : AddCommMonoid.{u4} P] [_inst_5 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_6 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_7 : Module.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] (f : LinearMap.{u1, u1, u2, max u3 u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) M (LinearMap.{u1, u1, u3, u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u1, u1, u3, u4} R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) _inst_5 (LinearMap.module.{u1, u1, u1, u3, u4} R R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_7 (smulCommClass_self.{u1, u4} R P (CommSemiring.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u4} R P (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (AddZeroClass.toHasZero.{u4} P (AddMonoid.toAddZeroClass.{u4} P (AddCommMonoid.toAddMonoid.{u4} P _inst_4))) (Module.toMulActionWithZero.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6}, (Submodule.Fg.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.Fg.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.Fg.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u1, u2, u3, u4} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : AddCommMonoid.{u3} N] [_inst_4 : AddCommMonoid.{u4} P] [_inst_5 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_6 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_7 : Module.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] (f : LinearMap.{u1, u1, u2, max u3 u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) M (LinearMap.{u1, u1, u3, u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u1, u1, u3, u4} R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) _inst_5 (LinearMap.module.{u1, u1, u1, u3, u4} R R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_7 (smulCommClass_self.{u1, u4} R P (CommSemiring.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u4} R P (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (AddZeroClass.toHasZero.{u4} P (AddMonoid.toAddZeroClass.{u4} P (AddCommMonoid.toAddMonoid.{u4} P _inst_4))) (Module.toMulActionWithZero.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6}, (Submodule.FG.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.FG.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.FG.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u1, u2, u3, u4} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u1}} {P : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M] [_inst_3 : AddCommMonoid.{u1} N] [_inst_4 : AddCommMonoid.{u2} P] [_inst_5 : Module.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_6 : Module.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_7 : Module.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4] (f : LinearMap.{u4, u4, u3, max u2 u1} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) M (LinearMap.{u4, u4, u1, u2} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u4, u4, u1, u2} R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)))) _inst_5 (LinearMap.instModuleLinearMapAddCommMonoid.{u4, u4, u4, u1, u2} R R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_7 (smulCommClass_self.{u4, u2} R P (CommSemiring.toCommMonoid.{u4} R _inst_1) (MulActionWithZero.toMulAction.{u4, u2} R P (Semiring.toMonoidWithZero.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)) (AddMonoid.toZero.{u2} P (AddCommMonoid.toAddMonoid.{u2} P _inst_4)) (Module.toMulActionWithZero.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6}, (Submodule.Fg.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.Fg.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.Fg.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u4, u3, u1, u2} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.map₂ Submodule.Fg.map₂ₓ'. -/
-theorem Fg.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.Fg)
- (hq : q.Fg) : (map₂ f p q).Fg :=
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u1}} {P : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M] [_inst_3 : AddCommMonoid.{u1} N] [_inst_4 : AddCommMonoid.{u2} P] [_inst_5 : Module.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_6 : Module.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_7 : Module.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4] (f : LinearMap.{u4, u4, u3, max u2 u1} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) M (LinearMap.{u4, u4, u1, u2} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u4, u4, u1, u2} R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)))) _inst_5 (LinearMap.instModuleLinearMapAddCommMonoid.{u4, u4, u4, u1, u2} R R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_7 (smulCommClass_self.{u4, u2} R P (CommSemiring.toCommMonoid.{u4} R _inst_1) (MulActionWithZero.toMulAction.{u4, u2} R P (Semiring.toMonoidWithZero.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)) (AddMonoid.toZero.{u2} P (AddCommMonoid.toAddMonoid.{u2} P _inst_4)) (Module.toMulActionWithZero.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6}, (Submodule.FG.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.FG.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.FG.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u4, u3, u1, u2} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.map₂ Submodule.FG.map₂ₓ'. -/
+theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.FG)
+ (hq : q.FG) : (map₂ f p q).FG :=
let ⟨sm, hfm, hm⟩ := fg_def.1 hp
let ⟨sn, hfn, hn⟩ := fg_def.1 hq
fg_def.2
⟨Set.image2 (fun m n => f m n) sm sn, hfm.image2 _ hfn,
map₂_span_span R f sm sn ▸ hm ▸ hn ▸ rfl⟩
-#align submodule.fg.map₂ Submodule.Fg.map₂
+#align submodule.fg.map₂ Submodule.FG.map₂
end Map₂
@@ -630,25 +630,25 @@ variable {R : Type _} {A : Type _} [CommSemiring R] [Semiring A] [Algebra R A]
variable {M N : Submodule R A}
-/- warning: submodule.fg.mul -> Submodule.Fg.mul is a dubious translation:
+/- warning: submodule.fg.mul -> Submodule.FG.mul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u2, u2, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u1, u2} R _inst_1 A _inst_2 _inst_3)) M N))
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u2, u2, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u1, u2} R _inst_1 A _inst_2 _inst_3)) M N))
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u2, u1} R _inst_1 A _inst_2 _inst_3)) M N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.mul Submodule.Fg.mulₓ'. -/
-theorem Fg.mul (hm : M.Fg) (hn : N.Fg) : (M * N).Fg :=
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u2, u1} R _inst_1 A _inst_2 _inst_3)) M N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.mul Submodule.FG.mulₓ'. -/
+theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
hm.zipWith _ hn
-#align submodule.fg.mul Submodule.Fg.mul
+#align submodule.fg.mul Submodule.FG.mul
-/- warning: submodule.fg.pow -> Submodule.Fg.pow is a dubious translation:
+/- warning: submodule.fg.pow -> Submodule.FG.pow is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u2, 0, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u2, 0} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u1, u2} R _inst_1 A _inst_2 _inst_3)))))) M n))
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.FG.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u2, 0, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u2, 0} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u1, u2} R _inst_1 A _inst_2 _inst_3)))))) M n))
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u1, 0, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u1, 0} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u2, u1} R _inst_1 A _inst_2 _inst_3)))))) M n))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.pow Submodule.Fg.powₓ'. -/
-theorem Fg.pow (h : M.Fg) (n : ℕ) : (M ^ n).Fg :=
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.FG.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u1, 0, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u1, 0} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u2, u1} R _inst_1 A _inst_2 _inst_3)))))) M n))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.pow Submodule.FG.powₓ'. -/
+theorem FG.pow (h : M.FG) (n : ℕ) : (M ^ n).FG :=
Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
-#align submodule.fg.pow Submodule.Fg.pow
+#align submodule.fg.pow Submodule.FG.pow
end Mul
@@ -658,41 +658,41 @@ namespace Ideal
variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
-#print Ideal.Fg /-
+#print Ideal.FG /-
/-- An ideal of `R` is finitely generated if it is the span of a finite subset of `R`.
This is defeq to `submodule.fg`, but unfolds more nicely. -/
-def Fg (I : Ideal R) : Prop :=
+def FG (I : Ideal R) : Prop :=
∃ S : Finset R, Ideal.span ↑S = I
-#align ideal.fg Ideal.Fg
+#align ideal.fg Ideal.FG
-/
-/- warning: ideal.fg.map -> Ideal.Fg.map is a dubious translation:
+/- warning: ideal.fg.map -> Ideal.FG.map is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} [_inst_4 : Semiring.{u1} R] [_inst_5 : Semiring.{u2} S] {I : Ideal.{u1} R _inst_4}, (Ideal.Fg.{u1} R _inst_4 I) -> (forall (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)), Ideal.Fg.{u2} S _inst_5 (Ideal.map.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) _inst_4 _inst_5 (RingHom.ringHomClass.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) f I))
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_4 : Semiring.{u1} R] [_inst_5 : Semiring.{u2} S] {I : Ideal.{u1} R _inst_4}, (Ideal.FG.{u1} R _inst_4 I) -> (forall (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)), Ideal.FG.{u2} S _inst_5 (Ideal.map.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) _inst_4 _inst_5 (RingHom.ringHomClass.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) f I))
but is expected to have type
- forall {R : Type.{u2}} {S : Type.{u1}} [_inst_4 : Semiring.{u2} R] [_inst_5 : Semiring.{u1} S] {I : Ideal.{u2} R _inst_4}, (Ideal.Fg.{u2} R _inst_4 I) -> (forall (f : RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)), Ideal.Fg.{u1} S _inst_5 (Ideal.map.{u2, u1, max u2 u1} R S (RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) _inst_4 _inst_5 (RingHom.instRingHomClassRingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) f I))
-Case conversion may be inaccurate. Consider using '#align ideal.fg.map Ideal.Fg.mapₓ'. -/
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_4 : Semiring.{u2} R] [_inst_5 : Semiring.{u1} S] {I : Ideal.{u2} R _inst_4}, (Ideal.FG.{u2} R _inst_4 I) -> (forall (f : RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)), Ideal.FG.{u1} S _inst_5 (Ideal.map.{u2, u1, max u2 u1} R S (RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) _inst_4 _inst_5 (RingHom.instRingHomClassRingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) f I))
+Case conversion may be inaccurate. Consider using '#align ideal.fg.map Ideal.FG.mapₓ'. -/
/-- The image of a finitely generated ideal is finitely generated.
This is the `ideal` version of `submodule.fg.map`. -/
-theorem Fg.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.Fg) (f : R →+* S) :
- (I.map f).Fg := by
+theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
+ (I.map f).FG := by
classical
obtain ⟨s, hs⟩ := h
refine' ⟨s.image f, _⟩
rw [Finset.coe_image, ← Ideal.map_span, hs]
-#align ideal.fg.map Ideal.Fg.map
+#align ideal.fg.map Ideal.FG.map
/- warning: ideal.fg_ker_comp -> Ideal.fg_ker_comp is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {S : Type.{u2}} {A : Type.{u3}} [_inst_4 : CommRing.{u1} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u3} A] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))), (Ideal.Fg.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u3, max u2 u3} S A (RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) g)) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u3, max u1 u3} R A (RingHom.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (RingHom.comp.{u1, u2, u3} R S A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6))) g f)))
+ forall {R : Type.{u1}} {S : Type.{u2}} {A : Type.{u3}} [_inst_4 : CommRing.{u1} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u3} A] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))), (Ideal.FG.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u3, max u2 u3} S A (RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) g)) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u3, max u1 u3} R A (RingHom.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (RingHom.comp.{u1, u2, u3} R S A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6))) g f)))
but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))), (Ideal.Fg.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))))) f)) -> (Ideal.Fg.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6))) g f)))
+ forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))), (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) f)) -> (Ideal.FG.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))))) f)) -> (Ideal.FG.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6))) g f)))
Case conversion may be inaccurate. Consider using '#align ideal.fg_ker_comp Ideal.fg_ker_compₓ'. -/
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
- (g : S →+* A) (hf : f.ker.Fg) (hg : g.ker.Fg) (hsur : Function.Surjective f) :
- (g.comp f).ker.Fg := by
+ (g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
+ (g.comp f).ker.FG := by
letI : Algebra R S := RingHom.toAlgebra f
letI : Algebra R A := RingHom.toAlgebra (g.comp f)
letI : Algebra S A := RingHom.toAlgebra g
@@ -703,7 +703,7 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
#align ideal.fg_ker_comp Ideal.fg_ker_comp
#print Ideal.exists_radical_pow_le_of_fg /-
-theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.Fg) :
+theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
refine' Submodule.fg_induction _ _ (fun J => J ≤ I.radical → ∃ n : ℕ, J ^ n ≤ I) _ _ _ h
@@ -733,7 +733,7 @@ variable (R A B M N : Type _)
#print Module.Finite /-
/-- A module over a semiring is `finite` if it is finitely generated as a module. -/
class Module.Finite [Semiring R] [AddCommMonoid M] [Module R M] : Prop where
- out : (⊤ : Submodule R M).Fg
+ out : (⊤ : Submodule R M).FG
#align module.finite Module.Finite
-/
@@ -743,12 +743,12 @@ variable [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid N] [Module R
/- warning: module.finite_def -> Module.finite_def is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7], Iff (Module.Finite.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.Fg.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.hasTop.{u1, u2} R M _inst_6 _inst_7 _inst_8)))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7], Iff (Module.Finite.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.FG.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.hasTop.{u1, u2} R M _inst_6 _inst_7 _inst_8)))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7], Iff (Module.Finite.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.Fg.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Top.top.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.instTopSubmodule.{u2, u1} R M _inst_6 _inst_7 _inst_8)))
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7], Iff (Module.Finite.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.FG.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Top.top.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.instTopSubmodule.{u2, u1} R M _inst_6 _inst_7 _inst_8)))
Case conversion may be inaccurate. Consider using '#align module.finite_def Module.finite_defₓ'. -/
theorem finite_def {R M} [Semiring R] [AddCommMonoid M] [Module R M] :
- Finite R M ↔ (⊤ : Submodule R M).Fg :=
+ Finite R M ↔ (⊤ : Submodule R M).FG :=
⟨fun h => h.1, fun h => ⟨h⟩⟩
#align module.finite_def Module.finite_def
@@ -757,7 +757,7 @@ namespace Finite
open _Root_.Submodule Set
#print Module.Finite.iff_addMonoid_fg /-
-theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.Fg M :=
+theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.FG M :=
⟨fun h => AddMonoid.fg_def.2 <| (fg_iff_addSubmonoid_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (fg_iff_addSubmonoid_fg ⊤).2 (AddMonoid.fg_def.1 h)⟩
#align module.finite.iff_add_monoid_fg Module.Finite.iff_addMonoid_fg
@@ -765,11 +765,11 @@ theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M
/- warning: module.finite.iff_add_group_fg -> Module.Finite.iff_addGroup_fg is a dubious translation:
lean 3 declaration is
- forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
+ forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
but is expected to have type
- forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
+ forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.FG.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
Case conversion may be inaccurate. Consider using '#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fgₓ'. -/
-theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.Fg G :=
+theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.FG G :=
⟨fun h => AddGroup.fg_def.2 <| (fg_iff_add_subgroup_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (fg_iff_add_subgroup_fg ⊤).2 (AddGroup.fg_def.1 h)⟩
#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fg
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -279,27 +279,27 @@ theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (
Finset.sup_induction fg_bot (fun a ha b hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-/- warning: submodule.fg_bsupr -> Submodule.fg_bsupᵢ is a dubious translation:
+/- warning: submodule.fg_bsupr -> Submodule.fg_biSup is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => supᵢ.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => supᵢ.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_bsupᵢₓ'. -/
-theorem fg_bsupᵢ {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
- (⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_supᵢ] using fg_finset_sup s N h
-#align submodule.fg_bsupr Submodule.fg_bsupᵢ
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => iSup.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_biSupₓ'. -/
+theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
+ (⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
+#align submodule.fg_bsupr Submodule.fg_biSup
-/- warning: submodule.fg_supr -> Submodule.fg_supᵢ is a dubious translation:
+/- warning: submodule.fg_supr -> Submodule.fg_iSup is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι N))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (iSup.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι N))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_supr Submodule.fg_supᵢₓ'. -/
-theorem fg_supᵢ {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) : (supᵢ N).Fg :=
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (iSup.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_supr Submodule.fg_iSupₓ'. -/
+theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) : (iSup N).Fg :=
by
cases nonempty_fintype ι
simpa using fg_bsupr Finset.univ N fun i hi => h i
-#align submodule.fg_supr Submodule.fg_supᵢ
+#align submodule.fg_supr Submodule.fg_iSup
variable {P : Type _} [AddCommMonoid P] [Module R P]
@@ -396,8 +396,8 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
simp_rw [fg_def] at hsb⊢
choose t htf hts using hsb
refine'
- ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_unionᵢ fun i => (htf i).image _, _⟩
- simp_rw [span_Union, span_image, hts, Submodule.supᵢ_map_single]
+ ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, _⟩
+ simp_rw [span_Union, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
/- warning: submodule.fg_of_fg_map_of_fg_inf_ker -> Submodule.fg_of_fg_map_of_fg_inf_ker is a dubious translation:
@@ -534,18 +534,18 @@ theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algeb
exact (Submodule.restrictScalars_span R S h ↑X).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-/- warning: submodule.fg.stablizes_of_supr_eq -> Submodule.Fg.stablizes_of_supᵢ_eq is a dubious translation:
+/- warning: submodule.fg.stablizes_of_supr_eq -> Submodule.Fg.stablizes_of_iSup_eq is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {M' : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (supᵢ.{u2, 1} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) Nat (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M' (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N n))))
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {M' : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (iSup.{u2, 1} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) Nat (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M' (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N n))))
but is expected to have type
- forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {M' : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (supᵢ.{u1, 1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) Nat (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M' (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N n))))
-Case conversion may be inaccurate. Consider using '#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_supᵢ_eqₓ'. -/
-theorem Fg.stablizes_of_supᵢ_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
- (H : supᵢ N = M') : ∃ n, M' = N n :=
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {M' : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (iSup.{u1, 1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) Nat (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M' (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N n))))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_iSup_eqₓ'. -/
+theorem Fg.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
+ (H : iSup N = M') : ∃ n, M' = N n :=
by
obtain ⟨S, hS⟩ := hM'
have : ∀ s : S, ∃ n, (s : M) ∈ N n := fun s =>
- (Submodule.mem_supᵢ_of_chain N s).mp
+ (Submodule.mem_iSup_of_chain N s).mp
(by
rw [H, ← hS]
exact Submodule.subset_span s.2)
@@ -557,8 +557,8 @@ theorem Fg.stablizes_of_supᵢ_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ
intro s hs
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]
- exact le_supᵢ _ _
-#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_supᵢ_eq
+ exact le_iSup _ _
+#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_iSup_eq
/- warning: submodule.fg_iff_compact -> Submodule.fg_iff_compact is a dubious translation:
lean 3 declaration is
@@ -575,22 +575,22 @@ theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactE
have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
constructor
· rintro ⟨t, rfl⟩
- rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_supᵢ t sp]
+ rw [span_eq_supr_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
apply CompleteLattice.finset_sup_compact_of_compact
exact fun n _ => singleton_span_is_compact_element n
· intro h
-- s is the Sup of the spans of its elements.
have sSup : s = Sup (sp '' ↑s) := by
- rw [supₛ_eq_supᵢ, supᵢ_image, ← span_eq_supr_of_singleton_spans, eq_comm, span_eq]
+ rw [sSup_eq_iSup, iSup_image, ← span_eq_supr_of_singleton_spans, eq_comm, span_eq]
-- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
have ssup : s = u.sup id := by
suffices : u.sup id ≤ s
exact le_antisymm husup this
- rw [sSup, Finset.sup_id_eq_supₛ]
- exact supₛ_le_supₛ huspan
+ rw [sSup, Finset.sup_id_eq_sSup]
+ exact sSup_le_sSup huspan
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
- rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_supᵢ, supr_rw, ←
+ rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
span_eq_supr_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
mathlib commit https://github.com/leanprover-community/mathlib/commit/d4437c68c8d350fc9d4e95e1e174409db35e30d7
@@ -108,9 +108,9 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
@@ -175,9 +175,9 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
/- warning: submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul -> Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSMul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSMul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -110,7 +110,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
lean 3 declaration is
forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
@@ -177,7 +177,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
lean 3 declaration is
forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
but is expected to have type
- forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (CommSemiring.toSemiring.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
@@ -340,7 +340,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map Submodule.fg_of_fg_mapₓ'. -/
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).Fg) : N.Fg :=
@@ -404,7 +404,7 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
but is expected to have type
- forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_kerₓ'. -/
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
@@ -505,7 +505,7 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.Fg.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
but is expected to have type
- forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (NonAssocRing.toNonAssocSemiring.{u4} R (Ring.toNonAssocRing.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (NonAssocRing.toNonAssocSemiring.{u4} R (Ring.toNonAssocRing.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u2 u3} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.Fg.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u1 u2} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (Submodule.instSLMC.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (Submodule.asFun.{u4, u3, u2} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 N _inst_9 _inst_10 f)) -> (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u2 u3} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.Fg.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u1 u2} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (Submodule.instSLMC.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (Submodule.asFun.{u4, u3, u2} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 N _inst_9 _inst_10 f)) -> (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
@@ -688,7 +688,7 @@ theorem Fg.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.Fg)
lean 3 declaration is
forall {R : Type.{u1}} {S : Type.{u2}} {A : Type.{u3}} [_inst_4 : CommRing.{u1} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u3} A] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))), (Ideal.Fg.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u3, max u2 u3} S A (RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) g)) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u3, max u1 u3} R A (RingHom.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (RingHom.comp.{u1, u2, u3} R S A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6))) g f)))
but is expected to have type
- forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))), (Ideal.Fg.{u3} R (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))))))) f)) -> (Ideal.Fg.{u3} R (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6))) g f)))
+ forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))), (Ideal.Fg.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5)))) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))))))) f)) -> (Ideal.Fg.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4)) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_4))) (Semiring.toNonAssocSemiring.{u2} S (CommSemiring.toSemiring.{u2} S (CommRing.toCommSemiring.{u2} S _inst_5))) (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_6))) g f)))
Case conversion may be inaccurate. Consider using '#align ideal.fg_ker_comp Ideal.fg_ker_compₓ'. -/
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.Fg) (hg : g.ker.Fg) (hsur : Function.Surjective f) :
@@ -966,7 +966,7 @@ variable {A}
lean 3 declaration is
forall {A : Type.{u1}} {B : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] (f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))), (Function.Surjective.{succ u1, succ u2} A B (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) (fun (_x : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) => A -> B) (RingHom.hasCoeToFun.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) f)) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f)
but is expected to have type
- forall {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u2} A] [_inst_2 : CommRing.{u1} B] (f : RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A B (NonUnitalNonAssocSemiring.toMul.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2))) (RingHom.instRingHomClassRingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2))))))) f)) -> (RingHom.Finite.{u2, u1} A B _inst_1 _inst_2 f)
+ forall {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u2} A] [_inst_2 : CommRing.{u1} B] (f : RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonUnitalNonAssocSemiring.toMul.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2)))) A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))) (RingHom.instRingHomClassRingHom.{u2, u1} A B (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_1))) (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_2))))))) f)) -> (RingHom.Finite.{u2, u1} A B _inst_1 _inst_2 f)
Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_surjective RingHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.to_algebra
@@ -977,7 +977,7 @@ theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
lean 3 declaration is
forall {A : Type.{u1}} {B : Type.{u2}} {C : Type.{u3}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u3} C] {g : RingHom.{u2, u3} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3)))} {f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))}, (RingHom.Finite.{u2, u3} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u3} A C _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3))) g f))
but is expected to have type
- forall {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u3} B] [_inst_3 : CommRing.{u2} C] {g : RingHom.{u3, u2} B C (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u2} C (Ring.toNonAssocRing.{u2} C (CommRing.toRing.{u2} C _inst_3)))} {f : RingHom.{u1, u3} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2)))}, (RingHom.Finite.{u3, u2} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u3} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u2} A C _inst_1 _inst_3 (RingHom.comp.{u1, u3, u2} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u2} C (Ring.toNonAssocRing.{u2} C (CommRing.toRing.{u2} C _inst_3))) g f))
+ forall {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u3} B] [_inst_3 : CommRing.{u2} C] {g : RingHom.{u3, u2} B C (Semiring.toNonAssocSemiring.{u3} B (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_2))) (Semiring.toNonAssocSemiring.{u2} C (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_3)))} {f : RingHom.{u1, u3} A B (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_1))) (Semiring.toNonAssocSemiring.{u3} B (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_2)))}, (RingHom.Finite.{u3, u2} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u3} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u2} A C _inst_1 _inst_3 (RingHom.comp.{u1, u3, u2} A B C (Semiring.toNonAssocSemiring.{u1} A (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_1))) (Semiring.toNonAssocSemiring.{u3} B (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_2))) (Semiring.toNonAssocSemiring.{u2} C (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_3))) g f))
Case conversion may be inaccurate. Consider using '#align ring_hom.finite.comp RingHom.Finite.compₓ'. -/
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
by
@@ -994,7 +994,7 @@ theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (
lean 3 declaration is
forall {A : Type.{u1}} {B : Type.{u2}} {C : Type.{u3}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u3} C] {f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))} {g : RingHom.{u2, u3} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3)))}, (RingHom.Finite.{u1, u3} A C _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u3} B C _inst_2 _inst_3 g)
but is expected to have type
- forall {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u3} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u1} C] {f : RingHom.{u3, u2} A B (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))} {g : RingHom.{u2, u1} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u1} C (Ring.toNonAssocRing.{u1} C (CommRing.toRing.{u1} C _inst_3)))}, (RingHom.Finite.{u3, u1} A C _inst_1 _inst_3 (RingHom.comp.{u3, u2, u1} A B C (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u1} C (Ring.toNonAssocRing.{u1} C (CommRing.toRing.{u1} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u1} B C _inst_2 _inst_3 g)
+ forall {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u3} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u1} C] {f : RingHom.{u3, u2} A B (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Semiring.toNonAssocSemiring.{u2} B (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_2)))} {g : RingHom.{u2, u1} B C (Semiring.toNonAssocSemiring.{u2} B (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_2))) (Semiring.toNonAssocSemiring.{u1} C (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_3)))}, (RingHom.Finite.{u3, u1} A C _inst_1 _inst_3 (RingHom.comp.{u3, u2, u1} A B C (Semiring.toNonAssocSemiring.{u3} A (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_1))) (Semiring.toNonAssocSemiring.{u2} B (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_2))) (Semiring.toNonAssocSemiring.{u1} C (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u1} B C _inst_2 _inst_3 g)
Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_comp_finite RingHom.Finite.of_comp_finiteₓ'. -/
theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) : g.Finite :=
by
@@ -1034,7 +1034,7 @@ variable (R A)
lean 3 declaration is
forall (R : Type.{u1}) (A : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))], AlgHom.Finite.{u1, u2, u2} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)
but is expected to have type
- forall (R : Type.{u2}) (A : Type.{u1}) [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u1} A] [_inst_5 : Algebra.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2))], AlgHom.Finite.{u2, u1, u1} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2)) _inst_5)
+ forall (R : Type.{u2}) (A : Type.{u1}) [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u1} A] [_inst_5 : Algebra.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2))], AlgHom.Finite.{u2, u1, u1} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2)) _inst_5)
Case conversion may be inaccurate. Consider using '#align alg_hom.finite.id AlgHom.Finite.idₓ'. -/
theorem id : Finite (AlgHom.id R A) :=
RingHom.Finite.id A
@@ -1046,7 +1046,7 @@ variable {R A}
lean 3 declaration is
forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {C : Type.{u4}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u4} C] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u1, u4} R C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4))] {g : AlgHom.{u1, u3, u4} R B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u1, u3, u4} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u1, u2, u4} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u1, u2, u3, u4} R A B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
but is expected to have type
- forall {R : Type.{u4}} {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u1} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u2} C] [_inst_5 : Algebra.{u4, u1} R A (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2))] [_inst_6 : Algebra.{u4, u3} R B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u4, u2} R C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u2} C (CommRing.toRing.{u2} C _inst_4))] {g : AlgHom.{u4, u3, u2} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u2} C (CommRing.toRing.{u2} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u4, u1, u3} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u4, u3, u2} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u4, u1, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u4, u1, u2} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u1, u3, u2} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u2} C (CommRing.toRing.{u2} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
+ forall {R : Type.{u4}} {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u1} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u2} C] [_inst_5 : Algebra.{u4, u1} R A (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2))] [_inst_6 : Algebra.{u4, u3} R B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3))] [_inst_7 : Algebra.{u4, u2} R C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_4))] {g : AlgHom.{u4, u3, u2} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3)) (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u4, u1, u3} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2)) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u4, u3, u2} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u4, u1, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u4, u1, u2} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u1, u3, u2} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} A (CommRing.toCommSemiring.{u1} A _inst_2)) (CommSemiring.toSemiring.{u3} B (CommRing.toCommSemiring.{u3} B _inst_3)) (CommSemiring.toSemiring.{u2} C (CommRing.toCommSemiring.{u2} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
Case conversion may be inaccurate. Consider using '#align alg_hom.finite.comp AlgHom.Finite.compₓ'. -/
theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
RingHom.Finite.comp hg hf
@@ -1056,7 +1056,7 @@ theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Fin
lean 3 declaration is
forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] (f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) (fun (_x : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) => A -> B) ([anonymous].{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) f)) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
but is expected to have type
- forall {R : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u3} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u1} B] [_inst_5 : Algebra.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))] (f : AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : A) => B) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) R A B (SMulZeroClass.toSMul.{u3, u2} R A (AddMonoid.toZero.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} R A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} R A (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5))))) (SMulZeroClass.toSMul.{u3, u1} R B (AddMonoid.toZero.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))))) (DistribSMul.toSMulZeroClass.{u3, u1} R B (AddMonoid.toAddZeroClass.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))))) (DistribMulAction.toDistribSMul.{u3, u1} R B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_6))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)))))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_6)) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_6)) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, u2, u1, max u2 u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6 (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) (AlgHom.algHomClass.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6))))) f)) -> (AlgHom.Finite.{u3, u2, u1} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
+ forall {R : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u3} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u1} B] [_inst_5 : Algebra.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))] [_inst_6 : Algebra.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))] (f : AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : A) => B) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (SMulZeroClass.toSMul.{u3, u2} R A (AddMonoid.toZero.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} R A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} R A (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5))))) (SMulZeroClass.toSMul.{u3, u1} R B (AddMonoid.toZero.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribSMul.toSMulZeroClass.{u3, u1} R B (AddMonoid.toAddZeroClass.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))))) (DistribMulAction.toDistribSMul.{u3, u1} R B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_6)) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, u2, u1, max u2 u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6 (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6) (AlgHom.algHomClass.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (CommSemiring.toSemiring.{u2} A (CommRing.toCommSemiring.{u2} A _inst_2)) (CommSemiring.toSemiring.{u1} B (CommRing.toCommSemiring.{u1} B _inst_3)) _inst_5 _inst_6))))) f)) -> (AlgHom.Finite.{u3, u2, u1} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
RingHom.Finite.of_surjective f hf
@@ -1066,7 +1066,7 @@ theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
lean 3 declaration is
forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {C : Type.{u4}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u4} C] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u1, u4} R C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4))] {f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u1, u3, u4} R B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u1, u2, u4} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u1, u2, u3, u4} R A B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u1, u3, u4} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
but is expected to have type
- forall {R : Type.{u4}} {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u3} A] [_inst_3 : CommRing.{u2} B] [_inst_4 : CommRing.{u1} C] [_inst_5 : Algebra.{u4, u3} R A (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_2))] [_inst_6 : Algebra.{u4, u2} R B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3))] [_inst_7 : Algebra.{u4, u1} R C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} C (CommRing.toRing.{u1} C _inst_4))] {f : AlgHom.{u4, u3, u2} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_2)) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u4, u2, u1} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3)) (Ring.toSemiring.{u1} C (CommRing.toRing.{u1} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u4, u3, u1} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u3, u2, u1} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_2)) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3)) (Ring.toSemiring.{u1} C (CommRing.toRing.{u1} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u4, u2, u1} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
+ forall {R : Type.{u4}} {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u3} A] [_inst_3 : CommRing.{u2} B] [_inst_4 : CommRing.{u1} C] [_inst_5 : Algebra.{u4, u3} R A (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_2))] [_inst_6 : Algebra.{u4, u2} R B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3))] [_inst_7 : Algebra.{u4, u1} R C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_4))] {f : AlgHom.{u4, u3, u2} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_2)) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u4, u2, u1} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3)) (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u4, u3, u1} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u3, u2, u1} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u3} A (CommRing.toCommSemiring.{u3} A _inst_2)) (CommSemiring.toSemiring.{u2} B (CommRing.toCommSemiring.{u2} B _inst_3)) (CommSemiring.toSemiring.{u1} C (CommRing.toCommSemiring.{u1} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u4, u2, u1} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_comp_finite AlgHom.Finite.of_comp_finiteₓ'. -/
theorem of_comp_finite {f : A →ₐ[R] B} {g : B →ₐ[R] C} (h : (g.comp f).Finite) : g.Finite :=
RingHom.Finite.of_comp_finite h
mathlib commit https://github.com/leanprover-community/mathlib/commit/a4f99eae998680d3a2c240da4a2b16354c85ee49
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit fa78268d4d77cb2b2fbc89f0527e2e7807763780
+! leanprover-community/mathlib commit c813ed7de0f5115f956239124e9b30f3a621966f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -590,7 +590,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactE
rw [sSup, Finset.sup_id_eq_supₛ]
exact supₛ_le_supₛ huspan
obtain ⟨t, ⟨hts, rfl⟩⟩ := finset.subset_image_iff.mp huspan
- rw [Finset.sup_finset_image, Function.comp.left_id, Finset.sup_eq_supᵢ, supr_rw, ←
+ rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_supᵢ, supr_rw, ←
span_eq_supr_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
@@ -887,7 +887,7 @@ section Algebra
lean 3 declaration is
forall {R : Type.{u1}} (A : Type.{u2}) (M : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : Algebra.{u1, u2} R A _inst_6 _inst_7] [_inst_9 : AddCommMonoid.{u3} M] [_inst_10 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9] [_inst_11 : Module.{u2, u3} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u1, u2, u3} R A M (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} A M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (SMulWithZero.toSmulZeroClass.{u2, u3} A M (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (MulActionWithZero.toSMulWithZero.{u2, u3} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (Module.toMulActionWithZero.{u2, u3} A M _inst_7 _inst_9 _inst_11)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9 _inst_10))))] [_inst_13 : Module.Finite.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_8)] [_inst_14 : Module.Finite.{u2, u3} A M _inst_7 _inst_9 _inst_11], Module.Finite.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9 _inst_10
but is expected to have type
- forall {R : Type.{u3}} (A : Type.{u2}) (M : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : CommSemiring.{u2} A] [_inst_8 : Algebra.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7)] [_inst_9 : Semiring.{u1} M] [_inst_10 : Algebra.{u3, u1} R M _inst_6 _inst_9] [_inst_11 : Algebra.{u2, u1} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u3, u2, u1} R A M (Algebra.toSMul.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8) (Algebra.toSMul.{u2, u1} A M _inst_7 _inst_9 _inst_11) (Algebra.toSMul.{u3, u1} R M _inst_6 _inst_9 _inst_10)] [_inst_13 : Module.Finite.{u3, u2} R A (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8)] [_inst_14 : Module.Finite.{u2, u1} A M (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} M (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} M (Semiring.toNonAssocSemiring.{u1} M _inst_9))) (Algebra.toModule.{u2, u1} A M _inst_7 _inst_9 _inst_11)], Module.Finite.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} M (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} M (Semiring.toNonAssocSemiring.{u1} M _inst_9))) (Algebra.toModule.{u3, u1} R M _inst_6 _inst_9 _inst_10)
+ forall {R : Type.{u3}} (A : Type.{u2}) (M : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : Algebra.{u3, u2} R A _inst_6 _inst_7] [_inst_9 : AddCommMonoid.{u1} M] [_inst_10 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_9] [_inst_11 : Module.{u2, u1} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u3, u2, u1} R A M (Algebra.toSMul.{u3, u2} R A _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} A M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (SMulWithZero.toSMulZeroClass.{u2, u1} A M (MonoidWithZero.toZero.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (MulActionWithZero.toSMulWithZero.{u2, u1} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (Module.toMulActionWithZero.{u2, u1} A M _inst_7 _inst_9 _inst_11)))) (SMulZeroClass.toSMul.{u3, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_9)) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_9 _inst_10))))] [_inst_13 : Module.Finite.{u3, u2} R A (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u3, u2} R A _inst_6 _inst_7 _inst_8)] [_inst_14 : Module.Finite.{u2, u1} A M _inst_7 _inst_9 _inst_11], Module.Finite.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_9 _inst_10
Case conversion may be inaccurate. Consider using '#align module.finite.trans Module.Finite.transₓ'. -/
theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra R A]
[AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
mathlib commit https://github.com/leanprover-community/mathlib/commit/fa78268d4d77cb2b2fbc89f0527e2e7807763780
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit e95e4f92c8f8da3c7f693c3ec948bcf9b6683f51
+! leanprover-community/mathlib commit fa78268d4d77cb2b2fbc89f0527e2e7807763780
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -885,18 +885,18 @@ section Algebra
/- warning: module.finite.trans -> Module.Finite.trans is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} (A : Type.{u2}) (B : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : CommSemiring.{u2} A] [_inst_8 : Algebra.{u1, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7)] [_inst_9 : Semiring.{u3} B] [_inst_10 : Algebra.{u1, u3} R B _inst_6 _inst_9] [_inst_11 : Algebra.{u2, u3} A B _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u1, u2, u3} R A B (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u1, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} A B (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (SMulWithZero.toSmulZeroClass.{u2, u3} A B (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (MulActionWithZero.toSMulWithZero.{u2, u3} A B (Semiring.toMonoidWithZero.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (Module.toMulActionWithZero.{u2, u3} A B (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u2, u3} A B _inst_7 _inst_9 _inst_11))))) (SMulZeroClass.toHasSmul.{u1, u3} R B (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (SMulWithZero.toSmulZeroClass.{u1, u3} R B (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} R B (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (Module.toMulActionWithZero.{u1, u3} R B (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u1, u3} R B _inst_6 _inst_9 _inst_10)))))] [_inst_13 : Module.Finite.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u1, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8)] [_inst_14 : Module.Finite.{u2, u3} A B (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u2, u3} A B _inst_7 _inst_9 _inst_11)], Module.Finite.{u1, u3} R B (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u1, u3} R B _inst_6 _inst_9 _inst_10)
+ forall {R : Type.{u1}} (A : Type.{u2}) (M : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : Algebra.{u1, u2} R A _inst_6 _inst_7] [_inst_9 : AddCommMonoid.{u3} M] [_inst_10 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9] [_inst_11 : Module.{u2, u3} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u1, u2, u3} R A M (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} A M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (SMulWithZero.toSmulZeroClass.{u2, u3} A M (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (MulActionWithZero.toSMulWithZero.{u2, u3} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (Module.toMulActionWithZero.{u2, u3} A M _inst_7 _inst_9 _inst_11)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_9))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9 _inst_10))))] [_inst_13 : Module.Finite.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_8)] [_inst_14 : Module.Finite.{u2, u3} A M _inst_7 _inst_9 _inst_11], Module.Finite.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_9 _inst_10
but is expected to have type
- forall {R : Type.{u3}} (A : Type.{u2}) (B : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : CommSemiring.{u2} A] [_inst_8 : Algebra.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7)] [_inst_9 : Semiring.{u1} B] [_inst_10 : Algebra.{u3, u1} R B _inst_6 _inst_9] [_inst_11 : Algebra.{u2, u1} A B _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u3, u2, u1} R A B (Algebra.toSMul.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8) (Algebra.toSMul.{u2, u1} A B _inst_7 _inst_9 _inst_11) (Algebra.toSMul.{u3, u1} R B _inst_6 _inst_9 _inst_10)] [_inst_13 : Module.Finite.{u3, u2} R A (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8)] [_inst_14 : Module.Finite.{u2, u1} A B (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B _inst_9))) (Algebra.toModule.{u2, u1} A B _inst_7 _inst_9 _inst_11)], Module.Finite.{u3, u1} R B (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B _inst_9))) (Algebra.toModule.{u3, u1} R B _inst_6 _inst_9 _inst_10)
+ forall {R : Type.{u3}} (A : Type.{u2}) (M : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : CommSemiring.{u2} A] [_inst_8 : Algebra.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7)] [_inst_9 : Semiring.{u1} M] [_inst_10 : Algebra.{u3, u1} R M _inst_6 _inst_9] [_inst_11 : Algebra.{u2, u1} A M _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u3, u2, u1} R A M (Algebra.toSMul.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8) (Algebra.toSMul.{u2, u1} A M _inst_7 _inst_9 _inst_11) (Algebra.toSMul.{u3, u1} R M _inst_6 _inst_9 _inst_10)] [_inst_13 : Module.Finite.{u3, u2} R A (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8)] [_inst_14 : Module.Finite.{u2, u1} A M (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} M (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} M (Semiring.toNonAssocSemiring.{u1} M _inst_9))) (Algebra.toModule.{u2, u1} A M _inst_7 _inst_9 _inst_11)], Module.Finite.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} M (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} M (Semiring.toNonAssocSemiring.{u1} M _inst_9))) (Algebra.toModule.{u3, u1} R M _inst_6 _inst_9 _inst_10)
Case conversion may be inaccurate. Consider using '#align module.finite.trans Module.Finite.transₓ'. -/
-theorem trans {R : Type _} (A B : Type _) [CommSemiring R] [CommSemiring A] [Algebra R A]
- [Semiring B] [Algebra R B] [Algebra A B] [IsScalarTower R A B] :
- ∀ [Finite R A] [Finite A B], Finite R B
+theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra R A]
+ [AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
+ ∀ [Finite R A] [Finite A M], Finite R M
| ⟨⟨s, hs⟩⟩, ⟨⟨t, ht⟩⟩ =>
⟨Submodule.fg_def.2
- ⟨Set.image2 (· • ·) (↑s : Set A) (↑t : Set B),
+ ⟨Set.image2 (· • ·) (↑s : Set A) (↑t : Set M),
Set.Finite.image2 _ s.finite_toSet t.finite_toSet, by
- rw [Set.image2_smul, Submodule.span_smul_of_span_eq_top hs (↑t : Set B), ht,
+ rw [Set.image2_smul, Submodule.span_smul_of_span_eq_top hs (↑t : Set M), ht,
Submodule.restrictScalars_top]⟩⟩
#align module.finite.trans Module.Finite.trans
@@ -980,13 +980,14 @@ but is expected to have type
forall {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u3} B] [_inst_3 : CommRing.{u2} C] {g : RingHom.{u3, u2} B C (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u2} C (Ring.toNonAssocRing.{u2} C (CommRing.toRing.{u2} C _inst_3)))} {f : RingHom.{u1, u3} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2)))}, (RingHom.Finite.{u3, u2} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u3} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u2} A C _inst_1 _inst_3 (RingHom.comp.{u1, u3, u2} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u2} C (Ring.toNonAssocRing.{u2} C (CommRing.toRing.{u2} C _inst_3))) g f))
Case conversion may be inaccurate. Consider using '#align ring_hom.finite.comp RingHom.Finite.compₓ'. -/
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
- @Module.Finite.trans A B C _ _ f.toAlgebra _ (g.comp f).toAlgebra g.toAlgebra
- (by
- fconstructor
- intro a b c
- simp only [Algebra.smul_def, RingHom.map_mul, mul_assoc]
- rfl)
- hf hg
+ by
+ letI := f.to_algebra
+ letI := g.to_algebra
+ letI := (g.comp f).toAlgebra
+ letI : IsScalarTower A B C := RestrictScalars.isScalarTower A B C
+ letI : Module.Finite A B := hf
+ letI : Module.Finite B C := hg
+ exact Module.Finite.trans B C
#align ring_hom.finite.comp RingHom.Finite.comp
/- warning: ring_hom.finite.of_comp_finite -> RingHom.Finite.of_comp_finite is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/730c6d4cab72b9d84fcfb9e95e8796e9cd8f40ba
@@ -201,7 +201,7 @@ theorem fg_bot : (⊥ : Submodule R M).Fg :=
lean 3 declaration is
forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
but is expected to have type
- forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (RelEmbedding.toEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Order.RelIso.Basic._hyg.867 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (RelHomClass.toFunLike.{u1, u1, u1} (OrderEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))))))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (RelEmbedding.instRelHomClassRelEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697))) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
(⊥ : Subalgebra R A).toSubmodule.Fg :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/4f4a1c875d0baa92ab5d92f3fb1bb258ad9f3e5b
@@ -809,6 +809,12 @@ instance range [Finite R M] (f : M →ₗ[R] N) : Finite R f.range :=
of_surjective f.range_restrict fun ⟨x, y, hy⟩ => ⟨y, Subtype.ext hy⟩
#align module.finite.range Module.Finite.range
+/- warning: module.finite.map -> Module.Finite.map is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] (p : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) [_inst_6 : Module.Finite.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) p) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 p) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 p)] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (coeSort.{succ u3, succ (succ u3)} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p)) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p))
+but is expected to have type
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] (p : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) [_inst_6 : Module.Finite.{u1, u2} R (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) x p)) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 p) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 p)] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (Subtype.{succ u3} N (fun (x : N) => Membership.mem.{u3, u3} N (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) (SetLike.instMembership.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) x (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p))) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f p))
+Case conversion may be inaccurate. Consider using '#align module.finite.map Module.Finite.mapₓ'. -/
/-- Pushforwards of finite submodules are finite. -/
instance map (p : Submodule R M) [Finite R p] (f : M →ₗ[R] N) : Finite R (p.map f) :=
of_surjective (f.restrict fun _ => mem_map_of_mem) fun ⟨x, y, hy, hy'⟩ =>
mathlib commit https://github.com/leanprover-community/mathlib/commit/4f4a1c875d0baa92ab5d92f3fb1bb258ad9f3e5b
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit 039ef89bef6e58b32b62898dd48e9d1a4312bb65
+! leanprover-community/mathlib commit e95e4f92c8f8da3c7f693c3ec948bcf9b6683f51
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -809,6 +809,12 @@ instance range [Finite R M] (f : M →ₗ[R] N) : Finite R f.range :=
of_surjective f.range_restrict fun ⟨x, y, hy⟩ => ⟨y, Subtype.ext hy⟩
#align module.finite.range Module.Finite.range
+/-- Pushforwards of finite submodules are finite. -/
+instance map (p : Submodule R M) [Finite R p] (f : M →ₗ[R] N) : Finite R (p.map f) :=
+ of_surjective (f.restrict fun _ => mem_map_of_mem) fun ⟨x, y, hy, hy'⟩ =>
+ ⟨⟨_, hy⟩, Subtype.ext hy'⟩
+#align module.finite.map Module.Finite.map
+
variable (R)
#print Module.Finite.self /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -279,15 +279,15 @@ theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (
Finset.sup_induction fg_bot (fun a ha b hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-/- warning: submodule.fg_bsupr -> Submodule.fg_bsupr is a dubious translation:
+/- warning: submodule.fg_bsupr -> Submodule.fg_bsupᵢ is a dubious translation:
lean 3 declaration is
forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => supᵢ.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
but is expected to have type
forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => supᵢ.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
-Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_bsuprₓ'. -/
-theorem fg_bsupr {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
+Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_bsupᵢₓ'. -/
+theorem fg_bsupᵢ {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
(⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_supᵢ] using fg_finset_sup s N h
-#align submodule.fg_bsupr Submodule.fg_bsupr
+#align submodule.fg_bsupr Submodule.fg_bsupᵢ
/- warning: submodule.fg_supr -> Submodule.fg_supᵢ is a dubious translation:
lean 3 declaration is
@@ -798,6 +798,12 @@ theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f)
exact hM.1.map f⟩
#align module.finite.of_surjective Module.Finite.of_surjective
+/- warning: module.finite.range -> Module.Finite.range is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [_inst_6 : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (coeSort.{succ u3, succ (succ u3)} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) Type.{u3} (SetLike.hasCoeToSort.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f)) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f))
+but is expected to have type
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [_inst_6 : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), Module.Finite.{u1, u3} R (Subtype.{succ u3} N (fun (x : N) => Membership.mem.{u3, u3} N (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) (SetLike.instMembership.{u3, u3} (Submodule.{u1, u3} R N _inst_1 _inst_4 _inst_5) N (Submodule.setLike.{u1, u3} R N _inst_1 _inst_4 _inst_5)) x (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f))) _inst_1 (Submodule.addCommMonoid.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f)) (Submodule.module.{u1, u3} R N _inst_1 _inst_4 _inst_5 (LinearMap.range.{u1, u1, u2, u3, max u2 u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) (RingHomSurjective.ids.{u1} R _inst_1) f))
+Case conversion may be inaccurate. Consider using '#align module.finite.range Module.Finite.rangeₓ'. -/
/-- The range of a linear map from a finite module is finite. -/
instance range [Finite R M] (f : M →ₗ[R] N) : Finite R f.range :=
of_surjective f.range_restrict fun ⟨x, y, hy⟩ => ⟨y, Subtype.ext hy⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit 1dac236edca9b4b6f5f00b1ad831e35f89472837
+! leanprover-community/mathlib commit 039ef89bef6e58b32b62898dd48e9d1a4312bb65
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -798,6 +798,11 @@ theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f)
exact hM.1.map f⟩
#align module.finite.of_surjective Module.Finite.of_surjective
+/-- The range of a linear map from a finite module is finite. -/
+instance range [Finite R M] (f : M →ₗ[R] N) : Finite R f.range :=
+ of_surjective f.range_restrict fun ⟨x, y, hy⟩ => ⟨y, Subtype.ext hy⟩
+#align module.finite.range Module.Finite.range
+
variable (R)
#print Module.Finite.self /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce86f4e05e9a9b8da5e316b22c76ce76440c56a1
@@ -108,7 +108,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
lean 3 declaration is
- forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (NonAssocRing.toAddGroupWithOne.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (NonAssocRing.toAddGroupWithOne.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (AddCommGroupWithOne.toAddGroupWithOne.{u1} R (Ring.toAddCommGroupWithOne.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
but is expected to have type
forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ec294687917cbc5c73620b4414ae9b5dd9ae1b4
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit f5edf4694f7c478cbca7a2451bddbd221fc7f869
+! leanprover-community/mathlib commit 1dac236edca9b4b6f5f00b1ad831e35f89472837
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.RingTheory.Ideal.Operations
/-!
# Finiteness conditions in commutative algebra
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we define a notion of finiteness that is common in commutative algebra.
## Main declarations
mathlib commit https://github.com/leanprover-community/mathlib/commit/02ba8949f486ebecf93fe7460f1ed0564b5e442c
@@ -45,11 +45,19 @@ variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
open Set
+#print Submodule.Fg /-
/-- A submodule of `M` is finitely generated if it is the span of a finite subset of `M`. -/
def Fg (N : Submodule R M) : Prop :=
∃ S : Finset M, Submodule.span R ↑S = N
#align submodule.fg Submodule.Fg
+-/
+/- warning: submodule.fg_def -> Submodule.fg_def is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u2} (Set.{u2} M) (fun (S : Set.{u2} M) => And (Set.Finite.{u2} M S) (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 S) N)))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{succ u1} (Set.{u1} M) (fun (S : Set.{u1} M) => And (Set.Finite.{u1} M S) (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 S) N)))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_def Submodule.fg_defₓ'. -/
theorem fg_def {N : Submodule R M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
by
@@ -58,17 +66,31 @@ theorem fg_def {N : Submodule R M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ span R
exact ⟨t, rfl⟩⟩
#align submodule.fg_def Submodule.fg_def
-theorem fg_iff_add_submonoid_fg (P : Submodule ℕ M) : P.Fg ↔ P.toAddSubmonoid.Fg :=
+#print Submodule.fg_iff_addSubmonoid_fg /-
+theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.Fg ↔ P.toAddSubmonoid.Fg :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_nat_eq_add_submonoid_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_nat_eq_add_submonoid_closure] using hS⟩⟩
-#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_add_submonoid_fg
+#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_addSubmonoid_fg
+-/
+/- warning: submodule.fg_iff_add_subgroup_fg -> Submodule.fg_iff_add_subgroup_fg is a dubious translation:
+lean 3 declaration is
+ forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.Fg.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.ring _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
+but is expected to have type
+ forall {G : Type.{u1}} [_inst_4 : AddCommGroup.{u1} G] (P : Submodule.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4)), Iff (Submodule.Fg.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_4) (AddCommGroup.intModule.{u1} G _inst_4) P) (AddSubgroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_4) (Submodule.toAddSubgroup.{0, u1} Int G Int.instRingInt _inst_4 (AddCommGroup.intModule.{u1} G _inst_4) P))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fgₓ'. -/
theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ G) :
P.Fg ↔ P.toAddSubgroup.Fg :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_int_eq_add_subgroup_closure] using hS⟩⟩
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
+/- warning: submodule.fg_iff_exists_fin_generating_family -> Submodule.fg_iff_exists_fin_generating_family is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u2} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Set.range.{u2, 1} M (Fin n) s)) N)))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, Iff (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Set.range.{u1, 1} M (Fin n) s)) N)))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_familyₓ'. -/
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
N.Fg ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N :=
by
@@ -81,6 +103,12 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
refine' ⟨range s, finite_range s, hs⟩
#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_family
+/- warning: submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul -> Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => And (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (HSub.hSub.{u1, u1, u1} R R R (instHSub.{u1} R (SubNegMonoid.toHasSub.{u1} R (AddGroup.toSubNegMonoid.{u1} R (AddGroupWithOne.toAddGroup.{u1} R (NonAssocRing.toAddGroupWithOne.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))))) r (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R (AddMonoidWithOne.toOne.{u1} R (AddGroupWithOne.toAddMonoidWithOne.{u1} R (NonAssocRing.toAddGroupWithOne.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))))))))) I) (forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) (OfNat.ofNat.{u2} M 0 (OfNat.mk.{u2} M 0 (Zero.zero.{u2} M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (SubNegMonoid.toAddMonoid.{u2} M (AddGroup.toSubNegMonoid.{u2} M (AddCommGroup.toAddGroup.{u2} M _inst_5))))))))))))
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (HSub.hSub.{u2, u2, u2} R R R (instHSub.{u2} R (Ring.toSub.{u2} R (CommRing.toRing.{u2} R _inst_4))) r (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (CommRing.toRing.{u2} R _inst_4)))))) I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) (OfNat.ofNat.{u1} M 0 (Zero.toOfNat0.{u1} M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5)))))))))))
+Case conversion may be inaccurate. Consider using '#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smulₓ'. -/
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
@@ -142,6 +170,12 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul
+/- warning: submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul -> Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_4 : CommRing.{u1} R] {M : Type.{u2}} [_inst_5 : AddCommGroup.{u2} M] [_inst_6 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)] (I : Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6 N) -> (LE.le.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Preorder.toLE.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.completeLattice.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6))))) N (SMul.smul.{u1, u2} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (Submodule.hasSmul'.{u1, u2} R M (CommRing.toCommSemiring.{u1} R _inst_4) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) I N)) -> (Exists.{succ u1} R (fun (r : R) => Exists.{0} (Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) (fun (H : Membership.Mem.{u1, u1} R (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (SetLike.hasMem.{u1, u1} (Ideal.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) R (Submodule.setLike.{u1, u1} R R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) (Semiring.toModule.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))))) r I) => forall (n : M), (Membership.Mem.{u2, u2} M (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) (SetLike.hasMem.{u2, u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6) M (Submodule.setLike.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)) n N) -> (Eq.{succ u2} M (SMul.smul.{u1, u2} R M (SMulZeroClass.toHasSmul.{u1, u2} R M (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (SMulWithZero.toSmulZeroClass.{u1, u2} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)))))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (MulActionWithZero.toSMulWithZero.{u1, u2} R M (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4))) (AddZeroClass.toHasZero.{u2} M (AddMonoid.toAddZeroClass.{u2} M (AddCommMonoid.toAddMonoid.{u2} M (AddCommGroup.toAddCommMonoid.{u2} M _inst_5)))) (Module.toMulActionWithZero.{u1, u2} R M (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u2} M _inst_5) _inst_6)))) r n) n))))
+but is expected to have type
+ forall {R : Type.{u2}} [_inst_4 : CommRing.{u2} R] {M : Type.{u1}} [_inst_5 : AddCommGroup.{u1} M] [_inst_6 : Module.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5)] (I : Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (N : Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6), (Submodule.Fg.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6 N) -> (LE.le.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Preorder.toLE.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.completeLattice.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) N (HSMul.hSMul.{u2, u1, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (instHSMul.{u2, u1} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (Submodule.hasSmul'.{u2, u1} R M (CommRing.toCommSemiring.{u2} R _inst_4) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) I N)) -> (Exists.{succ u2} R (fun (r : R) => And (Membership.mem.{u2, u2} R (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (SetLike.instMembership.{u2, u2} (Ideal.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) R (Submodule.setLike.{u2, u2} R R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} R (Semiring.toNonAssocSemiring.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) (Semiring.toModule.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))))) r I) (forall (n : M), (Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6) M (Submodule.setLike.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6)) n N) -> (Eq.{succ u1} M (HSMul.hSMul.{u2, u1, u1} R M M (instHSMul.{u2, u1} R M (SMulZeroClass.toSMul.{u2, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (SMulWithZero.toSMulZeroClass.{u2, u1} R M (CommMonoidWithZero.toZero.{u2} R (CommSemiring.toCommMonoidWithZero.{u2} R (CommRing.toCommSemiring.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (MulActionWithZero.toSMulWithZero.{u2, u1} R M (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4))) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_5))))) (Module.toMulActionWithZero.{u2, u1} R M (Ring.toSemiring.{u2} R (CommRing.toRing.{u2} R _inst_4)) (AddCommGroup.toAddCommMonoid.{u1} M _inst_5) _inst_6))))) r n) n))))
+Case conversion may be inaccurate. Consider using '#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smulₓ'. -/
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
∃ r ∈ I, ∀ n ∈ N, r • n = n :=
@@ -150,15 +184,33 @@ theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {
exact ⟨-(r - 1), I.neg_mem hr, fun n hn => by simpa [sub_smul] using hr' n hn⟩
#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul
+/- warning: submodule.fg_bot -> Submodule.fg_bot is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2], Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasBot.{u1, u2} R M _inst_1 _inst_2 _inst_3))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2], Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Bot.bot.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.instBotSubmodule.{u2, u1} R M _inst_1 _inst_2 _inst_3))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_bot Submodule.fg_botₓ'. -/
theorem fg_bot : (⊥ : Submodule R M).Fg :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
+/- warning: subalgebra.fg_bot_to_submodule -> Subalgebra.fg_bot_toSubmodule is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5], Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (coeFn.{succ u2, succ u2} (OrderEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6)))) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))))))) (fun (_x : RelEmbedding.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) => (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) -> (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6))) (RelEmbedding.hasCoeToFun.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (LE.le.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (SetLike.partialOrder.{u2, u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.setLike.{u1, u2} R A _inst_4 _inst_5 _inst_6))))) (LE.le.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)))))))) (Subalgebra.toSubmodule.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Bot.bot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toHasBot.{u2} (Subalgebra.{u1, u2} R A _inst_4 _inst_5 _inst_6) (Algebra.Subalgebra.completeLattice.{u1, u2} R A _inst_4 _inst_5 _inst_6))))
+but is expected to have type
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5], Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (fun (_x : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6))) (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) (RelEmbedding.toEmbedding.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.680 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (x._@.Mathlib.Order.Hom.Basic._hyg.682 : Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) => LE.le.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Preorder.toLE.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (PartialOrder.toPreorder.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (SetLike.instPartialOrder.{u1, u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) A (Subalgebra.instSetLikeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6)))) x._@.Mathlib.Order.Hom.Basic._hyg.680 x._@.Mathlib.Order.Hom.Basic._hyg.682) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.695 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (x._@.Mathlib.Order.Hom.Basic._hyg.697 : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) => LE.le.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Preorder.toLE.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.completeLattice.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)))))) x._@.Mathlib.Order.Hom.Basic._hyg.695 x._@.Mathlib.Order.Hom.Basic._hyg.697) (Subalgebra.toSubmodule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Bot.bot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (CompleteLattice.toBot.{u1} (Subalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Algebra.instCompleteLatticeSubalgebra.{u2, u1} R A _inst_4 _inst_5 _inst_6))))
+Case conversion may be inaccurate. Consider using '#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmoduleₓ'. -/
theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] :
(⊥ : Subalgebra R A).toSubmodule.Fg :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
+/- warning: submodule.fg_unit -> Submodule.fg_unit is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] (I : Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))), Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (coeBase.{succ u2, succ u2} (Units.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6))))) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Units.hasCoe.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))))))) I)
+but is expected to have type
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] (I : Units.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6))))), Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) (Units.val.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I)
+Case conversion may be inaccurate. Consider using '#align submodule.fg_unit Submodule.fg_unitₓ'. -/
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).Fg :=
by
@@ -174,34 +226,72 @@ theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I :
rwa [one_le, span_mul_span]
#align submodule.fg_unit Submodule.fg_unit
+/- warning: submodule.fg_of_is_unit -> Submodule.fg_of_isUnit is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_4 : CommSemiring.{u1} R] [_inst_5 : Semiring.{u2} A] [_inst_6 : Algebra.{u1, u2} R A _inst_4 _inst_5] {I : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u1, u2} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_5))) (Algebra.toModule.{u1, u2} R A _inst_4 _inst_5 _inst_6) I)
+but is expected to have type
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommSemiring.{u2} R] [_inst_5 : Semiring.{u1} A] [_inst_6 : Algebra.{u2, u1} R A _inst_4 _inst_5] {I : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)}, (IsUnit.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6)) (Submodule.idemSemiring.{u2, u1} R _inst_4 A _inst_5 _inst_6)))) I) -> (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_4) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_5))) (Algebra.toModule.{u2, u1} R A _inst_4 _inst_5 _inst_6) I)
+Case conversion may be inaccurate. Consider using '#align submodule.fg_of_is_unit Submodule.fg_of_isUnitₓ'. -/
theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
(hI : IsUnit I) : I.Fg :=
fg_unit hI.Unit
#align submodule.fg_of_is_unit Submodule.fg_of_isUnit
+#print Submodule.fg_span /-
theorem fg_span {s : Set M} (hs : s.Finite) : Fg (span R s) :=
⟨hs.toFinset, by rw [hs.coe_to_finset]⟩
#align submodule.fg_span Submodule.fg_span
+-/
+/- warning: submodule.fg_span_singleton -> Submodule.fg_span_singleton is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (x : M), Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (x : M), Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_span_singleton Submodule.fg_span_singletonₓ'. -/
theorem fg_span_singleton (x : M) : Fg (R ∙ x) :=
fg_span (finite_singleton x)
#align submodule.fg_span_singleton Submodule.fg_span_singleton
+/- warning: submodule.fg.sup -> Submodule.Fg.sup is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {N₁ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {N₁ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3} {N₂ : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₁) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N₂) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))) N₁ N₂))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.sup Submodule.Fg.supₓ'. -/
theorem Fg.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.Fg) (hN₂ : N₂.Fg) : (N₁ ⊔ N₂).Fg :=
let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [span_union, ht₁.2, ht₂.2]⟩
#align submodule.fg.sup Submodule.Fg.sup
+/- warning: submodule.fg_finset_sup -> Submodule.fg_finset_sup is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u2, u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3)))) (Submodule.orderBot.{u1, u2} R M _inst_1 _inst_2 _inst_3) s N))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Finset.sup.{u1, u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) ι (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) (Submodule.instOrderBotSubmoduleToLEToPreorderInstPartialOrderSetLike.{u2, u1} R M _inst_1 _inst_2 _inst_3) s N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_finset_sup Submodule.fg_finset_supₓ'. -/
theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
(s.sup N).Fg :=
Finset.sup_induction fg_bot (fun a ha b hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
+/- warning: submodule.fg_bsupr -> Submodule.fg_bsupr is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => supᵢ.{u2, 0} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) (Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) (fun (H : Membership.Mem.{u3, u3} ι (Finset.{u3} ι) (Finset.hasMem.{u3} ι) i s) => N i))))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} (s : Finset.{u3} ι) (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i))) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι (fun (i : ι) => supᵢ.{u1, 0} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) (Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) (fun (H : Membership.mem.{u3, u3} ι (Finset.{u3} ι) (Finset.instMembershipFinset.{u3} ι) i s) => N i))))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_bsupr Submodule.fg_bsuprₓ'. -/
theorem fg_bsupr {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
(⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_supᵢ] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_bsupr
+/- warning: submodule.fg_supr -> Submodule.fg_supᵢ is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u2, succ u3} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) ι N))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {ι : Type.{u3}} [_inst_4 : Finite.{succ u3} ι] (N : ι -> (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3)), (forall (i : ι), Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (N i)) -> (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 (supᵢ.{u1, succ u3} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) ι N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_supr Submodule.fg_supᵢₓ'. -/
theorem fg_supᵢ {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) : (supᵢ N).Fg :=
by
cases nonempty_fintype ι
@@ -212,6 +302,12 @@ variable {P : Type _} [AddCommMonoid P] [Module R P]
variable (f : M →ₗ[R] P)
+/- warning: submodule.fg.map -> Submodule.Fg.map is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N))
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 N) -> (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.map Submodule.Fg.mapₓ'. -/
theorem Fg.map {N : Submodule R M} (hs : N.Fg) : (N.map f).Fg :=
let ⟨t, ht⟩ := fg_def.1 hs
fg_def.2 ⟨f '' t, ht.1.image _, by rw [span_image, ht.2]⟩
@@ -219,6 +315,12 @@ theorem Fg.map {N : Submodule R M} (hs : N.Fg) : (N.map f).Fg :=
variable {f}
+/- warning: submodule.fg_of_fg_map_injective -> Submodule.fg_of_fg_map_injective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u3} M P (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) => M -> P) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (forall {N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomSurjective.ids.{u1} R _inst_1) (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f N)) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N))
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5), (Function.Injective.{succ u2, succ u1} M P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => P) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (forall {N : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Submodule.map.{u3, u3, u2, u1, max u2 u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomSurjective.ids.{u3} R _inst_1) (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M P _inst_2 _inst_4 _inst_3 _inst_5) (LinearMap.instSemilinearMapClassLinearMap.{u3, u3, u2, u1} R R M P _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f N)) -> (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injectiveₓ'. -/
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
(hfn : (N.map f).Fg) : N.Fg :=
let ⟨t, ht⟩ := hfn
@@ -231,20 +333,44 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
+/- warning: submodule.fg_of_fg_map -> Submodule.fg_of_fg_map is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasBot.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f N)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10), (Eq.{succ u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f) (Bot.bot.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instBotSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8))) -> (forall {N : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f N)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map Submodule.fg_of_fg_mapₓ'. -/
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P) (hf : f.ker = ⊥) {N : Submodule R M} (hfn : (N.map f).Fg) : N.Fg :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
#align submodule.fg_of_fg_map Submodule.fg_of_fg_map
+/- warning: submodule.fg_top -> Submodule.fg_top is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (N : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u2} (Submodule.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.hasTop.{u1, u2} R (coeSort.{succ u2, succ (succ u2)} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u1, u2} R M _inst_1 _inst_2 _inst_3)) N) _inst_1 (Submodule.addCommMonoid.{u1, u2} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 N)
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (N : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Top.top.{u1} (Submodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)) (Submodule.instTopSubmodule.{u2, u1} R (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (SetLike.instMembership.{u1, u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M (Submodule.setLike.{u2, u1} R M _inst_1 _inst_2 _inst_3)) x N)) _inst_1 (Submodule.addCommMonoid.{u2, u1} R M _inst_1 _inst_2 _inst_3 N) (Submodule.module.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)))) (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 N)
+Case conversion may be inaccurate. Consider using '#align submodule.fg_top Submodule.fg_topₓ'. -/
theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).Fg ↔ N.Fg :=
⟨fun h => N.range_subtype ▸ map_top N.Subtype ▸ h.map _, fun h =>
fg_of_fg_map_injective N.Subtype Subtype.val_injective <| by rwa [map_top, range_subtype]⟩
#align submodule.fg_top Submodule.fg_top
+/- warning: submodule.fg_of_linear_equiv -> Submodule.fg_of_linearEquiv is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4], (LinearEquiv.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomInvPair.ids.{u1} R _inst_1) (RingHomInvPair.ids.{u1} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 (Top.top.{u3} (Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5) (Submodule.hasTop.{u1, u3} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasTop.{u1, u2} R M _inst_1 _inst_2 _inst_3)))
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4], (LinearEquiv.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomInvPair.ids.{u3} R _inst_1) (RingHomInvPair.ids.{u3} R _inst_1) M P _inst_2 _inst_4 _inst_3 _inst_5) -> (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 (Top.top.{u1} (Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5) (Submodule.instTopSubmodule.{u3, u1} R P _inst_1 _inst_4 _inst_5))) -> (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 (Top.top.{u2} (Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.instTopSubmodule.{u3, u2} R M _inst_1 _inst_2 _inst_3)))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquivₓ'. -/
theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).Fg) : (⊤ : Submodule R M).Fg :=
e.symm.range ▸ map_top (e.symm : P →ₗ[R] M) ▸ h.map _
#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquiv
+/- warning: submodule.fg.prod -> Submodule.Fg.prod is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {P : Type.{u3}} [_inst_4 : AddCommMonoid.{u3} P] [_inst_5 : Module.{u1, u3} R P _inst_1 _inst_4] {sb : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u1, u3} R P _inst_1 _inst_4 _inst_5}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.Fg.{u1, u3} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.Fg.{u1, max u2 u3} R (Prod.{u2, u3} M P) _inst_1 (Prod.addCommMonoid.{u2, u3} M P _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u1, u2, u3} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] {P : Type.{u1}} [_inst_4 : AddCommMonoid.{u1} P] [_inst_5 : Module.{u3, u1} R P _inst_1 _inst_4] {sb : Submodule.{u3, u2} R M _inst_1 _inst_2 _inst_3} {sc : Submodule.{u3, u1} R P _inst_1 _inst_4 _inst_5}, (Submodule.Fg.{u3, u2} R M _inst_1 _inst_2 _inst_3 sb) -> (Submodule.Fg.{u3, u1} R P _inst_1 _inst_4 _inst_5 sc) -> (Submodule.Fg.{u3, max u2 u1} R (Prod.{u2, u1} M P) _inst_1 (Prod.instAddCommMonoidSum.{u2, u1} M P _inst_2 _inst_4) (Prod.module.{u3, u2, u1} R M P _inst_1 _inst_2 _inst_4 _inst_3 _inst_5) (Submodule.prod.{u3, u2, u1} R M _inst_1 _inst_2 _inst_3 sb P _inst_4 _inst_5 sc))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.prod Submodule.Fg.prodₓ'. -/
theorem Fg.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.Fg) (hsc : sc.Fg) :
(sb.Prod sc).Fg :=
let ⟨tb, htb⟩ := fg_def.1 hsb
@@ -254,6 +380,12 @@ theorem Fg.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.Fg) (hsc : s
by rw [LinearMap.span_inl_union_inr, htb.2, htc.2]⟩
#align submodule.fg.prod Submodule.Fg.prod
+/- warning: submodule.fg_pi -> Submodule.fg_pi is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u2}} {M : ι -> Type.{u3}} [_inst_6 : Finite.{succ u2} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u3} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u3} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.Fg.{u1, u3} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.Fg.{u1, max u2 u3} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u2, u3, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u2, u3} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u2} ι) p))
+but is expected to have type
+ forall {R : Type.{u1}} [_inst_1 : Semiring.{u1} R] {ι : Type.{u3}} {M : ι -> Type.{u2}} [_inst_6 : Finite.{succ u3} ι] [_inst_7 : forall (i : ι), AddCommMonoid.{u2} (M i)] [_inst_8 : forall (i : ι), Module.{u1, u2} R (M i) _inst_1 (_inst_7 i)] {p : forall (i : ι), Submodule.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i)}, (forall (i : ι), Submodule.Fg.{u1, u2} R (M i) _inst_1 (_inst_7 i) (_inst_8 i) (p i)) -> (Submodule.Fg.{u1, max u3 u2} R (forall (i : ι), M i) _inst_1 (Pi.addCommMonoid.{u3, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i)) (Pi.module.{u3, u2, u1} ι (fun (i : ι) => M i) R _inst_1 (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i)) (Submodule.pi.{u1, u3, u2} R ι _inst_1 (fun (i : ι) => M i) (fun (i : ι) => _inst_7 i) (fun (i : ι) => _inst_8 i) (Set.univ.{u3} ι) p))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_pi Submodule.fg_piₓ'. -/
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).Fg) :
(Submodule.pi Set.univ p).Fg := by
@@ -265,6 +397,12 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
simp_rw [span_Union, span_image, hts, Submodule.supᵢ_map_single]
#align submodule.fg_pi Submodule.fg_pi
+/- warning: submodule.fg_of_fg_map_of_fg_inf_ker -> Submodule.fg_of_fg_map_of_fg_inf_ker is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {P : Type.{u3}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} P] [_inst_10 : Module.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u1, u3} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_10 (Submodule.map.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomSurjective.ids.{u1} R (Ring.toSemiring.{u1} R _inst_6)) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f s)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.hasInf.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f))) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u3} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u1} P] [_inst_10 : Module.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9)] (f : LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) {s : Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8}, (Submodule.Fg.{u3, u1} R P (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_10 (Submodule.map.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (RingHomSurjective.ids.{u3} R (Ring.toSemiring.{u3} R _inst_6)) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f s)) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (Inf.inf.{u2} (Submodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) (Submodule.instInfSubmodule.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8) s (LinearMap.ker.{u3, u3, u2, u1, max u1 u2} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) (LinearMap.{u3, u3, u2, u1} R R (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u3, u3, u2, u1} R R M P (Ring.toSemiring.{u3} R _inst_6) (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_9) _inst_8 _inst_10 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R (Ring.toSemiring.{u3} R _inst_6)))) f))) -> (Submodule.Fg.{u3, u2} R M (Ring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 s)
+Case conversion may be inaccurate. Consider using '#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_kerₓ'. -/
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
@@ -342,6 +480,12 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
· exact fun _ _ _ => add_smul _ _ _
#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_ker
+/- warning: submodule.fg_induction -> Submodule.fg_induction is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) (M : Type.{u2}) [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7] (P : (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u2, u2} M (Set.{u2} M) (Set.hasSingleton.{u2} M) x))) -> (forall (M₁ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u1, u2} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8), (Submodule.Fg.{u1, u2} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
+but is expected to have type
+ forall (R : Type.{u2}) (M : Type.{u1}) [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7] (P : (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) -> Prop), (forall (x : M), P (Submodule.span.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Singleton.singleton.{u1, u1} M (Set.{u1} M) (Set.instSingletonSet.{u1} M) x))) -> (forall (M₁ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (M₂ : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (P M₁) -> (P M₂) -> (P (Sup.sup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (SemilatticeSup.toSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Lattice.toSemilatticeSup.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (ConditionallyCompleteLattice.toLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.completeLattice.{u2, u1} R M _inst_6 _inst_7 _inst_8))))) M₁ M₂))) -> (forall (N : Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8), (Submodule.Fg.{u2, u1} R M _inst_6 _inst_7 _inst_8 N) -> (P N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_induction Submodule.fg_inductionₓ'. -/
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
(h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.Fg) : P N := by
@@ -354,6 +498,12 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
apply h₂ <;> apply_assumption
#align submodule.fg_induction Submodule.fg_induction
+/- warning: submodule.fg_ker_comp -> Submodule.fg_ker_comp is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_6 : Ring.{u1} R] [_inst_7 : AddCommGroup.{u2} M] [_inst_8 : Module.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7)] [_inst_9 : AddCommGroup.{u3} N] [_inst_10 : Module.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9)] [_inst_11 : AddCommGroup.{u4} P] [_inst_12 : Module.{u1, u4} R P (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11)] (f : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u3, max u2 u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (LinearMap.semilinearMapClass.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.Fg.{u1, u3} R N (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_10 (LinearMap.ker.{u1, u1, u3, u4, max u3 u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u3, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u3, u4} R R N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g)) -> (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) (fun (_x : LinearMap.{u1, u1, u2, u3} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) f)) -> (Submodule.Fg.{u1, u2} R M (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) _inst_8 (LinearMap.ker.{u1, u1, u2, u4, max u2 u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (LinearMap.{u1, u1, u2, u4} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12) (LinearMap.semilinearMapClass.{u1, u1, u2, u4} R R M P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) (LinearMap.comp.{u1, u1, u1, u2, u3, u4} R R R M N P (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} M _inst_7) (AddCommGroup.toAddCommMonoid.{u3} N _inst_9) (AddCommGroup.toAddCommMonoid.{u4} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6))) (RingHomCompTriple.right_ids.{u1, u1} R R (Ring.toSemiring.{u1} R _inst_6) (Ring.toSemiring.{u1} R _inst_6) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (Ring.toSemiring.{u1} R _inst_6)))) g f)))
+but is expected to have type
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_6 : Ring.{u4} R] [_inst_7 : AddCommGroup.{u3} M] [_inst_8 : Module.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7)] [_inst_9 : AddCommGroup.{u2} N] [_inst_10 : Module.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9)] [_inst_11 : AddCommGroup.{u1} P] [_inst_12 : Module.{u4, u1} R P (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11)] (f : LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (NonAssocRing.toNonAssocSemiring.{u4} R (Ring.toNonAssocRing.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (g : LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (NonAssocRing.toNonAssocSemiring.{u4} R (Ring.toNonAssocRing.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12), (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u2, max u2 u3} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u2} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M N (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10) (Submodule.instSLMC.{u4, u4, u3, u2} R R M N (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_8 _inst_10 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) f)) -> (Submodule.Fg.{u4, u2} R N (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) _inst_10 (LinearMap.ker.{u4, u4, u2, u1, max u1 u2} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u2, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) N P (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12) (Submodule.instSLMC.{u4, u4, u2, u1} R R N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} M N (Submodule.asFun.{u4, u3, u2} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 N _inst_9 _inst_10 f)) -> (Submodule.Fg.{u4, u3} R M (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) _inst_8 (LinearMap.ker.{u4, u4, u3, u1, max u3 u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (LinearMap.{u4, u4, u3, u1} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) M P (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12) (LinearMap.instSemilinearMapClassLinearMap.{u4, u4, u3, u1} R R M P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) (LinearMap.comp.{u4, u4, u4, u3, u2, u1} R R R M N P (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_7) (AddCommGroup.toAddCommMonoid.{u2} N _inst_9) (AddCommGroup.toAddCommMonoid.{u1} P _inst_11) _inst_8 _inst_10 _inst_12 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6))) (RingHomCompTriple.ids.{u4, u4} R R (Ring.toSemiring.{u4} R _inst_6) (Ring.toSemiring.{u4} R _inst_6) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (Ring.toSemiring.{u4} R _inst_6)))) g f)))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_ker_comp Submodule.fg_ker_compₓ'. -/
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
@@ -366,6 +516,12 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
· rwa [inf_of_le_right (show f.ker ≤ comap f g.ker from comap_mono bot_le)]
#align submodule.fg_ker_comp Submodule.fg_ker_comp
+/- warning: submodule.fg_restrict_scalars -> Submodule.fg_restrictScalars is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} {M : Type.{u3}} [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u1, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u3} M] [_inst_10 : Module.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_11 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)] [_inst_12 : IsScalarTower.{u1, u2, u3} R S M (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} S M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u2, u3} S M (MulZeroClass.toHasZero.{u2} S (MulZeroOneClass.toMulZeroClass.{u2} S (MonoidWithZero.toMulZeroOneClass.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u2, u3} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M (AddCommGroup.toAddCommMonoid.{u3} M _inst_9)))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11))))] (N : Submodule.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10), (Submodule.Fg.{u2, u3} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (fun (_x : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (algebraMap.{u1, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.Fg.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) _inst_11 (Submodule.restrictScalars.{u1, u2, u3} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u3} M _inst_9) (CommSemiring.toSemiring.{u1} R _inst_6) _inst_11 _inst_10 (SMulZeroClass.toHasSmul.{u1, u2} R S (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R S (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R S (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} S (AddMonoid.toAddZeroClass.{u2} S (AddCommMonoid.toAddMonoid.{u2} S (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R S (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (Algebra.toModule.{u1, u2} R S _inst_6 _inst_7 _inst_8))))) _inst_12 N))
+but is expected to have type
+ forall {R : Type.{u3}} {S : Type.{u2}} {M : Type.{u1}} [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} S] [_inst_8 : Algebra.{u3, u2} R S _inst_6 _inst_7] [_inst_9 : AddCommGroup.{u1} M] [_inst_10 : Module.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_11 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9)] [_inst_12 : IsScalarTower.{u3, u2, u1} R S M (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) (SMulZeroClass.toSMul.{u2, u1} S M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u2, u1} S M (MonoidWithZero.toZero.{u2} S (Semiring.toMonoidWithZero.{u2} S _inst_7)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u2, u1} S M (Semiring.toMonoidWithZero.{u2} S _inst_7) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (NegZeroClass.toZero.{u1} M (SubNegZeroMonoid.toNegZeroClass.{u1} M (SubtractionMonoid.toSubNegZeroMonoid.{u1} M (SubtractionCommMonoid.toSubtractionMonoid.{u1} M (AddCommGroup.toDivisionAddCommMonoid.{u1} M _inst_9))))) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11))))] (N : Submodule.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10), (Submodule.Fg.{u2, u1} S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_10 N) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (Semiring.toNonAssocSemiring.{u2} S _inst_7)) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7)) R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7) (RingHom.instRingHomClassRingHom.{u3, u2} R S (Semiring.toNonAssocSemiring.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (Semiring.toNonAssocSemiring.{u2} S _inst_7))))) (algebraMap.{u3, u2} R S _inst_6 _inst_7 _inst_8))) -> (Submodule.Fg.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) _inst_11 (Submodule.restrictScalars.{u3, u2, u1} R S M _inst_7 (AddCommGroup.toAddCommMonoid.{u1} M _inst_9) (CommSemiring.toSemiring.{u3} R _inst_6) _inst_11 _inst_10 (Algebra.toSMul.{u3, u2} R S _inst_6 _inst_7 _inst_8) _inst_12 N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg_restrict_scalars Submodule.fg_restrictScalarsₓ'. -/
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
(hfin : N.Fg) (h : Function.Surjective (algebraMap R S)) : (Submodule.restrictScalars R N).Fg :=
@@ -375,6 +531,12 @@ theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algeb
exact (Submodule.restrictScalars_span R S h ↑X).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
+/- warning: submodule.fg.stablizes_of_supr_eq -> Submodule.Fg.stablizes_of_supᵢ_eq is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] {M' : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (supᵢ.{u2, 1} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toHasSup.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))) Nat (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) M' (coeFn.{succ u2, succ u2} (OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) (fun (_x : OrderHom.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) => Nat -> (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3)) (OrderHom.hasCoeToFun.{0, u2} Nat (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring))) (PartialOrder.toPreorder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3))))) N n))))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] {M' : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3}, (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 M') -> (forall (N : OrderHom.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))))), (Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (supᵢ.{u1, 1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (ConditionallyCompleteLattice.toSupSet.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3))) Nat (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N)) M') -> (Exists.{1} Nat (fun (n : Nat) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) M' (OrderHom.toFun.{0, u1} Nat (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring)) (PartialOrder.toPreorder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (OmegaCompletePartialOrder.toPartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (CompleteLattice.instOmegaCompletePartialOrder.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3)))) N n))))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_supᵢ_eqₓ'. -/
theorem Fg.stablizes_of_supᵢ_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
(H : supᵢ N = M') : ∃ n, M' = N n :=
by
@@ -395,6 +557,12 @@ theorem Fg.stablizes_of_supᵢ_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ
exact le_supᵢ _ _
#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_supᵢ_eq
+/- warning: submodule.fg_iff_compact -> Submodule.fg_iff_compact is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] (s : Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u1, u2} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u1, u2} R M _inst_1 _inst_2 _inst_3) s)
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] (s : Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3), Iff (Submodule.Fg.{u2, u1} R M _inst_1 _inst_2 _inst_3 s) (CompleteLattice.IsCompactElement.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.completeLattice.{u2, u1} R M _inst_1 _inst_2 _inst_3) s)
+Case conversion may be inaccurate. Consider using '#align submodule.fg_iff_compact Submodule.fg_iff_compactₓ'. -/
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactElement s := by
classical
@@ -436,6 +604,12 @@ variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
variable [Module R M] [Module R N] [Module R P]
+/- warning: submodule.fg.map₂ -> Submodule.Fg.map₂ is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} {P : Type.{u4}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : AddCommMonoid.{u3} N] [_inst_4 : AddCommMonoid.{u4} P] [_inst_5 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_6 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3] [_inst_7 : Module.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] (f : LinearMap.{u1, u1, u2, max u3 u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) M (LinearMap.{u1, u1, u3, u4} R R (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u1, u1, u3, u4} R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)))) _inst_5 (LinearMap.module.{u1, u1, u1, u3, u4} R R R N P (CommSemiring.toSemiring.{u1} R _inst_1) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1))) (CommSemiring.toSemiring.{u1} R _inst_1) _inst_7 (smulCommClass_self.{u1, u4} R P (CommSemiring.toCommMonoid.{u1} R _inst_1) (MulActionWithZero.toMulAction.{u1, u4} R P (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_1)) (AddZeroClass.toHasZero.{u4} P (AddMonoid.toAddZeroClass.{u4} P (AddCommMonoid.toAddMonoid.{u4} P _inst_4))) (Module.toMulActionWithZero.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6}, (Submodule.Fg.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.Fg.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.Fg.{u1, u4} R P (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u1, u2, u3, u4} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
+but is expected to have type
+ forall {R : Type.{u4}} {M : Type.{u3}} {N : Type.{u1}} {P : Type.{u2}} [_inst_1 : CommSemiring.{u4} R] [_inst_2 : AddCommMonoid.{u3} M] [_inst_3 : AddCommMonoid.{u1} N] [_inst_4 : AddCommMonoid.{u2} P] [_inst_5 : Module.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2] [_inst_6 : Module.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3] [_inst_7 : Module.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4] (f : LinearMap.{u4, u4, u3, max u2 u1} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) M (LinearMap.{u4, u4, u1, u2} R R (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) N P _inst_3 _inst_4 _inst_6 _inst_7) _inst_2 (LinearMap.addCommMonoid.{u4, u4, u1, u2} R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)))) _inst_5 (LinearMap.instModuleLinearMapAddCommMonoid.{u4, u4, u4, u1, u2} R R R N P (CommSemiring.toSemiring.{u4} R _inst_1) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_4 _inst_6 _inst_7 (RingHom.id.{u4} R (Semiring.toNonAssocSemiring.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1))) (CommSemiring.toSemiring.{u4} R _inst_1) _inst_7 (smulCommClass_self.{u4, u2} R P (CommSemiring.toCommMonoid.{u4} R _inst_1) (MulActionWithZero.toMulAction.{u4, u2} R P (Semiring.toMonoidWithZero.{u4} R (CommSemiring.toSemiring.{u4} R _inst_1)) (AddMonoid.toZero.{u2} P (AddCommMonoid.toAddMonoid.{u2} P _inst_4)) (Module.toMulActionWithZero.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7))))) {p : Submodule.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5} {q : Submodule.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6}, (Submodule.Fg.{u4, u3} R M (CommSemiring.toSemiring.{u4} R _inst_1) _inst_2 _inst_5 p) -> (Submodule.Fg.{u4, u1} R N (CommSemiring.toSemiring.{u4} R _inst_1) _inst_3 _inst_6 q) -> (Submodule.Fg.{u4, u2} R P (CommSemiring.toSemiring.{u4} R _inst_1) _inst_4 _inst_7 (Submodule.map₂.{u4, u3, u1, u2} R M N P _inst_1 _inst_2 _inst_3 _inst_4 _inst_5 _inst_6 _inst_7 f p q))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.map₂ Submodule.Fg.map₂ₓ'. -/
theorem Fg.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.Fg)
(hq : q.Fg) : (map₂ f p q).Fg :=
let ⟨sm, hfm, hm⟩ := fg_def.1 hp
@@ -453,10 +627,22 @@ variable {R : Type _} {A : Type _} [CommSemiring R] [Semiring A] [Algebra R A]
variable {M N : Submodule R A}
+/- warning: submodule.fg.mul -> Submodule.Fg.mul is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u2, u2, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u1, u2} R _inst_1 A _inst_2 _inst_3)) M N))
+but is expected to have type
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)} {N : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) N) -> (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HMul.hMul.{u1, u1, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHMul.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.mul.{u2, u1} R _inst_1 A _inst_2 _inst_3)) M N))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.mul Submodule.Fg.mulₓ'. -/
theorem Fg.mul (hm : M.Fg) (hn : N.Fg) : (M * N).Fg :=
hm.zipWith _ hn
#align submodule.fg.mul Submodule.Fg.mul
+/- warning: submodule.fg.pow -> Submodule.Fg.pow is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} [_inst_1 : CommSemiring.{u1} R] [_inst_2 : Semiring.{u2} A] [_inst_3 : Algebra.{u1, u2} R A _inst_1 _inst_2] {M : Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.Fg.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u2, 0, u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u2, 0} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u2} (Submodule.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_2))) (Algebra.toModule.{u1, u2} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u1, u2} R _inst_1 A _inst_2 _inst_3)))))) M n))
+but is expected to have type
+ forall {R : Type.{u2}} {A : Type.{u1}} [_inst_1 : CommSemiring.{u2} R] [_inst_2 : Semiring.{u1} A] [_inst_3 : Algebra.{u2, u1} R A _inst_1 _inst_2] {M : Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)}, (Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) M) -> (forall (n : Nat), Submodule.Fg.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3) (HPow.hPow.{u1, 0, u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (instHPow.{u1, 0} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) Nat (Monoid.Pow.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (MonoidWithZero.toMonoid.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Semiring.toMonoidWithZero.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (IdemSemiring.toSemiring.{u1} (Submodule.{u2, u1} R A (CommSemiring.toSemiring.{u2} R _inst_1) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} A (Semiring.toNonAssocSemiring.{u1} A _inst_2))) (Algebra.toModule.{u2, u1} R A _inst_1 _inst_2 _inst_3)) (Submodule.idemSemiring.{u2, u1} R _inst_1 A _inst_2 _inst_3)))))) M n))
+Case conversion may be inaccurate. Consider using '#align submodule.fg.pow Submodule.Fg.powₓ'. -/
theorem Fg.pow (h : M.Fg) (n : ℕ) : (M ^ n).Fg :=
Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
#align submodule.fg.pow Submodule.Fg.pow
@@ -469,13 +655,21 @@ namespace Ideal
variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
+#print Ideal.Fg /-
/-- An ideal of `R` is finitely generated if it is the span of a finite subset of `R`.
This is defeq to `submodule.fg`, but unfolds more nicely. -/
def Fg (I : Ideal R) : Prop :=
∃ S : Finset R, Ideal.span ↑S = I
#align ideal.fg Ideal.Fg
+-/
+/- warning: ideal.fg.map -> Ideal.Fg.map is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} [_inst_4 : Semiring.{u1} R] [_inst_5 : Semiring.{u2} S] {I : Ideal.{u1} R _inst_4}, (Ideal.Fg.{u1} R _inst_4 I) -> (forall (f : RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)), Ideal.Fg.{u2} S _inst_5 (Ideal.map.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) _inst_4 _inst_5 (RingHom.ringHomClass.{u1, u2} R S (Semiring.toNonAssocSemiring.{u1} R _inst_4) (Semiring.toNonAssocSemiring.{u2} S _inst_5)) f I))
+but is expected to have type
+ forall {R : Type.{u2}} {S : Type.{u1}} [_inst_4 : Semiring.{u2} R] [_inst_5 : Semiring.{u1} S] {I : Ideal.{u2} R _inst_4}, (Ideal.Fg.{u2} R _inst_4 I) -> (forall (f : RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)), Ideal.Fg.{u1} S _inst_5 (Ideal.map.{u2, u1, max u2 u1} R S (RingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) _inst_4 _inst_5 (RingHom.instRingHomClassRingHom.{u2, u1} R S (Semiring.toNonAssocSemiring.{u2} R _inst_4) (Semiring.toNonAssocSemiring.{u1} S _inst_5)) f I))
+Case conversion may be inaccurate. Consider using '#align ideal.fg.map Ideal.Fg.mapₓ'. -/
/-- The image of a finitely generated ideal is finitely generated.
This is the `ideal` version of `submodule.fg.map`. -/
@@ -487,6 +681,12 @@ theorem Fg.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.Fg)
rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.Fg.map
+/- warning: ideal.fg_ker_comp -> Ideal.fg_ker_comp is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {S : Type.{u2}} {A : Type.{u3}} [_inst_4 : CommRing.{u1} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u3} A] (f : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))), (Ideal.Fg.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u2, max u1 u2} R S (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ringHomClass.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u3, max u2 u3} S A (RingHom.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u2, u3} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) g)) -> (Function.Surjective.{succ u1, succ u2} R S (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (fun (_x : RingHom.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) => R -> S) (RingHom.hasCoeToFun.{u1, u2} R S (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u1} R (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (RingHom.ker.{u1, u3, max u1 u3} R A (RingHom.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (Ring.toSemiring.{u1} R (CommRing.toRing.{u1} R _inst_4)) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_6)) (RingHom.ringHomClass.{u1, u3} R A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6)))) (RingHom.comp.{u1, u2, u3} R S A (NonAssocRing.toNonAssocSemiring.{u1} R (Ring.toNonAssocRing.{u1} R (CommRing.toRing.{u1} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_6))) g f)))
+but is expected to have type
+ forall {R : Type.{u3}} {S : Type.{u2}} {A : Type.{u1}} [_inst_4 : CommRing.{u3} R] [_inst_5 : CommRing.{u2} S] [_inst_6 : CommRing.{u1} A] (f : RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (g : RingHom.{u2, u1} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))), (Ideal.Fg.{u3} R (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (RingHom.ker.{u3, u2, max u3 u2} R S (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.instRingHomClassRingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) f)) -> (Ideal.Fg.{u2} S (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (RingHom.ker.{u2, u1, max u2 u1} S A (RingHom.{u2, u1} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) (Ring.toSemiring.{u2} S (CommRing.toRing.{u2} S _inst_5)) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u2, u1} S A (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) g)) -> (Function.Surjective.{succ u3, succ u2} R S (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : R) => S) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R S (NonUnitalNonAssocSemiring.toMul.{u3} R (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))))) (NonUnitalNonAssocSemiring.toMul.{u2} S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))))) (NonUnitalRingHomClass.toMulHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R S (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} R (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} S (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) (RingHomClass.toNonUnitalRingHomClass.{max u3 u2, u3, u2} (RingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5)))) R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (RingHom.instRingHomClassRingHom.{u3, u2} R S (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))))))) f)) -> (Ideal.Fg.{u3} R (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (RingHom.ker.{u3, u1, max u3 u1} R A (RingHom.{u3, u1} R A (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) (Ring.toSemiring.{u3} R (CommRing.toRing.{u3} R _inst_4)) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_6)) (RingHom.instRingHomClassRingHom.{u3, u1} R A (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6)))) (RingHom.comp.{u3, u2, u1} R S A (NonAssocRing.toNonAssocSemiring.{u3} R (Ring.toNonAssocRing.{u3} R (CommRing.toRing.{u3} R _inst_4))) (NonAssocRing.toNonAssocSemiring.{u2} S (Ring.toNonAssocRing.{u2} S (CommRing.toRing.{u2} S _inst_5))) (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_6))) g f)))
+Case conversion may be inaccurate. Consider using '#align ideal.fg_ker_comp Ideal.fg_ker_compₓ'. -/
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.Fg) (hg : g.ker.Fg) (hsur : Function.Surjective f) :
(g.comp f).ker.Fg := by
@@ -499,6 +699,7 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars g.ker hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
+#print Ideal.exists_radical_pow_le_of_fg /-
theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.Fg) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
@@ -518,6 +719,7 @@ theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R)
rw [add_comm, Nat.add_sub_assoc h.le]
apply Nat.le_add_right
#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fg
+-/
end Ideal
@@ -525,15 +727,23 @@ section ModuleAndAlgebra
variable (R A B M N : Type _)
+#print Module.Finite /-
/-- A module over a semiring is `finite` if it is finitely generated as a module. -/
class Module.Finite [Semiring R] [AddCommMonoid M] [Module R M] : Prop where
out : (⊤ : Submodule R M).Fg
#align module.finite Module.Finite
+-/
namespace Module
variable [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid N] [Module R N]
+/- warning: module.finite_def -> Module.finite_def is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_6 : Semiring.{u1} R] [_inst_7 : AddCommMonoid.{u2} M] [_inst_8 : Module.{u1, u2} R M _inst_6 _inst_7], Iff (Module.Finite.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.Fg.{u1, u2} R M _inst_6 _inst_7 _inst_8 (Top.top.{u2} (Submodule.{u1, u2} R M _inst_6 _inst_7 _inst_8) (Submodule.hasTop.{u1, u2} R M _inst_6 _inst_7 _inst_8)))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_6 : Semiring.{u2} R] [_inst_7 : AddCommMonoid.{u1} M] [_inst_8 : Module.{u2, u1} R M _inst_6 _inst_7], Iff (Module.Finite.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.Fg.{u2, u1} R M _inst_6 _inst_7 _inst_8 (Top.top.{u1} (Submodule.{u2, u1} R M _inst_6 _inst_7 _inst_8) (Submodule.instTopSubmodule.{u2, u1} R M _inst_6 _inst_7 _inst_8)))
+Case conversion may be inaccurate. Consider using '#align module.finite_def Module.finite_defₓ'. -/
theorem finite_def {R M} [Semiring R] [AddCommMonoid M] [Module R M] :
Finite R M ↔ (⊤ : Submodule R M).Fg :=
⟨fun h => h.1, fun h => ⟨h⟩⟩
@@ -543,22 +753,42 @@ namespace Finite
open _Root_.Submodule Set
-theorem iff_add_monoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.Fg M :=
- ⟨fun h => AddMonoid.fg_def.2 <| (fg_iff_add_submonoid_fg ⊤).1 (finite_def.1 h), fun h =>
- finite_def.2 <| (fg_iff_add_submonoid_fg ⊤).2 (AddMonoid.fg_def.1 h)⟩
-#align module.finite.iff_add_monoid_fg Module.Finite.iff_add_monoid_fg
+#print Module.Finite.iff_addMonoid_fg /-
+theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.Fg M :=
+ ⟨fun h => AddMonoid.fg_def.2 <| (fg_iff_addSubmonoid_fg ⊤).1 (finite_def.1 h), fun h =>
+ finite_def.2 <| (fg_iff_addSubmonoid_fg ⊤).2 (AddMonoid.fg_def.1 h)⟩
+#align module.finite.iff_add_monoid_fg Module.Finite.iff_addMonoid_fg
+-/
-theorem iff_add_group_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.Fg G :=
+/- warning: module.finite.iff_add_group_fg -> Module.Finite.iff_addGroup_fg is a dubious translation:
+lean 3 declaration is
+ forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.semiring (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
+but is expected to have type
+ forall {G : Type.{u1}} [_inst_6 : AddCommGroup.{u1} G], Iff (Module.Finite.{0, u1} Int G Int.instSemiringInt (AddCommGroup.toAddCommMonoid.{u1} G _inst_6) (AddCommGroup.intModule.{u1} G _inst_6)) (AddGroup.Fg.{u1} G (AddCommGroup.toAddGroup.{u1} G _inst_6))
+Case conversion may be inaccurate. Consider using '#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fgₓ'. -/
+theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.Fg G :=
⟨fun h => AddGroup.fg_def.2 <| (fg_iff_add_subgroup_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (fg_iff_add_subgroup_fg ⊤).2 (AddGroup.fg_def.1 h)⟩
-#align module.finite.iff_add_group_fg Module.Finite.iff_add_group_fg
+#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fg
variable {R M N}
+/- warning: module.finite.exists_fin -> Module.Finite.exists_fin is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_6 : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3], Exists.{1} Nat (fun (n : Nat) => Exists.{succ u2} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u1, u2} R M _inst_1 _inst_2 _inst_3 (Set.range.{u2, 1} M (Fin n) s)) (Top.top.{u2} (Submodule.{u1, u2} R M _inst_1 _inst_2 _inst_3) (Submodule.hasTop.{u1, u2} R M _inst_1 _inst_2 _inst_3))))
+but is expected to have type
+ forall {R : Type.{u2}} {M : Type.{u1}} [_inst_1 : Semiring.{u2} R] [_inst_2 : AddCommMonoid.{u1} M] [_inst_3 : Module.{u2, u1} R M _inst_1 _inst_2] [_inst_6 : Module.Finite.{u2, u1} R M _inst_1 _inst_2 _inst_3], Exists.{1} Nat (fun (n : Nat) => Exists.{succ u1} ((Fin n) -> M) (fun (s : (Fin n) -> M) => Eq.{succ u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.span.{u2, u1} R M _inst_1 _inst_2 _inst_3 (Set.range.{u1, 1} M (Fin n) s)) (Top.top.{u1} (Submodule.{u2, u1} R M _inst_1 _inst_2 _inst_3) (Submodule.instTopSubmodule.{u2, u1} R M _inst_1 _inst_2 _inst_3))))
+Case conversion may be inaccurate. Consider using '#align module.finite.exists_fin Module.Finite.exists_finₓ'. -/
theorem exists_fin [Finite R M] : ∃ (n : ℕ)(s : Fin n → M), span R (range s) = ⊤ :=
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
+/- warning: module.finite.of_surjective -> Module.Finite.of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u3} M N (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) (fun (_x : LinearMap.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) => M -> N) (LinearMap.hasCoeToFun.{u1, u1, u2, u3} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1))) f)) -> (Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5)
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3] (f : LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5), (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (LinearMap.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) M N _inst_2 _inst_4 _inst_3 _inst_5) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Module.LinearMap._hyg.6190 : M) => N) _x) (LinearMap.instFunLikeLinearMap.{u3, u3, u2, u1} R R M N _inst_1 _inst_1 _inst_2 _inst_4 _inst_3 _inst_5 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1))) f)) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
+Case conversion may be inaccurate. Consider using '#align module.finite.of_surjective Module.Finite.of_surjectiveₓ'. -/
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
rw [← LinearMap.range_eq_top.2 hf, ← Submodule.map_top]
@@ -567,13 +797,21 @@ theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f)
variable (R)
+#print Module.Finite.self /-
instance self : Finite R R :=
⟨⟨{1}, by simpa only [Finset.coe_singleton] using Ideal.span_singleton_one⟩⟩
#align module.finite.self Module.Finite.self
+-/
variable (M)
-theorem of_restrict_scalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
+/- warning: module.finite.of_restrict_scalars_finite -> Module.Finite.of_restrictScalars_finite is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) (A : Type.{u2}) (M : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : AddCommMonoid.{u3} M] [_inst_9 : Module.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_8] [_inst_10 : Module.{u2, u3} A M _inst_7 _inst_8] [_inst_11 : Algebra.{u1, u2} R A _inst_6 _inst_7] [_inst_12 : IsScalarTower.{u1, u2, u3} R A M (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7)))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A _inst_7))) (Algebra.toModule.{u1, u2} R A _inst_6 _inst_7 _inst_11))))) (SMulZeroClass.toHasSmul.{u2, u3} A M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (SMulWithZero.toSmulZeroClass.{u2, u3} A M (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (MulActionWithZero.toSMulWithZero.{u2, u3} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (Module.toMulActionWithZero.{u2, u3} A M _inst_7 _inst_8 _inst_10)))) (SMulZeroClass.toHasSmul.{u1, u3} R M (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (SMulWithZero.toSmulZeroClass.{u1, u3} R M (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (MulActionWithZero.toSMulWithZero.{u1, u3} R M (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} M (AddMonoid.toAddZeroClass.{u3} M (AddCommMonoid.toAddMonoid.{u3} M _inst_8))) (Module.toMulActionWithZero.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_8 _inst_9))))] [hM : Module.Finite.{u1, u3} R M (CommSemiring.toSemiring.{u1} R _inst_6) _inst_8 _inst_9], Module.Finite.{u2, u3} A M _inst_7 _inst_8 _inst_10
+but is expected to have type
+ forall (R : Type.{u3}) (A : Type.{u2}) (M : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : Semiring.{u2} A] [_inst_8 : AddCommMonoid.{u1} M] [_inst_9 : Module.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_8] [_inst_10 : Module.{u2, u1} A M _inst_7 _inst_8] [_inst_11 : Algebra.{u3, u2} R A _inst_6 _inst_7] [_inst_12 : IsScalarTower.{u3, u2, u1} R A M (Algebra.toSMul.{u3, u2} R A _inst_6 _inst_7 _inst_11) (SMulZeroClass.toSMul.{u2, u1} A M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (SMulWithZero.toSMulZeroClass.{u2, u1} A M (MonoidWithZero.toZero.{u2} A (Semiring.toMonoidWithZero.{u2} A _inst_7)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (MulActionWithZero.toSMulWithZero.{u2, u1} A M (Semiring.toMonoidWithZero.{u2} A _inst_7) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (Module.toMulActionWithZero.{u2, u1} A M _inst_7 _inst_8 _inst_10)))) (SMulZeroClass.toSMul.{u3, u1} R M (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (SMulWithZero.toSMulZeroClass.{u3, u1} R M (CommMonoidWithZero.toZero.{u3} R (CommSemiring.toCommMonoidWithZero.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (MulActionWithZero.toSMulWithZero.{u3, u1} R M (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R _inst_6)) (AddMonoid.toZero.{u1} M (AddCommMonoid.toAddMonoid.{u1} M _inst_8)) (Module.toMulActionWithZero.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_8 _inst_9))))] [hM : Module.Finite.{u3, u1} R M (CommSemiring.toSemiring.{u3} R _inst_6) _inst_8 _inst_9], Module.Finite.{u2, u1} A M _inst_7 _inst_8 _inst_10
+Case conversion may be inaccurate. Consider using '#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrictScalars_finiteₓ'. -/
+theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
[Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] : Finite A M :=
by
rw [finite_def, fg_def] at hM⊢
@@ -582,29 +820,49 @@ theorem of_restrict_scalars_finite (R A M : Type _) [CommSemiring R] [Semiring A
have := Submodule.span_le_restrictScalars R A S
rw [hSgen] at this
exact this
-#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrict_scalars_finite
+#align module.finite.of_restrict_scalars_finite Module.Finite.of_restrictScalars_finite
variable {R M}
+/- warning: module.finite.prod -> Module.Finite.prod is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5], Module.Finite.{u1, max u2 u3} R (Prod.{u2, u3} M N) _inst_1 (Prod.addCommMonoid.{u2, u3} M N _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M N _inst_1 _inst_2 _inst_4 _inst_3 _inst_5)
+but is expected to have type
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5], Module.Finite.{u1, max u3 u2} R (Prod.{u2, u3} M N) _inst_1 (Prod.instAddCommMonoidSum.{u2, u3} M N _inst_2 _inst_4) (Prod.module.{u1, u2, u3} R M N _inst_1 _inst_2 _inst_4 _inst_3 _inst_5)
+Case conversion may be inaccurate. Consider using '#align module.finite.prod Module.Finite.prodₓ'. -/
instance prod [hM : Finite R M] [hN : Finite R N] : Finite R (M × N) :=
⟨by
rw [← Submodule.prod_top]
exact hM.1.Prod hN.1⟩
#align module.finite.prod Module.Finite.prod
+#print Module.Finite.pi /-
instance pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] [h : ∀ i, Finite R (M i)] : Finite R (∀ i, M i) :=
⟨by
rw [← Submodule.pi_top]
exact Submodule.fg_pi fun i => (h i).1⟩
#align module.finite.pi Module.Finite.pi
+-/
+/- warning: module.finite.equiv -> Module.Finite.equiv is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Semiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N _inst_1 _inst_4] [hM : Module.Finite.{u1, u2} R M _inst_1 _inst_2 _inst_3], (LinearEquiv.{u1, u1, u2, u3} R R _inst_1 _inst_1 (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHom.id.{u1} R (Semiring.toNonAssocSemiring.{u1} R _inst_1)) (RingHomInvPair.ids.{u1} R _inst_1) (RingHomInvPair.ids.{u1} R _inst_1) M N _inst_2 _inst_4 _inst_3 _inst_5) -> (Module.Finite.{u1, u3} R N _inst_1 _inst_4 _inst_5)
+but is expected to have type
+ forall {R : Type.{u3}} {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Semiring.{u3} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u3, u2} R M _inst_1 _inst_2] [_inst_4 : AddCommMonoid.{u1} N] [_inst_5 : Module.{u3, u1} R N _inst_1 _inst_4] [hM : Module.Finite.{u3, u2} R M _inst_1 _inst_2 _inst_3], (LinearEquiv.{u3, u3, u2, u1} R R _inst_1 _inst_1 (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHom.id.{u3} R (Semiring.toNonAssocSemiring.{u3} R _inst_1)) (RingHomInvPair.ids.{u3} R _inst_1) (RingHomInvPair.ids.{u3} R _inst_1) M N _inst_2 _inst_4 _inst_3 _inst_5) -> (Module.Finite.{u3, u1} R N _inst_1 _inst_4 _inst_5)
+Case conversion may be inaccurate. Consider using '#align module.finite.equiv Module.Finite.equivₓ'. -/
theorem equiv [hM : Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
of_surjective (e : M →ₗ[R] N) e.Surjective
#align module.finite.equiv Module.Finite.equiv
section Algebra
+/- warning: module.finite.trans -> Module.Finite.trans is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} (A : Type.{u2}) (B : Type.{u3}) [_inst_6 : CommSemiring.{u1} R] [_inst_7 : CommSemiring.{u2} A] [_inst_8 : Algebra.{u1, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7)] [_inst_9 : Semiring.{u3} B] [_inst_10 : Algebra.{u1, u3} R B _inst_6 _inst_9] [_inst_11 : Algebra.{u2, u3} A B _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u1, u2, u3} R A B (SMulZeroClass.toHasSmul.{u1, u2} R A (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))))) (SMulWithZero.toSmulZeroClass.{u1, u2} R A (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))))) (MulActionWithZero.toSMulWithZero.{u1, u2} R A (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u2} A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))))) (Module.toMulActionWithZero.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u1, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8))))) (SMulZeroClass.toHasSmul.{u2, u3} A B (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (SMulWithZero.toSmulZeroClass.{u2, u3} A B (MulZeroClass.toHasZero.{u2} A (MulZeroOneClass.toMulZeroClass.{u2} A (MonoidWithZero.toMulZeroOneClass.{u2} A (Semiring.toMonoidWithZero.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7))))) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (MulActionWithZero.toSMulWithZero.{u2, u3} A B (Semiring.toMonoidWithZero.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (Module.toMulActionWithZero.{u2, u3} A B (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u2, u3} A B _inst_7 _inst_9 _inst_11))))) (SMulZeroClass.toHasSmul.{u1, u3} R B (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (SMulWithZero.toSmulZeroClass.{u1, u3} R B (MulZeroClass.toHasZero.{u1} R (MulZeroOneClass.toMulZeroClass.{u1} R (MonoidWithZero.toMulZeroOneClass.{u1} R (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6))))) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} R B (Semiring.toMonoidWithZero.{u1} R (CommSemiring.toSemiring.{u1} R _inst_6)) (AddZeroClass.toHasZero.{u3} B (AddMonoid.toAddZeroClass.{u3} B (AddCommMonoid.toAddMonoid.{u3} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9)))))) (Module.toMulActionWithZero.{u1, u3} R B (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u1, u3} R B _inst_6 _inst_9 _inst_10)))))] [_inst_13 : Module.Finite.{u1, u2} R A (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u1, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8)] [_inst_14 : Module.Finite.{u2, u3} A B (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u2, u3} A B _inst_7 _inst_9 _inst_11)], Module.Finite.{u1, u3} R B (CommSemiring.toSemiring.{u1} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u3} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u3} B (Semiring.toNonAssocSemiring.{u3} B _inst_9))) (Algebra.toModule.{u1, u3} R B _inst_6 _inst_9 _inst_10)
+but is expected to have type
+ forall {R : Type.{u3}} (A : Type.{u2}) (B : Type.{u1}) [_inst_6 : CommSemiring.{u3} R] [_inst_7 : CommSemiring.{u2} A] [_inst_8 : Algebra.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7)] [_inst_9 : Semiring.{u1} B] [_inst_10 : Algebra.{u3, u1} R B _inst_6 _inst_9] [_inst_11 : Algebra.{u2, u1} A B _inst_7 _inst_9] [_inst_12 : IsScalarTower.{u3, u2, u1} R A B (Algebra.toSMul.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8) (Algebra.toSMul.{u2, u1} A B _inst_7 _inst_9 _inst_11) (Algebra.toSMul.{u3, u1} R B _inst_6 _inst_9 _inst_10)] [_inst_13 : Module.Finite.{u3, u2} R A (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (CommSemiring.toSemiring.{u2} A _inst_7)))) (Algebra.toModule.{u3, u2} R A _inst_6 (CommSemiring.toSemiring.{u2} A _inst_7) _inst_8)] [_inst_14 : Module.Finite.{u2, u1} A B (CommSemiring.toSemiring.{u2} A _inst_7) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B _inst_9))) (Algebra.toModule.{u2, u1} A B _inst_7 _inst_9 _inst_11)], Module.Finite.{u3, u1} R B (CommSemiring.toSemiring.{u3} R _inst_6) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B _inst_9))) (Algebra.toModule.{u3, u1} R B _inst_6 _inst_9 _inst_10)
+Case conversion may be inaccurate. Consider using '#align module.finite.trans Module.Finite.transₓ'. -/
theorem trans {R : Type _} (A B : Type _) [CommSemiring R] [CommSemiring A] [Algebra R A]
[Semiring B] [Algebra R B] [Algebra A B] [IsScalarTower R A B] :
∀ [Finite R A] [Finite A B], Finite R B
@@ -622,6 +880,7 @@ end Finite
end Module
+#print Module.Finite.base_change /-
instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M]
[Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by
classical
@@ -637,7 +896,14 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
exact Submodule.smul_mem _ x (Submodule.subset_span <| Set.mem_range_self y)
· exact fun _ _ => Submodule.add_mem _
#align module.finite.base_change Module.Finite.base_change
+-/
+/- warning: module.finite.tensor_product -> Module.Finite.tensorProduct is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) (M : Type.{u2}) (N : Type.{u3}) [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] [hM : Module.Finite.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_5], Module.Finite.{u1, max u2 u3} R (TensorProduct.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (CommSemiring.toSemiring.{u1} R _inst_1) (TensorProduct.addCommMonoid.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (TensorProduct.module.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5)
+but is expected to have type
+ forall (R : Type.{u1}) (M : Type.{u2}) (N : Type.{u3}) [_inst_1 : CommSemiring.{u1} R] [_inst_2 : AddCommMonoid.{u2} M] [_inst_3 : Module.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2] [_inst_4 : AddCommMonoid.{u3} N] [_inst_5 : Module.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4] [hM : Module.Finite.{u1, u2} R M (CommSemiring.toSemiring.{u1} R _inst_1) _inst_2 _inst_3] [hN : Module.Finite.{u1, u3} R N (CommSemiring.toSemiring.{u1} R _inst_1) _inst_4 _inst_5], Module.Finite.{u1, max u3 u2} R (TensorProduct.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (CommSemiring.toSemiring.{u1} R _inst_1) (TensorProduct.addCommMonoid.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5) (TensorProduct.instModuleTensorProductToSemiringAddCommMonoid.{u1, u2, u3} R _inst_1 M N _inst_2 _inst_4 _inst_3 _inst_5)
+Case conversion may be inaccurate. Consider using '#align module.finite.tensor_product Module.Finite.tensorProductₓ'. -/
instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module R M]
[AddCommMonoid N] [Module R N] [hM : Module.Finite R M] [hN : Module.Finite R N] :
Module.Finite R (TensorProduct R M N)
@@ -650,27 +916,43 @@ namespace RingHom
variable {A B C : Type _} [CommRing A] [CommRing B] [CommRing C]
+#print RingHom.Finite /-
/-- A ring morphism `A →+* B` is `finite` if `B` is finitely generated as `A`-module. -/
def Finite (f : A →+* B) : Prop :=
letI : Algebra A B := f.to_algebra
Module.Finite A B
#align ring_hom.finite RingHom.Finite
+-/
namespace Finite
variable (A)
+#print RingHom.Finite.id /-
theorem id : Finite (RingHom.id A) :=
Module.Finite.self A
#align ring_hom.finite.id RingHom.Finite.id
+-/
variable {A}
+/- warning: ring_hom.finite.of_surjective -> RingHom.Finite.of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u1}} {B : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] (f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))), (Function.Surjective.{succ u1, succ u2} A B (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) (fun (_x : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) => A -> B) (RingHom.hasCoeToFun.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))) f)) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f)
+but is expected to have type
+ forall {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u2} A] [_inst_2 : CommRing.{u1} B] (f : RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : A) => B) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A B (NonUnitalNonAssocSemiring.toMul.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))))) (NonUnitalNonAssocSemiring.toMul.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2))))) (NonUnitalRingHomClass.toMulHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) (RingHomClass.toNonUnitalRingHomClass.{max u2 u1, u2, u1} (RingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2)))) A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2))) (RingHom.instRingHomClassRingHom.{u2, u1} A B (NonAssocRing.toNonAssocSemiring.{u2} A (Ring.toNonAssocRing.{u2} A (CommRing.toRing.{u2} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u1} B (Ring.toNonAssocRing.{u1} B (CommRing.toRing.{u1} B _inst_2))))))) f)) -> (RingHom.Finite.{u2, u1} A B _inst_1 _inst_2 f)
+Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_surjective RingHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.to_algebra
Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
#align ring_hom.finite.of_surjective RingHom.Finite.of_surjective
+/- warning: ring_hom.finite.comp -> RingHom.Finite.comp is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u1}} {B : Type.{u2}} {C : Type.{u3}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u3} C] {g : RingHom.{u2, u3} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3)))} {f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))}, (RingHom.Finite.{u2, u3} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u2} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u3} A C _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3))) g f))
+but is expected to have type
+ forall {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u3} B] [_inst_3 : CommRing.{u2} C] {g : RingHom.{u3, u2} B C (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u2} C (Ring.toNonAssocRing.{u2} C (CommRing.toRing.{u2} C _inst_3)))} {f : RingHom.{u1, u3} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2)))}, (RingHom.Finite.{u3, u2} B C _inst_2 _inst_3 g) -> (RingHom.Finite.{u1, u3} A B _inst_1 _inst_2 f) -> (RingHom.Finite.{u1, u2} A C _inst_1 _inst_3 (RingHom.comp.{u1, u3, u2} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u3} B (Ring.toNonAssocRing.{u3} B (CommRing.toRing.{u3} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u2} C (Ring.toNonAssocRing.{u2} C (CommRing.toRing.{u2} C _inst_3))) g f))
+Case conversion may be inaccurate. Consider using '#align ring_hom.finite.comp RingHom.Finite.compₓ'. -/
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
@Module.Finite.trans A B C _ _ f.toAlgebra _ (g.comp f).toAlgebra g.toAlgebra
(by
@@ -681,6 +963,12 @@ theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (
hf hg
#align ring_hom.finite.comp RingHom.Finite.comp
+/- warning: ring_hom.finite.of_comp_finite -> RingHom.Finite.of_comp_finite is a dubious translation:
+lean 3 declaration is
+ forall {A : Type.{u1}} {B : Type.{u2}} {C : Type.{u3}} [_inst_1 : CommRing.{u1} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u3} C] {f : RingHom.{u1, u2} A B (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))} {g : RingHom.{u2, u3} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3)))}, (RingHom.Finite.{u1, u3} A C _inst_1 _inst_3 (RingHom.comp.{u1, u2, u3} A B C (NonAssocRing.toNonAssocSemiring.{u1} A (Ring.toNonAssocRing.{u1} A (CommRing.toRing.{u1} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u3} C (Ring.toNonAssocRing.{u3} C (CommRing.toRing.{u3} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u3} B C _inst_2 _inst_3 g)
+but is expected to have type
+ forall {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u3} A] [_inst_2 : CommRing.{u2} B] [_inst_3 : CommRing.{u1} C] {f : RingHom.{u3, u2} A B (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2)))} {g : RingHom.{u2, u1} B C (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u1} C (Ring.toNonAssocRing.{u1} C (CommRing.toRing.{u1} C _inst_3)))}, (RingHom.Finite.{u3, u1} A C _inst_1 _inst_3 (RingHom.comp.{u3, u2, u1} A B C (NonAssocRing.toNonAssocSemiring.{u3} A (Ring.toNonAssocRing.{u3} A (CommRing.toRing.{u3} A _inst_1))) (NonAssocRing.toNonAssocSemiring.{u2} B (Ring.toNonAssocRing.{u2} B (CommRing.toRing.{u2} B _inst_2))) (NonAssocRing.toNonAssocSemiring.{u1} C (Ring.toNonAssocRing.{u1} C (CommRing.toRing.{u1} C _inst_3))) g f)) -> (RingHom.Finite.{u2, u1} B C _inst_2 _inst_3 g)
+Case conversion may be inaccurate. Consider using '#align ring_hom.finite.of_comp_finite RingHom.Finite.of_comp_finiteₓ'. -/
theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) : g.Finite :=
by
letI := f.to_algebra
@@ -688,7 +976,7 @@ theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) :
letI := (g.comp f).toAlgebra
letI : IsScalarTower A B C := RestrictScalars.isScalarTower A B C
letI : Module.Finite A C := h
- exact Module.Finite.of_restrict_scalars_finite A B C
+ exact Module.Finite.of_restrictScalars_finite A B C
#align ring_hom.finite.of_comp_finite RingHom.Finite.of_comp_finite
end Finite
@@ -703,30 +991,56 @@ variable [CommRing A] [CommRing B] [CommRing C]
variable [Algebra R A] [Algebra R B] [Algebra R C]
+#print AlgHom.Finite /-
/-- An algebra morphism `A →ₐ[R] B` is finite if it is finite as ring morphism.
In other words, if `B` is finitely generated as `A`-module. -/
def Finite (f : A →ₐ[R] B) : Prop :=
f.toRingHom.Finite
#align alg_hom.finite AlgHom.Finite
+-/
namespace Finite
variable (R A)
+/- warning: alg_hom.finite.id -> AlgHom.Finite.id is a dubious translation:
+lean 3 declaration is
+ forall (R : Type.{u1}) (A : Type.{u2}) [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))], AlgHom.Finite.{u1, u2, u2} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)
+but is expected to have type
+ forall (R : Type.{u2}) (A : Type.{u1}) [_inst_1 : CommRing.{u2} R] [_inst_2 : CommRing.{u1} A] [_inst_5 : Algebra.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2))], AlgHom.Finite.{u2, u1, u1} R A A _inst_1 _inst_2 _inst_2 _inst_5 _inst_5 (AlgHom.id.{u2, u1} R A (CommRing.toCommSemiring.{u2} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2)) _inst_5)
+Case conversion may be inaccurate. Consider using '#align alg_hom.finite.id AlgHom.Finite.idₓ'. -/
theorem id : Finite (AlgHom.id R A) :=
RingHom.Finite.id A
#align alg_hom.finite.id AlgHom.Finite.id
variable {R A}
+/- warning: alg_hom.finite.comp -> AlgHom.Finite.comp is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {C : Type.{u4}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u4} C] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u1, u4} R C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4))] {g : AlgHom.{u1, u3, u4} R B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u1, u3, u4} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u1, u2, u4} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u1, u2, u3, u4} R A B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
+but is expected to have type
+ forall {R : Type.{u4}} {A : Type.{u1}} {B : Type.{u3}} {C : Type.{u2}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u1} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u2} C] [_inst_5 : Algebra.{u4, u1} R A (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2))] [_inst_6 : Algebra.{u4, u3} R B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u4, u2} R C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u2} C (CommRing.toRing.{u2} C _inst_4))] {g : AlgHom.{u4, u3, u2} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u2} C (CommRing.toRing.{u2} C _inst_4)) _inst_6 _inst_7} {f : AlgHom.{u4, u1, u3} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6}, (AlgHom.Finite.{u4, u3, u2} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g) -> (AlgHom.Finite.{u4, u1, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f) -> (AlgHom.Finite.{u4, u1, u2} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u1, u3, u2} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} A (CommRing.toRing.{u1} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u2} C (CommRing.toRing.{u2} C _inst_4)) _inst_5 _inst_6 _inst_7 g f))
+Case conversion may be inaccurate. Consider using '#align alg_hom.finite.comp AlgHom.Finite.compₓ'. -/
theorem comp {g : B →ₐ[R] C} {f : A →ₐ[R] B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
RingHom.Finite.comp hg hf
#align alg_hom.finite.comp AlgHom.Finite.comp
+/- warning: alg_hom.finite.of_surjective -> AlgHom.Finite.of_surjective is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] (f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u3} A B (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) (fun (_x : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) => A -> B) ([anonymous].{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6) f)) -> (AlgHom.Finite.{u1, u2, u3} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
+but is expected to have type
+ forall {R : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [_inst_1 : CommRing.{u3} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u1} B] [_inst_5 : Algebra.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))] (f : AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6), (Function.Surjective.{succ u2, succ u1} A B (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.GroupAction._hyg.2186 : A) => B) _x) (SMulHomClass.toFunLike.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) R A B (SMulZeroClass.toSMul.{u3, u2} R A (AddMonoid.toZero.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))))) (DistribSMul.toSMulZeroClass.{u3, u2} R A (AddMonoid.toAddZeroClass.{u2} A (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))))) (DistribMulAction.toDistribSMul.{u3, u2} R A (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5))))) (SMulZeroClass.toSMul.{u3, u1} R B (AddMonoid.toZero.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))))) (DistribSMul.toSMulZeroClass.{u3, u1} R B (AddMonoid.toAddZeroClass.{u1} B (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))))) (DistribMulAction.toDistribSMul.{u3, u1} R B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_6))))) (DistribMulActionHomClass.toSMulHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (AddCommMonoid.toAddMonoid.{u2} A (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)))))) (AddCommMonoid.toAddMonoid.{u1} B (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)))))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_6)) (NonUnitalAlgHomClass.toDistribMulActionHomClass.{max u2 u1, u3, u2, u1} (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) R A B (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)))) (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)))) (Module.toDistribMulAction.{u3, u2} R A (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u2} A (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u2} A (Semiring.toNonAssocSemiring.{u2} A (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))))) (Algebra.toModule.{u3, u2} R A (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) _inst_5)) (Module.toDistribMulAction.{u3, u1} R B (CommSemiring.toSemiring.{u3} R (CommRing.toCommSemiring.{u3} R _inst_1)) (NonUnitalNonAssocSemiring.toAddCommMonoid.{u1} B (NonAssocSemiring.toNonUnitalNonAssocSemiring.{u1} B (Semiring.toNonAssocSemiring.{u1} B (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3))))) (Algebra.toModule.{u3, u1} R B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_6)) (AlgHom.instNonUnitalAlgHomClassToMonoidToMonoidWithZeroToSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToNonUnitalNonAssocSemiringToNonAssocSemiringToDistribMulActionToAddCommMonoidToModuleToDistribMulActionToAddCommMonoidToModule.{u3, u2, u1, max u2 u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6 (AlgHom.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6) (AlgHom.algHomClass.{u3, u2, u1} R A B (CommRing.toCommSemiring.{u3} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u1} B (CommRing.toRing.{u1} B _inst_3)) _inst_5 _inst_6))))) f)) -> (AlgHom.Finite.{u3, u2, u1} R A B _inst_1 _inst_2 _inst_3 _inst_5 _inst_6 f)
+Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjectiveₓ'. -/
theorem of_surjective (f : A →ₐ[R] B) (hf : Surjective f) : f.Finite :=
RingHom.Finite.of_surjective f hf
#align alg_hom.finite.of_surjective AlgHom.Finite.of_surjective
+/- warning: alg_hom.finite.of_comp_finite -> AlgHom.Finite.of_comp_finite is a dubious translation:
+lean 3 declaration is
+ forall {R : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {C : Type.{u4}} [_inst_1 : CommRing.{u1} R] [_inst_2 : CommRing.{u2} A] [_inst_3 : CommRing.{u3} B] [_inst_4 : CommRing.{u4} C] [_inst_5 : Algebra.{u1, u2} R A (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2))] [_inst_6 : Algebra.{u1, u3} R B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3))] [_inst_7 : Algebra.{u1, u4} R C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4))] {f : AlgHom.{u1, u2, u3} R A B (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u1, u3, u4} R B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u1, u2, u4} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u1, u2, u3, u4} R A B C (CommRing.toCommSemiring.{u1} R _inst_1) (Ring.toSemiring.{u2} A (CommRing.toRing.{u2} A _inst_2)) (Ring.toSemiring.{u3} B (CommRing.toRing.{u3} B _inst_3)) (Ring.toSemiring.{u4} C (CommRing.toRing.{u4} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u1, u3, u4} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
+but is expected to have type
+ forall {R : Type.{u4}} {A : Type.{u3}} {B : Type.{u2}} {C : Type.{u1}} [_inst_1 : CommRing.{u4} R] [_inst_2 : CommRing.{u3} A] [_inst_3 : CommRing.{u2} B] [_inst_4 : CommRing.{u1} C] [_inst_5 : Algebra.{u4, u3} R A (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_2))] [_inst_6 : Algebra.{u4, u2} R B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3))] [_inst_7 : Algebra.{u4, u1} R C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u1} C (CommRing.toRing.{u1} C _inst_4))] {f : AlgHom.{u4, u3, u2} R A B (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_2)) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3)) _inst_5 _inst_6} {g : AlgHom.{u4, u2, u1} R B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3)) (Ring.toSemiring.{u1} C (CommRing.toRing.{u1} C _inst_4)) _inst_6 _inst_7}, (AlgHom.Finite.{u4, u3, u1} R A C _inst_1 _inst_2 _inst_4 _inst_5 _inst_7 (AlgHom.comp.{u4, u3, u2, u1} R A B C (CommRing.toCommSemiring.{u4} R _inst_1) (Ring.toSemiring.{u3} A (CommRing.toRing.{u3} A _inst_2)) (Ring.toSemiring.{u2} B (CommRing.toRing.{u2} B _inst_3)) (Ring.toSemiring.{u1} C (CommRing.toRing.{u1} C _inst_4)) _inst_5 _inst_6 _inst_7 g f)) -> (AlgHom.Finite.{u4, u2, u1} R B C _inst_1 _inst_3 _inst_4 _inst_6 _inst_7 g)
+Case conversion may be inaccurate. Consider using '#align alg_hom.finite.of_comp_finite AlgHom.Finite.of_comp_finiteₓ'. -/
theorem of_comp_finite {f : A →ₐ[R] B} {g : B →ₐ[R] C} (h : (g.comp f).Finite) : g.Finite :=
RingHom.Finite.of_comp_finite h
#align alg_hom.finite.of_comp_finite AlgHom.Finite.of_comp_finite
mathlib commit https://github.com/leanprover-community/mathlib/commit/62e8311c791f02c47451bf14aa2501048e7c2f33
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit ed90a7d327c3a5caf65a6faf7e8a0d63c4605df7
+! leanprover-community/mathlib commit f5edf4694f7c478cbca7a2451bddbd221fc7f869
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -129,8 +129,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
exact hz
rcases this with ⟨c, hc1, hci⟩
refine' ⟨c * r, _, _, hs.2⟩
- · rw [← Ideal.Quotient.eq, RingHom.map_one] at hr1 hc1⊢
- rw [RingHom.map_mul, hc1, hr1, mul_one]
+ · simpa only [mul_sub, mul_one, sub_add_sub_cancel] using I.add_mem (I.mul_mem_left c hr1) hc1
· intro n hn
specialize hrn hn
rw [mem_comap, mem_sup] at hrn
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit 71150516f28d9826c7341f8815b31f7d8770c212
+! leanprover-community/mathlib commit ed90a7d327c3a5caf65a6faf7e8a0d63c4605df7
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -160,6 +160,26 @@ theorem Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
+theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
+ (I : Submodule R A).Fg :=
+ by
+ have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) :=
+ by
+ rw [I.mul_inv]
+ exact one_le.mp le_rfl
+ obtain ⟨T, T', hT, hT', one_mem⟩ := mem_span_mul_finite_of_mem_mul this
+ refine' ⟨T, span_eq_of_le _ hT _⟩
+ rw [← one_mul ↑I, ← mul_one (span R ↑T)]
+ conv_rhs => rw [← I.inv_mul, ← mul_assoc]
+ refine' mul_le_mul_left (le_trans _ <| mul_le_mul_right <| span_le.mpr hT')
+ rwa [one_le, span_mul_span]
+#align submodule.fg_unit Submodule.fg_unit
+
+theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
+ (hI : IsUnit I) : I.Fg :=
+ fg_unit hI.Unit
+#align submodule.fg_of_is_unit Submodule.fg_of_isUnit
+
theorem fg_span {s : Set M} (hs : s.Finite) : Fg (span R s) :=
⟨hs.toFinset, by rw [hs.coe_to_finset]⟩
#align submodule.fg_span Submodule.fg_span
@@ -625,16 +645,6 @@ instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module
where out := (TensorProduct.map₂_mk_top_top_eq_top R M N).subst (hM.out.zipWith _ hN.out)
#align module.finite.tensor_product Module.Finite.tensorProduct
-namespace Algebra
-
-variable [CommRing R] [CommRing A] [Algebra R A] [CommRing B] [Algebra R B]
-
-variable [AddCommGroup M] [Module R M]
-
-variable [AddCommGroup N] [Module R N]
-
-end Algebra
-
end ModuleAndAlgebra
namespace RingHom
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -319,18 +319,18 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type*} [Ring R] [AddCommGroup M] [Mo
constructor
· apply s.sub_mem hx
rw [Finsupp.total_apply, Finsupp.lmapDomain_apply, Finsupp.sum_mapDomain_index]
- refine' s.sum_mem _
- · intro y hy
+ · refine' s.sum_mem _
+ intro y hy
exact s.smul_mem _ (hg y (hl1 hy)).1
· exact zero_smul _
· exact fun _ _ _ => add_smul _ _ _
· rw [LinearMap.mem_ker, f.map_sub, ← hl2]
rw [Finsupp.total_apply, Finsupp.total_apply, Finsupp.lmapDomain_apply]
rw [Finsupp.sum_mapDomain_index, Finsupp.sum, Finsupp.sum, map_sum]
- rw [sub_eq_zero]
- refine' Finset.sum_congr rfl fun y hy => _
- unfold id
- rw [f.map_smul, (hg y (hl1 hy)).2]
+ · rw [sub_eq_zero]
+ refine' Finset.sum_congr rfl fun y hy => _
+ unfold id
+ rw [f.map_smul, (hg y (hl1 hy)).2]
· exact zero_smul _
· exact fun _ _ _ => add_smul _ _ _
#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_ker
Module.Finite.exists_fin'
(#12524)
... from CommSemiring R
to Semiring R
.
@@ -575,10 +575,11 @@ theorem exists_fin [Finite R M] : ∃ (n : ℕ) (s : Fin n → M), Submodule.spa
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
-lemma exists_fin' (R M : Type*) [CommSemiring R] [AddCommMonoid M] [Module R M] [Finite R M] :
- ∃ (n : ℕ) (f : (Fin n → R) →ₗ[R] M), Surjective f := by
+variable (R M) in
+lemma exists_fin' [Finite R M] : ∃ (n : ℕ) (f : (Fin n → R) →ₗ[R] M), Surjective f := by
have ⟨n, s, hs⟩ := exists_fin (R := R) (M := M)
- exact ⟨n, piEquiv (Fin n) R M s, by simpa⟩
+ refine ⟨n, Basis.constr (Pi.basisFun R _) ℕ s, ?_⟩
+ rw [← LinearMap.range_eq_top, Basis.constr_range, hs]
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
Mathlib.RingTheory.Nilpotent
has a few very simple definitions (Mathlib.Data.Nat.Lattice
is sufficient to state them), but needs some pretty heavy imports (ideals, linear algebra) towards the end. This change moves the heavier parts into a new file.
@@ -5,10 +5,11 @@ Authors: Johan Commelin
-/
import Mathlib.Algebra.Algebra.RestrictScalars
import Mathlib.Algebra.Algebra.Subalgebra.Basic
+import Mathlib.LinearAlgebra.Quotient
import Mathlib.LinearAlgebra.StdBasis
import Mathlib.GroupTheory.Finiteness
import Mathlib.RingTheory.Ideal.Operations
-import Mathlib.RingTheory.Nilpotent
+import Mathlib.RingTheory.Nilpotent.Defs
#align_import ring_theory.finiteness from "leanprover-community/mathlib"@"c813ed7de0f5115f956239124e9b30f3a621966f"
iSup
to Sort (#12114)
This breaks a few simp
proofs which were expecting these lemmas to apply to the data binders but not the prop binders.
@@ -193,10 +193,10 @@ theorem fg_biSup {ι : Type*} (s : Finset ι) (N : ι → Submodule R M) (h :
(⨆ i ∈ s, N i).FG := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_biSup
-theorem fg_iSup {ι : Type*} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) :
+theorem fg_iSup {ι : Sort*} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) :
(iSup N).FG := by
- cases nonempty_fintype ι
- simpa using fg_biSup Finset.univ N fun i _ => h i
+ cases nonempty_fintype (PLift ι)
+ simpa [iSup_plift_down] using fg_biSup Finset.univ (N ∘ PLift.down) fun i _ => h i.down
#align submodule.fg_supr Submodule.fg_iSup
variable {P : Type*} [AddCommMonoid P] [Module R P]
Subalgebra.finite_(bot|sup)
(#12025)
... and deprecated Subalgebra.finiteDimensional_(bot|sup)
@@ -890,3 +890,6 @@ theorem of_comp_finite {f : A →ₐ[R] B} {g : B →ₐ[R] C} (h : (g.comp f).F
end Finite
end AlgHom
+
+instance Subalgebra.finite_bot {F E : Type*} [CommSemiring F] [Semiring E] [Algebra F E] :
+ Module.Finite F (⊥ : Subalgebra F E) := Module.Finite.range (Algebra.linearMap F E)
@@ -8,6 +8,7 @@ import Mathlib.Algebra.Algebra.Subalgebra.Basic
import Mathlib.LinearAlgebra.StdBasis
import Mathlib.GroupTheory.Finiteness
import Mathlib.RingTheory.Ideal.Operations
+import Mathlib.RingTheory.Nilpotent
#align_import ring_theory.finiteness from "leanprover-community/mathlib"@"c813ed7de0f5115f956239124e9b30f3a621966f"
@@ -666,6 +667,22 @@ instance span_singleton (x : M) : Module.Finite R (R ∙ x) :=
instance span_finset (s : Finset M) : Module.Finite R (span R (s : Set M)) :=
⟨(Submodule.fg_top _).mpr ⟨s, rfl⟩⟩
+
+theorem Module.End.isNilpotent_iff_of_finite {R M : Type*} [CommSemiring R] [AddCommMonoid M]
+ [Module R M] [Module.Finite R M] {f : End R M} :
+ IsNilpotent f ↔ ∀ m : M, ∃ n : ℕ, (f ^ n) m = 0 := by
+ refine ⟨fun ⟨n, hn⟩ m ↦ ⟨n, by simp [hn]⟩, fun h ↦ ?_⟩
+ rcases Module.Finite.out (R := R) (M := M) with ⟨S, hS⟩
+ choose g hg using h
+ use Finset.sup S g
+ ext m
+ have hm : m ∈ Submodule.span R S := by simp [hS]
+ induction hm using Submodule.span_induction'
+ · next x hx => exact LinearMap.pow_map_zero_of_le (Finset.le_sup hx) (hg x)
+ · simp
+ · simp_all
+ · simp_all
+
variable {R}
section Algebra
@@ -651,8 +651,7 @@ instance bot : Module.Finite R (⊥ : Submodule R M) := iff_fg.mpr fg_bot
instance top [Finite R M] : Module.Finite R (⊤ : Submodule R M) := iff_fg.mpr out
-variable {R M}
-variable (R)
+variable {M}
/-- The submodule generated by a finite set is `R`-finite. -/
theorem span_of_finite {A : Set M} (hA : Set.Finite A) :
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -468,7 +468,7 @@ theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
#align submodule.fg.mul Submodule.FG.mul
theorem FG.pow (h : M.FG) (n : ℕ) : (M ^ n).FG :=
- Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
+ Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using ih.mul h
#align submodule.fg.pow Submodule.FG.pow
end Mul
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -117,7 +117,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type*} [CommRi
constructor
· rw [sub_right_comm]
exact I.sub_mem hr1 hci
- · rw [sub_smul, ← hyz, add_sub_cancel']
+ · rw [sub_smul, ← hyz, add_sub_cancel_left]
exact hz
rcases this with ⟨c, hc1, hci⟩
refine' ⟨c * r, _, _, hs.2⟩
@@ -306,7 +306,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type*} [Ring R] [AddCommGroup M] [Mo
mem_sup.2
⟨(Finsupp.total M M R id).toFun ((Finsupp.lmapDomain R R g : (P →₀ R) → M →₀ R) l), _,
x - Finsupp.total M M R id ((Finsupp.lmapDomain R R g : (P →₀ R) → M →₀ R) l), _,
- add_sub_cancel'_right _ _⟩
+ add_sub_cancel _ _⟩
· rw [← Set.image_id (g '' ↑t1), Finsupp.mem_span_image_iff_total]
refine' ⟨_, _, rfl⟩
haveI : Inhabited P := ⟨0⟩
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -199,7 +199,6 @@ theorem fg_iSup {ι : Type*} [Finite ι] (N : ι → Submodule R M) (h : ∀ i,
#align submodule.fg_supr Submodule.fg_iSup
variable {P : Type*} [AddCommMonoid P] [Module R P]
-
variable (f : M →ₗ[R] P)
theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
@@ -445,9 +444,7 @@ namespace Submodule
section Map₂
variable {R M N P : Type*}
-
variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
-
variable [Module R M] [Module R N] [Module R P]
theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.FG)
@@ -464,7 +461,6 @@ end Map₂
section Mul
variable {R : Type*} {A : Type*} [CommSemiring R] [Semiring A] [Algebra R A]
-
variable {M N : Submodule R A}
theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
@@ -656,7 +652,6 @@ instance bot : Module.Finite R (⊥ : Submodule R M) := iff_fg.mpr fg_bot
instance top [Finite R M] : Module.Finite R (⊤ : Submodule R M) := iff_fg.mpr out
variable {R M}
-
variable (R)
/-- The submodule generated by a finite set is `R`-finite. -/
@@ -845,9 +840,7 @@ end RingHom
namespace AlgHom
variable {R A B C : Type*} [CommRing R]
-
variable [CommRing A] [CommRing B] [CommRing C]
-
variable [Algebra R A] [Algebra R B] [Algebra R C]
/-- An algebra morphism `A →ₐ[R] B` is finite if it is finite as ring morphism.
refine
s (#10762)
I replaced a few "terminal" refine/refine'
s with exact
.
The strategy was very simple-minded: essentially any refine
whose following line had smaller indentation got replaced by exact
and then I cleaned up the mess.
This PR certainly leaves some further terminal refine
s, but maybe the current change is beneficial.
@@ -74,7 +74,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
obtain ⟨n, f, rfl⟩ := Sfin.fin_embedding
exact ⟨n, f, hS⟩
· rintro ⟨n, s, hs⟩
- refine' ⟨range s, finite_range s, hs⟩
+ exact ⟨range s, finite_range s, hs⟩
#align submodule.fg_iff_exists_fin_generating_family Submodule.fg_iff_exists_fin_generating_family
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
@@ -368,7 +368,7 @@ theorem fg_restrictScalars {R S M : Type*} [CommSemiring R] [Semiring S] [Algebr
exact (Submodule.restrictScalars_span R S h (X : Set M)).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
+theorem FG.stabilizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
(H : iSup N = M') : ∃ n, M' = N n := by
obtain ⟨S, hS⟩ := hM'
have : ∀ s : S, ∃ n, (s : M) ∈ N n := fun s =>
@@ -385,7 +385,7 @@ theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]
exact le_iSup _ _
-#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
+#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stabilizes_of_iSup_eq
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -406,8 +406,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
-- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup')
have ssup : s = u.sup id := by
- suffices : u.sup id ≤ s
- exact le_antisymm husup this
+ suffices u.sup id ≤ s from le_antisymm husup this
rw [sSup', Finset.sup_id_eq_sSup]
exact sSup_le_sSup huspan
-- Porting note: had to split this out of the `obtain`
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -254,7 +254,8 @@ theorem fg_pi {ι : Type*} {M : ι → Type*} [Finite ι] [∀ i, AddCommMonoid
-- Porting note: `refine'` doesn't work here
refine
⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, ?_⟩
- simp_rw [span_iUnion, span_image, hts, Submodule.iSup_map_single]
+ -- Note: #8386 changed `span_image` into `span_image _`
+ simp_rw [span_iUnion, span_image _, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
@@ -695,8 +695,10 @@ lemma of_equiv_equiv {A₁ B₁ A₂ B₂ : Type*} [CommRing A₁] [CommRing B
letI := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
haveI : IsScalarTower A₁ A₂ B₁ := IsScalarTower.of_algebraMap_eq
(fun x ↦ by simp [RingHom.algebraMap_toAlgebra])
- let e : B₁ ≃ₐ[A₂] B₂ := { e₂ with commutes' := fun r ↦ by simpa [RingHom.algebraMap_toAlgebra]
- using DFunLike.congr_fun he.symm (e₁.symm r) }
+ let e : B₁ ≃ₐ[A₂] B₂ :=
+ { e₂ with
+ commutes' := fun r ↦ by
+ simpa [RingHom.algebraMap_toAlgebra] using DFunLike.congr_fun he.symm (e₁.symm r) }
haveI := Module.Finite.of_restrictScalars_finite A₁ A₂ B₁
exact Module.Finite.equiv e.toLinearEquiv
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -696,7 +696,7 @@ lemma of_equiv_equiv {A₁ B₁ A₂ B₂ : Type*} [CommRing A₁] [CommRing B
haveI : IsScalarTower A₁ A₂ B₁ := IsScalarTower.of_algebraMap_eq
(fun x ↦ by simp [RingHom.algebraMap_toAlgebra])
let e : B₁ ≃ₐ[A₂] B₂ := { e₂ with commutes' := fun r ↦ by simpa [RingHom.algebraMap_toAlgebra]
- using FunLike.congr_fun he.symm (e₁.symm r) }
+ using DFunLike.congr_fun he.symm (e₁.symm r) }
haveI := Module.Finite.of_restrictScalars_finite A₁ A₂ B₁
exact Module.Finite.equiv e.toLinearEquiv
Function.left_id
and Function.comp.left_id
into Function.id_comp
.Function.right_id
and Function.comp.right_id
into Function.comp_id
.Function.comp_const_right
and Function.comp_const
into Function.comp_const
, use explicit arguments.Function.const_comp
to Mathlib.Init.Function
, use explicit arguments.@@ -412,7 +412,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
-- Porting note: had to split this out of the `obtain`
have := Finset.subset_image_iff.mp huspan
obtain ⟨t, ⟨-, rfl⟩⟩ := this
- rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
+ rw [Finset.sup_image, Function.id_comp, Finset.sup_eq_iSup, supr_rw, ←
span_eq_iSup_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
Module.Finite.trans
(#9380)
Add span_eq_closure
and closure_induction
which say that Submodule.span R s
is generated by R • s
as an AddSubmonoid. I feel that the existing span_induction
should be replaced by closure_induction
as the latter is stronger, and allow us to remove the commutativity condition in span_smul_of_span_eq_top
in Algebra/Tower and generalize Module.Finite.trans
to allow a non-commutative base ring.
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -676,7 +676,7 @@ variable {R}
section Algebra
-theorem trans {R : Type*} (A M : Type*) [CommSemiring R] [Semiring A] [Algebra R A]
+theorem trans {R : Type*} (A M : Type*) [Semiring R] [Semiring A] [Module R A]
[AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
∀ [Finite R A] [Finite A M], Finite R M
| ⟨⟨s, hs⟩⟩, ⟨⟨t, ht⟩⟩ =>
rank
and finrank
. (#9349)
The files Mathlib.LinearAlgebra.FreeModule.Rank
, Mathlib.LinearAlgebra.FreeModule.Finite.Rank
, Mathlib.LinearAlgebra.Dimension
and Mathlib.LinearAlgebra.Finrank
were reorganized into a
folder Mathlib.LinearAlgebra.Dimension
, containing the following files
Basic.lean
: Contains the definition of Module.rank
.Finrank.lean
: Contains the definition of FiniteDimensional.finrank
.StrongRankCondition.lean
: Contains results about rank
and finrank
over rings satisfying strong rank conditionFree.lean
: Contains results about rank
and finrank
of free modulesFinite.lean
: Contains conditions or consequences for rank
to be finite or zeroConstructions.lean
: Contains the calculation of the rank
of various constructions.DivisionRing.lean
: Contains results about rank
and finrank
of spaces over division rings.LinearMap.lean
: Contains results about LinearMap.rank
API changes:
IsNoetherian.rank_lt_aleph0
and FiniteDimensional.rank_lt_aleph0
are replaced with
rank_lt_aleph0
.
Module.Free.finite_basis
was renamed to Module.Finite.finite_basis
.
FiniteDimensional.finrank_eq_rank
was renamed to finrank_eq_rank
.
rank_eq_cardinal_basis
and rank_eq_cardinal_basis'
were removed
in favour of Basis.mk_eq_mk
and Basis.mk_eq_mk''
.
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
@@ -738,6 +738,13 @@ instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module
out := (TensorProduct.map₂_mk_top_top_eq_top R M N).subst (hM.out.map₂ _ hN.out)
#align module.finite.tensor_product Module.Finite.tensorProduct
+/-- If a free module is finite, then any arbitrary basis is finite. -/
+lemma Module.Finite.finite_basis {R M} [Ring R] [Nontrivial R] [AddCommGroup M] [Module R M]
+ {ι} [Module.Finite R M] (b : Basis ι R M) :
+ _root_.Finite ι :=
+ let ⟨s, hs⟩ := ‹Module.Finite R M›
+ basis_finite_of_finite_spans (↑s) s.finite_toSet hs b
+
end ModuleAndAlgebra
namespace Submodule
@@ -647,6 +647,33 @@ theorem equiv_iff (e : M ≃ₗ[R] N) : Finite R M ↔ Finite R N :=
instance ulift [Finite R M] : Finite R (ULift M) := equiv ULift.moduleEquiv.symm
+theorem iff_fg {N : Submodule R M} : Module.Finite R N ↔ N.FG := Module.finite_def.trans (fg_top _)
+
+variable (R M)
+
+instance bot : Module.Finite R (⊥ : Submodule R M) := iff_fg.mpr fg_bot
+
+instance top [Finite R M] : Module.Finite R (⊤ : Submodule R M) := iff_fg.mpr out
+
+variable {R M}
+
+variable (R)
+
+/-- The submodule generated by a finite set is `R`-finite. -/
+theorem span_of_finite {A : Set M} (hA : Set.Finite A) :
+ Module.Finite R (Submodule.span R A) :=
+ ⟨(Submodule.fg_top _).mpr ⟨hA.toFinset, hA.coe_toFinset.symm ▸ rfl⟩⟩
+
+/-- The submodule generated by a single element is `R`-finite. -/
+instance span_singleton (x : M) : Module.Finite R (R ∙ x) :=
+ Module.Finite.span_of_finite R <| Set.finite_singleton _
+
+/-- The submodule generated by a finset is `R`-finite. -/
+instance span_finset (s : Finset M) : Module.Finite R (span R (s : Set M)) :=
+ ⟨(Submodule.fg_top _).mpr ⟨s, rfl⟩⟩
+
+variable {R}
+
section Algebra
theorem trans {R : Type*} (A M : Type*) [CommSemiring R] [Semiring A] [Algebra R A]
@@ -713,6 +740,51 @@ instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module
end ModuleAndAlgebra
+namespace Submodule
+
+open Module
+
+variable {R V} [Ring R] [AddCommGroup V] [Module R V]
+
+/-- The sup of two fg submodules is finite. Also see `Submodule.FG.sup`. -/
+instance finite_sup (S₁ S₂ : Submodule R V) [h₁ : Module.Finite R S₁]
+ [h₂ : Module.Finite R S₂] : Module.Finite R (S₁ ⊔ S₂ : Submodule R V) := by
+ rw [finite_def] at *
+ exact (fg_top _).2 (((fg_top S₁).1 h₁).sup ((fg_top S₂).1 h₂))
+
+/-- The submodule generated by a finite supremum of finite dimensional submodules is
+finite-dimensional.
+
+Note that strictly this only needs `∀ i ∈ s, FiniteDimensional K (S i)`, but that doesn't
+work well with typeclass search. -/
+instance finite_finset_sup {ι : Type*} (s : Finset ι) (S : ι → Submodule R V)
+ [∀ i, Module.Finite R (S i)] : Module.Finite R (s.sup S : Submodule R V) := by
+ refine'
+ @Finset.sup_induction _ _ _ _ s S (fun i => Module.Finite R ↑i) (Module.Finite.bot R V)
+ _ fun i _ => by infer_instance
+ · intro S₁ hS₁ S₂ hS₂
+ exact Submodule.finite_sup S₁ S₂
+
+/-- The submodule generated by a supremum of finite dimensional submodules, indexed by a finite
+sort is finite-dimensional. -/
+instance finite_iSup {ι : Sort*} [Finite ι] (S : ι → Submodule R V)
+ [∀ i, Module.Finite R (S i)] : Module.Finite R ↑(⨆ i, S i) := by
+ cases nonempty_fintype (PLift ι)
+ rw [← iSup_plift_down, ← Finset.sup_univ_eq_iSup]
+ exact Submodule.finite_finset_sup _ _
+
+end Submodule
+
+section
+
+variable {R V} [Ring R] [AddCommGroup V] [Module R V]
+
+instance Module.Finite.finsupp {ι : Type*} [_root_.Finite ι] [Module.Finite R V] :
+ Module.Finite R (ι →₀ V) :=
+ Module.Finite.equiv (Finsupp.linearEquivFunOnFinite R V ι).symm
+
+end
+
namespace RingHom
variable {A B C : Type*} [CommRing A] [CommRing B] [CommRing C]
Introduce the nondegenerate pairing ((flip_)quotDualCoannihilatorToDual_injective
) between M ⧸ W.dualCoannihilator
and W
. If M
is a vector space and W
is a finite-dimensional subspace of its dual, this is a perfect pairing (quotDualCoannihilatorToDual_bijective
), and W
is equal to the annihilator of its coannihilator.
Use this pairing to show that dualAnnihilator
and dualCoannihilator
give an antitone order isomorphism orderIsoFiniteCodimDim
between finite-codimensional subspaces in a vector space and finite-dimensional subspaces in its dual. This result can be e.g. found in Bourbaki's Algebra. For a finite-dimensional vector space, this gives an OrderIso between all subspaces and all subspaces of the dual.
Add some lemmas about the image and preimage of annihilators and coannihilators under Dual.eval
.
Expand the docstring of basis_finite_of_finite_spans
with comments on generalizations.
Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>
@@ -642,6 +642,9 @@ theorem equiv [Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
of_surjective (e : M →ₗ[R] N) e.surjective
#align module.finite.equiv Module.Finite.equiv
+theorem equiv_iff (e : M ≃ₗ[R] N) : Finite R M ↔ Finite R N :=
+ ⟨fun _ ↦ equiv e, fun _ ↦ equiv e.symm⟩
+
instance ulift [Finite R M] : Finite R (ULift M) := equiv ULift.moduleEquiv.symm
section Algebra
Finset
lemma names (#8894)
Change a few lemma names that have historically bothered me.
Finset.card_le_of_subset
→ Finset.card_le_card
Multiset.card_le_of_le
→ Multiset.card_le_card
Multiset.card_lt_of_lt
→ Multiset.card_lt_card
Set.ncard_le_of_subset
→ Set.ncard_le_ncard
Finset.image_filter
→ Finset.filter_image
CompleteLattice.finset_sup_compact_of_compact
→ CompleteLattice.isCompactElement_finset_sup
@@ -396,7 +396,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
constructor
· rintro ⟨t, rfl⟩
rw [span_eq_iSup_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
- apply CompleteLattice.finset_sup_compact_of_compact
+ apply CompleteLattice.isCompactElement_finsetSup
exact fun n _ => singleton_span_isCompactElement n
· intro h
-- s is the Sup of the spans of its elements.
@@ -687,10 +687,11 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
[Module R M] [h : Module.Finite R M] : Module.Finite A (TensorProduct R A M) := by
classical
obtain ⟨s, hs⟩ := h.out
- refine' ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr fun x _ => _⟩⟩
- apply TensorProduct.induction_on (motive := _) x
- · exact zero_mem _
- · intro x y
+ refine ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr ?_⟩⟩
+ rintro x -
+ induction x using TensorProduct.induction_on with
+ | zero => exact zero_mem _
+ | tmul x y =>
-- Porting note: new TC reminder
haveI : IsScalarTower R A (TensorProduct R A M) := TensorProduct.isScalarTower_left
rw [Finset.coe_image, ← Submodule.span_span_of_tower R, Submodule.span_image, hs,
@@ -698,7 +699,7 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
change _ ∈ Submodule.span A (Set.range <| TensorProduct.mk R A M 1)
rw [← mul_one x, ← smul_eq_mul, ← TensorProduct.smul_tmul']
exact Submodule.smul_mem _ x (Submodule.subset_span <| Set.mem_range_self y)
- · exact fun _ _ => Submodule.add_mem _
+ | add x y hx hy => exact Submodule.add_mem _ hx hy
#align module.finite.base_change Module.Finite.base_change
instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module R M]
@@ -657,6 +657,19 @@ theorem trans {R : Type*} (A M : Type*) [CommSemiring R] [Semiring A] [Algebra R
Submodule.restrictScalars_top]⟩⟩
#align module.finite.trans Module.Finite.trans
+lemma of_equiv_equiv {A₁ B₁ A₂ B₂ : Type*} [CommRing A₁] [CommRing B₁]
+ [CommRing A₂] [CommRing B₂] [Algebra A₁ B₁] [Algebra A₂ B₂] (e₁ : A₁ ≃+* A₂) (e₂ : B₁ ≃+* B₂)
+ (he : RingHom.comp (algebraMap A₂ B₂) ↑e₁ = RingHom.comp ↑e₂ (algebraMap A₁ B₁))
+ [Module.Finite A₁ B₁] : Module.Finite A₂ B₂ := by
+ letI := e₁.toRingHom.toAlgebra
+ letI := ((algebraMap A₁ B₁).comp e₁.symm.toRingHom).toAlgebra
+ haveI : IsScalarTower A₁ A₂ B₁ := IsScalarTower.of_algebraMap_eq
+ (fun x ↦ by simp [RingHom.algebraMap_toAlgebra])
+ let e : B₁ ≃ₐ[A₂] B₂ := { e₂ with commutes' := fun r ↦ by simpa [RingHom.algebraMap_toAlgebra]
+ using FunLike.congr_fun he.symm (e₁.symm r) }
+ haveI := Module.Finite.of_restrictScalars_finite A₁ A₂ B₁
+ exact Module.Finite.equiv e.toLinearEquiv
+
end Algebra
end Finite
finrank
to rings. (#8912)
A portion of results in Mathlib/LinearAlgebra/FiniteDimensional.lean
were generalized to rings and moved to Mathlib/LinearAlgebra/FreeModule/Finite/Rank.lean
. Most API lemmas for FiniteDimensional
are kept but replaced with one lemma proofs. Definitions and niche lemmas are replaced by the generalized version completely.
Co-authored-by: erd1 <the.erd.one@gmail.com> Co-authored-by: Andrew Yang <the.erd.one@gmail.com>
@@ -588,6 +588,11 @@ theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f)
exact hM.1.map f⟩
#align module.finite.of_surjective Module.Finite.of_surjective
+instance quotient (R) {A M} [Semiring R] [AddCommGroup M] [Ring A] [Module A M] [Module R M]
+ [SMul R A] [IsScalarTower R A M] [Finite R M]
+ (N : Submodule A M) : Finite R (M ⧸ N) :=
+ Module.Finite.of_surjective (N.mkQ.restrictScalars R) N.mkQ_surjective
+
/-- The range of a linear map from a finite module is finite. -/
instance range [Finite R M] (f : M →ₗ[R] N) : Finite R (LinearMap.range f) :=
of_surjective f.rangeRestrict fun ⟨_, y, hy⟩ => ⟨y, Subtype.ext hy⟩
The names for lemmas about monotonicity of (a ^ ·)
and (· ^ n)
were a mess. This PR tidies up everything related by following the naming convention for (a * ·)
and (· * b)
. Namely, (a ^ ·)
is pow_right
and (· ^ n)
is pow_left
in lemma names. All lemma renames follow the corresponding multiplication lemma names closely.
Algebra.GroupPower.Order
pow_mono
→ pow_right_mono
pow_le_pow
→ pow_le_pow_right
pow_le_pow_of_le_left
→ pow_le_pow_left
pow_lt_pow_of_lt_left
→ pow_lt_pow_left
strictMonoOn_pow
→ pow_left_strictMonoOn
pow_strictMono_right
→ pow_right_strictMono
pow_lt_pow
→ pow_lt_pow_right
pow_lt_pow_iff
→ pow_lt_pow_iff_right
pow_le_pow_iff
→ pow_le_pow_iff_right
self_lt_pow
→ lt_self_pow
strictAnti_pow
→ pow_right_strictAnti
pow_lt_pow_iff_of_lt_one
→ pow_lt_pow_iff_right_of_lt_one
pow_lt_pow_of_lt_one
→ pow_lt_pow_right_of_lt_one
lt_of_pow_lt_pow
→ lt_of_pow_lt_pow_left
le_of_pow_le_pow
→ le_of_pow_le_pow_left
pow_lt_pow₀
→ pow_lt_pow_right₀
Algebra.GroupPower.CovariantClass
pow_le_pow_of_le_left'
→ pow_le_pow_left'
nsmul_le_nsmul_of_le_right
→ nsmul_le_nsmul_right
pow_lt_pow'
→ pow_lt_pow_right'
nsmul_lt_nsmul
→ nsmul_lt_nsmul_left
pow_strictMono_left
→ pow_right_strictMono'
nsmul_strictMono_right
→ nsmul_left_strictMono
StrictMono.pow_right'
→ StrictMono.pow_const
StrictMono.nsmul_left
→ StrictMono.const_nsmul
pow_strictMono_right'
→ pow_left_strictMono
nsmul_strictMono_left
→ nsmul_right_strictMono
Monotone.pow_right
→ Monotone.pow_const
Monotone.nsmul_left
→ Monotone.const_nsmul
lt_of_pow_lt_pow'
→ lt_of_pow_lt_pow_left'
lt_of_nsmul_lt_nsmul
→ lt_of_nsmul_lt_nsmul_right
pow_le_pow'
→ pow_le_pow_right'
nsmul_le_nsmul
→ nsmul_le_nsmul_left
pow_le_pow_of_le_one'
→ pow_le_pow_right_of_le_one'
nsmul_le_nsmul_of_nonpos
→ nsmul_le_nsmul_left_of_nonpos
le_of_pow_le_pow'
→ le_of_pow_le_pow_left'
le_of_nsmul_le_nsmul'
→ le_of_nsmul_le_nsmul_right'
pow_le_pow_iff'
→ pow_le_pow_iff_right'
nsmul_le_nsmul_iff
→ nsmul_le_nsmul_iff_left
pow_lt_pow_iff'
→ pow_lt_pow_iff_right'
nsmul_lt_nsmul_iff
→ nsmul_lt_nsmul_iff_left
Data.Nat.Pow
Nat.pow_lt_pow_of_lt_left
→ Nat.pow_lt_pow_left
Nat.pow_le_iff_le_left
→ Nat.pow_le_pow_iff_left
Nat.pow_lt_iff_lt_left
→ Nat.pow_lt_pow_iff_left
pow_le_pow_iff_left
pow_lt_pow_iff_left
pow_right_injective
pow_right_inj
Nat.pow_le_pow_left
to have the correct name since Nat.pow_le_pow_of_le_left
is in Std.Nat.pow_le_pow_right
to have the correct name since Nat.pow_le_pow_of_le_right
is in Std.self_le_pow
was a duplicate of le_self_pow
.Nat.pow_lt_pow_of_lt_right
is defeq to pow_lt_pow_right
.Nat.pow_right_strictMono
is defeq to pow_right_strictMono
.Nat.pow_le_iff_le_right
is defeq to pow_le_pow_iff_right
.Nat.pow_lt_iff_lt_right
is defeq to pow_lt_pow_iff_right
.0 < n
or 1 ≤ n
to n ≠ 0
.Nat
lemmas have been protected
.@@ -527,9 +527,9 @@ theorem exists_radical_pow_le_of_fg {R : Type*} [CommSemiring R] (I : Ideal R) (
rw [← Ideal.add_eq_sup, add_pow, Ideal.sum_eq_sup, Finset.sup_le_iff]
refine' fun i _ => Ideal.mul_le_right.trans _
obtain h | h := le_or_lt n i
- · apply Ideal.mul_le_right.trans ((Ideal.pow_le_pow h).trans hn)
+ · apply Ideal.mul_le_right.trans ((Ideal.pow_le_pow_right h).trans hn)
· apply Ideal.mul_le_left.trans
- refine' (Ideal.pow_le_pow _).trans hm
+ refine' (Ideal.pow_le_pow_right _).trans hm
rw [add_comm, Nat.add_sub_assoc h.le]
apply Nat.le_add_right
#align ideal.exists_radical_pow_le_of_fg Ideal.exists_radical_pow_le_of_fg
[@foo](https://github.com/foo) _ _ _ _ _ ...
by named arguments (#8702)
Using Lean4's named arguments, we manage to remove a few hard-to-read explicit function calls [@foo](https://github.com/foo) _ _ _ _ _ ...
which used to be necessary in Lean3.
Occasionally, this results in slightly longer code. The benefit of named arguments is readability, as well as to reduce the brittleness of the code when the argument order is changed.
Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
@@ -670,7 +670,7 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
classical
obtain ⟨s, hs⟩ := h.out
refine' ⟨⟨s.image (TensorProduct.mk R A M 1), eq_top_iff.mpr fun x _ => _⟩⟩
- apply @TensorProduct.induction_on _ _ _ _ _ _ _ _ _ x
+ apply TensorProduct.induction_on (motive := _) x
· exact zero_mem _
· intro x y
-- Porting note: new TC reminder
Extend RingTheory.Flat.iff_rTensor_injective
to all ideals
Using an elementary argument after Dummit and Foote (2004, Ex. 10.25)
@@ -417,6 +417,27 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
+open TensorProduct LinearMap in
+/-- Every `x : I ⊗ M` is the image of some `y : J ⊗ M`, where `J ≤ I` is finitely generated,
+under the tensor product of `J.inclusion ‹J ≤ I› : J → I` and the identity `M → M`. -/
+theorem exists_fg_le_eq_rTensor_inclusion {R M N : Type*} [CommRing R] [AddCommGroup M]
+ [AddCommGroup N] [Module R M] [Module R N] {I : Submodule R N} (x : I ⊗ M) :
+ ∃ (J : Submodule R N) (_ : J.FG) (hle : J ≤ I) (y : J ⊗ M),
+ x = rTensor M (J.inclusion hle) y := by
+ induction x using TensorProduct.induction_on with
+ | zero => exact ⟨⊥, fg_bot, zero_le _, 0, rfl⟩
+ | tmul i m => exact ⟨R ∙ i.val, fg_span_singleton i.val,
+ (span_singleton_le_iff_mem _ _).mpr i.property,
+ ⟨i.val, mem_span_singleton_self _⟩ ⊗ₜ[R] m, rfl⟩
+ | add x₁ x₂ ihx₁ ihx₂ =>
+ obtain ⟨J₁, hfg₁, hle₁, y₁, rfl⟩ := ihx₁
+ obtain ⟨J₂, hfg₂, hle₂, y₂, rfl⟩ := ihx₂
+ refine ⟨J₁ ⊔ J₂, hfg₁.sup hfg₂, sup_le hle₁ hle₂,
+ rTensor M (J₁.inclusion (le_sup_left : J₁ ≤ J₁ ⊔ J₂)) y₁ +
+ rTensor M (J₂.inclusion (le_sup_right : J₂ ≤ J₁ ⊔ J₂)) y₂, ?_⟩
+ rewrite [map_add, ← rTensor_comp_apply, ← rTensor_comp_apply]
+ rfl
+
end Submodule
namespace Submodule
⊥ : Subalgebra R A
(#8038)
And the same thing for StarSubalgebra R A
. IntermediateField
was already handled in #7957.
As a result, nine (obvious) lemmas are now true by definition.
This slightly adjusts the statement of Algebra.toSubmodule_bot
to make it simpler and true by definition; the original statement can be recovered by rewriting by Submodule.one_eq_span
, which I've had to add in some downstream proofs.
@@ -147,7 +147,7 @@ theorem fg_bot : (⊥ : Submodule R M).FG :=
theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type*} [CommSemiring R] [Semiring A]
[Algebra R A] : (⊥ : Subalgebra R A).toSubmodule.FG :=
- ⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
+ ⟨{1}, by simp [Algebra.toSubmodule_bot, one_eq_span]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
theorem fg_unit {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
@@ -638,8 +638,9 @@ end Finite
end Module
/-- Porting note: reminding Lean about this instance for Module.Finite.base_change -/
-local instance [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M] [Module R M] :
- Module A (TensorProduct R A M) :=
+noncomputable local instance
+ [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M] [Module R M] :
+ Module A (TensorProduct R A M) :=
haveI : SMulCommClass R A A := IsScalarTower.to_smulCommClass
TensorProduct.leftModule
@@ -5,6 +5,7 @@ Authors: Johan Commelin
-/
import Mathlib.Algebra.Algebra.RestrictScalars
import Mathlib.Algebra.Algebra.Subalgebra.Basic
+import Mathlib.LinearAlgebra.StdBasis
import Mathlib.GroupTheory.Finiteness
import Mathlib.RingTheory.Ideal.Operations
@@ -550,10 +551,16 @@ theorem iff_addGroup_fg {G : Type*} [AddCommGroup G] : Module.Finite ℤ G ↔ A
variable {R M N}
+/-- See also `Module.Finite.exists_fin'`. -/
theorem exists_fin [Finite R M] : ∃ (n : ℕ) (s : Fin n → M), Submodule.span R (range s) = ⊤ :=
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
+lemma exists_fin' (R M : Type*) [CommSemiring R] [AddCommMonoid M] [Module R M] [Finite R M] :
+ ∃ (n : ℕ) (f : (Fin n → R) →ₗ[R] M), Surjective f := by
+ have ⟨n, s, hs⟩ := exists_fin (R := R) (M := M)
+ exact ⟨n, piEquiv (Fin n) R M s, by simpa⟩
+
theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f) : Finite R N :=
⟨by
rw [← LinearMap.range_eq_top.2 hf, ← Submodule.map_top]
_root_.map_sum
more consistently (#7189)
Also _root_.map_smul
when in the neighbourhood.
@@ -323,7 +323,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type*} [Ring R] [AddCommGroup M] [Mo
· exact fun _ _ _ => add_smul _ _ _
· rw [LinearMap.mem_ker, f.map_sub, ← hl2]
rw [Finsupp.total_apply, Finsupp.total_apply, Finsupp.lmapDomain_apply]
- rw [Finsupp.sum_mapDomain_index, Finsupp.sum, Finsupp.sum, f.map_sum]
+ rw [Finsupp.sum_mapDomain_index, Finsupp.sum, Finsupp.sum, map_sum]
rw [sub_eq_zero]
refine' Finset.sum_congr rfl fun y hy => _
unfold id
Module.{Free,Finite}
instances for ULift
(#7135)
These carry no data so should be harmless.
@@ -609,6 +609,8 @@ theorem equiv [Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
of_surjective (e : M →ₗ[R] N) e.surjective
#align module.finite.equiv Module.Finite.equiv
+instance ulift [Finite R M] : Finite R (ULift M) := equiv ULift.moduleEquiv.symm
+
section Algebra
theorem trans {R : Type*} (A M : Type*) [CommSemiring R] [Semiring A] [Algebra R A]
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -38,7 +38,7 @@ open BigOperators
namespace Submodule
-variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
+variable {R : Type*} {M : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
open Set
@@ -59,7 +59,7 @@ theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.FG ↔ P.toAddSubmonoid
⟨S, by simpa [← span_nat_eq_addSubmonoid_closure] using hS⟩⟩
#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_addSubmonoid_fg
-theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ G) :
+theorem fg_iff_add_subgroup_fg {G : Type*} [AddCommGroup G] (P : Submodule ℤ G) :
P.FG ↔ P.toAddSubgroup.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_int_eq_addSubgroup_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_int_eq_addSubgroup_closure] using hS⟩⟩
@@ -78,7 +78,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
-theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
+theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type*} [CommRing R] {M : Type*}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) := by
rw [fg_def] at hn
@@ -133,7 +133,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
exact add_mem (smul_mem _ _ hci) (smul_mem _ _ hz)
#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul
-theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
+theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type*} [CommRing R] {M : Type*}
[AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r ∈ I, ∀ n ∈ N, r • n = n := by
obtain ⟨r, hr, hr'⟩ := exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul I N hn hin
@@ -144,12 +144,12 @@ theorem fg_bot : (⊥ : Submodule R M).FG :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
-theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A]
+theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type*} [CommSemiring R] [Semiring A]
[Algebra R A] : (⊥ : Subalgebra R A).toSubmodule.FG :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
-theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
+theorem fg_unit {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).FG := by
have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) := by
rw [I.mul_inv]
@@ -163,7 +163,7 @@ theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I :
rwa [one_le]
#align submodule.fg_unit Submodule.fg_unit
-theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
+theorem fg_of_isUnit {R A : Type*} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
(hI : IsUnit I) : I.FG :=
fg_unit hI.unit
#align submodule.fg_of_is_unit Submodule.fg_of_isUnit
@@ -182,22 +182,22 @@ theorem FG.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) :
fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [span_union, ht₁.2, ht₂.2]⟩
#align submodule.fg.sup Submodule.FG.sup
-theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
+theorem fg_finset_sup {ι : Type*} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
(s.sup N).FG :=
Finset.sup_induction fg_bot (fun _ ha _ hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
+theorem fg_biSup {ι : Type*} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
(⨆ i ∈ s, N i).FG := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_biSup
-theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) :
+theorem fg_iSup {ι : Type*} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) :
(iSup N).FG := by
cases nonempty_fintype ι
simpa using fg_biSup Finset.univ N fun i _ => h i
#align submodule.fg_supr Submodule.fg_iSup
-variable {P : Type _} [AddCommMonoid P] [Module R P]
+variable {P : Type*} [AddCommMonoid P] [Module R P]
variable (f : M →ₗ[R] P)
@@ -219,7 +219,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
-theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
+theorem fg_of_fg_map {R M P : Type*} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P)
(hf : LinearMap.ker f = ⊥) {N : Submodule R M}
(hfn : (N.map f).FG) : N.FG :=
@@ -244,7 +244,7 @@ theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : s
by rw [LinearMap.span_inl_union_inr, htb.2, htc.2]⟩
#align submodule.fg.prod Submodule.FG.prod
-theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
+theorem fg_pi {ι : Type*} {M : ι → Type*} [Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
(Submodule.pi Set.univ p).FG := by
classical
@@ -258,7 +258,7 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
-theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
+theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type*} [Ring R] [AddCommGroup M] [Module R M]
[AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M}
(hs1 : (s.map f).FG)
(hs2 : (s ⊓ LinearMap.ker f).FG) : s.FG := by
@@ -332,7 +332,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
· exact fun _ _ _ => add_smul _ _ _
#align submodule.fg_of_fg_map_of_fg_inf_ker Submodule.fg_of_fg_map_of_fg_inf_ker
-theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
+theorem fg_induction (R M : Type*) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
(h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
classical
@@ -346,7 +346,7 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
-theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
+theorem fg_ker_comp {R M N P : Type*} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
[Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P)
(hf1 : (LinearMap.ker f).FG) (hf2 : (LinearMap.ker g).FG)
(hsur : Function.Surjective f) : (g.comp f).ker.FG := by
@@ -357,7 +357,7 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
(LinearMap.ker g).comap f from comap_mono bot_le)]
#align submodule.fg_ker_comp Submodule.fg_ker_comp
-theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
+theorem fg_restrictScalars {R S M : Type*} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
(hfin : N.FG) (h : Function.Surjective (algebraMap R S)) :
(Submodule.restrictScalars R N).FG := by
@@ -422,7 +422,7 @@ namespace Submodule
section Map₂
-variable {R M N P : Type _}
+variable {R M N P : Type*}
variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
@@ -441,7 +441,7 @@ end Map₂
section Mul
-variable {R : Type _} {A : Type _} [CommSemiring R] [Semiring A] [Algebra R A]
+variable {R : Type*} {A : Type*} [CommSemiring R] [Semiring A] [Algebra R A]
variable {M N : Submodule R A}
@@ -459,7 +459,7 @@ end Submodule
namespace Ideal
-variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
+variable {R : Type*} {M : Type*} [Semiring R] [AddCommMonoid M] [Module R M]
/-- An ideal of `R` is finitely generated if it is the span of a finite subset of `R`.
@@ -471,7 +471,7 @@ def FG (I : Ideal R) : Prop :=
/-- The image of a finitely generated ideal is finitely generated.
This is the `Ideal` version of `Submodule.FG.map`. -/
-theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
+theorem FG.map {R S : Type*} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
(I.map f).FG := by
classical
obtain ⟨s, hs⟩ := h
@@ -479,7 +479,7 @@ theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG)
rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.FG.map
-theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
+theorem fg_ker_comp {R S A : Type*} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
(g.comp f).ker.FG := by
letI : Algebra R S := RingHom.toAlgebra f
@@ -491,7 +491,7 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars (RingHom.ker g) hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
-theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
+theorem exists_radical_pow_le_of_fg {R : Type*} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
refine' Submodule.fg_induction _ _ (fun J => J ≤ I.radical → ∃ n : ℕ, J ^ n ≤ I) _ _ _ h
@@ -516,7 +516,7 @@ end Ideal
section ModuleAndAlgebra
-variable (R A B M N : Type _)
+variable (R A B M N : Type*)
/-- A module over a semiring is `Finite` if it is finitely generated as a module. -/
class Module.Finite [Semiring R] [AddCommMonoid M] [Module R M] : Prop where
@@ -538,12 +538,12 @@ namespace Finite
open Submodule Set
-theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.FG M :=
+theorem iff_addMonoid_fg {M : Type*} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.FG M :=
⟨fun h => AddMonoid.fg_def.2 <| (Submodule.fg_iff_addSubmonoid_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (Submodule.fg_iff_addSubmonoid_fg ⊤).2 (AddMonoid.fg_def.1 h)⟩
#align module.finite.iff_add_monoid_fg Module.Finite.iff_addMonoid_fg
-theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.FG G :=
+theorem iff_addGroup_fg {G : Type*} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.FG G :=
⟨fun h => AddGroup.fg_def.2 <| (Submodule.fg_iff_add_subgroup_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (Submodule.fg_iff_add_subgroup_fg ⊤).2 (AddGroup.fg_def.1 h)⟩
#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fg
@@ -579,7 +579,7 @@ instance self : Finite R R :=
variable (M)
-theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
+theorem of_restrictScalars_finite (R A M : Type*) [CommSemiring R] [Semiring A] [AddCommMonoid M]
[Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] :
Finite A M := by
rw [finite_def, Submodule.fg_def] at hM ⊢
@@ -598,7 +598,7 @@ instance prod [hM : Finite R M] [hN : Finite R N] : Finite R (M × N) :=
exact hM.1.prod hN.1⟩
#align module.finite.prod Module.Finite.prod
-instance pi {ι : Type _} {M : ι → Type _} [_root_.Finite ι] [∀ i, AddCommMonoid (M i)]
+instance pi {ι : Type*} {M : ι → Type*} [_root_.Finite ι] [∀ i, AddCommMonoid (M i)]
[∀ i, Module R (M i)] [h : ∀ i, Finite R (M i)] : Finite R (∀ i, M i) :=
⟨by
rw [← Submodule.pi_top]
@@ -611,7 +611,7 @@ theorem equiv [Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
section Algebra
-theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra R A]
+theorem trans {R : Type*} (A M : Type*) [CommSemiring R] [Semiring A] [Algebra R A]
[AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
∀ [Finite R A] [Finite A M], Finite R M
| ⟨⟨s, hs⟩⟩, ⟨⟨t, ht⟩⟩ =>
@@ -662,7 +662,7 @@ end ModuleAndAlgebra
namespace RingHom
-variable {A B C : Type _} [CommRing A] [CommRing B] [CommRing C]
+variable {A B C : Type*} [CommRing A] [CommRing B] [CommRing C]
/-- A ring morphism `A →+* B` is `Finite` if `B` is finitely generated as `A`-module. -/
def Finite (f : A →+* B) : Prop :=
@@ -710,7 +710,7 @@ end RingHom
namespace AlgHom
-variable {R A B C : Type _} [CommRing R]
+variable {R A B C : Type*} [CommRing R]
variable [CommRing A] [CommRing B] [CommRing C]
Add the following result:
theorem mem_span_integralBasis {x : K} :
x ∈ Submodule.span ℤ (Set.range (integralBasis K)) ↔ x ∈ 𝓞 K
that is, integralBasis
is indeed a ℤ
-basis of the ring of integers.
Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com>
Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com>
@@ -213,7 +213,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
let ⟨t, ht⟩ := hfn
⟨t.preimage f fun x _ y _ h => hf h,
Submodule.map_injective_of_injective hf <| by
- rw [f.map_span, Finset.coe_preimage, Set.image_preimage_eq_inter_range,
+ rw [map_span, Finset.coe_preimage, Set.image_preimage_eq_inter_range,
Set.inter_eq_self_of_subset_left, ht]
rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]
exact map_mono le_top⟩
(Algebra.ofId R A).toLinearMap
with Algebra.linearMap R A
(#6208)
A tiny bit of clean up, with the aim of increasing awareness of Algebra.linearMap
@@ -682,7 +682,7 @@ variable {A}
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.toAlgebra
- Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
+ Module.Finite.of_surjective (Algebra.linearMap A B) hf
#align ring_hom.finite.of_surjective RingHom.Finite.of_surjective
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite := by
@@ -2,17 +2,14 @@
Copyright (c) 2020 Johan Commelin. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit c813ed7de0f5115f956239124e9b30f3a621966f
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Algebra.RestrictScalars
import Mathlib.Algebra.Algebra.Subalgebra.Basic
import Mathlib.GroupTheory.Finiteness
import Mathlib.RingTheory.Ideal.Operations
+#align_import ring_theory.finiteness from "leanprover-community/mathlib"@"c813ed7de0f5115f956239124e9b30f3a621966f"
+
/-!
# Finiteness conditions in commutative algebra
@@ -394,7 +394,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactE
-- Introduce shorthand for span of an element
let sp : M → Submodule R M := fun a => span R {a}
-- Trivial rewrite lemma; a small hack since simp (only) & rw can't accomplish this smoothly.
- have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
+ have supr_rw : ∀ t : Finset M, ⨆ x ∈ t, sp x = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
constructor
· rintro ⟨t, rfl⟩
rw [span_eq_iSup_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
Currently, (for both Set
and Finset
) insert_subset
is an iff
lemma stating that insert a s ⊆ t
if and only if a ∈ t
and s ⊆ t
. For both types, this PR renames this lemma to insert_subset_iff
, and adds an insert_subset
lemma that gives the implication just in the reverse direction : namely theorem insert_subset (ha : a ∈ t) (hs : s ⊆ t) : insert a s ⊆ t
.
This both aligns the naming with union_subset
and union_subset_iff
, and removes the need for the awkward insert_subset.mpr ⟨_,_⟩
idiom. It touches a lot of files (too many to list), but in a trivial way.
@@ -107,7 +107,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
apply ih
rcases H with ⟨r, hr1, hrn, hs⟩
rw [← Set.singleton_union, span_union, smul_sup] at hrn
- rw [Set.insert_subset] at hs
+ rw [Set.insert_subset_iff] at hs
have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s := by
specialize hrn hs.1
rw [mem_comap, mem_sup] at hrn
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -251,7 +251,7 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
[∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
(Submodule.pi Set.univ p).FG := by
classical
- simp_rw [fg_def] at hsb⊢
+ simp_rw [fg_def] at hsb ⊢
choose t htf hts using hsb
-- Porting note: `refine'` doesn't work here
refine
@@ -585,7 +585,7 @@ variable (M)
theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
[Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] :
Finite A M := by
- rw [finite_def, Submodule.fg_def] at hM⊢
+ rw [finite_def, Submodule.fg_def] at hM ⊢
obtain ⟨S, hSfin, hSgen⟩ := hM
refine' ⟨S, hSfin, eq_top_iff.2 _⟩
have := Submodule.span_le_restrictScalars R A S
@@ -69,7 +69,7 @@ theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
- N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N := by
+ N.FG ↔ ∃ (n : ℕ) (s : Fin n → M), span R (range s) = N := by
rw [fg_def]
constructor
· rintro ⟨S, Sfin, hS⟩
@@ -553,7 +553,7 @@ theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔
variable {R M N}
-theorem exists_fin [Finite R M] : ∃ (n : ℕ)(s : Fin n → M), Submodule.span R (range s) = ⊤ :=
+theorem exists_fin [Finite R M] : ∃ (n : ℕ) (s : Fin n → M), Submodule.span R (range s) = ⊤ :=
Submodule.fg_iff_exists_fin_generating_family.mp out
#align module.finite.exists_fin Module.Finite.exists_fin
fix-comments.py
on all files.@@ -473,7 +473,7 @@ def FG (I : Ideal R) : Prop :=
/-- The image of a finitely generated ideal is finitely generated.
-This is the `ideal` version of `Submodule.FG.map`. -/
+This is the `Ideal` version of `Submodule.FG.map`. -/
theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
(I.map f).FG := by
classical
@@ -221,15 +221,11 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]
exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
-/- Porting note: Lean not finding this instance is source of the majority of troubles here.
-Perhaps it should get its own name -/
-alias LinearMap.instSemilinearMapClassLinearMap ← instSLMC
--- Porting note: With etaExperiment, we don't need the @s in the following statement.
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P)
- (hf : @LinearMap.ker R R M P _ _ _ _ _ _ (RingHom.id _) _ instSLMC f = ⊥) {N : Submodule R M}
- (hfn : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f N).FG) : N.FG :=
+ (hf : LinearMap.ker f = ⊥) {N : Submodule R M}
+ (hfn : (N.map f).FG) : N.FG :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
#align submodule.fg_of_fg_map Submodule.fg_of_fg_map
@@ -263,38 +259,25 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
simp_rw [span_iUnion, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
-/-- Porting note: helping Lean find the coercion to functions below -/
-abbrev asFun [AddCommGroup N] [Module R N] (f : M →ₗ[R] N) : M → N :=
- f
-
--- Porting note: We've since turned on etaExperiment here,
--- but there remain lots of notes below about clean up that is possible with etaExperiment,
--- and we should follow these!
--- These should all be done as part of cleanup after lean4#2210.
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
[AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M}
- -- Porting note: Lean having trouble both unifying for SLMC and then synthesizing once unified
- -- With etaExperiment, we don't need the @s in the following statement.
- (hs1 : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f s).FG)
- (hs2 : (s ⊓ @LinearMap.ker R R M P _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).FG) : s.FG := by
+ (hs1 : (s.map f).FG)
+ (hs2 : (s ⊓ LinearMap.ker f).FG) : s.FG := by
haveI := Classical.decEq R
haveI := Classical.decEq M
haveI := Classical.decEq P
cases' hs1 with t1 ht1
cases' hs2 with t2 ht2
- -- Porting note: With etaExperiment, we don't need the asFun in the following statement.
- have : ∀ y ∈ t1, ∃ x ∈ s, asFun f x = y := by
+ have : ∀ y ∈ t1, ∃ x ∈ s, f x = y := by
intro y hy
- -- Porting note: With etaExperiment, we don't need the @ in the following statement.
- have : y ∈ @map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f s := by
+ have : y ∈ s.map f := by
rw [← ht1]
exact subset_span hy
rcases mem_map.1 this with ⟨x, hx1, hx2⟩
exact ⟨x, hx1, hx2⟩
- -- Porting note: With etaExperiment, we don't need the asFun in the following statement.
- have : ∃ g : P → M, ∀ y ∈ t1, g y ∈ s ∧ asFun f (g y) = y := by
+ have : ∃ g : P → M, ∀ y ∈ t1, g y ∈ s ∧ f (g y) = y := by
choose g hg1 hg2 using this
exists fun y => if H : y ∈ t1 then g y H else 0
intro y H
@@ -316,8 +299,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
rw [ht2] at this
exact this.1
intro x hx
- -- Porting note: With etaExperiment, we don't need the asFun and @ in the following statement.
- have : asFun f x ∈ @map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f s := by
+ have : f x ∈ s.map f := by
rw [mem_map]
exact ⟨x, hx, rfl⟩
rw [← ht1, ← Set.image_id (t1 : Set P), Finsupp.mem_span_image_iff_total] at this
@@ -342,14 +324,12 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
exact s.smul_mem _ (hg y (hl1 hy)).1
· exact zero_smul _
· exact fun _ _ _ => add_smul _ _ _
- · dsimp [asFun] at hl2
- rw [LinearMap.mem_ker, f.map_sub, ← hl2]
+ · rw [LinearMap.mem_ker, f.map_sub, ← hl2]
rw [Finsupp.total_apply, Finsupp.total_apply, Finsupp.lmapDomain_apply]
rw [Finsupp.sum_mapDomain_index, Finsupp.sum, Finsupp.sum, f.map_sum]
rw [sub_eq_zero]
refine' Finset.sum_congr rfl fun y hy => _
unfold id
- dsimp [asFun] at hg
rw [f.map_smul, (hg y (hl1 hy)).2]
· exact zero_smul _
· exact fun _ _ _ => add_smul _ _ _
@@ -371,20 +351,13 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
the first morphism is surjective. -/
theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
[Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P)
- -- Porting note: more help both unifying and finding instSLMC
- -- With etaExperiment, we don't need the @s in the following statement.
- (hf1 : (@LinearMap.ker R R M N _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).FG)
- (hf2 : (@LinearMap.ker R R N P _ _ _ _ _ _ (RingHom.id _) _ instSLMC g).FG)
- (hsur : Function.Surjective <| asFun f) :
- (@LinearMap.comp R R R M N P _ _ _ _ _ _ _ _ _
- (RingHom.id _) (RingHom.id _) (RingHom.id _) _ g f).ker.FG := by
+ (hf1 : (LinearMap.ker f).FG) (hf2 : (LinearMap.ker g).FG)
+ (hsur : Function.Surjective f) : (g.comp f).ker.FG := by
rw [LinearMap.ker_comp]
apply fg_of_fg_map_of_fg_inf_ker f
· rwa [Submodule.map_comap_eq, LinearMap.range_eq_top.2 hsur, top_inf_eq]
- -- Porting note With etaExperiment, we don't need the @s in the following `show`.
- · rwa [inf_of_le_right (show (@LinearMap.ker R R M N _ _ _ _ _ _ (RingHom.id _) _ instSLMC f) ≤
- @comap R R M N _ _ _ _ _ _ (RingHom.id _) _ instSLMC f
- (@LinearMap.ker R R N P _ _ _ _ _ _ (RingHom.id _) _ instSLMC g) from comap_mono bot_le)]
+ · rwa [inf_of_le_right (show (LinearMap.ker f) ≤
+ (LinearMap.ker g).comap f from comap_mono bot_le)]
#align submodule.fg_ker_comp Submodule.fg_ker_comp
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
Now that leanprover/lean4#2210 has been merged, this PR:
set_option synthInstance.etaExperiment true
commands (and some etaExperiment%
term elaborators)set_option maxHeartbeats
commandsCo-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Matthew Ballard <matt@mrb.email>
@@ -270,7 +270,7 @@ abbrev asFun [AddCommGroup N] [Module R N] (f : M →ₗ[R] N) : M → N :=
-- Porting note: We've since turned on etaExperiment here,
-- but there remain lots of notes below about clean up that is possible with etaExperiment,
-- and we should follow these!
-set_option synthInstance.etaExperiment true in
+-- These should all be done as part of cleanup after lean4#2210.
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
@@ -509,7 +509,6 @@ theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG)
rw [Finset.coe_image, ← Ideal.map_span, hs]
#align ideal.fg.map Ideal.FG.map
-set_option synthInstance.etaExperiment true in
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
(g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
(g.comp f).ker.FG := by
@@ -695,7 +694,6 @@ namespace RingHom
variable {A B C : Type _} [CommRing A] [CommRing B] [CommRing C]
-set_option synthInstance.etaExperiment true in
/-- A ring morphism `A →+* B` is `Finite` if `B` is finitely generated as `A`-module. -/
def Finite (f : A →+* B) : Prop :=
letI : Algebra A B := f.toAlgebra
@@ -712,14 +710,12 @@ theorem id : Finite (RingHom.id A) :=
variable {A}
-set_option synthInstance.etaExperiment true in
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.toAlgebra
Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
#align ring_hom.finite.of_surjective RingHom.Finite.of_surjective
theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite := by
- set_option synthInstance.etaExperiment true in
letI := f.toAlgebra
letI := g.toAlgebra
letI := (g.comp f).toAlgebra
@@ -729,7 +725,6 @@ theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (
exact Module.Finite.trans B C
#align ring_hom.finite.comp RingHom.Finite.comp
-set_option synthInstance.etaExperiment true in
theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) : g.Finite := by
letI := f.toAlgebra
letI := g.toAlgebra
Fg
to FG
(#3948)
Please refer to this Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Naming.20convention/near/357712556
@@ -20,7 +20,7 @@ In this file we define a notion of finiteness that is common in commutative alge
## Main declarations
-- `Submodule.Fg`, `Ideal.Fg`
+- `Submodule.FG`, `Ideal.FG`
These express that some object is finitely generated as *submodule* over some base ring.
- `Module.Finite`, `RingHom.Finite`, `AlgHom.Finite`
@@ -46,30 +46,30 @@ variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
open Set
/-- A submodule of `M` is finitely generated if it is the span of a finite subset of `M`. -/
-def Fg (N : Submodule R M) : Prop :=
+def FG (N : Submodule R M) : Prop :=
∃ S : Finset M, Submodule.span R ↑S = N
-#align submodule.fg Submodule.Fg
+#align submodule.fg Submodule.FG
-theorem fg_def {N : Submodule R M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
+theorem fg_def {N : Submodule R M} : N.FG ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩, by
rintro ⟨t', h, rfl⟩
rcases Finite.exists_finset_coe h with ⟨t, rfl⟩
exact ⟨t, rfl⟩⟩
#align submodule.fg_def Submodule.fg_def
-theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.Fg ↔ P.toAddSubmonoid.Fg :=
+theorem fg_iff_addSubmonoid_fg (P : Submodule ℕ M) : P.FG ↔ P.toAddSubmonoid.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_nat_eq_addSubmonoid_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_nat_eq_addSubmonoid_closure] using hS⟩⟩
#align submodule.fg_iff_add_submonoid_fg Submodule.fg_iff_addSubmonoid_fg
theorem fg_iff_add_subgroup_fg {G : Type _} [AddCommGroup G] (P : Submodule ℤ G) :
- P.Fg ↔ P.toAddSubgroup.Fg :=
+ P.FG ↔ P.toAddSubgroup.FG :=
⟨fun ⟨S, hS⟩ => ⟨S, by simpa [← span_int_eq_addSubgroup_closure] using hS⟩, fun ⟨S, hS⟩ =>
⟨S, by simpa [← span_int_eq_addSubgroup_closure] using hS⟩⟩
#align submodule.fg_iff_add_subgroup_fg Submodule.fg_iff_add_subgroup_fg
theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
- N.Fg ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N := by
+ N.FG ↔ ∃ (n : ℕ)(s : Fin n → M), span R (range s) = N := by
rw [fg_def]
constructor
· rintro ⟨S, Sfin, hS⟩
@@ -82,7 +82,7 @@ theorem fg_iff_exists_fin_generating_family {N : Submodule R M} :
/-- **Nakayama's Lemma**. Atiyah-Macdonald 2.5, Eisenbud 4.7, Matsumura 2.2,
[Stacks 00DV](https://stacks.math.columbia.edu/tag/00DV) -/
theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
- [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
+ [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) := by
rw [fg_def] at hn
rcases hn with ⟨s, hfs, hs⟩
@@ -137,23 +137,23 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
#align submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul Submodule.exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul
theorem exists_mem_and_smul_eq_self_of_fg_of_le_smul {R : Type _} [CommRing R] {M : Type _}
- [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.Fg) (hin : N ≤ I • N) :
+ [AddCommGroup M] [Module R M] (I : Ideal R) (N : Submodule R M) (hn : N.FG) (hin : N ≤ I • N) :
∃ r ∈ I, ∀ n ∈ N, r • n = n := by
obtain ⟨r, hr, hr'⟩ := exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul I N hn hin
exact ⟨-(r - 1), I.neg_mem hr, fun n hn => by simpa [sub_smul] using hr' n hn⟩
#align submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul
-theorem fg_bot : (⊥ : Submodule R M).Fg :=
+theorem fg_bot : (⊥ : Submodule R M).FG :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A]
- [Algebra R A] : (⊥ : Subalgebra R A).toSubmodule.Fg :=
+ [Algebra R A] : (⊥ : Subalgebra R A).toSubmodule.FG :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
- (I : Submodule R A).Fg := by
+ (I : Submodule R A).FG := by
have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) := by
rw [I.mul_inv]
exact one_le.mp le_rfl
@@ -167,35 +167,35 @@ theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I :
#align submodule.fg_unit Submodule.fg_unit
theorem fg_of_isUnit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] {I : Submodule R A}
- (hI : IsUnit I) : I.Fg :=
+ (hI : IsUnit I) : I.FG :=
fg_unit hI.unit
#align submodule.fg_of_is_unit Submodule.fg_of_isUnit
-theorem fg_span {s : Set M} (hs : s.Finite) : Fg (span R s) :=
+theorem fg_span {s : Set M} (hs : s.Finite) : FG (span R s) :=
⟨hs.toFinset, by rw [hs.coe_toFinset]⟩
#align submodule.fg_span Submodule.fg_span
-theorem fg_span_singleton (x : M) : Fg (R ∙ x) :=
+theorem fg_span_singleton (x : M) : FG (R ∙ x) :=
fg_span (finite_singleton x)
#align submodule.fg_span_singleton Submodule.fg_span_singleton
-theorem Fg.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.Fg) (hN₂ : N₂.Fg) : (N₁ ⊔ N₂).Fg :=
+theorem FG.sup {N₁ N₂ : Submodule R M} (hN₁ : N₁.FG) (hN₂ : N₂.FG) : (N₁ ⊔ N₂).FG :=
let ⟨t₁, ht₁⟩ := fg_def.1 hN₁
let ⟨t₂, ht₂⟩ := fg_def.1 hN₂
fg_def.2 ⟨t₁ ∪ t₂, ht₁.1.union ht₂.1, by rw [span_union, ht₁.2, ht₂.2]⟩
-#align submodule.fg.sup Submodule.Fg.sup
+#align submodule.fg.sup Submodule.FG.sup
-theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
- (s.sup N).Fg :=
+theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
+ (s.sup N).FG :=
Finset.sup_induction fg_bot (fun _ ha _ hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
- (⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
+theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).FG) :
+ (⨆ i ∈ s, N i).FG := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_biSup
-theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) :
- (iSup N).Fg := by
+theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).FG) :
+ (iSup N).FG := by
cases nonempty_fintype ι
simpa using fg_biSup Finset.univ N fun i _ => h i
#align submodule.fg_supr Submodule.fg_iSup
@@ -204,15 +204,15 @@ variable {P : Type _} [AddCommMonoid P] [Module R P]
variable (f : M →ₗ[R] P)
-theorem Fg.map {N : Submodule R M} (hs : N.Fg) : (N.map f).Fg :=
+theorem FG.map {N : Submodule R M} (hs : N.FG) : (N.map f).FG :=
let ⟨t, ht⟩ := fg_def.1 hs
fg_def.2 ⟨f '' t, ht.1.image _, by rw [span_image, ht.2]⟩
-#align submodule.fg.map Submodule.Fg.map
+#align submodule.fg.map Submodule.FG.map
variable {f}
theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {N : Submodule R M}
- (hfn : (N.map f).Fg) : N.Fg :=
+ (hfn : (N.map f).FG) : N.FG :=
let ⟨t, ht⟩ := hfn
⟨t.preimage f fun x _ y _ h => hf h,
Submodule.map_injective_of_injective hf <| by
@@ -229,31 +229,31 @@ alias LinearMap.instSemilinearMapClassLinearMap ← instSLMC
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
[Module R P] (f : M →ₗ[R] P)
(hf : @LinearMap.ker R R M P _ _ _ _ _ _ (RingHom.id _) _ instSLMC f = ⊥) {N : Submodule R M}
- (hfn : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f N).Fg) : N.Fg :=
+ (hfn : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f N).FG) : N.FG :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
#align submodule.fg_of_fg_map Submodule.fg_of_fg_map
-theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).Fg ↔ N.Fg :=
+theorem fg_top (N : Submodule R M) : (⊤ : Submodule R N).FG ↔ N.FG :=
⟨fun h => N.range_subtype ▸ map_top N.subtype ▸ h.map _, fun h =>
fg_of_fg_map_injective N.subtype Subtype.val_injective <| by rwa [map_top, range_subtype]⟩
#align submodule.fg_top Submodule.fg_top
-theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).Fg) : (⊤ : Submodule R M).Fg :=
+theorem fg_of_linearEquiv (e : M ≃ₗ[R] P) (h : (⊤ : Submodule R P).FG) : (⊤ : Submodule R M).FG :=
e.symm.range ▸ map_top (e.symm : P →ₗ[R] M) ▸ h.map _
#align submodule.fg_of_linear_equiv Submodule.fg_of_linearEquiv
-theorem Fg.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.Fg) (hsc : sc.Fg) :
- (sb.prod sc).Fg :=
+theorem FG.prod {sb : Submodule R M} {sc : Submodule R P} (hsb : sb.FG) (hsc : sc.FG) :
+ (sb.prod sc).FG :=
let ⟨tb, htb⟩ := fg_def.1 hsb
let ⟨tc, htc⟩ := fg_def.1 hsc
fg_def.2
⟨LinearMap.inl R M P '' tb ∪ LinearMap.inr R M P '' tc, (htb.1.image _).union (htc.1.image _),
by rw [LinearMap.span_inl_union_inr, htb.2, htc.2]⟩
-#align submodule.fg.prod Submodule.Fg.prod
+#align submodule.fg.prod Submodule.FG.prod
theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoid (M i)]
- [∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).Fg) :
- (Submodule.pi Set.univ p).Fg := by
+ [∀ i, Module R (M i)] {p : ∀ i, Submodule R (M i)} (hsb : ∀ i, (p i).FG) :
+ (Submodule.pi Set.univ p).FG := by
classical
simp_rw [fg_def] at hsb⊢
choose t htf hts using hsb
@@ -277,8 +277,8 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
[AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M}
-- Porting note: Lean having trouble both unifying for SLMC and then synthesizing once unified
-- With etaExperiment, we don't need the @s in the following statement.
- (hs1 : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f s).Fg)
- (hs2 : (s ⊓ @LinearMap.ker R R M P _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).Fg) : s.Fg := by
+ (hs1 : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f s).FG)
+ (hs2 : (s ⊓ @LinearMap.ker R R M P _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).FG) : s.FG := by
haveI := Classical.decEq R
haveI := Classical.decEq M
haveI := Classical.decEq P
@@ -357,7 +357,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
(P : Submodule R M → Prop) (h₁ : ∀ x, P (Submodule.span R {x}))
- (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.Fg) : P N := by
+ (h₂ : ∀ M₁ M₂, P M₁ → P M₂ → P (M₁ ⊔ M₂)) (N : Submodule R M) (hN : N.FG) : P N := by
classical
obtain ⟨s, rfl⟩ := hN
induction s using Finset.induction
@@ -373,11 +373,11 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
[Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P)
-- Porting note: more help both unifying and finding instSLMC
-- With etaExperiment, we don't need the @s in the following statement.
- (hf1 : (@LinearMap.ker R R M N _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).Fg)
- (hf2 : (@LinearMap.ker R R N P _ _ _ _ _ _ (RingHom.id _) _ instSLMC g).Fg)
+ (hf1 : (@LinearMap.ker R R M N _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).FG)
+ (hf2 : (@LinearMap.ker R R N P _ _ _ _ _ _ (RingHom.id _) _ instSLMC g).FG)
(hsur : Function.Surjective <| asFun f) :
(@LinearMap.comp R R R M N P _ _ _ _ _ _ _ _ _
- (RingHom.id _) (RingHom.id _) (RingHom.id _) _ g f).ker.Fg := by
+ (RingHom.id _) (RingHom.id _) (RingHom.id _) _ g f).ker.FG := by
rw [LinearMap.ker_comp]
apply fg_of_fg_map_of_fg_inf_ker f
· rwa [Submodule.map_comap_eq, LinearMap.range_eq_top.2 hsur, top_inf_eq]
@@ -389,14 +389,14 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
- (hfin : N.Fg) (h : Function.Surjective (algebraMap R S)) :
- (Submodule.restrictScalars R N).Fg := by
+ (hfin : N.FG) (h : Function.Surjective (algebraMap R S)) :
+ (Submodule.restrictScalars R N).FG := by
obtain ⟨X, rfl⟩ := hfin
use X
exact (Submodule.restrictScalars_span R S h (X : Set M)).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-theorem Fg.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
+theorem FG.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.FG) (N : ℕ →o Submodule R M)
(H : iSup N = M') : ∃ n, M' = N n := by
obtain ⟨S, hS⟩ := hM'
have : ∀ s : S, ∃ n, (s : M) ∈ N n := fun s =>
@@ -413,10 +413,10 @@ theorem Fg.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]
exact le_iSup _ _
-#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_iSup_eq
+#align submodule.fg.stablizes_of_supr_eq Submodule.FG.stablizes_of_iSup_eq
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
-theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactElement s := by
+theorem fg_iff_compact (s : Submodule R M) : s.FG ↔ CompleteLattice.IsCompactElement s := by
classical
-- Introduce shorthand for span of an element
let sp : M → Submodule R M := fun a => span R {a}
@@ -458,14 +458,14 @@ variable [CommSemiring R] [AddCommMonoid M] [AddCommMonoid N] [AddCommMonoid P]
variable [Module R M] [Module R N] [Module R P]
-theorem Fg.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.Fg)
- (hq : q.Fg) : (map₂ f p q).Fg :=
+theorem FG.map₂ (f : M →ₗ[R] N →ₗ[R] P) {p : Submodule R M} {q : Submodule R N} (hp : p.FG)
+ (hq : q.FG) : (map₂ f p q).FG :=
let ⟨sm, hfm, hm⟩ := fg_def.1 hp
let ⟨sn, hfn, hn⟩ := fg_def.1 hq
fg_def.2
⟨Set.image2 (fun m n => f m n) sm sn, hfm.image2 _ hfn,
map₂_span_span R f sm sn ▸ hm ▸ hn ▸ rfl⟩
-#align submodule.fg.map₂ Submodule.Fg.map₂
+#align submodule.fg.map₂ Submodule.FG.map₂
end Map₂
@@ -475,13 +475,13 @@ variable {R : Type _} {A : Type _} [CommSemiring R] [Semiring A] [Algebra R A]
variable {M N : Submodule R A}
-theorem Fg.mul (hm : M.Fg) (hn : N.Fg) : (M * N).Fg :=
+theorem FG.mul (hm : M.FG) (hn : N.FG) : (M * N).FG :=
hm.map₂ _ hn
-#align submodule.fg.mul Submodule.Fg.mul
+#align submodule.fg.mul Submodule.FG.mul
-theorem Fg.pow (h : M.Fg) (n : ℕ) : (M ^ n).Fg :=
+theorem FG.pow (h : M.FG) (n : ℕ) : (M ^ n).FG :=
Nat.recOn n ⟨{1}, by simp [one_eq_span]⟩ fun n ih => by simpa [pow_succ] using h.mul ih
-#align submodule.fg.pow Submodule.Fg.pow
+#align submodule.fg.pow Submodule.FG.pow
end Mul
@@ -493,26 +493,26 @@ variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
/-- An ideal of `R` is finitely generated if it is the span of a finite subset of `R`.
-This is defeq to `Submodule.Fg`, but unfolds more nicely. -/
-def Fg (I : Ideal R) : Prop :=
+This is defeq to `Submodule.FG`, but unfolds more nicely. -/
+def FG (I : Ideal R) : Prop :=
∃ S : Finset R, Ideal.span ↑S = I
-#align ideal.fg Ideal.Fg
+#align ideal.fg Ideal.FG
/-- The image of a finitely generated ideal is finitely generated.
-This is the `ideal` version of `Submodule.Fg.map`. -/
-theorem Fg.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.Fg) (f : R →+* S) :
- (I.map f).Fg := by
+This is the `ideal` version of `Submodule.FG.map`. -/
+theorem FG.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.FG) (f : R →+* S) :
+ (I.map f).FG := by
classical
obtain ⟨s, hs⟩ := h
refine' ⟨s.image f, _⟩
rw [Finset.coe_image, ← Ideal.map_span, hs]
-#align ideal.fg.map Ideal.Fg.map
+#align ideal.fg.map Ideal.FG.map
set_option synthInstance.etaExperiment true in
theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f : R →+* S)
- (g : S →+* A) (hf : f.ker.Fg) (hg : g.ker.Fg) (hsur : Function.Surjective f) :
- (g.comp f).ker.Fg := by
+ (g : S →+* A) (hf : f.ker.FG) (hg : g.ker.FG) (hsur : Function.Surjective f) :
+ (g.comp f).ker.FG := by
letI : Algebra R S := RingHom.toAlgebra f
letI : Algebra R A := RingHom.toAlgebra (g.comp f)
letI : Algebra S A := RingHom.toAlgebra g
@@ -522,7 +522,7 @@ theorem fg_ker_comp {R S A : Type _} [CommRing R] [CommRing S] [CommRing A] (f :
exact Submodule.fg_ker_comp f₁ g₁ hf (Submodule.fg_restrictScalars (RingHom.ker g) hg hsur) hsur
#align ideal.fg_ker_comp Ideal.fg_ker_comp
-theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.Fg) :
+theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R) (h : I.radical.FG) :
∃ n : ℕ, I.radical ^ n ≤ I := by
have := le_refl I.radical; revert this
refine' Submodule.fg_induction _ _ (fun J => J ≤ I.radical → ∃ n : ℕ, J ^ n ≤ I) _ _ _ h
@@ -551,7 +551,7 @@ variable (R A B M N : Type _)
/-- A module over a semiring is `Finite` if it is finitely generated as a module. -/
class Module.Finite [Semiring R] [AddCommMonoid M] [Module R M] : Prop where
- out : (⊤ : Submodule R M).Fg
+ out : (⊤ : Submodule R M).FG
#align module.finite Module.Finite
attribute [inherit_doc Module.Finite] Module.Finite.out
@@ -561,7 +561,7 @@ namespace Module
variable [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid N] [Module R N]
theorem finite_def {R M} [Semiring R] [AddCommMonoid M] [Module R M] :
- Finite R M ↔ (⊤ : Submodule R M).Fg :=
+ Finite R M ↔ (⊤ : Submodule R M).FG :=
⟨fun h => h.1, fun h => ⟨h⟩⟩
#align module.finite_def Module.finite_def
@@ -569,12 +569,12 @@ namespace Finite
open Submodule Set
-theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.Fg M :=
+theorem iff_addMonoid_fg {M : Type _} [AddCommMonoid M] : Module.Finite ℕ M ↔ AddMonoid.FG M :=
⟨fun h => AddMonoid.fg_def.2 <| (Submodule.fg_iff_addSubmonoid_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (Submodule.fg_iff_addSubmonoid_fg ⊤).2 (AddMonoid.fg_def.1 h)⟩
#align module.finite.iff_add_monoid_fg Module.Finite.iff_addMonoid_fg
-theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.Fg G :=
+theorem iff_addGroup_fg {G : Type _} [AddCommGroup G] : Module.Finite ℤ G ↔ AddGroup.FG G :=
⟨fun h => AddGroup.fg_def.2 <| (Submodule.fg_iff_add_subgroup_fg ⊤).1 (finite_def.1 h), fun h =>
finite_def.2 <| (Submodule.fg_iff_add_subgroup_fg ⊤).2 (AddGroup.fg_def.1 h)⟩
#align module.finite.iff_add_group_fg Module.Finite.iff_addGroup_fg
sSup
/iSup
(#3938)
As discussed on Zulip
supₛ
→ sSup
infₛ
→ sInf
supᵢ
→ iSup
infᵢ
→ iInf
bsupₛ
→ bsSup
binfₛ
→ bsInf
bsupᵢ
→ biSup
binfᵢ
→ biInf
csupₛ
→ csSup
cinfₛ
→ csInf
csupᵢ
→ ciSup
cinfᵢ
→ ciInf
unionₛ
→ sUnion
interₛ
→ sInter
unionᵢ
→ iUnion
interᵢ
→ iInter
bunionₛ
→ bsUnion
binterₛ
→ bsInter
bunionᵢ
→ biUnion
binterᵢ
→ biInter
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -190,15 +190,15 @@ theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (
Finset.sup_induction fg_bot (fun _ ha _ hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-theorem fg_bsupᵢ {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
- (⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_supᵢ] using fg_finset_sup s N h
-#align submodule.fg_bsupr Submodule.fg_bsupᵢ
+theorem fg_biSup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
+ (⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_iSup] using fg_finset_sup s N h
+#align submodule.fg_bsupr Submodule.fg_biSup
-theorem fg_supᵢ {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) :
- (supᵢ N).Fg := by
+theorem fg_iSup {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) :
+ (iSup N).Fg := by
cases nonempty_fintype ι
- simpa using fg_bsupᵢ Finset.univ N fun i _ => h i
-#align submodule.fg_supr Submodule.fg_supᵢ
+ simpa using fg_biSup Finset.univ N fun i _ => h i
+#align submodule.fg_supr Submodule.fg_iSup
variable {P : Type _} [AddCommMonoid P] [Module R P]
@@ -259,8 +259,8 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
choose t htf hts using hsb
-- Porting note: `refine'` doesn't work here
refine
- ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_unionᵢ fun i => (htf i).image _, ?_⟩
- simp_rw [span_unionᵢ, span_image, hts, Submodule.supᵢ_map_single]
+ ⟨⋃ i, (LinearMap.single i : _ →ₗ[R] _) '' t i, Set.finite_iUnion fun i => (htf i).image _, ?_⟩
+ simp_rw [span_iUnion, span_image, hts, Submodule.iSup_map_single]
#align submodule.fg_pi Submodule.fg_pi
/-- Porting note: helping Lean find the coercion to functions below -/
@@ -396,11 +396,11 @@ theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algeb
exact (Submodule.restrictScalars_span R S h (X : Set M)).symm
#align submodule.fg_restrict_scalars Submodule.fg_restrictScalars
-theorem Fg.stablizes_of_supᵢ_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
- (H : supᵢ N = M') : ∃ n, M' = N n := by
+theorem Fg.stablizes_of_iSup_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ →o Submodule R M)
+ (H : iSup N = M') : ∃ n, M' = N n := by
obtain ⟨S, hS⟩ := hM'
have : ∀ s : S, ∃ n, (s : M) ∈ N n := fun s =>
- (Submodule.mem_supᵢ_of_chain N s).mp
+ (Submodule.mem_iSup_of_chain N s).mp
(by
rw [H, ← hS]
exact Submodule.subset_span s.2)
@@ -412,8 +412,8 @@ theorem Fg.stablizes_of_supᵢ_eq {M' : Submodule R M} (hM' : M'.Fg) (N : ℕ
intro s hs
exact N.2 (Finset.le_sup <| S.mem_attach ⟨s, hs⟩) (hf _)
· rw [← H]
- exact le_supᵢ _ _
-#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_supᵢ_eq
+ exact le_iSup _ _
+#align submodule.fg.stablizes_of_supr_eq Submodule.Fg.stablizes_of_iSup_eq
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactElement s := by
@@ -424,25 +424,25 @@ theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactE
have supr_rw : ∀ t : Finset M, (⨆ x ∈ t, sp x) = ⨆ x ∈ (↑t : Set M), sp x := fun t => by rfl
constructor
· rintro ⟨t, rfl⟩
- rw [span_eq_supᵢ_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_supᵢ t sp]
+ rw [span_eq_iSup_of_singleton_spans, ← supr_rw, ← Finset.sup_eq_iSup t sp]
apply CompleteLattice.finset_sup_compact_of_compact
exact fun n _ => singleton_span_isCompactElement n
· intro h
-- s is the Sup of the spans of its elements.
- have sSup : s = supₛ (sp '' ↑s) := by
- rw [supₛ_eq_supᵢ, supᵢ_image, ← span_eq_supᵢ_of_singleton_spans, eq_comm, span_eq]
+ have sSup' : s = sSup (sp '' ↑s) := by
+ rw [sSup_eq_iSup, iSup_image, ← span_eq_iSup_of_singleton_spans, eq_comm, span_eq]
-- by h, s is then below (and equal to) the sup of the spans of finitely many elements.
- obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup)
+ obtain ⟨u, ⟨huspan, husup⟩⟩ := h (sp '' ↑s) (le_of_eq sSup')
have ssup : s = u.sup id := by
suffices : u.sup id ≤ s
exact le_antisymm husup this
- rw [sSup, Finset.sup_id_eq_supₛ]
- exact supₛ_le_supₛ huspan
+ rw [sSup', Finset.sup_id_eq_sSup]
+ exact sSup_le_sSup huspan
-- Porting note: had to split this out of the `obtain`
have := Finset.subset_image_iff.mp huspan
obtain ⟨t, ⟨-, rfl⟩⟩ := this
- rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_supᵢ, supr_rw, ←
- span_eq_supᵢ_of_singleton_spans, eq_comm] at ssup
+ rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_iSup, supr_rw, ←
+ span_eq_iSup_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -51,8 +51,7 @@ def Fg (N : Submodule R M) : Prop :=
#align submodule.fg Submodule.Fg
theorem fg_def {N : Submodule R M} : N.Fg ↔ ∃ S : Set M, S.Finite ∧ span R S = N :=
- ⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩,
- by
+ ⟨fun ⟨t, h⟩ => ⟨_, Finset.finite_toSet t, h⟩, by
rintro ⟨t', h, rfl⟩
rcases Finite.exists_finset_coe h with ⟨t, rfl⟩
exact ⟨t, rfl⟩⟩
@@ -87,8 +86,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
∃ r : R, r - 1 ∈ I ∧ ∀ n ∈ N, r • n = (0 : M) := by
rw [fg_def] at hn
rcases hn with ⟨s, hfs, hs⟩
- have : ∃ r : R, r - 1 ∈ I ∧ N ≤ (I • span R s).comap (LinearMap.lsmul R M r) ∧ s ⊆ N :=
- by
+ have : ∃ r : R, r - 1 ∈ I ∧ N ≤ (I • span R s).comap (LinearMap.lsmul R M r) ∧ s ⊆ N := by
refine' ⟨1, _, _, _⟩
· rw [sub_self]
exact I.zero_mem
@@ -110,8 +108,7 @@ theorem exists_sub_one_mem_and_smul_eq_zero_of_fg_of_le_smul {R : Type _} [CommR
rcases H with ⟨r, hr1, hrn, hs⟩
rw [← Set.singleton_union, span_union, smul_sup] at hrn
rw [Set.insert_subset] at hs
- have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s :=
- by
+ have : ∃ c : R, c - 1 ∈ I ∧ c • i ∈ I • span R s := by
specialize hrn hs.1
rw [mem_comap, mem_sup] at hrn
rcases hrn with ⟨y, hy, z, hz, hyz⟩
@@ -157,8 +154,7 @@ theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Se
theorem fg_unit {R A : Type _} [CommSemiring R] [Semiring A] [Algebra R A] (I : (Submodule R A)ˣ) :
(I : Submodule R A).Fg := by
- have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) :=
- by
+ have : (1 : A) ∈ (I * ↑I⁻¹ : Submodule R A) := by
rw [I.mul_inv]
exact one_le.mp le_rfl
obtain ⟨T, T', hT, hT', one_mem⟩ := mem_span_mul_finite_of_mem_mul this
@@ -198,8 +194,8 @@ theorem fg_bsupᵢ {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h :
(⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_supᵢ] using fg_finset_sup s N h
#align submodule.fg_bsupr Submodule.fg_bsupᵢ
-theorem fg_supᵢ {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) : (supᵢ N).Fg :=
- by
+theorem fg_supᵢ {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) :
+ (supᵢ N).Fg := by
cases nonempty_fintype ι
simpa using fg_bsupᵢ Finset.univ N fun i _ => h i
#align submodule.fg_supr Submodule.fg_supᵢ
@@ -219,8 +215,7 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
(hfn : (N.map f).Fg) : N.Fg :=
let ⟨t, ht⟩ := hfn
⟨t.preimage f fun x _ y _ h => hf h,
- Submodule.map_injective_of_injective hf <|
- by
+ Submodule.map_injective_of_injective hf <| by
rw [f.map_span, Finset.coe_preimage, Set.image_preimage_eq_inter_range,
Set.inter_eq_self_of_subset_left, ht]
rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]
@@ -299,8 +294,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
rcases mem_map.1 this with ⟨x, hx1, hx2⟩
exact ⟨x, hx1, hx2⟩
-- Porting note: With etaExperiment, we don't need the asFun in the following statement.
- have : ∃ g : P → M, ∀ y ∈ t1, g y ∈ s ∧ asFun f (g y) = y :=
- by
+ have : ∃ g : P → M, ∀ y ∈ t1, g y ∈ s ∧ asFun f (g y) = y := by
choose g hg1 hg2 using this
exists fun y => if H : y ∈ t1 then g y H else 0
intro y H
@@ -395,8 +389,8 @@ theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [A
theorem fg_restrictScalars {R S M : Type _} [CommSemiring R] [Semiring S] [Algebra R S]
[AddCommGroup M] [Module S M] [Module R M] [IsScalarTower R S M] (N : Submodule S M)
- (hfin : N.Fg) (h : Function.Surjective (algebraMap R S)) : (Submodule.restrictScalars R N).Fg :=
- by
+ (hfin : N.Fg) (h : Function.Surjective (algebraMap R S)) :
+ (Submodule.restrictScalars R N).Fg := by
obtain ⟨X, rfl⟩ := hfin
use X
exact (Submodule.restrictScalars_span R S h (X : Set M)).symm
@@ -617,8 +611,8 @@ instance self : Finite R R :=
variable (M)
theorem of_restrictScalars_finite (R A M : Type _) [CommSemiring R] [Semiring A] [AddCommMonoid M]
- [Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] : Finite A M :=
- by
+ [Module R M] [Module A M] [Algebra R A] [IsScalarTower R A M] [hM : Finite R M] :
+ Finite A M := by
rw [finite_def, Submodule.fg_def] at hM⊢
obtain ⟨S, hSfin, hSgen⟩ := hM
refine' ⟨S, hSfin, eq_top_iff.2 _⟩
finset.sup_finset_image
(#3713)
Match https://github.com/leanprover-community/mathlib/pull/18893
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit fa78268d4d77cb2b2fbc89f0527e2e7807763780
+! leanprover-community/mathlib commit c813ed7de0f5115f956239124e9b30f3a621966f
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -447,7 +447,7 @@ theorem fg_iff_compact (s : Submodule R M) : s.Fg ↔ CompleteLattice.IsCompactE
-- Porting note: had to split this out of the `obtain`
have := Finset.subset_image_iff.mp huspan
obtain ⟨t, ⟨-, rfl⟩⟩ := this
- rw [Finset.sup_finset_image, Function.comp.left_id, Finset.sup_eq_supᵢ, supr_rw, ←
+ rw [Finset.sup_image, Function.comp.left_id, Finset.sup_eq_supᵢ, supr_rw, ←
span_eq_supᵢ_of_singleton_spans, eq_comm] at ssup
exact ⟨t, ssup⟩
#align submodule.fg_iff_compact Submodule.fg_iff_compact
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit e95e4f92c8f8da3c7f693c3ec948bcf9b6683f51
+! leanprover-community/mathlib commit fa78268d4d77cb2b2fbc89f0527e2e7807763780
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -648,14 +648,14 @@ theorem equiv [Finite R M] (e : M ≃ₗ[R] N) : Finite R N :=
section Algebra
-theorem trans {R : Type _} (A B : Type _) [CommSemiring R] [CommSemiring A] [Algebra R A]
- [Semiring B] [Algebra R B] [Algebra A B] [IsScalarTower R A B] :
- ∀ [Finite R A] [Finite A B], Finite R B
+theorem trans {R : Type _} (A M : Type _) [CommSemiring R] [Semiring A] [Algebra R A]
+ [AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M] :
+ ∀ [Finite R A] [Finite A M], Finite R M
| ⟨⟨s, hs⟩⟩, ⟨⟨t, ht⟩⟩ =>
⟨Submodule.fg_def.2
- ⟨Set.image2 (· • ·) (↑s : Set A) (↑t : Set B),
+ ⟨Set.image2 (· • ·) (↑s : Set A) (↑t : Set M),
Set.Finite.image2 _ s.finite_toSet t.finite_toSet, by
- erw [Set.image2_smul, Submodule.span_smul_of_span_eq_top hs (↑t : Set B), ht,
+ erw [Set.image2_smul, Submodule.span_smul_of_span_eq_top hs (↑t : Set M), ht,
Submodule.restrictScalars_top]⟩⟩
#align module.finite.trans Module.Finite.trans
@@ -724,13 +724,15 @@ theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
#align ring_hom.finite.of_surjective RingHom.Finite.of_surjective
-theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite :=
+theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (g.comp f).Finite := by
+ set_option synthInstance.etaExperiment true in
letI := f.toAlgebra
letI := g.toAlgebra
letI := (g.comp f).toAlgebra
- @Module.Finite.trans A B C _ _ f.toAlgebra _ (g.comp f).toAlgebra g.toAlgebra
- ⟨fun a b c => show (g ((f a) * b)) * c = g (f a) * (g b * c) by rw [map_mul, mul_assoc]⟩
- hf hg
+ letI : IsScalarTower A B C := RestrictScalars.isScalarTower A B C
+ letI : Module.Finite A B := hf
+ letI : Module.Finite B C := hg
+ exact Module.Finite.trans B C
#align ring_hom.finite.comp RingHom.Finite.comp
set_option synthInstance.etaExperiment true in
This is to fix timeouts in https://github.com/leanprover-community/mathlib4/pull/3552.
See discussion at https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/!4.233552.20.28LinearAlgebra.2EMatrix.2EToLin.29.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -272,7 +272,10 @@ theorem fg_pi {ι : Type _} {M : ι → Type _} [Finite ι] [∀ i, AddCommMonoi
abbrev asFun [AddCommGroup N] [Module R N] (f : M →ₗ[R] N) : M → N :=
f
--- set_option synthInstance.etaExperiment true in
+-- Porting note: We've since turned on etaExperiment here,
+-- but there remain lots of notes below about clean up that is possible with etaExperiment,
+-- and we should follow these!
+set_option synthInstance.etaExperiment true in
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
@@ -698,6 +701,7 @@ namespace RingHom
variable {A B C : Type _} [CommRing A] [CommRing B] [CommRing C]
+set_option synthInstance.etaExperiment true in
/-- A ring morphism `A →+* B` is `Finite` if `B` is finitely generated as `A`-module. -/
def Finite (f : A →+* B) : Prop :=
letI : Algebra A B := f.toAlgebra
@@ -714,6 +718,7 @@ theorem id : Finite (RingHom.id A) :=
variable {A}
+set_option synthInstance.etaExperiment true in
theorem of_surjective (f : A →+* B) (hf : Surjective f) : f.Finite :=
letI := f.toAlgebra
Module.Finite.of_surjective (Algebra.ofId A B).toLinearMap hf
@@ -728,6 +733,7 @@ theorem comp {g : B →+* C} {f : A →+* B} (hg : g.Finite) (hf : f.Finite) : (
hf hg
#align ring_hom.finite.comp RingHom.Finite.comp
+set_option synthInstance.etaExperiment true in
theorem of_comp_finite {f : A →+* B} {g : B →+* C} (h : (g.comp f).Finite) : g.Finite := by
letI := f.toAlgebra
letI := g.toAlgebra
Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit 039ef89bef6e58b32b62898dd48e9d1a4312bb65
+! leanprover-community/mathlib commit e95e4f92c8f8da3c7f693c3ec948bcf9b6683f51
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -599,6 +599,12 @@ instance range [Finite R M] (f : M →ₗ[R] N) : Finite R (LinearMap.range f) :
of_surjective f.rangeRestrict fun ⟨_, y, hy⟩ => ⟨y, Subtype.ext hy⟩
#align module.finite.range Module.Finite.range
+/-- Pushforwards of finite submodules are finite. -/
+instance map (p : Submodule R M) [Finite R p] (f : M →ₗ[R] N) : Finite R (p.map f) :=
+ of_surjective (f.restrict fun _ => Submodule.mem_map_of_mem) fun ⟨_, _, hy, hy'⟩ =>
+ ⟨⟨_, hy⟩, Subtype.ext hy'⟩
+#align module.finite.map Module.Finite.map
+
variable (R)
instance self : Finite R R :=
@@ -150,7 +150,7 @@ theorem fg_bot : (⊥ : Submodule R M).Fg :=
⟨∅, by rw [Finset.coe_empty, span_empty]⟩
#align submodule.fg_bot Submodule.fg_bot
-theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A]
+theorem _root_.Subalgebra.fg_bot_toSubmodule {R A : Type _} [CommSemiring R] [Semiring A]
[Algebra R A] : (⊥ : Subalgebra R A).toSubmodule.Fg :=
⟨{1}, by simp [Algebra.toSubmodule_bot]⟩
#align subalgebra.fg_bot_to_submodule Subalgebra.fg_bot_toSubmodule
@@ -194,14 +194,14 @@ theorem fg_finset_sup {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (
Finset.sup_induction fg_bot (fun _ ha _ hb => ha.sup hb) h
#align submodule.fg_finset_sup Submodule.fg_finset_sup
-theorem fg_bsupr {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
+theorem fg_bsupᵢ {ι : Type _} (s : Finset ι) (N : ι → Submodule R M) (h : ∀ i ∈ s, (N i).Fg) :
(⨆ i ∈ s, N i).Fg := by simpa only [Finset.sup_eq_supᵢ] using fg_finset_sup s N h
-#align submodule.fg_bsupr Submodule.fg_bsupr
+#align submodule.fg_bsupr Submodule.fg_bsupᵢ
theorem fg_supᵢ {ι : Type _} [Finite ι] (N : ι → Submodule R M) (h : ∀ i, (N i).Fg) : (supᵢ N).Fg :=
by
cases nonempty_fintype ι
- simpa using fg_bsupr Finset.univ N fun i _ => h i
+ simpa using fg_bsupᵢ Finset.univ N fun i _ => h i
#align submodule.fg_supr Submodule.fg_supᵢ
variable {P : Type _} [AddCommMonoid P] [Module R P]
@@ -226,13 +226,13 @@ theorem fg_of_fg_map_injective (f : M →ₗ[R] P) (hf : Function.Injective f) {
rw [← LinearMap.range_coe, ← span_le, ht, ← map_top]
exact map_mono le_top⟩
#align submodule.fg_of_fg_map_injective Submodule.fg_of_fg_map_injective
-/- Porting note: Lean not finding this instance is source of the majority of troubles here.
+/- Porting note: Lean not finding this instance is source of the majority of troubles here.
Perhaps it should get its own name -/
alias LinearMap.instSemilinearMapClassLinearMap ← instSLMC
-- Porting note: With etaExperiment, we don't need the @s in the following statement.
theorem fg_of_fg_map {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup P]
- [Module R P] (f : M →ₗ[R] P)
+ [Module R P] (f : M →ₗ[R] P)
(hf : @LinearMap.ker R R M P _ _ _ _ _ _ (RingHom.id _) _ instSLMC f = ⊥) {N : Submodule R M}
(hfn : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f N).Fg) : N.Fg :=
fg_of_fg_map_injective f (LinearMap.ker_eq_bot.1 hf) hfn
@@ -276,7 +276,7 @@ abbrev asFun [AddCommGroup N] [Module R N] (f : M →ₗ[R] N) : M → N :=
/-- If 0 → M' → M → M'' → 0 is exact and M' and M'' are
finitely generated then so is M. -/
theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [Module R M]
- [AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M}
+ [AddCommGroup P] [Module R P] (f : M →ₗ[R] P) {s : Submodule R M}
-- Porting note: Lean having trouble both unifying for SLMC and then synthesizing once unified
-- With etaExperiment, we don't need the @s in the following statement.
(hs1 : (@map R R M P _ _ _ _ _ _ (RingHom.id _) _ _ instSLMC f s).Fg)
@@ -345,7 +345,7 @@ theorem fg_of_fg_map_of_fg_inf_ker {R M P : Type _} [Ring R] [AddCommGroup M] [M
exact s.smul_mem _ (hg y (hl1 hy)).1
· exact zero_smul _
· exact fun _ _ _ => add_smul _ _ _
- · dsimp [asFun] at hl2
+ · dsimp [asFun] at hl2
rw [LinearMap.mem_ker, f.map_sub, ← hl2]
rw [Finsupp.total_apply, Finsupp.total_apply, Finsupp.lmapDomain_apply]
rw [Finsupp.sum_mapDomain_index, Finsupp.sum, Finsupp.sum, f.map_sum]
@@ -373,13 +373,13 @@ theorem fg_induction (R M : Type _) [Semiring R] [AddCommMonoid M] [Module R M]
/-- The kernel of the composition of two linear maps is finitely generated if both kernels are and
the first morphism is surjective. -/
theorem fg_ker_comp {R M N P : Type _} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
- [Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P)
+ [Module R N] [AddCommGroup P] [Module R P] (f : M →ₗ[R] N) (g : N →ₗ[R] P)
-- Porting note: more help both unifying and finding instSLMC
-- With etaExperiment, we don't need the @s in the following statement.
(hf1 : (@LinearMap.ker R R M N _ _ _ _ _ _ (RingHom.id _) _ instSLMC f).Fg)
- (hf2 : (@LinearMap.ker R R N P _ _ _ _ _ _ (RingHom.id _) _ instSLMC g).Fg)
- (hsur : Function.Surjective <| asFun f) :
- (@LinearMap.comp R R R M N P _ _ _ _ _ _ _ _ _
+ (hf2 : (@LinearMap.ker R R N P _ _ _ _ _ _ (RingHom.id _) _ instSLMC g).Fg)
+ (hsur : Function.Surjective <| asFun f) :
+ (@LinearMap.comp R R R M N P _ _ _ _ _ _ _ _ _
(RingHom.id _) (RingHom.id _) (RingHom.id _) _ g f).ker.Fg := by
rw [LinearMap.ker_comp]
apply fg_of_fg_map_of_fg_inf_ker f
@@ -496,14 +496,14 @@ variable {R : Type _} {M : Type _} [Semiring R] [AddCommMonoid M] [Module R M]
/-- An ideal of `R` is finitely generated if it is the span of a finite subset of `R`.
-This is defeq to `submodule.fg`, but unfolds more nicely. -/
+This is defeq to `Submodule.Fg`, but unfolds more nicely. -/
def Fg (I : Ideal R) : Prop :=
∃ S : Finset R, Ideal.span ↑S = I
#align ideal.fg Ideal.Fg
/-- The image of a finitely generated ideal is finitely generated.
-This is the `ideal` version of `submodule.fg.map`. -/
+This is the `ideal` version of `Submodule.Fg.map`. -/
theorem Fg.map {R S : Type _} [Semiring R] [Semiring S] {I : Ideal R} (h : I.Fg) (f : R →+* S) :
(I.map f).Fg := by
classical
@@ -540,7 +540,7 @@ theorem exists_radical_pow_le_of_fg {R : Type _} [CommSemiring R] (I : Ideal R)
refine' fun i _ => Ideal.mul_le_right.trans _
obtain h | h := le_or_lt n i
· apply Ideal.mul_le_right.trans ((Ideal.pow_le_pow h).trans hn)
- · apply Ideal.mul_le_left.trans
+ · apply Ideal.mul_le_left.trans
refine' (Ideal.pow_le_pow _).trans hm
rw [add_comm, Nat.add_sub_assoc h.le]
apply Nat.le_add_right
@@ -552,7 +552,7 @@ section ModuleAndAlgebra
variable (R A B M N : Type _)
-/-- A module over a semiring is `finite` if it is finitely generated as a module. -/
+/-- A module over a semiring is `Finite` if it is finitely generated as a module. -/
class Module.Finite [Semiring R] [AddCommMonoid M] [Module R M] : Prop where
out : (⊤ : Submodule R M).Fg
#align module.finite Module.Finite
@@ -657,9 +657,9 @@ end Finite
end Module
/-- Porting note: reminding Lean about this instance for Module.Finite.base_change -/
-local instance [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M] [Module R M] :
- Module A (TensorProduct R A M) :=
- haveI : SMulCommClass R A A := IsScalarTower.to_smulCommClass
+local instance [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M] [Module R M] :
+ Module A (TensorProduct R A M) :=
+ haveI : SMulCommClass R A A := IsScalarTower.to_smulCommClass
TensorProduct.leftModule
instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [AddCommMonoid M]
@@ -682,7 +682,7 @@ instance Module.Finite.base_change [CommSemiring R] [Semiring A] [Algebra R A] [
instance Module.Finite.tensorProduct [CommSemiring R] [AddCommMonoid M] [Module R M]
[AddCommMonoid N] [Module R N] [hM : Module.Finite R M] [hN : Module.Finite R N] :
- Module.Finite R (TensorProduct R M N) where
+ Module.Finite R (TensorProduct R M N) where
out := (TensorProduct.map₂_mk_top_top_eq_top R M N).subst (hM.out.map₂ _ hN.out)
#align module.finite.tensor_product Module.Finite.tensorProduct
@@ -692,7 +692,7 @@ namespace RingHom
variable {A B C : Type _} [CommRing A] [CommRing B] [CommRing C]
-/-- A ring morphism `A →+* B` is `finite` if `B` is finitely generated as `A`-module. -/
+/-- A ring morphism `A →+* B` is `Finite` if `B` is finitely generated as `A`-module. -/
def Finite (f : A →+* B) : Prop :=
letI : Algebra A B := f.toAlgebra
Module.Finite A B
@@ -774,4 +774,3 @@ theorem of_comp_finite {f : A →ₐ[R] B} {g : B →ₐ[R] C} (h : (g.comp f).F
end Finite
end AlgHom
-
Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin
! This file was ported from Lean 3 source module ring_theory.finiteness
-! leanprover-community/mathlib commit f5edf4694f7c478cbca7a2451bddbd221fc7f869
+! leanprover-community/mathlib commit 039ef89bef6e58b32b62898dd48e9d1a4312bb65
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -594,6 +594,11 @@ theorem of_surjective [hM : Finite R M] (f : M →ₗ[R] N) (hf : Surjective f)
exact hM.1.map f⟩
#align module.finite.of_surjective Module.Finite.of_surjective
+/-- The range of a linear map from a finite module is finite. -/
+instance range [Finite R M] (f : M →ₗ[R] N) : Finite R (LinearMap.range f) :=
+ of_surjective f.rangeRestrict fun ⟨_, y, hy⟩ => ⟨y, Subtype.ext hy⟩
+#align module.finite.range Module.Finite.range
+
variable (R)
instance self : Finite R R :=
The unported dependencies are