Module docstring
{"# Results on polynomials of specific small degrees "}
{"# Results on polynomials of specific small degrees "}
Polynomial.exists_eq_X_add_C_of_natDegree_le_one
theorem
(h : natDegree p ≤ 1) : ∃ a b, p = C a * X + C b
theorem exists_eq_X_add_C_of_natDegree_le_one (h : natDegree p ≤ 1) : ∃ a b, p = C a * X + C b :=
⟨p.coeff 1, p.coeff 0, eq_X_add_C_of_natDegree_le_one h⟩
Polynomial.zero_le_degree_iff
theorem
: 0 ≤ degree p ↔ p ≠ 0
theorem zero_le_degree_iff : 0 ≤ degree p ↔ p ≠ 0 := by
rw [← not_lt, Nat.WithBot.lt_zero_iff, degree_eq_bot]
Polynomial.ne_zero_of_coe_le_degree
theorem
(hdeg : ↑n ≤ p.degree) : p ≠ 0
theorem ne_zero_of_coe_le_degree (hdeg : ↑n ≤ p.degree) : p ≠ 0 :=
zero_le_degree_iff.mp <| (WithBot.coe_le_coe.mpr n.zero_le).trans hdeg
Polynomial.le_natDegree_of_coe_le_degree
theorem
(hdeg : ↑n ≤ p.degree) : n ≤ p.natDegree
theorem le_natDegree_of_coe_le_degree (hdeg : ↑n ≤ p.degree) : n ≤ p.natDegree :=
WithBot.coe_le_coe.mp <| by
rwa [degree_eq_natDegree <| ne_zero_of_coe_le_degree hdeg] at hdeg
Polynomial.degree_linear_le
theorem
: degree (C a * X + C b) ≤ 1
theorem degree_linear_le : degree (C a * X + C b) ≤ 1 :=
degree_add_le_of_degree_le (degree_C_mul_X_le _) <| le_trans degree_C_le Nat.WithBot.coe_nonneg
Polynomial.degree_linear_lt
theorem
: degree (C a * X + C b) < 2
theorem degree_linear_lt : degree (C a * X + C b) < 2 :=
degree_linear_le.trans_lt <| WithBot.coe_lt_coe.mpr one_lt_two
Polynomial.degree_linear
theorem
(ha : a ≠ 0) : degree (C a * X + C b) = 1
@[simp]
theorem degree_linear (ha : a ≠ 0) : degree (C a * X + C b) = 1 := by
rw [degree_add_eq_left_of_degree_lt <| degree_C_lt_degree_C_mul_X ha, degree_C_mul_X ha]
Polynomial.natDegree_linear_le
theorem
: natDegree (C a * X + C b) ≤ 1
theorem natDegree_linear_le : natDegree (C a * X + C b) ≤ 1 :=
natDegree_le_of_degree_le degree_linear_le
Polynomial.natDegree_linear
theorem
(ha : a ≠ 0) : natDegree (C a * X + C b) = 1
theorem natDegree_linear (ha : a ≠ 0) : natDegree (C a * X + C b) = 1 := by
rw [natDegree_add_C, natDegree_C_mul_X a ha]
Polynomial.leadingCoeff_linear
theorem
(ha : a ≠ 0) : leadingCoeff (C a * X + C b) = a
@[simp]
theorem leadingCoeff_linear (ha : a ≠ 0) : leadingCoeff (C a * X + C b) = a := by
rw [add_comm, leadingCoeff_add_of_degree_lt (degree_C_lt_degree_C_mul_X ha),
leadingCoeff_C_mul_X]
Polynomial.degree_quadratic_le
theorem
: degree (C a * X ^ 2 + C b * X + C c) ≤ 2
theorem degree_quadratic_le : degree (C a * X ^ 2 + C b * X + C c) ≤ 2 := by
simpa only [add_assoc] using
degree_add_le_of_degree_le (degree_C_mul_X_pow_le 2 a)
(le_trans degree_linear_le <| WithBot.coe_le_coe.mpr one_le_two)
Polynomial.degree_quadratic_lt
theorem
: degree (C a * X ^ 2 + C b * X + C c) < 3
theorem degree_quadratic_lt : degree (C a * X ^ 2 + C b * X + C c) < 3 :=
degree_quadratic_le.trans_lt <| WithBot.coe_lt_coe.mpr <| lt_add_one 2
Polynomial.degree_linear_lt_degree_C_mul_X_sq
theorem
(ha : a ≠ 0) : degree (C b * X + C c) < degree (C a * X ^ 2)
theorem degree_linear_lt_degree_C_mul_X_sq (ha : a ≠ 0) :
degree (C b * X + C c) < degree (C a * X ^ 2) := by
simpa only [degree_C_mul_X_pow 2 ha] using degree_linear_lt
Polynomial.degree_quadratic
theorem
(ha : a ≠ 0) : degree (C a * X ^ 2 + C b * X + C c) = 2
@[simp]
theorem degree_quadratic (ha : a ≠ 0) : degree (C a * X ^ 2 + C b * X + C c) = 2 := by
rw [add_assoc, degree_add_eq_left_of_degree_lt <| degree_linear_lt_degree_C_mul_X_sq ha,
degree_C_mul_X_pow 2 ha]
rfl
Polynomial.natDegree_quadratic_le
theorem
: natDegree (C a * X ^ 2 + C b * X + C c) ≤ 2
theorem natDegree_quadratic_le : natDegree (C a * X ^ 2 + C b * X + C c) ≤ 2 :=
natDegree_le_of_degree_le degree_quadratic_le
Polynomial.natDegree_quadratic
theorem
(ha : a ≠ 0) : natDegree (C a * X ^ 2 + C b * X + C c) = 2
theorem natDegree_quadratic (ha : a ≠ 0) : natDegree (C a * X ^ 2 + C b * X + C c) = 2 :=
natDegree_eq_of_degree_eq_some <| degree_quadratic ha
Polynomial.leadingCoeff_quadratic
theorem
(ha : a ≠ 0) : leadingCoeff (C a * X ^ 2 + C b * X + C c) = a
@[simp]
theorem leadingCoeff_quadratic (ha : a ≠ 0) : leadingCoeff (C a * X ^ 2 + C b * X + C c) = a := by
rw [add_assoc, add_comm, leadingCoeff_add_of_degree_lt <| degree_linear_lt_degree_C_mul_X_sq ha,
leadingCoeff_C_mul_X_pow]
Polynomial.degree_cubic_le
theorem
: degree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) ≤ 3
theorem degree_cubic_le : degree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) ≤ 3 := by
simpa only [add_assoc] using
degree_add_le_of_degree_le (degree_C_mul_X_pow_le 3 a)
(le_trans degree_quadratic_le <| WithBot.coe_le_coe.mpr <| Nat.le_succ 2)
Polynomial.degree_cubic_lt
theorem
: degree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) < 4
theorem degree_cubic_lt : degree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) < 4 :=
degree_cubic_le.trans_lt <| WithBot.coe_lt_coe.mpr <| lt_add_one 3
Polynomial.degree_quadratic_lt_degree_C_mul_X_cb
theorem
(ha : a ≠ 0) : degree (C b * X ^ 2 + C c * X + C d) < degree (C a * X ^ 3)
theorem degree_quadratic_lt_degree_C_mul_X_cb (ha : a ≠ 0) :
degree (C b * X ^ 2 + C c * X + C d) < degree (C a * X ^ 3) := by
simpa only [degree_C_mul_X_pow 3 ha] using degree_quadratic_lt
Polynomial.degree_cubic
theorem
(ha : a ≠ 0) : degree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) = 3
@[simp]
theorem degree_cubic (ha : a ≠ 0) : degree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) = 3 := by
rw [add_assoc, add_assoc, ← add_assoc (C b * X ^ 2),
degree_add_eq_left_of_degree_lt <| degree_quadratic_lt_degree_C_mul_X_cb ha,
degree_C_mul_X_pow 3 ha]
rfl
Polynomial.natDegree_cubic_le
theorem
: natDegree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) ≤ 3
theorem natDegree_cubic_le : natDegree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) ≤ 3 :=
natDegree_le_of_degree_le degree_cubic_le
Polynomial.natDegree_cubic
theorem
(ha : a ≠ 0) : natDegree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) = 3
theorem natDegree_cubic (ha : a ≠ 0) : natDegree (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) = 3 :=
natDegree_eq_of_degree_eq_some <| degree_cubic ha
Polynomial.leadingCoeff_cubic
theorem
(ha : a ≠ 0) : leadingCoeff (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) = a
@[simp]
theorem leadingCoeff_cubic (ha : a ≠ 0) :
leadingCoeff (C a * X ^ 3 + C b * X ^ 2 + C c * X + C d) = a := by
rw [add_assoc, add_assoc, ← add_assoc (C b * X ^ 2), add_comm,
leadingCoeff_add_of_degree_lt <| degree_quadratic_lt_degree_C_mul_X_cb ha,
leadingCoeff_C_mul_X_pow]