@@ -4,7 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Sébastien Gouëzel, Floris van Doorn
5
5
-/
6
6
import Mathlib.Analysis.Calculus.ContDiff.Basic
7
+ import Mathlib.Data.Finset.Sym
7
8
import Mathlib.Data.Nat.Choose.Cast
9
+ import Mathlib.Data.Nat.Choose.Multinomial
8
10
9
11
#align_import analysis.calculus.cont_diff from "leanprover-community/mathlib" @"3bce8d800a6f2b8f63fe1e588fd76a9ff4adcebe"
10
12
290
292
291
293
section
292
294
293
- variable {A : Type *} [NormedRing A] [NormedAlgebra 𝕜 A]
295
+ variable {ι : Type *} {A : Type *} [NormedRing A] [NormedAlgebra 𝕜 A] {A' : Type *} [NormedCommRing A']
296
+ [NormedAlgebra 𝕜 A']
294
297
295
298
theorem norm_iteratedFDerivWithin_mul_le {f : E → A} {g : E → A} {N : ℕ∞} (hf : ContDiffOn 𝕜 N f s)
296
299
(hg : ContDiffOn 𝕜 N g s) (hs : UniqueDiffOn 𝕜 s) {x : E} (hx : x ∈ s) {n : ℕ}
@@ -311,6 +314,62 @@ theorem norm_iteratedFDeriv_mul_le {f : E → A} {g : E → A} {N : ℕ∞} (hf
311
314
hf.contDiffOn hg.contDiffOn uniqueDiffOn_univ (mem_univ x) hn
312
315
#align norm_iterated_fderiv_mul_le norm_iteratedFDeriv_mul_le
313
316
317
+ -- TODO: Add `norm_iteratedFDeriv[Within]_list_prod_le` for non-commutative `NormedRing A`.
318
+
319
+ theorem norm_iteratedFDerivWithin_prod_le [DecidableEq ι] [NormOneClass A'] {u : Finset ι}
320
+ {f : ι → E → A'} {N : ℕ∞} (hf : ∀ i ∈ u, ContDiffOn 𝕜 N (f i) s) (hs : UniqueDiffOn 𝕜 s) {x : E}
321
+ (hx : x ∈ s) {n : ℕ} (hn : (n : ℕ∞) ≤ N) :
322
+ ‖iteratedFDerivWithin 𝕜 n (∏ j in u, f j ·) s x‖ ≤
323
+ ∑ p in u.sym n, (p : Multiset ι).multinomial *
324
+ ∏ j in u, ‖iteratedFDerivWithin 𝕜 (Multiset.count j p) (f j) s x‖ := by
325
+ induction u using Finset.induction generalizing n with
326
+ | empty =>
327
+ cases n with
328
+ | zero => simp [Sym.eq_nil_of_card_zero]
329
+ | succ n => simp [iteratedFDerivWithin_succ_const _ _ hs hx]
330
+ | @insert i u hi IH =>
331
+ conv => lhs; simp only [Finset.prod_insert hi]
332
+ simp only [Finset.mem_insert, forall_eq_or_imp] at hf
333
+ refine le_trans (norm_iteratedFDerivWithin_mul_le hf.1 (contDiffOn_prod hf.2 ) hs hx hn) ?_
334
+ rw [← Finset.sum_coe_sort (Finset.sym _ _)]
335
+ rw [Finset.sum_equiv (Finset.symInsertEquiv hi) (t := Finset.univ)
336
+ (g := (fun v ↦ v.multinomial *
337
+ ∏ j in insert i u, ‖iteratedFDerivWithin 𝕜 (v.count j) (f j) s x‖) ∘
338
+ Sym.toMultiset ∘ Subtype.val ∘ (Finset.symInsertEquiv hi).symm)
339
+ (by simp) (by simp only [← comp_apply (g := Finset.symInsertEquiv hi), comp.assoc]; simp)]
340
+ rw [← Finset.univ_sigma_univ, Finset.sum_sigma, Finset.sum_range]
341
+ simp only [comp_apply, Finset.symInsertEquiv_symm_apply_coe]
342
+ refine Finset.sum_le_sum ?_
343
+ intro m _
344
+ specialize IH hf.2 (n := n - m) (le_trans (WithTop.coe_le_coe.mpr (n.sub_le m)) hn)
345
+ refine le_trans (mul_le_mul_of_nonneg_left IH (by simp [mul_nonneg])) ?_
346
+ rw [Finset.mul_sum, ← Finset.sum_coe_sort]
347
+ refine Finset.sum_le_sum ?_
348
+ simp only [Finset.mem_univ, forall_true_left, Subtype.forall, Finset.mem_sym_iff]
349
+ intro p hp
350
+ refine le_of_eq ?_
351
+ rw [Finset.prod_insert hi]
352
+ have hip : i ∉ p := mt (hp i) hi
353
+ rw [Sym.count_coe_fill_self_of_not_mem hip, Sym.multinomial_coe_fill_of_not_mem hip]
354
+ suffices ∏ j in u, ‖iteratedFDerivWithin 𝕜 (Multiset.count j p) (f j) s x‖ =
355
+ ∏ j in u, ‖iteratedFDerivWithin 𝕜 (Multiset.count j (Sym.fill i m p)) (f j) s x‖ by
356
+ rw [this, Nat.cast_mul]
357
+ ring
358
+ refine Finset.prod_congr rfl ?_
359
+ intro j hj
360
+ have hji : j ≠ i := mt (· ▸ hj) hi
361
+ rw [Sym.count_coe_fill_of_ne hji]
362
+
363
+ theorem norm_iteratedFDeriv_prod_le [DecidableEq ι] [NormOneClass A'] {u : Finset ι}
364
+ {f : ι → E → A'} {N : ℕ∞} (hf : ∀ i ∈ u, ContDiff 𝕜 N (f i)) {x : E} {n : ℕ}
365
+ (hn : (n : ℕ∞) ≤ N) :
366
+ ‖iteratedFDeriv 𝕜 n (∏ j in u, f j ·) x‖ ≤
367
+ ∑ p in u.sym n, (p : Multiset ι).multinomial *
368
+ ∏ j in u, ‖iteratedFDeriv 𝕜 ((p : Multiset ι).count j) (f j) x‖ := by
369
+ simpa [iteratedFDerivWithin_univ] using
370
+ norm_iteratedFDerivWithin_prod_le (fun i hi ↦ (hf i hi).contDiffOn) uniqueDiffOn_univ
371
+ (mem_univ x) hn
372
+
314
373
end
315
374
316
375
/-- If the derivatives within a set of `g` at `f x` are bounded by `C`, and the `i`-th derivative
0 commit comments