Theorem: prime_pow_succ_dvd_mul
File: Mathlib/Algebra/Associated/Basic.lean

Proof steps:
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
⊢ p ^ (i + 1) ∣ x ∨ p ∣ y
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
⊢ ¬p ∣ y → p ^ (i + 1) ∣ x
tactic: rw [or_iff_not_imp_right]
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
⊢ ¬p ∣ y → p ^ (i + 1) ∣ x
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
hy : ¬p ∣ y
⊢ p ^ (i + 1) ∣ x
tactic: intro hy
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
hy : ¬p ∣ y
⊢ p ^ (i + 1) ∣ x
state_after: case zero
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
x : α
hxy : p ^ (0 + 1) ∣ x * y
⊢ p ^ (0 + 1) ∣ x

case succ
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x : α
hxy : p ^ (i + 1 + 1) ∣ x * y
⊢ p ^ (i + 1 + 1) ∣ x
tactic: induction' i with i ih generalizing x
state_before: case succ
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x : α
hxy : p ^ (i + 1 + 1) ∣ x * y
⊢ p ^ (i + 1 + 1) ∣ x
state_after: case succ
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x : α
hxy : p * p ^ (i + 1) ∣ x * y
⊢ p * p ^ (i + 1) ∣ x
tactic: rw [pow_succ'] at hxy ⊢
state_before: case succ
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x : α
hxy : p * p ^ (i + 1) ∣ x * y
⊢ p * p ^ (i + 1) ∣ x
state_after: case succ.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x' : α
hxy : p * p ^ (i + 1) ∣ p * x' * y
⊢ p * p ^ (i + 1) ∣ p * x'
tactic: obtain ⟨x', rfl⟩ := (h.dvd_or_dvd (dvd_of_mul_right_dvd hxy)).resolve_right hy
state_before: case succ.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x' : α
hxy : p * p ^ (i + 1) ∣ p * x' * y
⊢ p * p ^ (i + 1) ∣ p * x'
state_after: case succ.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x' : α
hxy : p * p ^ (i + 1) ∣ p * (x' * y)
⊢ p * p ^ (i + 1) ∣ p * x'
tactic: rw [mul_assoc] at hxy
state_before: case succ.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
α : Type u_5
inst✝ : CancelCommMonoidWithZero α
p y : α
h : Prime p
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x' : α
hxy : p * p ^ (i + 1) ∣ p * (x' * y)
⊢ p * p ^ (i + 1) ∣ p * x'
state_after: no goals
tactic: exact mul_dvd_mul_left p (ih ((mul_dvd_mul_iff_left h.ne_zero).mp hxy))