Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit bbeb185

Browse files
committed
chore(data/polynomial/derivative): replace n by C n (#17911)
Rename `derivative_pow` lemmas, refactor `derivative_X_add_pow` slightly, and replace `n` by `C n` analogously to #17795
1 parent d2617e0 commit bbeb185

File tree

6 files changed

+48
-34
lines changed

6 files changed

+48
-34
lines changed

src/data/polynomial/derivative.lean

Lines changed: 37 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ by simp [bit1]
108108
@[simp] lemma derivative_add {f g : R[X]} : derivative (f + g) = derivative f + derivative g :=
109109
derivative.map_add f g
110110

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+
111114
@[simp] lemma iterate_derivative_add {f g : R[X]} {k : ℕ} :
112115
derivative^[k] (f + g) = (derivative^[k] f) + (derivative^[k] g) :=
113116
derivative.to_add_monoid_hom.iterate_map_add _ _ _
@@ -391,22 +394,25 @@ section comm_semiring
391394
variables [comm_semiring R]
392395

393396
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]
398401

399402
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,
402405
by rw [p.derivative_pow_succ n, n.succ_sub_one, n.cast_succ]
403406

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+
404410
theorem dvd_iterate_derivative_pow (f : R[X]) (n : ℕ) {m : ℕ} (c : R) (hm : m ≠ 0) :
405411
(n : R) ∣ eval c (derivative^[m] (f ^ n)) :=
406412
begin
407413
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],
410416
exact dvd_mul_right _ _,
411417
end
412418

@@ -428,23 +434,25 @@ lemma iterate_derivative_X_pow_eq_smul (n : ℕ) (k : ℕ) :
428434
(derivative^[k] (X ^ n : R[X])) = (nat.desc_factorial n k : R) • X ^ (n - k) :=
429435
by rw [iterate_derivative_X_pow_eq_C_mul n k, smul_eq_C_mul]
430436

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]
433443

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) =
436445
↑(∏ i in finset.range k, (n - i)) * (X + C c) ^ (n - k) :=
437446
begin
438447
induction k with k IH,
439448
{ rw [function.iterate_zero_apply, finset.range_zero, finset.prod_empty, nat.cast_one, one_mul,
440449
tsub_zero] },
441450
{ simp only [function.iterate_succ_apply', IH, derivative_mul, zero_mul, derivative_nat_cast,
442451
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] },
444453
end
445454

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 :=
448456
begin
449457
apply polynomial.induction_on' p,
450458
{ intros p₁ p₂ h₁ h₂, simp [h₁, h₂, mul_add], },
@@ -497,10 +505,12 @@ linear_map.map_neg derivative f
497505
derivative^[k] (-f) = - (derivative^[k] f) :=
498506
(@derivative R _).to_add_monoid_hom.iterate_map_neg _ _
499507

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 :=
502509
linear_map.map_sub derivative f g
503510

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+
504514
@[simp] lemma iterate_derivative_sub {k : ℕ} {f g : R[X]} :
505515
derivative^[k] (f - g) = (derivative^[k] f) - (derivative^[k] g) :=
506516
by induction k with k ih generalizing f g; simp*
@@ -525,12 +535,12 @@ section comm_ring
525535
variables [comm_ring R]
526536

527537
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) :=
529539
by simp [derivative_comp]
530540

531541
@[simp]
532542
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) :=
534544
begin
535545
induction k with k ih generalizing p,
536546
{ simp, },
@@ -545,16 +555,19 @@ begin
545555
simpa using (eval_ring_hom r).map_multiset_prod (multiset.map (λ a, X - C a) (S.erase r)),
546556
end
547557

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]
551564

552565
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) :=
555567
by simp_rw [sub_eq_add_neg, ←C_neg, iterate_derivative_X_add_pow]
556568

557569
end comm_ring
558570

559571
end derivative
572+
560573
end polynomial

src/data/polynomial/expand.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ by rw [function.iterate_succ_apply', pow_succ, expand_mul, ih]
7070

7171
theorem derivative_expand (f : R[X]) :
7272
(expand R p f).derivative = expand R p f.derivative * (p * X ^ (p - 1)) :=
73-
by rw [coe_expand, derivative_eval₂_C, derivative_pow, derivative_X, mul_one]
73+
by rw [coe_expand, derivative_eval₂_C, derivative_pow, C_eq_nat_cast, derivative_X, mul_one]
7474

7575
theorem coeff_expand {p : ℕ} (hp : 0 < p) (f : R[X]) (n : ℕ) :
7676
(expand R p f).coeff n = if p ∣ n then f.coeff (n / p) else 0 :=

src/data/polynomial/field_division.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ begin
3636
have hn : n + 1 = _ := tsub_add_cancel_of_le ((root_multiplicity_pos hp).mpr hpt),
3737
rw ←hn,
3838
set q := p /ₘ (X - C t) ^ (n + 1) with hq,
39-
convert_to root_multiplicity t ((X - C t) ^ n * (derivative q * (X - C t) + q * ↑(n + 1))) = n,
39+
convert_to root_multiplicity t ((X - C t) ^ n * (derivative q * (X - C t) + q * C ↑(n + 1))) = n,
4040
{ congr,
4141
rw [mul_add, mul_left_comm $ (X - C t) ^ n, ←pow_succ'],
4242
congr' 1,
4343
rw [mul_left_comm $ (X - C t) ^ n, mul_comm $ (X - C t) ^ n] },
44-
have h : (derivative q * (X - C t) + q * ↑(n + 1)).eval t ≠ 0,
44+
have h : (derivative q * (X - C t) + q * C ↑(n + 1)).eval t ≠ 0,
4545
{ suffices : eval t q * ↑(n + 1) ≠ 0,
4646
{ simpa },
4747
refine mul_ne_zero _ (nat.cast_ne_zero.mpr n.succ_ne_zero),

src/field_theory/finite/galois_field.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ lemma galois_poly_separable {K : Type*} [field K] (p q : ℕ) [char_p K p] (h :
3838
begin
3939
use [1, (X ^ q - X - 1)],
4040
rw [← char_p.cast_eq_zero_iff K[X] p] at h,
41-
rw [derivative_sub, derivative_pow, derivative_X, h],
41+
rw [derivative_sub, derivative_X_pow, derivative_X, C_eq_nat_cast, h],
4242
ring,
4343
end
4444

src/number_theory/cyclotomic/discriminant.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ begin
103103
hp.out.one_lt) (pow_pos hp.out.pos _))) (even.mul_right (nat.even_sub_one_of_prime_ne_two
104104
hp.out hptwo) _) odd_one) } },
105105
{ have H := congr_arg derivative (cyclotomic_prime_pow_mul_X_pow_sub_one K p k),
106-
rw [derivative_mul, derivative_sub, derivative_one, sub_zero, derivative_pow,
107-
derivative_X, mul_one, derivative_sub, derivative_one, sub_zero, derivative_pow,
108-
derivative_X, mul_one, ← pnat.pow_coe, hζ.minpoly_eq_cyclotomic_of_irreducible hirr] at H,
106+
rw [derivative_mul, derivative_sub, derivative_one, sub_zero, derivative_X_pow, C_eq_nat_cast,
107+
derivative_sub, derivative_one, sub_zero, derivative_X_pow, C_eq_nat_cast, ← pnat.pow_coe,
108+
hζ.minpoly_eq_cyclotomic_of_irreducible hirr] at H,
109109
replace H := congr_arg (λ P, aeval ζ P) H,
110110
simp only [aeval_add, aeval_mul, minpoly.aeval, zero_mul, add_zero, aeval_nat_cast,
111111
_root_.map_sub, aeval_one, aeval_X_pow] at H,

src/ring_theory/polynomial/bernstein.lean

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,14 +98,15 @@ lemma derivative_succ_aux (n ν : ℕ) :
9898
begin
9999
rw [bernstein_polynomial],
100100
suffices :
101-
↑((n + 1).choose (ν + 1)) * ((↑ν + 1) * X ^ ν) * (1 - X) ^ (n - ν)
101+
↑((n + 1).choose (ν + 1)) * (↑(ν + 1) * X ^ ν) * (1 - X) ^ (n - ν)
102102
-(↑((n + 1).choose (ν + 1)) * X ^ (ν + 1) * (↑(n - ν) * (1 - X) ^ (n - ν - 1))) =
103-
(↑n + 1) * (↑(n.choose ν) * X ^ ν * (1 - X) ^ (n - ν) -
103+
↑(n + 1) * (↑(n.choose ν) * X ^ ν * (1 - X) ^ (n - ν) -
104104
↑(n.choose (ν + 1)) * X ^ (ν + 1) * (1 - X) ^ (n - (ν + 1))),
105105
{ simpa only [polynomial.derivative_pow, ←sub_eq_add_neg, nat.succ_sub_succ_eq_sub,
106106
polynomial.derivative_mul, polynomial.derivative_nat_cast, zero_mul, nat.cast_add,
107107
algebra_map.coe_one, polynomial.derivative_X, mul_one, zero_add,
108-
polynomial.derivative_sub, polynomial.derivative_one, zero_sub, mul_neg] },
108+
polynomial.derivative_sub, polynomial.derivative_one, zero_sub, mul_neg,
109+
nat.sub_zero, ← nat.cast_succ, polynomial.C_eq_nat_cast], },
109110
conv_rhs { rw mul_sub, },
110111
-- We'll prove the two terms match up separately.
111112
refine congr (congr_arg has_sub.sub _) _,

0 commit comments

Comments
 (0)