Skip to content

Commit 74b6087

Browse files
committed
Merge remote-tracking branch 'upstream/master' into bump/v4.27.0
2 parents 724b498 + 9cbb796 commit 74b6087

58 files changed

Lines changed: 3599 additions & 1927 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Mathlib.lean

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1561,6 +1561,7 @@ public import Mathlib.Analysis.Calculus.FDeriv.Comp
15611561
public import Mathlib.Analysis.Calculus.FDeriv.CompCLM
15621562
public import Mathlib.Analysis.Calculus.FDeriv.Congr
15631563
public import Mathlib.Analysis.Calculus.FDeriv.Const
1564+
public import Mathlib.Analysis.Calculus.FDeriv.ContinuousAlternatingMap
15641565
public import Mathlib.Analysis.Calculus.FDeriv.ContinuousMultilinearMap
15651566
public import Mathlib.Analysis.Calculus.FDeriv.Defs
15661567
public import Mathlib.Analysis.Calculus.FDeriv.Equiv
@@ -2065,6 +2066,7 @@ public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Pos
20652066
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.Basic
20662067
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.IntegralRepresentation
20672068
public import Mathlib.Analysis.SpecialFunctions.ContinuousFunctionalCalculus.Rpow.Isometric
2069+
public import Mathlib.Analysis.SpecialFunctions.Elliptic.Weierstrass
20682070
public import Mathlib.Analysis.SpecialFunctions.Exp
20692071
public import Mathlib.Analysis.SpecialFunctions.ExpDeriv
20702072
public import Mathlib.Analysis.SpecialFunctions.Exponential
@@ -2876,6 +2878,7 @@ public import Mathlib.CategoryTheory.Preadditive.Yoneda.Projective
28762878
public import Mathlib.CategoryTheory.Presentable.Basic
28772879
public import Mathlib.CategoryTheory.Presentable.CardinalFilteredPresentation
28782880
public import Mathlib.CategoryTheory.Presentable.ColimitPresentation
2881+
public import Mathlib.CategoryTheory.Presentable.Dense
28792882
public import Mathlib.CategoryTheory.Presentable.Finite
28802883
public import Mathlib.CategoryTheory.Presentable.IsCardinalFiltered
28812884
public import Mathlib.CategoryTheory.Presentable.Limits
@@ -3211,6 +3214,11 @@ public import Mathlib.Combinatorics.SimpleGraph.Turan
32113214
public import Mathlib.Combinatorics.SimpleGraph.Tutte
32123215
public import Mathlib.Combinatorics.SimpleGraph.UniversalVerts
32133216
public import Mathlib.Combinatorics.SimpleGraph.Walk
3217+
public import Mathlib.Combinatorics.SimpleGraph.Walks.Basic
3218+
public import Mathlib.Combinatorics.SimpleGraph.Walks.Maps
3219+
public import Mathlib.Combinatorics.SimpleGraph.Walks.Operations
3220+
public import Mathlib.Combinatorics.SimpleGraph.Walks.Subwalks
3221+
public import Mathlib.Combinatorics.SimpleGraph.Walks.Traversal
32143222
public import Mathlib.Combinatorics.Young.SemistandardTableau
32153223
public import Mathlib.Combinatorics.Young.YoungDiagram
32163224
public import Mathlib.Computability.Ackermann
@@ -6553,7 +6561,6 @@ public import Mathlib.Tactic.Positivity.Basic
65536561
public import Mathlib.Tactic.Positivity.Core
65546562
public import Mathlib.Tactic.Positivity.Finset
65556563
public import Mathlib.Tactic.ProdAssoc
6556-
public import Mathlib.Tactic.Propose
65576564
public import Mathlib.Tactic.ProxyType
65586565
public import Mathlib.Tactic.Push
65596566
public import Mathlib.Tactic.Push.Attr

Mathlib/Algebra/Order/Monoid/Unbundled/WithTop.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,9 @@ lemma map_eq_natCast_iff {f : β → α} {n : ℕ} {a : WithBot β} :
628628
lemma natCast_eq_map_iff {f : β → α} {n : ℕ} {a : WithBot β} :
629629
n = a.map f ↔ ∃ x, a = .some x ∧ f x = n := some_eq_map_iff
630630

631+
@[simp] lemma bot_lt_natCast [LT α] (n : ℕ) : (⊥ : WithBot α) < n :=
632+
WithBot.bot_lt_coe _
633+
631634
end AddMonoidWithOne
632635

633636
instance charZero [AddMonoidWithOne α] [CharZero α] : CharZero (WithBot α) :=

Mathlib/Algebra/Polynomial/Factors.lean

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Thomas Browning
66
module
77

88
public import Mathlib.Algebra.Polynomial.FieldDivision
9+
public import Mathlib.Algebra.Polynomial.Taylor
910

1011
/-!
1112
# Split polynomials
@@ -106,6 +107,10 @@ protected theorem Splits.prod {ι : Type*} {f : ι → R[X]} {s : Finset ι}
106107
(h : ∀ i ∈ s, Splits (f i)) : Splits (∏ i ∈ s, f i) :=
107108
prod_mem h
108109

110+
lemma Splits.taylor {p : R[X]} (hp : p.Splits) (r : R) : (p.taylor r).Splits := by
111+
have (i : _) : (X + C r + C i).Splits := by simpa [add_assoc] using Splits.X_add_C (r + i)
112+
induction hp using Submonoid.closure_induction <;> aesop
113+
109114
/-- See `splits_iff_exists_multiset` for the version with subtraction. -/
110115
theorem splits_iff_exists_multiset' {f : R[X]} :
111116
Splits f ↔ ∃ m : Multiset R, f = C f.leadingCoeff * (m.map (X + C ·)).prod := by
@@ -246,6 +251,23 @@ theorem Splits.splits (hf : Splits f) :
246251
or_iff_not_imp_left.mpr fun hf0 _ hg hgf ↦ degree_le_of_natDegree_le <|
247252
(hf.of_dvd hf0 hgf).natDegree_le_one_of_irreducible hg
248253

254+
lemma map_sub_sprod_roots_eq_prod_map_eval
255+
(s : Multiset R) (g : R[X]) (hg : g.Monic) (hg' : g.Splits) :
256+
((s ×ˢ g.roots).map fun ij ↦ ij.1 - ij.2).prod = (s.map g.eval).prod := by
257+
have := hg'.eq_prod_roots
258+
rw [hg.leadingCoeff, map_one, one_mul] at this
259+
conv_rhs => rw [this]
260+
simp_rw [eval_multiset_prod, Multiset.prod_map_product_eq_prod_prod, Multiset.map_map]
261+
congr! with x hx
262+
ext; simp
263+
264+
lemma map_sub_roots_sprod_eq_prod_map_eval
265+
(s : Multiset R) (g : R[X]) (hg : g.Monic) (hg' : g.Splits) :
266+
((g.roots ×ˢ s).map fun ij ↦ ij.1 - ij.2).prod =
267+
(-1) ^ (s.card * g.roots.card) * (s.map g.eval).prod := by
268+
trans ((s ×ˢ g.roots).map fun ij ↦ (-1) * (ij.1 - ij.2)).prod
269+
· rw [← Multiset.map_swap_product, Multiset.map_map]; simp
270+
· rw [Multiset.prod_map_mul]; simp [map_sub_sprod_roots_eq_prod_map_eval _ _ hg hg']
249271
end CommRing
250272

251273
section DivisionSemiring

Mathlib/Algebra/Polynomial/Taylor.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ theorem eq_zero_of_hasseDeriv_eq_zero (f : R[X]) (r : R)
117117
ext k
118118
rw [taylor_coeff, h, coeff_zero]
119119

120+
@[simp] lemma map_taylor {R S : Type*} [Semiring R] [Semiring S] (p : R[X]) (r : R) (f : R →+* S) :
121+
(p.taylor r).map f = (p.map f).taylor (f r) := by
122+
simp [taylor_apply, Polynomial.map_comp]
123+
120124
end Semiring
121125

122126
section Ring

Mathlib/Analysis/Asymptotics/TVS.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,18 @@ lemma _root_.ContinuousLinearMap.isBigOTVS_comp (g : E →L[𝕜] F) : (g ∘ f)
305305
lemma _root_.ContinuousLinearMap.isBigOTVS_fun_comp (g : E →L[𝕜] F) : (g <| f ·) =O[𝕜; l] f :=
306306
g.isBigOTVS_comp
307307

308+
lemma _root_.LinearMap.isBigOTVS_rev_comp (g : E →ₗ[𝕜] F) (hg : comap g (𝓝 0) ≤ 𝓝 0) :
309+
f =O[𝕜; l] (g ∘ f) := by
310+
constructor
311+
intro U hU
312+
rcases mem_comap.1 (hg hU) with ⟨V, hV, hgV⟩
313+
use V, hV
314+
filter_upwards with a
315+
refine le_egauge_of_forall_ne_zero (mem_of_mem_nhds hV) fun c hc₀ hc ↦ ?_
316+
apply egauge_le_of_mem_smul
317+
grw [← hgV, ← (IsUnit.mk0 _ hc₀).preimage_smul_set]
318+
exact hc
319+
308320
@[simp]
309321
lemma IsLittleOTVS.zero (g : α → F) (l : Filter α) : (0 : α → E) =o[𝕜; l] g := by
310322
refine ⟨fun U hU ↦ ?_⟩
Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
/-
2+
Copyright (c) 2025 Yury Kudryashov. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Yury Kudryashov
5+
-/
6+
module
7+
8+
public import Mathlib.Analysis.Calculus.FDeriv.ContinuousMultilinearMap
9+
public import Mathlib.Analysis.Normed.Module.Alternating.Basic
10+
11+
/-!
12+
# Derivatives of operations on continuous alternating maps
13+
14+
In this file we prove formulas for the derivatives of
15+
16+
- `ContinuousAlternatingMap.compContinuousLinearMap`, the pullback of a continuous alternating map
17+
along a continuous linear map;
18+
- application of a `ContinuousAlternatingMap` as a function of both the map and the vectors.
19+
-/
20+
21+
@[expose] public section
22+
23+
variable {𝕜 ι E F G H : Type*}
24+
[NontriviallyNormedField 𝕜]
25+
[NormedAddCommGroup E] [NormedSpace 𝕜 E] [NormedAddCommGroup F] [NormedSpace 𝕜 F]
26+
[NormedAddCommGroup G] [NormedSpace 𝕜 G] [NormedAddCommGroup H] [NormedSpace 𝕜 H]
27+
28+
open ContinuousAlternatingMap
29+
open scoped Topology BigOperators
30+
31+
section CompContinuousLinearMap
32+
33+
variable
34+
{f : E → G [⋀^ι]→L[𝕜] H} {f' : E →L[𝕜] G [⋀^ι]→L[𝕜] H}
35+
{g : E → F →L[𝕜] G} {g' : E →L[𝕜] F →L[𝕜] G}
36+
{s : Set E} {x : E}
37+
38+
/-!
39+
### Derivative of the pullback
40+
41+
In this section we prove a formula for the derivative
42+
of the pullback of a continuous alternating map along a continuous linear map,
43+
as a function of both maps.
44+
-/
45+
46+
theorem ContinuousAlternatingMap.hasStrictFDerivAt_toContinuousMultilinearMap_comp_iff [Finite ι] :
47+
HasStrictFDerivAt (toContinuousMultilinearMap ∘ f) (toContinuousMultilinearMapCLM 𝕜 ∘L f') x ↔
48+
HasStrictFDerivAt f f' x := by
49+
cases nonempty_fintype ι
50+
constructor <;> intro h
51+
· rw [hasStrictFDerivAt_iff_isLittleOTVS] at h ⊢
52+
refine Asymptotics.IsBigOTVS.trans_isLittleOTVS ?_ h
53+
simp only [Function.comp_apply, ← toContinuousMultilinearMapCLM_apply 𝕜,
54+
ContinuousLinearMap.comp_apply, ← map_sub]
55+
apply LinearMap.isBigOTVS_rev_comp
56+
simp [isEmbedding_toContinuousMultilinearMap.nhds_eq_comap]
57+
· exact (toContinuousMultilinearMapCLM 𝕜).hasStrictFDerivAt.comp x h
58+
59+
section HasFDerivAt
60+
61+
variable [Fintype ι] [DecidableEq ι]
62+
63+
theorem ContinuousAlternatingMap.hasStrictFDerivAt_compContinuousLinearMap
64+
(fg : (G [⋀^ι]→L[𝕜] H) × (F →L[𝕜] G)) :
65+
HasStrictFDerivAt
66+
(fun fg : (G [⋀^ι]→L[𝕜] H) × (F →L[𝕜] G) ↦ fg.1.compContinuousLinearMap fg.2)
67+
(compContinuousLinearMapCLM fg.2 ∘L .fst _ _ _ +
68+
fg.1.fderivCompContinuousLinearMap fg.2 ∘L .snd _ _ _)
69+
fg := by
70+
rw [← hasStrictFDerivAt_toContinuousMultilinearMap_comp_iff]
71+
have H₁ := ContinuousMultilinearMap.hasStrictFDerivAt_compContinuousLinearMap
72+
(fg.1.1, fun _ : ι ↦ fg.2)
73+
have H₂ := ((toContinuousMultilinearMapCLM 𝕜).hasStrictFDerivAt (x := fg.1))
74+
have H₃ := hasStrictFDerivAt_pi.mpr fun i : ι ↦ hasStrictFDerivAt_id (𝕜 := 𝕜) fg.2
75+
exact H₁.comp fg (H₂.prodMap fg H₃)
76+
77+
theorem HasStrictFDerivAt.continuousAlternatingMapCompContinuousLinearMap
78+
(hf : HasStrictFDerivAt f f' x) (hg : HasStrictFDerivAt g g' x) :
79+
HasStrictFDerivAt (fun x ↦ (f x).compContinuousLinearMap (g x))
80+
(compContinuousLinearMapCLM (g x) ∘L f' +
81+
(f x).fderivCompContinuousLinearMap (g x) ∘L g') x :=
82+
hasStrictFDerivAt_compContinuousLinearMap (f x, g x) |>.comp x (hf.prodMk hg)
83+
84+
theorem HasFDerivAt.continuousAlternatingMapCompContinuousLinearMap
85+
(hf : HasFDerivAt f f' x) (hg : HasFDerivAt g g' x) :
86+
HasFDerivAt (fun x ↦ (f x).compContinuousLinearMap (g x))
87+
(compContinuousLinearMapCLM (g x) ∘L f' +
88+
(f x).fderivCompContinuousLinearMap (g x) ∘L g') x := by
89+
convert hasStrictFDerivAt_compContinuousLinearMap (f x, (g x)) |>.hasFDerivAt
90+
|>.comp x (hf.prodMk hg)
91+
92+
theorem HasFDerivWithinAt.continuousAlternatingMapCompContinuousLinearMap
93+
(hf : HasFDerivWithinAt f f' s x) (hg : HasFDerivWithinAt g g' s x) :
94+
HasFDerivWithinAt (fun x ↦ (f x).compContinuousLinearMap (g x))
95+
(compContinuousLinearMapCLM (g x) ∘L f' +
96+
(f x).fderivCompContinuousLinearMap (g x) ∘L g') s x := by
97+
convert hasStrictFDerivAt_compContinuousLinearMap (f x, (g x)) |>.hasFDerivAt
98+
|>.comp_hasFDerivWithinAt x (hf.prodMk hg)
99+
100+
theorem fderivWithin_continuousAlternatingMapCompContinuousLinearMap
101+
(hf : DifferentiableWithinAt 𝕜 f s x) (hg : DifferentiableWithinAt 𝕜 g s x)
102+
(hs : UniqueDiffWithinAt 𝕜 s x) :
103+
fderivWithin 𝕜 (fun x ↦ (f x).compContinuousLinearMap (g x)) s x =
104+
compContinuousLinearMapCLM (g x) ∘L fderivWithin 𝕜 f s x +
105+
(f x).fderivCompContinuousLinearMap (g x) ∘L fderivWithin 𝕜 g s x :=
106+
hf.hasFDerivWithinAt.continuousAlternatingMapCompContinuousLinearMap (hg.hasFDerivWithinAt)
107+
|>.fderivWithin hs
108+
109+
theorem fderiv_continuousAlternatingMapCompContinuousLinearMap
110+
(hf : DifferentiableAt 𝕜 f x) (hg : DifferentiableAt 𝕜 g x) :
111+
fderiv 𝕜 (fun x ↦ (f x).compContinuousLinearMap (g x)) x =
112+
compContinuousLinearMapCLM (g x) ∘L fderiv 𝕜 f x +
113+
(f x).fderivCompContinuousLinearMap (g x) ∘L fderiv 𝕜 g x :=
114+
hf.hasFDerivAt.continuousAlternatingMapCompContinuousLinearMap (hg.hasFDerivAt) |>.fderiv
115+
116+
end HasFDerivAt
117+
118+
/-!
119+
### Differentiability of the pullback
120+
121+
In this section we prove that the pullback of a continuous alternating map
122+
along a continuous linear map is differentiable with respect to a parameter,
123+
provided that both maps are differentiable.
124+
-/
125+
126+
variable [Finite ι]
127+
128+
theorem DifferentiableWithinAt.continuousAlternatingMapCompContinuousLinearMap
129+
(hf : DifferentiableWithinAt 𝕜 f s x) (hg : DifferentiableWithinAt 𝕜 g s x) :
130+
DifferentiableWithinAt 𝕜 (fun x ↦ (f x).compContinuousLinearMap (g x)) s x := by
131+
cases nonempty_fintype ι
132+
classical
133+
exact hf.hasFDerivWithinAt.continuousAlternatingMapCompContinuousLinearMap hg.hasFDerivWithinAt
134+
|>.differentiableWithinAt
135+
136+
theorem DifferentiableAt.continuousAlternatingMapCompContinuousLinearMap
137+
(hf : DifferentiableAt 𝕜 f x) (hg : DifferentiableAt 𝕜 g x) :
138+
DifferentiableAt 𝕜 (fun x ↦ (f x).compContinuousLinearMap (g x)) x := by
139+
cases nonempty_fintype ι
140+
classical
141+
exact hf.hasFDerivAt.continuousAlternatingMapCompContinuousLinearMap hg.hasFDerivAt
142+
|>.differentiableAt
143+
144+
end CompContinuousLinearMap
145+
146+
/-!
147+
### Derivative of a continuous alternating map applied to a tuple of vectors
148+
149+
In this section we prove the formula for the derivative `D_xf(x; g_0(x), ..., g_n(x))`.
150+
-/
151+
152+
section Apply
153+
154+
variable {f : E → F [⋀^ι]→L[𝕜] G} {f' : E →L[𝕜] F [⋀^ι]→L[𝕜] G}
155+
{g : ι → E → F} {g' : ι → E →L[𝕜] F}
156+
{s : Set E} {x : E}
157+
158+
section HasFDerivAt
159+
160+
variable [Fintype ι] [DecidableEq ι]
161+
162+
namespace ContinuousAlternatingMap
163+
164+
theorem hasStrictFDerivAt (f : E [⋀^ι]→L[𝕜] F) (x : ι → E) :
165+
HasStrictFDerivAt f (f.1.linearDeriv x) x :=
166+
f.1.hasStrictFDerivAt x
167+
168+
theorem hasFDerivAt (f : E [⋀^ι]→L[𝕜] F) (x : ι → E) : HasFDerivAt f (f.1.linearDeriv x) x :=
169+
f.1.hasFDerivAt x
170+
171+
theorem hasFDerivWithinAt (f : E [⋀^ι]→L[𝕜] F) (s : Set (ι → E)) (x : ι → E) :
172+
HasFDerivWithinAt f (f.1.linearDeriv x) s x :=
173+
(f.hasFDerivAt x).hasFDerivWithinAt
174+
175+
end ContinuousAlternatingMap
176+
177+
theorem HasStrictFDerivAt.continuousAlternatingMap_apply (hf : HasStrictFDerivAt f f' x)
178+
(hg : ∀ i, HasStrictFDerivAt (g i) (g' i) x) :
179+
HasStrictFDerivAt
180+
(fun x ↦ f x (g · x))
181+
(apply 𝕜 F G (g · x) ∘L f' + ∑ i, (f x).toContinuousLinearMap (g · x) i ∘L g' i)
182+
x :=
183+
(toContinuousMultilinearMapCLM 𝕜).hasStrictFDerivAt.comp x hf
184+
|>.continuousMultilinearMap_apply hg
185+
186+
theorem HasFDerivAt.continuousAlternatingMap_apply (hf : HasFDerivAt f f' x)
187+
(hg : ∀ i, HasFDerivAt (g i) (g' i) x) :
188+
HasFDerivAt
189+
(fun x ↦ f x (g · x))
190+
(apply 𝕜 F G (g · x) ∘L f' + ∑ i, (f x).toContinuousLinearMap (g · x) i ∘L g' i)
191+
x :=
192+
(toContinuousMultilinearMapCLM 𝕜).hasFDerivAt.comp x hf
193+
|>.continuousMultilinearMap_apply hg
194+
195+
theorem HasFDerivWithinAt.continuousAlternatingMap_apply (hf : HasFDerivWithinAt f f' s x)
196+
(hg : ∀ i, HasFDerivWithinAt (g i) (g' i) s x) :
197+
HasFDerivWithinAt
198+
(fun x ↦ f x (g · x))
199+
(apply 𝕜 F G (g · x) ∘L f' + ∑ i, (f x).toContinuousLinearMap (g · x) i ∘L g' i)
200+
s x :=
201+
(toContinuousMultilinearMapCLM 𝕜).hasFDerivAt.comp_hasFDerivWithinAt x hf
202+
|>.continuousMultilinearMap_apply hg
203+
204+
theorem fderivWithin_continuousAlternatingMap_apply (hf : DifferentiableWithinAt 𝕜 f s x)
205+
(hg : ∀ i, DifferentiableWithinAt 𝕜 (g i) s x) (hs : UniqueDiffWithinAt 𝕜 s x) :
206+
fderivWithin 𝕜 (fun x ↦ f x (g · x)) s x =
207+
apply 𝕜 F G (g · x) ∘L fderivWithin 𝕜 f s x +
208+
∑ i, (f x).toContinuousLinearMap (g · x) i ∘L fderivWithin 𝕜 (g i) s x :=
209+
hf.hasFDerivWithinAt.continuousAlternatingMap_apply (fun i ↦ (hg i).hasFDerivWithinAt)
210+
|>.fderivWithin hs
211+
212+
theorem fderiv_continuousAlternatingMap_apply (hf : DifferentiableAt 𝕜 f x)
213+
(hg : ∀ i, DifferentiableAt 𝕜 (g i) x) :
214+
fderiv 𝕜 (fun x ↦ f x (g · x)) x =
215+
apply 𝕜 F G (g · x) ∘L fderiv 𝕜 f x +
216+
∑ i, (f x).toContinuousLinearMap (g · x) i ∘L fderiv 𝕜 (g i) x :=
217+
hf.hasFDerivAt.continuousAlternatingMap_apply (fun i ↦ (hg i).hasFDerivAt) |>.fderiv
218+
219+
end HasFDerivAt
220+
221+
variable [Finite ι]
222+
223+
theorem DifferentiableWithinAt.continuousAlternatingMap_apply (hf : DifferentiableWithinAt 𝕜 f s x)
224+
(hg : ∀ i, DifferentiableWithinAt 𝕜 (g i) s x) :
225+
DifferentiableWithinAt 𝕜 (fun x ↦ f x (g · x)) s x := by
226+
cases nonempty_fintype ι
227+
classical
228+
exact hf.hasFDerivWithinAt.continuousAlternatingMap_apply (fun i ↦ (hg i).hasFDerivWithinAt)
229+
|>.differentiableWithinAt
230+
231+
theorem DifferentiableAt.continuousAlternatingMap_apply (hf : DifferentiableAt 𝕜 f x)
232+
(hg : ∀ i, DifferentiableAt 𝕜 (g i) x) : DifferentiableAt 𝕜 (fun x ↦ f x (g · x)) x := by
233+
cases nonempty_fintype ι
234+
classical
235+
exact hf.hasFDerivAt.continuousAlternatingMap_apply (fun i ↦ (hg i).hasFDerivAt)
236+
|>.differentiableAt
237+
238+
theorem DifferentiableOn.continuousAlternatingMap_apply (hf : DifferentiableOn 𝕜 f s)
239+
(hg : ∀ i, DifferentiableOn 𝕜 (g i) s) : DifferentiableOn 𝕜 (fun x ↦ f x (g · x)) s :=
240+
fun x hx ↦ (hf x hx).continuousAlternatingMap_apply (hg · x hx)
241+
242+
theorem Differentiable.continuousAlternatingMap_apply (hf : Differentiable 𝕜 f)
243+
(hg : ∀ i, Differentiable 𝕜 (g i)) : Differentiable 𝕜 (fun x ↦ f x (g · x)) :=
244+
fun x ↦ (hf x).continuousAlternatingMap_apply (hg · x)
245+
246+
theorem ContinuousAlternatingMap.differentiable (f : E [⋀^ι]→L[𝕜] F) : Differentiable 𝕜 f := by
247+
cases nonempty_fintype ι
248+
apply Differentiable.continuousAlternatingMap_apply <;> fun_prop
249+
250+
end Apply

0 commit comments

Comments
 (0)