@@ -389,8 +389,8 @@ eval₂_monomial _ _
389
389
@[simp] lemma mul_X_comp : (p * X).comp r = p.comp r * r :=
390
390
begin
391
391
apply polynomial.induction_on' p,
392
- { intros p q hp hq, simp [hp, hq, add_mul], },
393
- { intros n b, simp [pow_succ', mul_assoc], }
392
+ { intros p q hp hq, simp only [hp, hq, add_mul, add_comp] },
393
+ { intros n b, simp only [pow_succ', mul_assoc, monomial_mul_X, monomial_comp] }
394
394
end
395
395
396
396
@[simp] lemma X_pow_comp {k : ℕ} : (X^k).comp p = p^k :=
@@ -529,14 +529,35 @@ nat_degree_le_nat_degree (degree_map_le f p)
529
529
variables {f}
530
530
531
531
lemma map_monic_eq_zero_iff (hp : p.monic) : p.map f = 0 ↔ ∀ x, f x = 0 :=
532
- ⟨ λ hfp x, calc f x = f x * f p.leading_coeff : by simp [hp ]
533
- ... = f x * (p.map f).coeff p.nat_degree : by { congr, apply (coeff_map _ _).symm }
534
- ... = 0 : by simp [hfp],
535
- λ h, ext (λ n, by simp [h ]) ⟩
532
+ ⟨ λ hfp x, calc f x = f x * f p.leading_coeff : by simp only [mul_one, hp.leading_coeff, f.map_one ]
533
+ ... = f x * (p.map f).coeff p.nat_degree : congr_arg _ (coeff_map _ _).symm
534
+ ... = 0 : by simp only [hfp, mul_zero, coeff_zero ],
535
+ λ h, ext (λ n, by simp only [h, coeff_map, coeff_zero ]) ⟩
536
536
537
537
lemma map_monic_ne_zero (hp : p.monic) [nontrivial S] : p.map f ≠ 0 :=
538
538
λ h, f.map_one_ne_zero ((map_monic_eq_zero_iff hp).mp h _)
539
539
540
+ lemma degree_map_eq_of_leading_coeff_ne_zero (f : R →+* S)
541
+ (hf : f (leading_coeff p) ≠ 0 ) : degree (p.map f) = degree p :=
542
+ le_antisymm (degree_map_le f _) $
543
+ have hp0 : p ≠ 0 , from leading_coeff_ne_zero.mp (λ hp0, hf (trans (congr_arg _ hp0) f.map_zero)),
544
+ begin
545
+ rw [degree_eq_nat_degree hp0],
546
+ refine le_degree_of_ne_zero _,
547
+ rw [coeff_map], exact hf
548
+ end
549
+
550
+ lemma nat_degree_map_of_leading_coeff_ne_zero (f : R →+* S)
551
+ (hf : f (leading_coeff p) ≠ 0 ) : nat_degree (p.map f) = nat_degree p :=
552
+ nat_degree_eq_of_degree_eq (degree_map_eq_of_leading_coeff_ne_zero f hf)
553
+
554
+ lemma leading_coeff_map_of_leading_coeff_ne_zero (f : R →+* S)
555
+ (hf : f (leading_coeff p) ≠ 0 ) : leading_coeff (p.map f) = f (leading_coeff p) :=
556
+ begin
557
+ unfold leading_coeff,
558
+ rw [coeff_map, nat_degree_map_of_leading_coeff_ne_zero f hf],
559
+ end
560
+
540
561
variables (f)
541
562
542
563
@[simp] lemma map_ring_hom_id : map_ring_hom (ring_hom.id R) = ring_hom.id (polynomial R) :=
@@ -575,8 +596,9 @@ begin
575
596
(nat_degree_map_le _ _).trans_lt (nat.lt_succ_self _),
576
597
conv_lhs { rw [eval₂_eq_sum], },
577
598
rw [sum_over_range' _ _ _ A],
578
- { simp [coeff_map, eval₂_eq_sum, sum_over_range] },
579
- { simp }
599
+ { simp only [coeff_map, eval₂_eq_sum, sum_over_range, forall_const, zero_mul, ring_hom.map_zero,
600
+ function.comp_app, ring_hom.coe_comp] },
601
+ { simp only [forall_const, zero_mul, ring_hom.map_zero] }
580
602
end
581
603
582
604
lemma eval_map (x : S) : (p.map f).eval x = p.eval₂ f x :=
@@ -588,9 +610,11 @@ lemma map_sum {ι : Type*} (g : ι → polynomial R) (s : finset ι) :
588
610
589
611
lemma map_comp (p q : polynomial R) : map f (p.comp q) = (map f p).comp (map f q) :=
590
612
polynomial.induction_on p
591
- (by simp)
592
- (by simp {contextual := tt})
593
- (by simp [pow_succ', ← mul_assoc, polynomial.comp] {contextual := tt})
613
+ (by simp only [map_C, forall_const, C_comp, eq_self_iff_true])
614
+ (by simp only [map_add, add_comp, forall_const, implies_true_iff, eq_self_iff_true]
615
+ {contextual := tt})
616
+ (by simp only [pow_succ', ←mul_assoc, comp, forall_const, eval₂_mul_X, implies_true_iff,
617
+ eq_self_iff_true, map_X, map_mul] {contextual := tt})
594
618
595
619
@[simp]
596
620
lemma eval_zero_map (f : R →+* S) (p : polynomial R) :
@@ -602,17 +626,17 @@ lemma eval_one_map (f : R →+* S) (p : polynomial R) :
602
626
(p.map f).eval 1 = f (p.eval 1 ) :=
603
627
begin
604
628
apply polynomial.induction_on' p,
605
- { intros p q hp hq, simp [hp, hq], },
606
- { intros n r, simp, }
629
+ { intros p q hp hq, simp only [hp, hq, map_add, ring_hom.map_add, eval_add] },
630
+ { intros n r, simp only [one_pow, mul_one, eval_monomial, map_monomial] }
607
631
end
608
632
609
633
@[simp]
610
634
lemma eval_nat_cast_map (f : R →+* S) (p : polynomial R) (n : ℕ) :
611
635
(p.map f).eval n = f (p.eval n) :=
612
636
begin
613
637
apply polynomial.induction_on' p,
614
- { intros p q hp hq, simp [hp, hq], },
615
- { intros n r, simp, }
638
+ { intros p q hp hq, simp only [hp, hq, map_add, ring_hom.map_add, eval_add] },
639
+ { intros n r, simp only [f.map_nat_cast, eval_monomial, map_monomial, f.map_pow, f.map_mul] }
616
640
end
617
641
618
642
@[simp]
@@ -621,8 +645,8 @@ lemma eval_int_cast_map {R S : Type*} [ring R] [ring S]
621
645
(p.map f).eval i = f (p.eval i) :=
622
646
begin
623
647
apply polynomial.induction_on' p,
624
- { intros p q hp hq, simp [hp, hq], },
625
- { intros n r, simp, }
648
+ { intros p q hp hq, simp only [hp, hq, map_add, ring_hom.map_add, eval_add] },
649
+ { intros n r, simp only [f.map_int_cast, eval_monomial, map_monomial, f.map_pow, f.map_mul] }
626
650
end
627
651
628
652
end map
@@ -643,11 +667,9 @@ variables (f : R →+* S) (g : S →+* T) (p)
643
667
lemma hom_eval₂ (x : S) : g (p.eval₂ f x) = p.eval₂ (g.comp f) (g x) :=
644
668
begin
645
669
apply polynomial.induction_on p; clear p,
646
- { intros a, rw [eval₂_C, eval₂_C], refl, },
670
+ { simp only [forall_const, eq_self_iff_true, eval₂_C, ring_hom.coe_comp] },
647
671
{ intros p q hp hq, simp only [hp, hq, eval₂_add, g.map_add] },
648
- { intros n a ih,
649
- simp only [eval₂_mul, eval₂_C, eval₂_X_pow, g.map_mul, g.map_pow],
650
- refl, }
672
+ { intros n a ih, simpa only [eval₂_mul, eval₂_C, eval₂_X_pow, g.map_mul, g.map_pow] }
651
673
end
652
674
653
675
end hom_eval₂
@@ -731,7 +753,6 @@ begin
731
753
intros x,
732
754
simp only [mem_support_iff],
733
755
contrapose!,
734
- change p.coeff x = 0 → (map f p).coeff x = 0 ,
735
756
rw coeff_map,
736
757
intro hx,
737
758
rw hx,
0 commit comments