@@ -108,6 +108,9 @@ by simp [bit1]
108
108
@[simp] lemma derivative_add {f g : R[X]} : derivative (f + g) = derivative f + derivative g :=
109
109
derivative.map_add f g
110
110
111
+ @[simp] lemma derivative_X_add_C (c : R) : (X + C c).derivative = 1 :=
112
+ by rw [derivative_add, derivative_X, derivative_C, add_zero]
113
+
111
114
@[simp] lemma iterate_derivative_add {f g : R[X]} {k : ℕ} :
112
115
derivative^[k] (f + g) = (derivative^[k] f) + (derivative^[k] g) :=
113
116
derivative.to_add_monoid_hom.iterate_map_add _ _ _
@@ -391,22 +394,25 @@ section comm_semiring
391
394
variables [comm_semiring R]
392
395
393
396
theorem derivative_pow_succ (p : R[X]) (n : ℕ) :
394
- (p ^ (n + 1 )).derivative = (n + 1 ) * (p ^ n) * p.derivative :=
395
- nat.rec_on n (by rw [pow_one, nat.cast_zero, zero_add , one_mul, pow_zero, one_mul]) $ λ n ih,
396
- by rw [pow_succ', derivative_mul, ih, mul_right_comm, ← add_mul ,
397
- add_mul (n.succ : R[X]), one_mul , pow_succ', mul_assoc, n.cast_succ ]
397
+ (p ^ (n + 1 )).derivative = C ↑ (n + 1 ) * (p ^ n) * p.derivative :=
398
+ nat.rec_on n (by rw [pow_one, nat.cast_one, C_1 , one_mul, pow_zero, one_mul]) $ λ n ih,
399
+ by rw [pow_succ', derivative_mul, ih, nat.add_one, mul_right_comm, nat.cast_add n.succ, C_add ,
400
+ add_mul, add_mul , pow_succ', ← mul_assoc, nat.cast_one, C_1, one_mul ]
398
401
399
402
theorem derivative_pow (p : R[X]) (n : ℕ) :
400
- (p ^ n).derivative = n * (p ^ (n - 1 )) * p.derivative :=
401
- nat.cases_on n (by rw [pow_zero, derivative_one, nat.cast_zero, zero_mul, zero_mul]) $ λ n,
403
+ (p ^ n).derivative = C ↑ n * (p ^ (n - 1 )) * p.derivative :=
404
+ nat.cases_on n (by rw [pow_zero, derivative_one, nat.cast_zero, C_0, zero_mul, zero_mul]) $ λ n,
402
405
by rw [p.derivative_pow_succ n, n.succ_sub_one, n.cast_succ]
403
406
407
+ theorem derivative_sq (p : R[X]) : (p ^ 2 ).derivative = C 2 * p * p.derivative :=
408
+ by rw [derivative_pow_succ, nat.cast_two, pow_one]
409
+
404
410
theorem dvd_iterate_derivative_pow (f : R[X]) (n : ℕ) {m : ℕ} (c : R) (hm : m ≠ 0 ) :
405
411
(n : R) ∣ eval c (derivative^[m] (f ^ n)) :=
406
412
begin
407
413
obtain ⟨m, rfl⟩ := nat.exists_eq_succ_of_ne_zero hm,
408
- rw [function.iterate_succ_apply, derivative_pow, mul_assoc, iterate_derivative_nat_cast_mul ,
409
- eval_mul, eval_nat_cast],
414
+ rw [function.iterate_succ_apply, derivative_pow, mul_assoc, C_eq_nat_cast ,
415
+ iterate_derivative_nat_cast_mul, eval_mul, eval_nat_cast],
410
416
exact dvd_mul_right _ _,
411
417
end
412
418
@@ -428,23 +434,25 @@ lemma iterate_derivative_X_pow_eq_smul (n : ℕ) (k : ℕ) :
428
434
(derivative^[k] (X ^ n : R[X])) = (nat.desc_factorial n k : R) • X ^ (n - k) :=
429
435
by rw [iterate_derivative_X_pow_eq_C_mul n k, smul_eq_C_mul]
430
436
431
- lemma derivative_X_add_pow (c : R) (m : ℕ) : ((X + C c) ^ m).derivative = m * (X + C c) ^ (m - 1 ) :=
432
- by rw [derivative_pow, derivative_add, derivative_X, derivative_C, add_zero, mul_one]
437
+ lemma derivative_X_add_C_pow (c : R) (m : ℕ) :
438
+ ((X + C c) ^ m).derivative = C ↑m * (X + C c) ^ (m - 1 ) :=
439
+ by rw [derivative_pow, derivative_X_add_C, mul_one]
440
+
441
+ lemma derivative_X_add_C_sq (c : R) : ((X + C c) ^ 2 ).derivative = C 2 * (X + C c) :=
442
+ by rw [derivative_sq, derivative_X_add_C, mul_one]
433
443
434
- lemma iterate_derivative_X_add_pow (n k : ℕ) (c : R) :
435
- (derivative^[k] ((X + C c) ^ n)) =
444
+ lemma iterate_derivative_X_add_pow (n k : ℕ) (c : R) : derivative^[k] ((X + C c) ^ n) =
436
445
↑(∏ i in finset.range k, (n - i)) * (X + C c) ^ (n - k) :=
437
446
begin
438
447
induction k with k IH,
439
448
{ rw [function.iterate_zero_apply, finset.range_zero, finset.prod_empty, nat.cast_one, one_mul,
440
449
tsub_zero] },
441
450
{ simp only [function.iterate_succ_apply', IH, derivative_mul, zero_mul, derivative_nat_cast,
442
451
zero_add, finset.prod_range_succ, C_eq_nat_cast, nat.sub_sub, ←mul_assoc,
443
- derivative_X_add_pow , nat.succ_eq_add_one, nat.cast_mul] },
452
+ derivative_X_add_C_pow , nat.succ_eq_add_one, nat.cast_mul] },
444
453
end
445
454
446
- lemma derivative_comp (p q : R[X]) :
447
- (p.comp q).derivative = q.derivative * p.derivative.comp q :=
455
+ lemma derivative_comp (p q : R[X]) : (p.comp q).derivative = q.derivative * p.derivative.comp q :=
448
456
begin
449
457
apply polynomial.induction_on' p,
450
458
{ intros p₁ p₂ h₁ h₂, simp [h₁, h₂, mul_add], },
@@ -497,10 +505,12 @@ linear_map.map_neg derivative f
497
505
derivative^[k] (-f) = - (derivative^[k] f) :=
498
506
(@derivative R _).to_add_monoid_hom.iterate_map_neg _ _
499
507
500
- @[simp] lemma derivative_sub {f g : R[X]} :
501
- derivative (f - g) = derivative f - derivative g :=
508
+ @[simp] lemma derivative_sub {f g : R[X]} : derivative (f - g) = derivative f - derivative g :=
502
509
linear_map.map_sub derivative f g
503
510
511
+ @[simp] lemma derivative_X_sub_C (c : R) : (X - C c).derivative = 1 :=
512
+ by rw [derivative_sub, derivative_X, derivative_C, sub_zero]
513
+
504
514
@[simp] lemma iterate_derivative_sub {k : ℕ} {f g : R[X]} :
505
515
derivative^[k] (f - g) = (derivative^[k] f) - (derivative^[k] g) :=
506
516
by induction k with k ih generalizing f g; simp*
@@ -525,12 +535,12 @@ section comm_ring
525
535
variables [comm_ring R]
526
536
527
537
lemma derivative_comp_one_sub_X (p : R[X]) :
528
- (p.comp (1 - X)).derivative = -p.derivative.comp (1 - X) :=
538
+ (p.comp (1 - X)).derivative = -p.derivative.comp (1 - X) :=
529
539
by simp [derivative_comp]
530
540
531
541
@[simp]
532
542
lemma iterate_derivative_comp_one_sub_X (p : R[X]) (k : ℕ) :
533
- derivative^[k] (p.comp (1 - X)) = (-1 )^ k * (derivative^[k] p).comp (1 - X) :=
543
+ derivative^[k] (p.comp (1 - X)) = (-1 ) ^ k * (derivative^[k] p).comp (1 - X) :=
534
544
begin
535
545
induction k with k ih generalizing p,
536
546
{ simp, },
@@ -545,16 +555,19 @@ begin
545
555
simpa using (eval_ring_hom r).map_multiset_prod (multiset.map (λ a, X - C a) (S.erase r)),
546
556
end
547
557
548
- lemma derivative_X_sub_pow (c : R) (m : ℕ) :
549
- ((X - C c) ^ m).derivative = m * (X - C c) ^ (m - 1 ) :=
550
- by rw [derivative_pow, derivative_sub, derivative_X, derivative_C, sub_zero, mul_one]
558
+ lemma derivative_X_sub_C_pow (c : R) (m : ℕ) :
559
+ ((X - C c) ^ m).derivative = C ↑m * (X - C c) ^ (m - 1 ) :=
560
+ by rw [derivative_pow, derivative_X_sub_C, mul_one]
561
+
562
+ lemma derivative_X_sub_C_sq (c : R) : ((X - C c) ^ 2 ).derivative = C 2 * (X - C c) :=
563
+ by rw [derivative_sq, derivative_X_sub_C, mul_one]
551
564
552
565
lemma iterate_derivative_X_sub_pow (n k : ℕ) (c : R) :
553
- (derivative^[k] ((X - C c) ^ n)) =
554
- (↑(∏ i in finset.range k, (n - i))) * (X - C c) ^ (n - k) :=
566
+ (derivative^[k] ((X - C c) ^ n)) = (↑(∏ i in finset.range k, (n - i))) * (X - C c) ^ (n - k) :=
555
567
by simp_rw [sub_eq_add_neg, ←C_neg, iterate_derivative_X_add_pow]
556
568
557
569
end comm_ring
558
570
559
571
end derivative
572
+
560
573
end polynomial
0 commit comments