rw [IsRoot.def, eval_sub, eval_comp, eval_X, sub_eq_zero] at ha
case neg.intro.intro
P : ℤ[X]
hP : 1 < P.natDegree
hPX : (P - X).natDegree = P.natDegree
hPX' : P - X ≠ 0
H : ¬(P.comp P - X).roots.toFinset ⊆ (P - X).roots.toFinset
a : ℤ
hab : a ∉ (P - X).roots.toFinset
ha : (P.comp P - X).IsRoot a
⊢ (P.comp P - X).roots.toFinset.card ≤ P.natDegree
case neg.intro.intro
P : ℤ[X]
hP : 1 < P.natDegree
hPX : (P - X).natDegree = P.natDegree
hPX' : P - X ≠ 0
H : ¬(P.comp P - X).roots.toFinset ⊆ (P - X).roots.toFinset
a : ℤ
hab : a ∉ (P - X).roots.toFinset
ha : Polynomial.eval (Polynomial.eval a P) P = a
⊢ (P.comp P - X).roots.toFinset.card ≤ P.natDegree