Theorem: Associates.mk_dvdNotUnit_mk_iff
File: Mathlib/Algebra/Associated.lean

tactic: rw [DvdNotUnit, DvdNotUnit, mk_ne_zero]
state_before: α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
⊢ DvdNotUnit (Associates.mk a) (Associates.mk b) ↔ DvdNotUnit a b

tactic: apply and_congr_right
state_before: α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
⊢ (a ≠ 0 ∧ ∃ x, ¬IsUnit x ∧ Associates.mk b = Associates.mk a * x) ↔ a ≠ 0 ∧ ∃ x, ¬IsUnit x ∧ b = a * x

tactic: intro
state_before: case h
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
⊢ a ≠ 0 → ((∃ x, ¬IsUnit x ∧ Associates.mk b = Associates.mk a * x) ↔ ∃ x, ¬IsUnit x ∧ b = a * x)

tactic: constructor
state_before: case h
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
⊢ (∃ x, ¬IsUnit x ∧ Associates.mk b = Associates.mk a * x) ↔ ∃ x, ¬IsUnit x ∧ b = a * x

tactic: contrapose!
state_before: case h.mp
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
⊢ (∃ x, ¬IsUnit x ∧ Associates.mk b = Associates.mk a * x) → ∃ x, ¬IsUnit x ∧ b = a * x

tactic: rw [forall_associated]
state_before: case h.mp
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
⊢ (∀ (x : α), ¬IsUnit x → b ≠ a * x) → ∀ (x : Associates α), ¬IsUnit x → Associates.mk b ≠ Associates.mk a * x

tactic: intro h x hx hbax
state_before: case h.mp
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
⊢ (∀ (x : α), ¬IsUnit x → b ≠ a * x) →
    ∀ (a_2 : α), ¬IsUnit (Associates.mk a_2) → Associates.mk b ≠ Associates.mk a * Associates.mk a_2

tactic: rw [mk_mul_mk, mk_eq_mk_iff_associated] at hbax
state_before: case h.mp
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit (Associates.mk x)
hbax : Associates.mk b = Associates.mk a * Associates.mk x
⊢ False

tactic: cases' hbax with u hu
state_before: case h.mp
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit (Associates.mk x)
hbax : b ~ᵤ a * x
⊢ False

tactic: apply h (x * ↑u⁻¹)
state_before: case h.mp.intro
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit (Associates.mk x)
u : αˣ
hu : b * ↑u = a * x
⊢ False

tactic: simp [← mul_assoc, ← hu]
state_before: case h.mp.intro.a
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit (Associates.mk x)
u : αˣ
hu : b * ↑u = a * x
⊢ b = a * (x * ↑u⁻¹)

tactic: rw [isUnit_mk] at hx
state_before: case h.mp.intro._
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit (Associates.mk x)
u : αˣ
hu : b * ↑u = a * x
⊢ ¬IsUnit (x * ↑u⁻¹)

tactic: rw [Associated.isUnit_iff]
state_before: case h.mp.intro._
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit x
u : αˣ
hu : b * ↑u = a * x
⊢ ¬IsUnit (x * ↑u⁻¹)

tactic: apply hx
state_before: case h.mp.intro._
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit x
u : αˣ
hu : b * ↑u = a * x
⊢ ¬IsUnit ?m.324736

case h.mp.intro._
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit x
u : αˣ
hu : b * ↑u = a * x
⊢ x * ↑u⁻¹ ~ᵤ ?m.324736

α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit x
u : αˣ
hu : b * ↑u = a * x
⊢ α

tactic: use u
state_before: case h.mp.intro._
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit x
u : αˣ
hu : b * ↑u = a * x
⊢ x * ↑u⁻¹ ~ᵤ x

tactic: simp
state_before: case h.mp.intro._
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
h : ∀ (x : α), ¬IsUnit x → b ≠ a * x
x : α
hx : ¬IsUnit x
u : αˣ
hu : b * ↑u = a * x
⊢ x * ↑u⁻¹ * ↑u = x

tactic: rintro ⟨x, ⟨hx, rfl⟩⟩
state_before: case h.mpr
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a b : α
a✝ : a ≠ 0
⊢ (∃ x, ¬IsUnit x ∧ b = a * x) → ∃ x, ¬IsUnit x ∧ Associates.mk b = Associates.mk a * x

tactic: use Associates.mk x
state_before: case h.mpr.intro.intro
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a : α
a✝ : a ≠ 0
x : α
hx : ¬IsUnit x
⊢ ∃ x_1, ¬IsUnit x_1 ∧ Associates.mk (a * x) = Associates.mk a * x_1

tactic: simp [isUnit_mk, mk_mul_mk, hx]
state_before: case h.mpr.intro.intro
α : Type u_1
β : Type ?u.321829
γ : Type ?u.321832
δ : Type ?u.321835
inst✝ : CommMonoidWithZero α
a : α
a✝ : a ≠ 0
x : α
hx : ¬IsUnit x
⊢ ¬IsUnit (Associates.mk x) ∧ Associates.mk (a * x) = Associates.mk a * Associates.mk x