Theorem: Submodule.mem_of_span_eq_top_of_smul_pow_mem
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: obtain ⟨s', hs₁, hs₂⟩ := (Ideal.span_eq_top_iff_finite _).mp hs
state_before: R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ∃ n, ↑r ^ n • x ∈ M'
⊢ x ∈ M'
state_after: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ∃ n, ↑r ^ n • x ∈ M'
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
⊢ x ∈ M'

tactic: replace H : ∀ r : s', ∃ n : ℕ, ((r : R) ^ n : R) • x ∈ M' := fun r => H ⟨_, hs₁ r.2⟩
state_before: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ∃ n, ↑r ^ n • x ∈ M'
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
⊢ x ∈ M'
state_after: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
H : ∀ (r : { x // x ∈ s' }), ∃ n, ↑r ^ n • x ∈ M'
⊢ x ∈ M'

tactic: choose n₁ n₂ using H
state_before: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
H : ∀ (r : { x // x ∈ s' }), ∃ n, ↑r ^ n • x ∈ M'
⊢ x ∈ M'
state_after: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
⊢ x ∈ M'

tactic: let N := s'.attach.sup n₁
state_before: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
⊢ x ∈ M'
state_after: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
⊢ x ∈ M'

tactic: have hs' := Ideal.span_pow_eq_top (s' : Set R) hs₂ N
state_before: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
⊢ x ∈ M'
state_after: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
⊢ x ∈ M'

tactic: apply M'.mem_of_span_top_of_smul_mem _ hs'
state_before: case intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
⊢ x ∈ M'
state_after: case intro.intro.H
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
⊢ ∀ (r : ↑((fun x => x ^ N) '' ↑s')), ↑r • x ∈ M'

tactic: rintro ⟨_, r, hr, rfl⟩
state_before: case intro.intro.H
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
⊢ ∀ (r : ↑((fun x => x ^ N) '' ↑s')), ↑r • x ∈ M'
state_after: case intro.intro.H.mk.intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ ↑⟨(fun x => x ^ N) r, ⋯⟩ • x ∈ M'

tactic: convert M'.smul_mem (r ^ (N - n₁ ⟨r, hr⟩)) (n₂ ⟨r, hr⟩) using 1
state_before: case intro.intro.H.mk.intro.intro
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ ↑⟨(fun x => x ^ N) r, ⋯⟩ • x ∈ M'
state_after: case h.e'_4
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ ↑⟨(fun x => x ^ N) r, ⋯⟩ • x = r ^ (N - n₁ ⟨r, hr⟩) • ↑⟨r, hr⟩ ^ n₁ ⟨r, hr⟩ • x

tactic: simp only [Subtype.coe_mk, smul_smul, ← pow_add]
state_before: case h.e'_4
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ ↑⟨(fun x => x ^ N) r, ⋯⟩ • x = r ^ (N - n₁ ⟨r, hr⟩) • ↑⟨r, hr⟩ ^ n₁ ⟨r, hr⟩ • x
state_after: case h.e'_4
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ r ^ N • x = r ^ (N - n₁ ⟨r, hr⟩ + n₁ ⟨r, hr⟩) • x

tactic: rw [tsub_add_cancel_of_le (Finset.le_sup (s'.mem_attach _) : n₁ ⟨r, hr⟩ ≤ N)]
state_before: case h.e'_4
R : Type u
M : Type v
M'✝ : Type u_1
F : Type u_2
G : Type u_3
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid M'✝
inst✝ : Module R M'✝
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := s'.attach.sup n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ r ^ N • x = r ^ (N - n₁ ⟨r, hr⟩ + n₁ ⟨r, hr⟩) • x
state_after: no goals