Theorem: Polynomial.degree_scaleRoots
File: Mathlib/RingTheory/Polynomial/ScaleRoots.lean

tactic: haveI := Classical.propDecidable
state_before: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
⊢ (p.scaleRoots s).degree = p.degree
state_after: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
⊢ (p.scaleRoots s).degree = p.degree

tactic: by_cases hp : p = 0
state_before: R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
⊢ (p.scaleRoots s).degree = p.degree
state_after: case pos
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : p = 0
⊢ (p.scaleRoots s).degree = p.degree

case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
⊢ (p.scaleRoots s).degree = p.degree

tactic: refine le_antisymm (Finset.sup_mono (support_scaleRoots_le p s)) (degree_le_degree ?_)
state_before: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
⊢ (p.scaleRoots s).degree = p.degree
state_after: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
⊢ (p.scaleRoots s).coeff p.natDegree ≠ 0

tactic: rw [coeff_scaleRoots_natDegree]
state_before: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
⊢ (p.scaleRoots s).coeff p.natDegree ≠ 0
state_after: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
⊢ p.leadingCoeff ≠ 0

tactic: intro h
state_before: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
⊢ p.leadingCoeff ≠ 0
state_after: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
h : p.leadingCoeff = 0
⊢ False

tactic: have := leadingCoeff_eq_zero.mp h
state_before: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : ¬p = 0
h : p.leadingCoeff = 0
⊢ False
state_after: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this✝ : (a : Prop) → Decidable a
hp : ¬p = 0
h : p.leadingCoeff = 0
this : p = 0
⊢ False

tactic: contradiction
state_before: case neg
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this✝ : (a : Prop) → Decidable a
hp : ¬p = 0
h : p.leadingCoeff = 0
this : p = 0
⊢ False
state_after: no goals

tactic: rw [hp, zero_scaleRoots]
state_before: case pos
R : Type u_1
S : Type u_2
A : Type u_3
K : Type u_4
inst✝¹ : Semiring R
inst✝ : Semiring S
p : R[X]
s : R
this : (a : Prop) → Decidable a
hp : p = 0
⊢ (p.scaleRoots s).degree = p.degree
state_after: no goals