Theorem: multiplicity.pow_prime_pow_sub_pow_prime_pow
File: Mathlib/NumberTheory/Multiplicity.lean

tactic: induction' a with a h_ind
state_before: R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
⊢ multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
state_after: case zero
R : Type u_1
n : ℕ
inst✝² : CommRing R
a b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
⊢ multiplicity (↑p) (x ^ p ^ 0 - y ^ p ^ 0) = multiplicity (↑p) (x - y) + ↑0

case succ
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ multiplicity (↑p) (x ^ p ^ (a + 1) - y ^ p ^ (a + 1)) = multiplicity (↑p) (x - y) + ↑(a + 1)

tactic: rw [Nat.cast_add, Nat.cast_one, ← add_assoc, ← h_ind, pow_succ, pow_mul, pow_mul]
state_before: case succ
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ multiplicity (↑p) (x ^ p ^ (a + 1) - y ^ p ^ (a + 1)) = multiplicity (↑p) (x - y) + ↑(a + 1)
state_after: case succ
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ multiplicity (↑p) ((x ^ p ^ a) ^ p - (y ^ p ^ a) ^ p) = multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) + 1

tactic: apply pow_prime_sub_pow_prime hp hp1
state_before: case succ
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ multiplicity (↑p) ((x ^ p ^ a) ^ p - (y ^ p ^ a) ^ p) = multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) + 1
state_after: case succ.hxy
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ ↑p ∣ x ^ p ^ a - y ^ p ^ a

case succ.hx
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ ¬↑p ∣ x ^ p ^ a

tactic: rw [Nat.cast_zero, add_zero, pow_zero, pow_one, pow_one]
state_before: case zero
R : Type u_1
n : ℕ
inst✝² : CommRing R
a b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
⊢ multiplicity (↑p) (x ^ p ^ 0 - y ^ p ^ 0) = multiplicity (↑p) (x - y) + ↑0
state_after: no goals

tactic: rw [← geom_sum₂_mul]
state_before: case succ.hxy
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ ↑p ∣ x ^ p ^ a - y ^ p ^ a
state_after: case succ.hxy
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ ↑p ∣ (∑ i ∈ range (p ^ a), x ^ i * y ^ (p ^ a - 1 - i)) * (x - y)

tactic: exact dvd_mul_of_dvd_right hxy _
state_before: case succ.hxy
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ ↑p ∣ (∑ i ∈ range (p ^ a), x ^ i * y ^ (p ^ a - 1 - i)) * (x - y)
state_after: no goals

tactic: exact fun h => hx (hp.dvd_of_dvd_pow h)
state_before: case succ.hx
R : Type u_1
n : ℕ
inst✝² : CommRing R
a✝ b x y : R
p : ℕ
inst✝¹ : IsDomain R
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
hp : Prime ↑p
hp1 : Odd p
hxy : ↑p ∣ x - y
hx : ¬↑p ∣ x
a : ℕ
h_ind : multiplicity (↑p) (x ^ p ^ a - y ^ p ^ a) = multiplicity (↑p) (x - y) + ↑a
⊢ ¬↑p ∣ x ^ p ^ a
state_after: no goals