Theorem: normalizeScaleRoots_eval₂_leadingCoeff_mul
File: Mathlib/RingTheory/IntegralClosure/IsIntegralClosure/Basic.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
⊢ eval₂ f (f p.leadingCoeff * x) (normalizeScaleRoots p) = f p.leadingCoeff ^ (p.natDegree - 1) * eval₂ f x p
state_after: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
⊢ ∑ i ∈ Finset.range ((normalizeScaleRoots p).natDegree + 1),
      f ((normalizeScaleRoots p).coeff i) * (f p.leadingCoeff * x) ^ i =
    ∑ i ∈ Finset.range (p.natDegree + 1), f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff i) * x ^ i)
tactic: rw [eval₂_eq_sum_range, eval₂_eq_sum_range, Finset.mul_sum]
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
⊢ ∑ i ∈ Finset.range ((normalizeScaleRoots p).natDegree + 1),
      f ((normalizeScaleRoots p).coeff i) * (f p.leadingCoeff * x) ^ i =
    ∑ i ∈ Finset.range (p.natDegree + 1), f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff i) * x ^ i)
state_after: case h
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
⊢ Finset.range ((normalizeScaleRoots p).natDegree + 1) = Finset.range (p.natDegree + 1)

case a
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
⊢ ∀ x_1 ∈ Finset.range (p.natDegree + 1),
    f ((normalizeScaleRoots p).coeff x_1) * (f p.leadingCoeff * x) ^ x_1 =
      f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff x_1) * x ^ x_1)
tactic: apply Finset.sum_congr
state_before: case a
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
⊢ ∀ x_1 ∈ Finset.range (p.natDegree + 1),
    f ((normalizeScaleRoots p).coeff x_1) * (f p.leadingCoeff * x) ^ x_1 =
      f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff x_1) * x ^ x_1)
state_after: case a
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
n : ℕ
_hn : n ∈ Finset.range (p.natDegree + 1)
⊢ f ((normalizeScaleRoots p).coeff n) * (f p.leadingCoeff * x) ^ n =
    f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff n) * x ^ n)
tactic: intro n _hn
state_before: case a
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
n : ℕ
_hn : n ∈ Finset.range (p.natDegree + 1)
⊢ f ((normalizeScaleRoots p).coeff n) * (f p.leadingCoeff * x) ^ n =
    f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff n) * x ^ n)
state_after: case a
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
n : ℕ
_hn : n ∈ Finset.range (p.natDegree + 1)
⊢ f (p.coeff n) * f p.leadingCoeff ^ (p.natDegree - 1) * x ^ n =
    f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff n) * x ^ n)
tactic: rw [mul_pow, ← mul_assoc, ← f.map_pow, ← f.map_mul,
    normalizeScaleRoots_coeff_mul_leadingCoeff_pow _ _ h, f.map_mul, f.map_pow]
state_before: case a
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Ring B
inst✝² : CommRing S
inst✝¹ : Algebra R A
inst✝ : Algebra R B
f✝¹ f✝ : R →+* S
p : R[X]
x✝ : S
h : 1 ≤ p.natDegree
f : R →+* S
x : S
n : ℕ
_hn : n ∈ Finset.range (p.natDegree + 1)
⊢ f (p.coeff n) * f p.leadingCoeff ^ (p.natDegree - 1) * x ^ n =
    f p.leadingCoeff ^ (p.natDegree - 1) * (f (p.coeff n) * x ^ n)
state_after: no goals
tactic: ring