Theorem: Submodule.noZeroSMulDivisors_iff_torsion_eq_bot
File: Mathlib/Algebra/Module/Torsion.lean

tactic: constructor <;> intro h
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
⊢ NoZeroSMulDivisors R M ↔ torsion R M = ⊥
state_after: case mp
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : NoZeroSMulDivisors R M
⊢ torsion R M = ⊥

case mpr
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
⊢ NoZeroSMulDivisors R M

tactic: haveI : NoZeroSMulDivisors R M := h
state_before: case mp
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : NoZeroSMulDivisors R M
⊢ torsion R M = ⊥
state_after: case mp
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
⊢ torsion R M = ⊥

tactic: rw [eq_bot_iff]
state_before: case mp
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
⊢ torsion R M = ⊥
state_after: case mp
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
⊢ torsion R M ≤ ⊥

tactic: rintro x ⟨a, hax⟩
state_before: case mp
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
⊢ torsion R M ≤ ⊥
state_after: case mp.intro
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : a • x = 0
⊢ x ∈ ⊥

tactic: change (a : R) • x = 0 at hax
state_before: case mp.intro
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : a • x = 0
⊢ x ∈ ⊥
state_after: case mp.intro
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
⊢ x ∈ ⊥

tactic: cases' eq_zero_or_eq_zero_of_smul_eq_zero hax with h0 h0
state_before: case mp.intro
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
⊢ x ∈ ⊥
state_after: case mp.intro.inl
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
h0 : ↑a = 0
⊢ x ∈ ⊥

case mp.intro.inr
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
h0 : x = 0
⊢ x ∈ ⊥

tactic: exfalso
state_before: case mp.intro.inl
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
h0 : ↑a = 0
⊢ x ∈ ⊥
state_after: case mp.intro.inl
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
h0 : ↑a = 0
⊢ False

tactic: exact nonZeroDivisors.coe_ne_zero a h0
state_before: case mp.intro.inl
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
h0 : ↑a = 0
⊢ False
state_after: no goals

tactic: exact h0
state_before: case mp.intro.inr
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h this : NoZeroSMulDivisors R M
x : M
a : ↥R⁰
hax : ↑a • x = 0
h0 : x = 0
⊢ x ∈ ⊥
state_after: no goals

tactic: by_cases ha : a = 0
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
⊢ a = 0 ∨ x = 0
state_after: case pos
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : a = 0
⊢ a = 0 ∨ x = 0

case neg
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : ¬a = 0
⊢ a = 0 ∨ x = 0

tactic: left
state_before: case pos
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : a = 0
⊢ a = 0 ∨ x = 0
state_after: case pos.h
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : a = 0
⊢ a = 0

tactic: exact ha
state_before: case pos.h
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : a = 0
⊢ a = 0
state_after: no goals

tactic: right
state_before: case neg
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : ¬a = 0
⊢ a = 0 ∨ x = 0
state_after: case neg.h
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : ¬a = 0
⊢ x = 0

tactic: rw [← mem_bot R, ← h]
state_before: case neg.h
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : ¬a = 0
⊢ x = 0
state_after: case neg.h
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : ¬a = 0
⊢ x ∈ torsion R M

tactic: exact ⟨⟨a, mem_nonZeroDivisors_of_ne_zero ha⟩, hax⟩
state_before: case neg.h
R : Type u_1
M : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : NoZeroDivisors R
inst✝ : Nontrivial R
h : torsion R M = ⊥
a : R
x : M
hax : a • x = 0
ha : ¬a = 0
⊢ x ∈ torsion R M
state_after: no goals