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

tactic: rw [or_iff_not_imp_right]
state_before: α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
⊢ p ^ (i + 1) ∣ x ∨ p ∣ y

tactic: intro hy
state_before: α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
⊢ ¬p ∣ y → p ^ (i + 1) ∣ x

tactic: induction' i with i ih generalizing x
state_before: α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i : ℕ
hxy : p ^ (i + 1) ∣ x * y
hy : ¬p ∣ y
⊢ p ^ (i + 1) ∣ x

tactic: rw [pow_succ] at hxy⊢
state_before: case succ
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x✝ y : α
h : Prime p
i✝ : ℕ
hxy✝ : p ^ (i✝ + 1) ∣ x✝ * y
hy : ¬p ∣ y
i : ℕ
ih : ∀ {x : α}, p ^ (i + 1) ∣ x * y → p ^ (i + 1) ∣ x
x : α
hxy : p ^ (Nat.succ i + 1) ∣ x * y
⊢ p ^ (Nat.succ i + 1) ∣ x

tactic: obtain ⟨x', rfl⟩ := (h.dvd_or_dvd (dvd_of_mul_right_dvd hxy)).resolve_right hy
state_before: case succ
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x✝ y : α
h : Prime p
i✝ : ℕ
hxy✝ : p ^ (i✝ + 1) ∣ x✝ * y
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 [mul_assoc] at hxy
state_before: case succ.intro
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i✝ : ℕ
hxy✝ : p ^ (i✝ + 1) ∣ x * y
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: exact mul_dvd_mul_left p (ih ((mul_dvd_mul_iff_left h.ne_zero).mp hxy))
state_before: case succ.intro
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x y : α
h : Prime p
i✝ : ℕ
hxy✝ : p ^ (i✝ + 1) ∣ x * y
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: simp only [zero_add, pow_one] at *
state_before: case zero
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x✝ y : α
h : Prime p
i : ℕ
hxy✝ : p ^ (i + 1) ∣ x✝ * y
hy : ¬p ∣ y
x : α
hxy : p ^ (Nat.zero + 1) ∣ x * y
⊢ p ^ (Nat.zero + 1) ∣ x

tactic: rw [pow_one]
state_before: case zero
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x✝ y : α
h : Prime p
i : ℕ
hxy✝ : p ^ (i + 1) ∣ x✝ * y
hy : ¬p ∣ y
x : α
hxy : p ^ (Nat.zero + 1) ∣ x * y
⊢ p ^ (Nat.zero + 1) ∣ x

tactic: rw [pow_one] at hxy
state_before: case zero
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x✝ y : α
h : Prime p
i : ℕ
hxy✝ : p ^ (i + 1) ∣ x✝ * y
hy : ¬p ∣ y
x : α
hxy : p ^ (Nat.zero + 1) ∣ x * y
⊢ p ∣ x

tactic: exact (h.dvd_or_dvd hxy).resolve_right hy
state_before: case zero
α✝ : Type ?u.61415
β : Type ?u.61418
γ : Type ?u.61421
δ : Type ?u.61424
α : Type u_1
inst✝ : CancelCommMonoidWithZero α
p x✝ y : α
h : Prime p
i : ℕ
hxy✝ : p ^ (i + 1) ∣ x✝ * y
hy : ¬p ∣ y
x : α
hxy : p ∣ x * y
⊢ p ∣ x