Theorem: NoZeroSMulDivisors.isReduced
File: Mathlib/RingTheory/Nilpotent/Basic.lean

tactic: refine ⟨fun x ⟨k, hk⟩ ↦ ?_⟩
state_before: R✝ : Type u_1
S : Type u_2
x y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
⊢ IsReduced R
state_after: R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
hk : x ^ k = 0
⊢ x = 0

tactic: induction' k with k ih
state_before: R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
hk : x ^ k = 0
⊢ x = 0
state_after: case zero
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
hk : x ^ 0 = 0
⊢ x = 0

case succ
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
⊢ x = 0

tactic: rw [pow_zero] at hk
state_before: case zero
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
hk : x ^ 0 = 0
⊢ x = 0
state_after: case zero
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
hk : 1 = 0
⊢ x = 0

tactic: exact eq_zero_of_zero_eq_one hk.symm x
state_before: case zero
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
hk : 1 = 0
⊢ x = 0
state_after: no goals

tactic: obtain ⟨m : M, hm : m ≠ 0⟩ := exists_ne (0 : M)
state_before: case succ
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
⊢ x = 0
state_after: case succ.intro
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
⊢ x = 0

tactic: have : x ^ (k + 1) • m = 0 := by simp only [hk, zero_smul]
state_before: case succ.intro
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
⊢ x = 0
state_after: case succ.intro
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
this : x ^ (k + 1) • m = 0
⊢ x = 0

tactic: rw [pow_succ', mul_smul] at this
state_before: case succ.intro
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
this : x ^ (k + 1) • m = 0
⊢ x = 0
state_after: case succ.intro
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
this : x • x ^ k • m = 0
⊢ x = 0

tactic: rcases eq_zero_or_eq_zero_of_smul_eq_zero this with rfl | hx
state_before: case succ.intro
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
this : x • x ^ k • m = 0
⊢ x = 0
state_after: case succ.intro.inl
R✝ : Type u_1
S : Type u_2
x y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
k : ℕ
m : M
hm : m ≠ 0
x✝ : IsNilpotent 0
ih : 0 ^ k = 0 → 0 = 0
hk : 0 ^ (k + 1) = 0
this : 0 • 0 ^ k • m = 0
⊢ 0 = 0

case succ.intro.inr
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
this : x • x ^ k • m = 0
hx : x ^ k • m = 0
⊢ x = 0

tactic: simp only [hk, zero_smul]
state_before: R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
⊢ x ^ (k + 1) • m = 0
state_after: no goals

tactic: rfl
state_before: case succ.intro.inl
R✝ : Type u_1
S : Type u_2
x y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
k : ℕ
m : M
hm : m ≠ 0
x✝ : IsNilpotent 0
ih : 0 ^ k = 0 → 0 = 0
hk : 0 ^ (k + 1) = 0
this : 0 • 0 ^ k • m = 0
⊢ 0 = 0
state_after: no goals

tactic: exact ih <| (eq_zero_or_eq_zero_of_smul_eq_zero hx).resolve_right hm
state_before: case succ.intro.inr
R✝ : Type u_1
S : Type u_2
x✝¹ y : R✝
R : Type u_3
M : Type u_4
inst✝⁴ : MonoidWithZero R
inst✝³ : Zero M
inst✝² : MulActionWithZero R M
inst✝¹ : Nontrivial M
inst✝ : NoZeroSMulDivisors R M
x : R
x✝ : IsNilpotent x
k : ℕ
ih : x ^ k = 0 → x = 0
hk : x ^ (k + 1) = 0
m : M
hm : m ≠ 0
this : x • x ^ k • m = 0
hx : x ^ k • m = 0
⊢ x = 0
state_after: no goals