Theorem: Polynomial.lt_rootMultiplicity_of_isRoot_iterate_derivative_of_mem_nonZeroDivisors
File: Mathlib/Algebra/Polynomial/FieldDivision.lean

tactic: by_contra! h'
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hroot : ∀ m ≤ n, ((⇑derivative)^[m] p).IsRoot t
hnzd : ↑n.factorial ∈ nonZeroDivisors R
⊢ n < rootMultiplicity t p
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hroot : ∀ m ≤ n, ((⇑derivative)^[m] p).IsRoot t
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
⊢ False

tactic: replace hroot := hroot _ h'
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hroot : ∀ m ≤ n, ((⇑derivative)^[m] p).IsRoot t
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
⊢ False
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
hroot : ((⇑derivative)^[rootMultiplicity t p] p).IsRoot t
⊢ False

tactic: simp only [IsRoot, eval_iterate_derivative_rootMultiplicity] at hroot
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
hroot : ((⇑derivative)^[rootMultiplicity t p] p).IsRoot t
⊢ False
state_after: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
hroot : (rootMultiplicity t p).factorial • eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
⊢ False

tactic: obtain ⟨q, hq⟩ := Nat.cast_dvd_cast (α := R) <| Nat.factorial_dvd_factorial h'
state_before: R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
hroot : (rootMultiplicity t p).factorial • eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
⊢ False
state_after: case intro
R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
hroot : (rootMultiplicity t p).factorial • eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
q : R
hq : ↑n.factorial = ↑(rootMultiplicity t p).factorial * q
⊢ False

tactic: rw [hq, mul_mem_nonZeroDivisors] at hnzd
state_before: case intro
R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
hnzd : ↑n.factorial ∈ nonZeroDivisors R
h' : rootMultiplicity t p ≤ n
hroot : (rootMultiplicity t p).factorial • eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
q : R
hq : ↑n.factorial = ↑(rootMultiplicity t p).factorial * q
⊢ False
state_after: case intro
R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
h' : rootMultiplicity t p ≤ n
hroot : (rootMultiplicity t p).factorial • eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
q : R
hnzd : ↑(rootMultiplicity t p).factorial ∈ nonZeroDivisors R ∧ q ∈ nonZeroDivisors R
hq : ↑n.factorial = ↑(rootMultiplicity t p).factorial * q
⊢ False

tactic: rw [nsmul_eq_mul, mul_left_mem_nonZeroDivisors_eq_zero_iff hnzd.1] at hroot
state_before: case intro
R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
h' : rootMultiplicity t p ≤ n
hroot : (rootMultiplicity t p).factorial • eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
q : R
hnzd : ↑(rootMultiplicity t p).factorial ∈ nonZeroDivisors R ∧ q ∈ nonZeroDivisors R
hq : ↑n.factorial = ↑(rootMultiplicity t p).factorial * q
⊢ False
state_after: case intro
R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
h' : rootMultiplicity t p ≤ n
hroot : eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
q : R
hnzd : ↑(rootMultiplicity t p).factorial ∈ nonZeroDivisors R ∧ q ∈ nonZeroDivisors R
hq : ↑n.factorial = ↑(rootMultiplicity t p).factorial * q
⊢ False

tactic: exact eval_divByMonic_pow_rootMultiplicity_ne_zero t h hroot
state_before: case intro
R : Type u
S : Type v
k : Type y
A : Type z
a b : R
n✝ : ℕ
inst✝ : CommRing R
p : R[X]
t : R
n : ℕ
h : p ≠ 0
h' : rootMultiplicity t p ≤ n
hroot : eval t (p /ₘ (X - C t) ^ rootMultiplicity t p) = 0
q : R
hnzd : ↑(rootMultiplicity t p).factorial ∈ nonZeroDivisors R ∧ q ∈ nonZeroDivisors R
hq : ↑n.factorial = ↑(rootMultiplicity t p).factorial * q
⊢ False
state_after: no goals