Theorem: mk_mem_nonZeroDivisors_associates
File: Mathlib/Algebra/GroupWithZero/NonZeroDivisors.lean

tactic: rw [mem_nonZeroDivisors_iff, mem_nonZeroDivisors_iff, ← not_iff_not]
state_before: M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ Associates.mk a ∈ (Associates M₀)⁰ ↔ a ∈ M₀⁰
state_after: M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (¬∀ (x : Associates M₀), x * Associates.mk a = 0 → x = 0) ↔ ¬∀ (x : M₀), x * a = 0 → x = 0

tactic: push_neg
state_before: M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (¬∀ (x : Associates M₀), x * Associates.mk a = 0 → x = 0) ↔ ¬∀ (x : M₀), x * a = 0 → x = 0
state_after: M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (∃ x, x * Associates.mk a = 0 ∧ x ≠ 0) ↔ ∃ x, x * a = 0 ∧ x ≠ 0

tactic: constructor
state_before: M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (∃ x, x * Associates.mk a = 0 ∧ x ≠ 0) ↔ ∃ x, x * a = 0 ∧ x ≠ 0
state_after: case mp
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (∃ x, x * Associates.mk a = 0 ∧ x ≠ 0) → ∃ x, x * a = 0 ∧ x ≠ 0

case mpr
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (∃ x, x * a = 0 ∧ x ≠ 0) → ∃ x, x * Associates.mk a = 0 ∧ x ≠ 0

tactic: rintro ⟨⟨x⟩, hx₁, hx₂⟩
state_before: case mp
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (∃ x, x * Associates.mk a = 0 ∧ x ≠ 0) → ∃ x, x * a = 0 ∧ x ≠ 0
state_after: case mp.intro.mk.intro
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
w✝ : Associates M₀
x : M₀
hx₁ : Quot.mk Setoid.r x * Associates.mk a = 0
hx₂ : Quot.mk Setoid.r x ≠ 0
⊢ ∃ x, x * a = 0 ∧ x ≠ 0

tactic: refine ⟨x, ?_, ?_⟩
state_before: case mp.intro.mk.intro
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
w✝ : Associates M₀
x : M₀
hx₁ : Quot.mk Setoid.r x * Associates.mk a = 0
hx₂ : Quot.mk Setoid.r x ≠ 0
⊢ ∃ x, x * a = 0 ∧ x ≠ 0
state_after: case mp.intro.mk.intro.refine_1
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
w✝ : Associates M₀
x : M₀
hx₁ : Quot.mk Setoid.r x * Associates.mk a = 0
hx₂ : Quot.mk Setoid.r x ≠ 0
⊢ x * a = 0

case mp.intro.mk.intro.refine_2
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
w✝ : Associates M₀
x : M₀
hx₁ : Quot.mk Setoid.r x * Associates.mk a = 0
hx₂ : Quot.mk Setoid.r x ≠ 0
⊢ x ≠ 0

tactic: rwa [← Associates.mk_eq_zero, ← Associates.mk_mul_mk, ← Associates.quot_mk_eq_mk]
state_before: case mp.intro.mk.intro.refine_1
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
w✝ : Associates M₀
x : M₀
hx₁ : Quot.mk Setoid.r x * Associates.mk a = 0
hx₂ : Quot.mk Setoid.r x ≠ 0
⊢ x * a = 0
state_after: no goals

tactic: rwa [← Associates.mk_ne_zero, ← Associates.quot_mk_eq_mk]
state_before: case mp.intro.mk.intro.refine_2
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
w✝ : Associates M₀
x : M₀
hx₁ : Quot.mk Setoid.r x * Associates.mk a = 0
hx₂ : Quot.mk Setoid.r x ≠ 0
⊢ x ≠ 0
state_after: no goals

tactic: refine fun ⟨b, hb₁, hb₂⟩ ↦ ⟨Associates.mk b, ?_, by rwa [Associates.mk_ne_zero]⟩
state_before: case mpr
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
⊢ (∃ x, x * a = 0 ∧ x ≠ 0) → ∃ x, x * Associates.mk a = 0 ∧ x ≠ 0
state_after: case mpr
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
x✝ : ∃ x, x * a = 0 ∧ x ≠ 0
b : M₀
hb₁ : b * a = 0
hb₂ : b ≠ 0
⊢ Associates.mk b * Associates.mk a = 0

tactic: rw [Associates.mk_mul_mk, hb₁, Associates.mk_zero]
state_before: case mpr
M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
x✝ : ∃ x, x * a = 0 ∧ x ≠ 0
b : M₀
hb₁ : b * a = 0
hb₂ : b ≠ 0
⊢ Associates.mk b * Associates.mk a = 0
state_after: no goals

tactic: rwa [Associates.mk_ne_zero]
state_before: M₀✝ : Type u_1
inst✝¹ : MonoidWithZero M₀✝
M₀ : Type u_2
inst✝ : CommMonoidWithZero M₀
a : M₀
x✝ : ∃ x, x * a = 0 ∧ x ≠ 0
b : M₀
hb₁ : b * a = 0
hb₂ : b ≠ 0
⊢ Associates.mk b ≠ 0
state_after: no goals