Skip to content

Commit 78ec91e

Browse files
committed
Completed proof of iterate_derivative_interpolate
1 parent 560fd97 commit 78ec91e

1 file changed

Lines changed: 28 additions & 10 deletions

File tree

Mathlib/LinearAlgebra/Lagrange.lean

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -481,12 +481,30 @@ theorem iterate_derivative_interpolate [CommRing ι]
481481
omega
482482
_ = k.factorial * ∑ t ∈ (s.erase i).powerset with #t = #s - (k + 1),
483483
∏ a ∈ t, (X - C (v a)) := by
484-
rw [powerset_image]
485-
congr 1
486-
have := image_injOn_powerset_of_injOn hvs' -- useful
487-
-- have := image_surjOn_powerset
488-
-- use prod_nbij
489-
sorry
484+
rw [powerset_image, sum_nbij (fun (t : Finset ι) => t.image v)]
485+
case hi =>
486+
intro a ha
487+
rw [mem_filter, mem_powerset] at ha
488+
rw [mem_filter, mem_image]
489+
constructor
490+
· use a; simp [ha.1]
491+
· rw [card_image_of_injOn (hvs'.mono (coe_subset.mpr ha.1))]
492+
exact ha.2
493+
case i_inj =>
494+
refine (image_injOn_powerset_of_injOn hvs').mono (coe_subset.mpr ?_)
495+
simp
496+
case i_surj =>
497+
intro t ht
498+
rw [mem_coe, mem_filter, mem_image] at ht
499+
obtain ⟨a, ha⟩ := ht.1
500+
simp_rw [Set.mem_image, mem_coe, mem_filter]
501+
use a
502+
refine ⟨⟨ha.1, ?_⟩, ha.2
503+
rw [← ht.2, ← ha.2, card_image_of_injOn (hvs'.mono (coe_subset.mpr (mem_powerset.mp ha.1)))]
504+
case h =>
505+
intro a ha
506+
rw [mem_filter, mem_powerset] at ha
507+
rw [prod_image (hvs'.mono (coe_subset.mpr ha.1))]
490508

491509
omit [DecidableEq ι] in
492510
private theorem degree_eq_of_card_eq {P : Polynomial F} (hP : #s = P.degree + 1) :
@@ -505,7 +523,7 @@ private theorem natDegree_eq_of_card_eq {P : Polynomial F} (hP : #s = P.degree +
505523

506524
omit [DecidableEq ι] in
507525
private theorem degree_lt_of_card_eq {P : Polynomial F} (hP : #s = P.degree + 1) :
508-
P.degree < s.card - 1 := by
526+
P.degree < s.card := by
509527
have := degree_eq_of_card_eq hP
510528
have := natDegree_eq_of_card_eq hP
511529
have s_card : s.card > 0 := by by_contra! h; simp_all
@@ -519,12 +537,12 @@ theorem eval_iterate_derivative_eq_sum [CommRing ι]
519537
∑ t ∈ (s.erase i).powerset with #t = #s - (k + 1),
520538
∏ a ∈ t, (x - v a) := by
521539
rw (occs := [1]) [eq_interpolate hvs (degree_lt_of_card_eq hP)]
522-
-- why does rw iterate_derivative_interpolate hvs hk not work?
523540
rw [iterate_derivative_interpolate, ← nsmul_eq_mul, eval_smul, nsmul_eq_mul, eval_finset_sum]
524541
· congr! 2 with i hi
525542
simp_rw [eval_C_mul, eval_finset_sum, eval_prod, eval_sub, eval_X, eval_C]
526-
· assumption
527-
· grind -- would this work?
543+
· exact hvs
544+
· rw [degree_eq_of_card_eq hP] at hk
545+
exact WithBot.coe_le_coe.mp hk
528546

529547
theorem leadingCoeff_eq_sum
530548
(hvs : Set.InjOn v s) {P : Polynomial F} (hP : #s = P.degree + 1) :

0 commit comments

Comments
 (0)