@@ -232,9 +232,7 @@ begin
232
232
refine ⟨λ H, ⟨H.continuous_on, H.zero_eq⟩,
233
233
λ H, ⟨H.2 , λ m hm, false.elim (not_le.2 hm bot_le), _⟩⟩,
234
234
assume m hm,
235
- have : (m : with_top ℕ) = ((0 : ℕ) : with_bot ℕ) := le_antisymm hm bot_le,
236
- rw with_top.coe_eq_coe at this ,
237
- rw this ,
235
+ obtain rfl : m = 0 , by exact_mod_cast (hm.antisymm (zero_le _)),
238
236
have : ∀ x ∈ s, p x 0 = (continuous_multilinear_curry_fin0 𝕜 E F).symm (f x),
239
237
by { assume x hx, rw ← H.2 x hx, symmetry, exact continuous_multilinear_map.uncurry0_curry0 _ },
240
238
rw [continuous_on_congr this , linear_isometry_equiv.comp_continuous_on_iff],
@@ -1649,20 +1647,14 @@ lemma has_ftaylor_series_up_to_on.continuous_linear_map_comp {n : with_top ℕ}
1649
1647
(hf : has_ftaylor_series_up_to_on n f p s) :
1650
1648
has_ftaylor_series_up_to_on n (g ∘ f) (λ x k, g.comp_continuous_multilinear_map (p x k)) s :=
1651
1649
begin
1650
+ set L : Π m : ℕ, (E [×m]→L[𝕜] F) →L[𝕜] (E [×m]→L[𝕜] G) :=
1651
+ λ m, continuous_linear_map.comp_continuous_multilinear_mapL g,
1652
1652
split,
1653
- { assume x hx, simp [(hf.zero_eq x hx).symm] },
1654
- { assume m hm x hx,
1655
- let A : (E [×m]→L[𝕜] F) → (E [×m]→L[𝕜] G) := λ f, g.comp_continuous_multilinear_map f,
1656
- have hA : is_bounded_linear_map 𝕜 A :=
1657
- is_bounded_bilinear_map_comp_multilinear.is_bounded_linear_map_right _,
1658
- have := hf.fderiv_within m hm x hx,
1659
- convert has_fderiv_at.comp_has_fderiv_within_at x (hA.has_fderiv_at) this },
1660
- { assume m hm,
1661
- let A : (E [×m]→L[𝕜] F) → (E [×m]→L[𝕜] G) :=
1662
- λ f, g.comp_continuous_multilinear_map f,
1663
- have hA : is_bounded_linear_map 𝕜 A :=
1664
- is_bounded_bilinear_map_comp_multilinear.is_bounded_linear_map_right _,
1665
- exact hA.continuous.comp_continuous_on (hf.cont m hm) }
1653
+ { exact λ x hx, congr_arg g (hf.zero_eq x hx) },
1654
+ { intros m hm x hx,
1655
+ convert (L m).has_fderiv_at.comp_has_fderiv_within_at x (hf.fderiv_within m hm x hx) },
1656
+ { intros m hm,
1657
+ convert (L m).continuous.comp_continuous_on (hf.cont m hm) }
1666
1658
end
1667
1659
1668
1660
/-- Composition by continuous linear maps on the left preserves `C^n` functions in a domain
@@ -1815,17 +1807,14 @@ lemma has_ftaylor_series_up_to_on.prod {n : with_top ℕ} (hf : has_ftaylor_seri
1815
1807
{g : E → G} {q : E → formal_multilinear_series 𝕜 E G} (hg : has_ftaylor_series_up_to_on n g q s) :
1816
1808
has_ftaylor_series_up_to_on n (λ y, (f y, g y)) (λ y k, (p y k).prod (q y k)) s :=
1817
1809
begin
1810
+ set L := λ m, continuous_multilinear_map.prodL 𝕜 (λ i : fin m, E) F G,
1818
1811
split,
1819
1812
{ assume x hx, rw [← hf.zero_eq x hx, ← hg.zero_eq x hx], refl },
1820
1813
{ assume m hm x hx,
1821
- let A : (E [×m]→L[𝕜] F) × (E [×m]→L[𝕜] G) → (E [×m]→L[𝕜] (F × G)) := λ p, p.1 .prod p.2 ,
1822
- have hA : is_bounded_linear_map 𝕜 A := is_bounded_linear_map_prod_multilinear,
1823
- convert hA.has_fderiv_at.comp_has_fderiv_within_at x
1814
+ convert (L m).has_fderiv_at.comp_has_fderiv_within_at x
1824
1815
((hf.fderiv_within m hm x hx).prod (hg.fderiv_within m hm x hx)) },
1825
1816
{ assume m hm,
1826
- let A : (E [×m]→L[𝕜] F) × (E [×m]→L[𝕜] G) → (E [×m]→L[𝕜] (F × G)) := λ p, p.1 .prod p.2 ,
1827
- have hA : is_bounded_linear_map 𝕜 A := is_bounded_linear_map_prod_multilinear,
1828
- exact hA.continuous.comp_continuous_on ((hf.cont m hm).prod (hg.cont m hm)) }
1817
+ exact (L m).continuous.comp_continuous_on ((hf.cont m hm).prod (hg.cont m hm)) }
1829
1818
end
1830
1819
1831
1820
/-- The cartesian product of `C^n` functions at a point in a domain is `C^n`. -/
@@ -1863,6 +1852,73 @@ lemma times_cont_diff.prod {n : with_top ℕ} {f : E → F} {g : E → G}
1863
1852
times_cont_diff_on_univ.1 $ times_cont_diff_on.prod (times_cont_diff_on_univ.2 hf)
1864
1853
(times_cont_diff_on_univ.2 hg)
1865
1854
1855
+ /-!
1856
+ ### Smoothness of functions `f : E → Π i, F' i`
1857
+ -/
1858
+
1859
+ section pi
1860
+
1861
+ variables {ι : Type *} [fintype ι] {F' : ι → Type *} [Π i, normed_group (F' i)]
1862
+ [Π i, normed_space 𝕜 (F' i)] {φ : Π i, E → F' i}
1863
+ {p' : Π i, E → formal_multilinear_series 𝕜 E (F' i)}
1864
+ {Φ : E → Π i, F' i} {P' : E → formal_multilinear_series 𝕜 E (Π i, F' i)}
1865
+ {n : with_top ℕ}
1866
+
1867
+ lemma has_ftaylor_series_up_to_on_pi :
1868
+ has_ftaylor_series_up_to_on n (λ x i, φ i x)
1869
+ (λ x m, continuous_multilinear_map.pi (λ i, p' i x m)) s ↔
1870
+ ∀ i, has_ftaylor_series_up_to_on n (φ i) (p' i) s :=
1871
+ begin
1872
+ set pr := @continuous_linear_map.proj 𝕜 _ ι F' _ _ _,
1873
+ letI : Π (m : ℕ) (i : ι), normed_space 𝕜 (E [×m]→L[𝕜] (F' i)) := λ m i, infer_instance,
1874
+ set L : Π m : ℕ, (Π i, E [×m]→L[𝕜] (F' i)) ≃ₗᵢ[𝕜] (E [×m]→L[𝕜] (Π i, F' i)) :=
1875
+ λ m, continuous_multilinear_map.piₗᵢ _ _,
1876
+ refine ⟨λ h i, _, λ h, ⟨λ x hx, _, _, _⟩⟩,
1877
+ { convert h.continuous_linear_map_comp (pr i),
1878
+ ext, refl },
1879
+ { ext1 i,
1880
+ exact (h i).zero_eq x hx },
1881
+ { intros m hm x hx,
1882
+ have := has_fderiv_within_at_pi.2 (λ i, (h i).fderiv_within m hm x hx),
1883
+ convert (L m).has_fderiv_at.comp_has_fderiv_within_at x this },
1884
+ { intros m hm,
1885
+ have := continuous_on_pi.2 (λ i, (h i).cont m hm),
1886
+ convert (L m).continuous.comp_continuous_on this }
1887
+ end
1888
+
1889
+ @[simp] lemma has_ftaylor_series_up_to_on_pi' :
1890
+ has_ftaylor_series_up_to_on n Φ P' s ↔
1891
+ ∀ i, has_ftaylor_series_up_to_on n (λ x, Φ x i)
1892
+ (λ x m, (@continuous_linear_map.proj 𝕜 _ ι F' _ _ _ i).comp_continuous_multilinear_map
1893
+ (P' x m)) s :=
1894
+ by { convert has_ftaylor_series_up_to_on_pi, ext, refl }
1895
+
1896
+ lemma times_cont_diff_within_at_pi :
1897
+ times_cont_diff_within_at 𝕜 n Φ s x ↔
1898
+ ∀ i, times_cont_diff_within_at 𝕜 n (λ x, Φ x i) s x :=
1899
+ begin
1900
+ set pr := @continuous_linear_map.proj 𝕜 _ ι F' _ _ _,
1901
+ refine ⟨λ h i, h.continuous_linear_map_comp (pr i), λ h m hm, _⟩,
1902
+ choose u hux p hp using λ i, h i m hm,
1903
+ exact ⟨⋂ i, u i, filter.Inter_mem_sets.2 hux, _,
1904
+ has_ftaylor_series_up_to_on_pi.2 (λ i, (hp i).mono $ Inter_subset _ _)⟩,
1905
+ end
1906
+
1907
+ lemma times_cont_diff_on_pi :
1908
+ times_cont_diff_on 𝕜 n Φ s ↔ ∀ i, times_cont_diff_on 𝕜 n (λ x, Φ x i) s :=
1909
+ ⟨λ h i x hx, times_cont_diff_within_at_pi.1 (h x hx) _,
1910
+ λ h x hx, times_cont_diff_within_at_pi.2 (λ i, h i x hx)⟩
1911
+
1912
+ lemma times_cont_diff_at_pi :
1913
+ times_cont_diff_at 𝕜 n Φ x ↔ ∀ i, times_cont_diff_at 𝕜 n (λ x, Φ x i) x :=
1914
+ times_cont_diff_within_at_pi
1915
+
1916
+ lemma times_cont_diff_pi :
1917
+ times_cont_diff 𝕜 n Φ ↔ ∀ i, times_cont_diff 𝕜 n (λ x, Φ x i) :=
1918
+ by simp only [← times_cont_diff_on_univ, times_cont_diff_on_pi]
1919
+
1920
+ end pi
1921
+
1866
1922
/-!
1867
1923
### Composition of `C^n` functions
1868
1924
0 commit comments