Theorem: Squarefree.dvd_of_squarefree_of_mul_dvd_mul_right
File: Mathlib/Algebra/Squarefree/Basic.lean

tactic: nontriviality R
state_before: R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
⊢ d ∣ y
state_after: R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
⊢ d ∣ y

tactic: obtain ⟨a, b, ha, hb, eq⟩ := exists_dvd_and_dvd_of_dvd_mul h
state_before: R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
⊢ d ∣ y
state_after: case intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
ha : a ∣ x
hb : b ∣ y
eq : d * d = a * b
⊢ d ∣ y

tactic: replace ha : Squarefree a := hx.squarefree_of_dvd ha
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
ha : a ∣ x
hb : b ∣ y
eq : d * d = a * b
⊢ d ∣ y
state_after: case intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
eq : d * d = a * b
ha : Squarefree a
⊢ d ∣ y

tactic: obtain ⟨c, hc⟩ : a ∣ d := ha.isRadical 2 d ⟨b, by rw [sq, eq]⟩
state_before: case intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
eq : d * d = a * b
ha : Squarefree a
⊢ d ∣ y
state_after: case intro.intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
eq : d * d = a * b
ha : Squarefree a
c : R
hc : d = a * c
⊢ d ∣ y

tactic: rw [hc, mul_assoc, (mul_right_injective₀ ha.ne_zero).eq_iff] at eq
state_before: case intro.intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
eq : d * d = a * b
ha : Squarefree a
c : R
hc : d = a * c
⊢ d ∣ y
state_after: case intro.intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
ha : Squarefree a
c : R
eq : c * (a * c) = b
hc : d = a * c
⊢ d ∣ y

tactic: exact dvd_trans ⟨c, by rw [hc, ← eq, mul_comm]⟩ hb
state_before: case intro.intro.intro.intro.intro
R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
ha : Squarefree a
c : R
eq : c * (a * c) = b
hc : d = a * c
⊢ d ∣ y
state_after: no goals

tactic: rw [sq, eq]
state_before: R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
eq : d * d = a * b
ha : Squarefree a
⊢ d ^ 2 = a * b
state_after: no goals

tactic: rw [hc, ← eq, mul_comm]
state_before: R : Type u_1
inst✝¹ : CancelCommMonoidWithZero R
x y p d : R
inst✝ : DecompositionMonoid R
hx : Squarefree x
h : d * d ∣ x * y
a✝ : Nontrivial R
a b : R
hb : b ∣ y
ha : Squarefree a
c : R
eq : c * (a * c) = b
hc : d = a * c
⊢ b = d * c
state_after: no goals