@@ -447,23 +447,25 @@ begin
447
447
exact mul_X_pow_eq_zero ‹_›, },
448
448
end
449
449
450
- lemma degree_add_eq_of_degree_lt (h : degree p < degree q ) : degree (p + q) = degree q :=
451
- le_antisymm (max_eq_right_of_lt h ▸ degree_add_le _ _) $ degree_le_degree $
450
+ lemma degree_add_eq_left_of_degree_lt (h : degree q < degree p ) : degree (p + q) = degree p :=
451
+ le_antisymm (max_eq_left_of_lt h ▸ degree_add_le _ _) $ degree_le_degree $
452
452
begin
453
- rw [coeff_add, coeff_nat_degree_eq_zero_of_degree_lt h, zero_add ],
453
+ rw [coeff_add, coeff_nat_degree_eq_zero_of_degree_lt h, add_zero ],
454
454
exact mt leading_coeff_eq_zero.1 (ne_zero_of_degree_gt h)
455
455
end
456
456
457
+ lemma degree_add_eq_right_of_degree_lt (h : degree p < degree q) : degree (p + q) = degree q :=
458
+ by rw [add_comm, degree_add_eq_left_of_degree_lt h]
457
459
458
460
lemma degree_add_C (hp : 0 < degree p) : degree (p + C a) = degree p :=
459
- add_comm (C a) p ▸ degree_add_eq_of_degree_lt $ lt_of_le_of_lt degree_C_le hp
461
+ add_comm (C a) p ▸ degree_add_eq_right_of_degree_lt $ lt_of_le_of_lt degree_C_le hp
460
462
461
463
lemma degree_add_eq_of_leading_coeff_add_ne_zero (h : leading_coeff p + leading_coeff q ≠ 0 ) :
462
464
degree (p + q) = max p.degree q.degree :=
463
465
le_antisymm (degree_add_le _ _) $
464
466
match lt_trichotomy (degree p) (degree q) with
465
467
| or.inl hlt :=
466
- by rw [degree_add_eq_of_degree_lt hlt, max_eq_right_of_lt hlt]; exact le_refl _
468
+ by rw [degree_add_eq_right_of_degree_lt hlt, max_eq_right_of_lt hlt]; exact le_refl _
467
469
| or.inr (or.inl heq) :=
468
470
le_of_not_gt $
469
471
assume hlt : max (degree p) (degree q) > degree (p + q),
@@ -474,7 +476,7 @@ le_antisymm (degree_add_le _ _) $
474
476
exact coeff_nat_degree_eq_zero_of_degree_lt hlt
475
477
end
476
478
| or.inr (or.inr hlt) :=
477
- by rw [add_comm, degree_add_eq_of_degree_lt hlt, max_eq_left_of_lt hlt]; exact le_refl _
479
+ by rw [degree_add_eq_left_of_degree_lt hlt, max_eq_left_of_lt hlt]; exact le_refl _
478
480
end
479
481
480
482
lemma degree_erase_le (p : polynomial R) (n : ℕ) : degree (p.erase n) ≤ degree p :=
@@ -553,7 +555,7 @@ by { haveI := nontrivial.of_polynomial_ne hne, exact hp.ne_zero }
553
555
lemma leading_coeff_add_of_degree_lt (h : degree p < degree q) :
554
556
leading_coeff (p + q) = leading_coeff q :=
555
557
have coeff p (nat_degree q) = 0 , from coeff_nat_degree_eq_zero_of_degree_lt h,
556
- by simp only [leading_coeff, nat_degree_eq_of_degree_eq (degree_add_eq_of_degree_lt h),
558
+ by simp only [leading_coeff, nat_degree_eq_of_degree_eq (degree_add_eq_right_of_degree_lt h),
557
559
this , coeff_add, zero_add]
558
560
559
561
lemma leading_coeff_add_of_degree_eq (h : degree p = degree q)
@@ -770,18 +772,42 @@ lemma nat_degree_X_sub_C_le {r : R} : (X - C r).nat_degree ≤ 1 :=
770
772
nat_degree_le_iff_degree_le.2 $ le_trans (degree_sub_le _ _) $ max_le degree_X_le $
771
773
le_trans degree_C_le $ with_bot.coe_le_coe.2 zero_le_one
772
774
775
+ lemma degree_sum_fin_lt {n : ℕ} (f : fin n → R) :
776
+ degree (∑ i : fin n, C (f i) * X ^ (i : ℕ)) < n :=
777
+ begin
778
+ haveI : is_commutative (with_bot ℕ) max := ⟨max_comm⟩,
779
+ haveI : is_associative (with_bot ℕ) max := ⟨max_assoc⟩,
780
+ calc (∑ i, C (f i) * X ^ (i : ℕ)).degree
781
+ ≤ finset.univ.fold (⊔) ⊥ (λ i, (C (f i) * X ^ (i : ℕ)).degree) : degree_sum_le _ _
782
+ ... = finset.univ.fold max ⊥ (λ i, (C (f i) * X ^ (i : ℕ)).degree) :
783
+ (@finset.fold_hom _ _ _ (⊔) _ _ _ ⊥ finset.univ _ _ _ id (with_bot.sup_eq_max)).symm
784
+ ... < n : (finset.fold_max_lt (n : with_bot ℕ)).mpr ⟨with_bot.bot_lt_some _, _⟩,
785
+
786
+ rintros ⟨i, hi⟩ -,
787
+ calc (C (f ⟨i, hi⟩) * X ^ i).degree
788
+ ≤ (C _).degree + (X ^ i).degree : degree_mul_le _ _
789
+ ... ≤ 0 + i : add_le_add degree_C_le (degree_X_pow_le i)
790
+ ... = i : zero_add _
791
+ ... < n : with_bot.some_lt_some.mpr hi,
792
+ end
793
+
794
+ lemma degree_sub_eq_left_of_degree_lt (h : degree q < degree p) : degree (p - q) = degree p :=
795
+ by { rw ← degree_neg q at h, rw [sub_eq_add_neg, degree_add_eq_left_of_degree_lt h] }
796
+
797
+ lemma degree_sub_eq_right_of_degree_lt (h : degree p < degree q) : degree (p - q) = degree q :=
798
+ by { rw ← degree_neg q at h, rw [sub_eq_add_neg, degree_add_eq_right_of_degree_lt h, degree_neg] }
799
+
773
800
end ring
774
801
775
802
section nonzero_ring
776
803
variables [nontrivial R] [ring R]
777
804
778
805
@[simp] lemma degree_X_sub_C (a : R) : degree (X - C a) = 1 :=
779
- begin
780
- rw [sub_eq_add_neg, add_comm, ← @degree_X R],
781
- by_cases ha : a = 0 ,
782
- { simp only [ha, C_0, neg_zero, zero_add] },
783
- exact degree_add_eq_of_degree_lt (by rw [degree_X, degree_neg, degree_C ha]; exact dec_trivial)
784
- end
806
+ have degree (C a) < degree (X : polynomial R),
807
+ from calc degree (C a) ≤ 0 : degree_C_le
808
+ ... < 1 : with_bot.some_lt_some.mpr zero_lt_one
809
+ ... = degree X : degree_X.symm,
810
+ by rw [degree_sub_eq_left_of_degree_lt this , degree_X]
785
811
786
812
@[simp] lemma nat_degree_X_sub_C (x : R) : (X - C x).nat_degree = 1 :=
787
813
nat_degree_eq_of_degree_eq_some $ degree_X_sub_C x
@@ -792,11 +818,11 @@ by simp [next_coeff_of_pos_nat_degree]
792
818
793
819
lemma degree_X_pow_sub_C {n : ℕ} (hn : 0 < n) (a : R) :
794
820
degree ((X : polynomial R) ^ n - C a) = n :=
795
- have degree (- C a) < degree ((X : polynomial R) ^ n),
796
- from calc degree (- C a) ≤ 0 : by rw degree_neg; exact degree_C_le
821
+ have degree (C a) < degree ((X : polynomial R) ^ n),
822
+ from calc degree (C a) ≤ 0 : degree_C_le
797
823
... < degree ((X : polynomial R) ^ n) : by rwa [degree_X_pow];
798
824
exact with_bot.coe_lt_coe.2 hn,
799
- by rw [sub_eq_add_neg, add_comm, degree_add_eq_of_degree_lt this , degree_X_pow]
825
+ by rw [degree_sub_eq_left_of_degree_lt this , degree_X_pow]
800
826
801
827
lemma X_pow_sub_C_ne_zero {n : ℕ} (hn : 0 < n) (a : R) :
802
828
(X : polynomial R) ^ n - C a ≠ 0 :=
0 commit comments