Imports
/-
Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Zhi Kai Pong, Tomáš Skřivan, Joseph Tooby-Smith
-/
module
public import Mathlib.Analysis.Calculus.FDeriv.Symmetricfderiv currying lemmas
Various lemmas related to fderiv on curried/uncurried functions.
@[expose] public sectione_6 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zxy:X × Ydxy:X × Yhf:DifferentiableAt 𝕜 (↿f) xyhx:(fun x => f x xy.2) = ↿f ∘ fun x' => (x', xy.2)hy:(fun x => f xy.1 x) = ↿f ∘ fun y' => (xy.1, y')⊢ dxy =
((fderiv 𝕜 (fun x' => x') xy.1).prod (fderiv 𝕜 (fun x' => xy.2) xy.1)) dxy.1 +
((fderiv 𝕜 (fun y' => xy.1) xy.2).prod (fderiv 𝕜 (fun y' => y') xy.2)) dxy.2
simp All goals completed! 🐙
lemma fderiv_curry_fst (f : X × Y → Z) (x : X) (y : Y)
(h : DifferentiableAt 𝕜 f (x,y)) (dx : X) :
fderiv 𝕜 (fun x' => Function.curry f x' y) x dx = fderiv 𝕜 f (x,y) (dx, 0) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:X⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx = (fderiv 𝕜 f (x, y)) (dx, 0)
have h1 : f = ↿(Function.curry f) := by
ext x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx✝:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xx:X × Y⊢ f x = ↿(Function.curry f) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx = (fderiv 𝕜 f (x, y)) (dx, 0)
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx = (fderiv 𝕜 f (x, y)) (dx, 0) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx = (fderiv 𝕜 f (x, y)) (dx, 0)
conv_rhs =>
rw [h1] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)| (fderiv 𝕜 ↿(Function.curry f) (x, y)) (dx, 0)
rw [fderiv_uncurry 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx =
(fderiv 𝕜 (fun x_1 => Function.curry f x_1 (x, y).2) (x, y).1) (dx, 0).1 +
(fderiv 𝕜 (fun x_1 => Function.curry f (x, y).1 x_1) (x, y).2) (dx, 0).2hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx =
(fderiv 𝕜 (fun x_1 => Function.curry f x_1 (x, y).2) (x, y).1) (dx, 0).1 +
(fderiv 𝕜 (fun x_1 => Function.curry f (x, y).1 x_1) (x, y).2) (dx, 0).2hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (fun x' => Function.curry f x' y) x) dx =
(fderiv 𝕜 (fun x_1 => Function.curry f x_1 (x, y).2) (x, y).1) (dx, 0).1 +
(fderiv 𝕜 (fun x_1 => Function.curry f (x, y).1 x_1) (x, y).2) (dx, 0).2hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)
simp only [Function.curry_apply, map_zero, add_zero] hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dx:Xh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)
exact h All goals completed! 🐙
lemma fderiv_curry_snd (f : X × Y → Z) (x : X) (y : Y)
(h : DifferentiableAt 𝕜 f (x,y)) (dy : Y) :
fderiv 𝕜 (Function.curry f x) y dy = fderiv 𝕜 (f) (x,y) (0, dy) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Y⊢ (fderiv 𝕜 (Function.curry f x) y) dy = (fderiv 𝕜 f (x, y)) (0, dy)
have h1 : f = ↿(Function.curry f) := by
ext x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx✝:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yx:X × Y⊢ f x = ↿(Function.curry f) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy = (fderiv 𝕜 f (x, y)) (0, dy)
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy = (fderiv 𝕜 f (x, y)) (0, dy) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy = (fderiv 𝕜 f (x, y)) (0, dy)
conv_rhs =>
rw [h1] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)| (fderiv 𝕜 ↿(Function.curry f) (x, y)) (0, dy)
rw [fderiv_uncurry 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy =
(fderiv 𝕜 (fun x_1 => Function.curry f x_1 (x, y).2) (x, y).1) (0, dy).1 +
(fderiv 𝕜 (fun x_1 => Function.curry f (x, y).1 x_1) (x, y).2) (0, dy).2hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy =
(fderiv 𝕜 (fun x_1 => Function.curry f x_1 (x, y).2) (x, y).1) (0, dy).1 +
(fderiv 𝕜 (fun x_1 => Function.curry f (x, y).1 x_1) (x, y).2) (0, dy).2hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy =
(fderiv 𝕜 (fun x_1 => Function.curry f x_1 (x, y).2) (x, y).1) (0, dy).1 +
(fderiv 𝕜 (fun x_1 => Function.curry f (x, y).1 x_1) (x, y).2) (0, dy).2hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)
simp 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ (fderiv 𝕜 (Function.curry f x) y) dy = (fderiv 𝕜 (fun x_1 => f (x, x_1)) y) dyhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)
rfl hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zx:Xy:Yh:DifferentiableAt 𝕜 f (x, y)dy:Yh1:f = ↿(Function.curry f)⊢ DifferentiableAt 𝕜 ↿(Function.curry f) (x, y)
exact h All goals completed! 🐙
lemma fderiv_uncurry_clm_comp (f : X → Y → Z) (hf : Differentiable 𝕜 (↿f)) :
fderiv 𝕜 ↿f
=
fun xy =>
(fderiv 𝕜 (f · xy.2) xy.1).comp (ContinuousLinearMap.fst 𝕜 X Y)
+
(fderiv 𝕜 (f xy.1 ·) xy.2).comp (ContinuousLinearMap.snd 𝕜 X Y) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿f⊢ fderiv 𝕜 ↿f = fun xy =>
fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y
funext xy 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Y⊢ fderiv 𝕜 (↿f) xy =
fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y
apply ContinuousLinearMap.ext 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Y⊢ ∀ (x : X × Y),
(fderiv 𝕜 (↿f) xy) x =
(fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x
intro dxy 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ (fderiv 𝕜 (↿f) xy) dxy =
(fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
dxy
rw [fderiv_uncurry 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ (fderiv 𝕜 (fun x => f x xy.2) xy.1) dxy.1 + (fderiv 𝕜 (fun x => f xy.1 x) xy.2) dxy.2 =
(fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
dxyhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ DifferentiableAt 𝕜 (↿f) xy 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ (fderiv 𝕜 (fun x => f x xy.2) xy.1) dxy.1 + (fderiv 𝕜 (fun x => f xy.1 x) xy.2) dxy.2 =
(fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
dxyhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ DifferentiableAt 𝕜 (↿f) xy] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ (fderiv 𝕜 (fun x => f x xy.2) xy.1) dxy.1 + (fderiv 𝕜 (fun x => f xy.1 x) xy.2) dxy.2 =
(fderiv 𝕜 (fun x => f x xy.2) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun x => f xy.1 x) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
dxyhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ DifferentiableAt 𝕜 (↿f) xy
simp only [add_apply, ContinuousLinearMap.coe_comp,
ContinuousLinearMap.coe_fst', Function.comp_apply, ContinuousLinearMap.coe_snd'] hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zhf:Differentiable 𝕜 ↿fxy:X × Ydxy:X × Y⊢ DifferentiableAt 𝕜 (↿f) xy
fun_prop All goals completed! 🐙lemma fderiv_wrt_prod {f : X × Y → Z} {xy} (hf : DifferentiableAt 𝕜 f xy) :
fderiv 𝕜 f xy
=
(fderiv 𝕜 (fun x' => f (x',xy.2)) xy.1).comp (ContinuousLinearMap.fst 𝕜 X Y)
+
(fderiv 𝕜 (fun y' => f (xy.1,y')) xy.2).comp (ContinuousLinearMap.snd 𝕜 X Y) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zxy:X × Yhf:DifferentiableAt 𝕜 f xy⊢ fderiv 𝕜 f xy =
fderiv 𝕜 (fun x' => f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y
apply ContinuousLinearMap.ext 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zxy:X × Yhf:DifferentiableAt 𝕜 f xy⊢ ∀ (x : X × Y),
(fderiv 𝕜 f xy) x =
(fderiv 𝕜 (fun x' => f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x; intro (dx,dy) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X × Y → Zxy:X × Yhf:DifferentiableAt 𝕜 f xydx:Xdy:Y⊢ (fderiv 𝕜 f xy) (dx, dy) =
(fderiv 𝕜 (fun x' => f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(dx, dy)
apply fderiv_uncurry (fun x y => f (x,y)) _ _ hf All goals completed! 🐙lemma fderiv_wrt_prod_clm_comp (f : X × Y → Z) (hf : Differentiable 𝕜 f) :
fderiv 𝕜 f
=
fun xy =>
(fderiv 𝕜 (fun x' => f (x',xy.2)) xy.1).comp (ContinuousLinearMap.fst 𝕜 X Y)
+
(fderiv 𝕜 (fun y' => f (xy.1,y')) xy.2).comp (ContinuousLinearMap.snd 𝕜 X Y) :=
fderiv_uncurry_clm_comp (fun x y => f (x,y)) hf
lemma fderiv_curry_clm_apply (f : X → Y →L[𝕜] Z) (y : Y) (x dx : X) (h : Differentiable 𝕜 f) :
fderiv 𝕜 f x dx y
=
fderiv 𝕜 (f · y) x dx := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ ((fderiv 𝕜 f x) dx) y = (fderiv 𝕜 (fun x => (f x) y) x) dx
rw [fderiv_clm_apply 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ ((fderiv 𝕜 f x) dx) y = (f x ∘SL fderiv 𝕜 (fun x => y) x + (fderiv 𝕜 f x).flip y) dxhc 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 f xhu 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 (fun x => y) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ ((fderiv 𝕜 f x) dx) y = (f x ∘SL fderiv 𝕜 (fun x => y) x + (fderiv 𝕜 f x).flip y) dxhc 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 f xhu 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 (fun x => y) x] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ ((fderiv 𝕜 f x) dx) y = (f x ∘SL fderiv 𝕜 (fun x => y) x + (fderiv 𝕜 f x).flip y) dxhc 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 f xhu 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 (fun x => y) x <;> 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ ((fderiv 𝕜 f x) dx) y = (f x ∘SL fderiv 𝕜 (fun x => y) x + (fderiv 𝕜 f x).flip y) dxhc 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 f xhu 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y →L[𝕜] Zy:Yx:Xdx:Xh:Differentiable 𝕜 f⊢ DifferentiableAt 𝕜 (fun x => y) x first | simp All goals completed! 🐙 | fun_prop All goals completed! 🐙
/- Helper rw lemmas for proving differentiability conditions. -/
lemma fderiv_uncurry_comp_fst (f : X → Y → Z) (y : Y) (hf : Differentiable 𝕜 (↿f)) :
fderiv 𝕜 (fun x' => (↿f) (x', y))
=
fun x => (fderiv 𝕜 (↿f) ((·, y) x)).comp (fderiv 𝕜 (·, y) x) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿f⊢ (fderiv 𝕜 fun x' => ↿f (x', y)) = fun x => fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x
have hl (y : Y) : (fun x' => (↿f) (x', y)) = ↿f ∘ (·, y) := by
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 fun x' => ↿f (x', y)) = fun x => fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 fun x' => ↿f (x', y)) = fun x => fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x
rw [hl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)⊢ fderiv 𝕜 (↿f ∘ fun x => (x, y)) = fun x => fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)⊢ fderiv 𝕜 (↿f ∘ fun x => (x, y)) = fun x => fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)⊢ fderiv 𝕜 (↿f ∘ fun x => (x, y)) = fun x => fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x
funext x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ fderiv 𝕜 (↿f ∘ fun x => (x, y)) x = fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) x
rw [fderiv_comp 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x => (x, y)) x =
fderiv 𝕜 (↿f) ((fun x => (x, y)) x) ∘SL fderiv 𝕜 (fun x => (x, y)) xhg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x]hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x
· hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 ↿f (x, y) fun_prop All goals completed! 🐙
· hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => ↿f (x', y)) = ↿f ∘ fun x => (x, y)x:X⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x fun_prop All goals completed! 🐙
lemma fderiv_uncurry_comp_snd (f : X → Y → Z) (x : X) (hf : Differentiable 𝕜 (↿f)) :
fderiv 𝕜 (fun y' => (↿f) (x, y'))
=
fun y => (fderiv 𝕜 (↿f) ((x, ·) y)).comp (fderiv 𝕜 (x, ·) y) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿f⊢ (fderiv 𝕜 fun y' => ↿f (x, y')) = fun y => fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y
have hl (x : X) : (fun y' => (↿f) (x, y')) = ↿f ∘ (x, ·) := by
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 fun y' => ↿f (x, y')) = fun y => fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 fun y' => ↿f (x, y')) = fun y => fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y
rw [hl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)⊢ fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) = fun y =>
fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)⊢ fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) = fun y =>
fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)⊢ fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) = fun y =>
fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y
funext y 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y = fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y
rw [fderiv_comp 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y =
fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) yhg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y]hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y
· hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 ↿f (x, y) fun_prop All goals completed! 🐙
· hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => ↿f (x, y')) = ↿f ∘ fun x_1 => (x, x_1)y:Y⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y fun_prop All goals completed! 🐙
lemma fderiv_curry_comp_fst (f : X → Y → Z) (x dx : X) (y : Y)
(hf : Differentiable 𝕜 (↿f)) :
(fderiv 𝕜 (fun x' => f x' y) x) dx
=
(fderiv 𝕜 (↿f) ((·, y) x)) ((fderiv 𝕜 (·, y) x) dx) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿f⊢ (fderiv 𝕜 (fun x' => f x' y) x) dx = (fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)
have hl (y : Y) : (fun x' => f x' y) = ↿f ∘ (·, y) := by
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 (fun x' => f x' y) x) dx = (fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 (fun x' => f x' y) x) dx = (fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)
rw [hl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 (↿f ∘ fun x => (x, y)) x) dx = (fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 (↿f ∘ fun x => (x, y)) x) dx = (fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 (↿f ∘ fun x => (x, y)) x) dx = (fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)
rw [fderiv_comp 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x => (x, y)) x) dx =
(fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x => (x, y)) x) dx =
(fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ (fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x => (x, y)) x) dx =
(fderiv 𝕜 (↿f) ((fun x => (x, y)) x)) ((fderiv 𝕜 (fun x => (x, y)) x) dx)hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x
simp only [ContinuousLinearMap.coe_comp, Function.comp_apply] hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x
· hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 ↿f (x, y) fun_prop All goals completed! 🐙
· hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:Differentiable 𝕜 ↿fhl:∀ (y : Y), (fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x => (x, y)) x fun_prop All goals completed! 🐙
lemma fderiv_curry_comp_snd (f : X → Y → Z) (x : X) (y dy : Y)
(hf : Differentiable 𝕜 (↿f)) :
(fderiv 𝕜 (fun y' => f x y') y) dy
=
(fderiv 𝕜 (↿f) ((x, ·) y)) ((fderiv 𝕜 (x, ·) y) dy) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿f⊢ (fderiv 𝕜 (fun y' => f x y') y) dy = (fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)
have hl (x : X) : (fun y' => f x y') = ↿f ∘ (x, ·) := by
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 (fun y' => f x y') y) dy = (fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 (fun y' => f x y') y) dy = (fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)
rw [hl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y) dy =
(fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy) 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y) dy =
(fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y) dy =
(fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)
rw [fderiv_comp 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy =
(fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy =
(fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ (fderiv 𝕜 ↿f (x, y) ∘SL fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy =
(fderiv 𝕜 (↿f) ((fun x_1 => (x, x_1)) y)) ((fderiv 𝕜 (fun x_1 => (x, x_1)) y) dy)hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y
simp only [ContinuousLinearMap.coe_comp, Function.comp_apply] hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 ↿f (x, y)hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y
· hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 ↿f (x, y) fun_prop All goals completed! 🐙
· hf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:Differentiable 𝕜 ↿fhl:∀ (x : X), (fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun x_1 => (x, x_1)) y fun_prop All goals completed! 🐙
lemma fderiv_inr_fst_clm (x : X) (y : Y) :
(fderiv 𝕜 (x, ·) y) = ContinuousLinearMap.inr 𝕜 X Y := by 𝕜:Type u_1inst✝⁴:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace 𝕜 Xinst✝¹:NormedAddCommGroup Yinst✝:NormedSpace 𝕜 Yx:Xy:Y⊢ fderiv 𝕜 (fun x_1 => (x, x_1)) y = ContinuousLinearMap.inr 𝕜 X Y
rw [(hasFDerivAt_prodMk_right x y).fderiv 𝕜:Type u_1inst✝⁴:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace 𝕜 Xinst✝¹:NormedAddCommGroup Yinst✝:NormedSpace 𝕜 Yx:Xy:Y⊢ ContinuousLinearMap.inr 𝕜 X Y = ContinuousLinearMap.inr 𝕜 X Y All goals completed! 🐙] All goals completed! 🐙
lemma fderiv_inl_snd_clm (x : X) (y : Y) :
(fderiv 𝕜 (·, y) x) = ContinuousLinearMap.inl 𝕜 X Y := by 𝕜:Type u_1inst✝⁴:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace 𝕜 Xinst✝¹:NormedAddCommGroup Yinst✝:NormedSpace 𝕜 Yx:Xy:Y⊢ fderiv 𝕜 (fun x => (x, y)) x = ContinuousLinearMap.inl 𝕜 X Y
rw [(hasFDerivAt_prodMk_left x y).fderiv 𝕜:Type u_1inst✝⁴:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3inst✝³:NormedAddCommGroup Xinst✝²:NormedSpace 𝕜 Xinst✝¹:NormedAddCommGroup Yinst✝:NormedSpace 𝕜 Yx:Xy:Y⊢ ContinuousLinearMap.inl 𝕜 X Y = ContinuousLinearMap.inl 𝕜 X Y All goals completed! 🐙] All goals completed! 🐙
/- Differentiability conditions. -/
lemma function_differentiableAt_fst (f : X → Y → Z) (x : X) (y : Y) (hf : Differentiable 𝕜 (↿f)) :
DifferentiableAt 𝕜 (fun x' => f x' y) x := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿f⊢ DifferentiableAt 𝕜 (fun x' => f x' y) x
have hl : (fun x' => f x' y) = ↿f ∘ (·, y) := by
funext x' 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fx':X⊢ f x' y = (↿f ∘ fun x => (x, y)) x' 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x' => f x' y) x
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x' => f x' y) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (fun x' => f x' y) x
rw [hl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (↿f ∘ fun x => (x, y)) x 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (↿f ∘ fun x => (x, y)) x] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ DifferentiableAt 𝕜 (↿f ∘ fun x => (x, y)) x
apply Differentiable.differentiableAt 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ Differentiable 𝕜 (↿f ∘ fun x => (x, y))
apply Differentiable.comp hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ Differentiable 𝕜 fun x => (x, y) <;> hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun x' => f x' y) = ↿f ∘ fun x => (x, y)⊢ Differentiable 𝕜 fun x => (x, y) fun_prop All goals completed! 🐙
lemma function_differentiableAt_snd (f : X → Y → Z) (x : X) (y : Y) (hf : Differentiable 𝕜 (↿f)) :
DifferentiableAt 𝕜 (fun y' => f x y') y := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿f⊢ DifferentiableAt 𝕜 (fun y' => f x y') y
have hl : (fun y' => f x y') = ↿f ∘ (x, ·) := by
funext y' 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fy':Y⊢ f x y' = (↿f ∘ fun x_1 => (x, x_1)) y' 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun y' => f x y') y
rfl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun y' => f x y') y 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (fun y' => f x y') y
rw [hl 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y] 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ DifferentiableAt 𝕜 (↿f ∘ fun x_1 => (x, x_1)) y
apply Differentiable.differentiableAt 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ Differentiable 𝕜 (↿f ∘ fun x_1 => (x, x_1))
apply Differentiable.comp hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ Differentiable 𝕜 fun x_1 => (x, x_1) <;> hg 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Yhf:Differentiable 𝕜 ↿fhl:(fun y' => f x y') = ↿f ∘ fun x_1 => (x, x_1)⊢ Differentiable 𝕜 fun x_1 => (x, x_1) fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_uncurry_differentiable_fst (f : X → Y → Z) (y : Y) (hf : ContDiff 𝕜 2 ↿f) :
Differentiable 𝕜 (fderiv 𝕜 fun x' => (↿f) (x', y)) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 (fderiv 𝕜 fun x' => ↿f (x', y))
fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_uncurry_differentiable_snd (f : X → Y → Z) (x : X) (hf : ContDiff 𝕜 2 ↿f) :
Differentiable 𝕜 (fderiv 𝕜 fun y' => (↿f) (x, y')) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 (fderiv 𝕜 fun y' => ↿f (x, y'))
fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_uncurry_differentiable_fst_comp_snd (f : X → Y → Z) (x : X) (hf : ContDiff 𝕜 2 ↿f) :
Differentiable 𝕜 (fun y' => fderiv 𝕜 (fun x' => (↿f) (x', y')) x) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 fun y' => fderiv 𝕜 (fun x' => ↿f (x', y')) x
fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_uncurry_differentiable_fst_comp_snd_apply (f : X → Y → Z) (x δx : X)
(hf : ContDiff 𝕜 2 ↿f) :
Differentiable 𝕜 (fun y' => fderiv 𝕜 (fun x' => (↿f) (x', y')) x δx) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xδx:Xhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 fun y' => (fderiv 𝕜 (fun x' => ↿f (x', y')) x) δx
fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_uncurry_differentiable_snd_comp_fst (f : X → Y → Z) (y : Y) (hf : ContDiff 𝕜 2 ↿f) :
Differentiable 𝕜 (fun x' => fderiv 𝕜 (fun y' => (↿f) (x', y')) y) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 fun x' => fderiv 𝕜 (fun y' => ↿f (x', y')) y
fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_uncurry_differentiable_snd_comp_fst_apply (f : X → Y → Z) (y δy : Y)
(hf : ContDiff 𝕜 2 ↿f) :
Differentiable 𝕜 (fun x' => fderiv 𝕜 (fun y' => (↿f) (x', y')) y δy) := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zy:Yδy:Yhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 fun x' => (fderiv 𝕜 (fun y' => ↿f (x', y')) y) δy
fun_prop All goals completed! 🐙@[fun_prop]
lemma fderiv_curry_differentiableAt_fst_comp_snd (f : X → Y → Z) (x dx : X) (y : Y)
(hf : ContDiff 𝕜 2 ↿f) :
DifferentiableAt 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:ContDiff 𝕜 2 ↿f⊢ DifferentiableAt 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y
apply Differentiable.differentiableAt 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xdx:Xy:Yhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx
fun_prop All goals completed! 🐙lemma fderiv_curry_differentiableAt_snd_comp_fst (f : X → Y → Z) (x : X) (y dy : Y)
(hf : ContDiff 𝕜 2 ↿f) :
DifferentiableAt 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x := by 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ DifferentiableAt 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x
apply Differentiable.differentiableAt 𝕜:Type u_1inst✝⁶:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁵:NormedAddCommGroup Xinst✝⁴:NormedSpace 𝕜 Xinst✝³:NormedAddCommGroup Yinst✝²:NormedSpace 𝕜 Yinst✝¹:NormedAddCommGroup Zinst✝:NormedSpace 𝕜 Zf:X → Y → Zx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ Differentiable 𝕜 fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy
fun_prop All goals completed! 🐙
/- fderiv commutes on X × Y. -/
lemma fderiv_swap [IsRCLikeNormedField 𝕜] (f : X → Y → Z) (x dx : X) (y dy : Y)
(hf : ContDiff 𝕜 2 ↿f) :
fderiv 𝕜 (fun x' => fderiv 𝕜 (fun y' => f x' y') y dy) x dx
=
fderiv 𝕜 (fun y' => fderiv 𝕜 (fun x' => f x' y') x dx) y dy := by 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy
have hf' : IsSymmSndFDerivAt 𝕜 (↿f) (x,y) := by
apply ContDiffAt.isSymmSndFDerivAt (n := 2) hf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ ContDiffAt 𝕜 2 ↿f (x, y)hn 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ minSmoothness 𝕜 2 ≤ 2 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy
· hf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ ContDiffAt 𝕜 2 ↿f (x, y) 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy exact ContDiff.contDiffAt hf All goals completed! 🐙 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy
· hn 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿f⊢ minSmoothness 𝕜 2 ≤ 2 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy simp 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy
have h := IsSymmSndFDerivAt.eq hf' (dx,0) (0,dy) 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dy
rw [fderiv_wrt_prod_clm_comp, 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) fderiv_wrt_prod_clm_comp 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)] at h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜
(fun x' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x', xy.2))
xy.1 ∘SL
ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜
(fun y' =>
(fun xy =>
fderiv 𝕜 (fun x' => ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(xy.1, y'))
xy.2 ∘SL
ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)
simp only [add_apply, ContinuousLinearMap.coe_comp,
ContinuousLinearMap.coe_fst', Function.comp_apply, ContinuousLinearMap.coe_snd', map_zero,
add_zero, zero_add] at h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)
rw [fderiv_curry_clm_apply, 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
(fderiv 𝕜
(fun x_1 =>
(fderiv 𝕜 (fun x' => ↿f (x', x_1)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) x_1 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(dx, 0))
y)
dy⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Yh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) fderiv_curry_clm_apply 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
(fderiv 𝕜
(fun x_1 =>
(fderiv 𝕜 (fun x' => ↿f (x', x_1)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) x_1 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(dx, 0))
y)
dy⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Yh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
(fderiv 𝕜
(fun x_1 =>
(fderiv 𝕜 (fun x' => ↿f (x', x_1)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) x_1 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(dx, 0))
y)
dy⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Yh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)] at h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
(fderiv 𝕜
(fun x_1 =>
(fderiv 𝕜 (fun x' => ↿f (x', x_1)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) x_1 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(dx, 0))
y)
dy⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Yh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)
simp only [add_apply, ContinuousLinearMap.coe_comp,
ContinuousLinearMap.coe_fst', Function.comp_apply, map_zero, ContinuousLinearMap.coe_snd',
zero_add, add_zero] at h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜 (fun x => (fderiv 𝕜 (fun y' => ↿f (x, y')) y) dy) x) dx =
(fderiv 𝕜 (fun x_1 => (fderiv 𝕜 (fun x' => ↿f (x', x_1)) x) dx) y) dy⊢ (fderiv 𝕜 (fun x' => (fderiv 𝕜 (fun y' => f x' y') y) dy) x) dx =
(fderiv 𝕜 (fun y' => (fderiv 𝕜 (fun x' => f x' y') x) dx) y) dyh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Yh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)
exact h h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Yh 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Yhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿fhf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f)
/- Start of differentiability conditions. -/
· h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(fderiv 𝕜
(fun x =>
(fderiv 𝕜 (fun x' => ↿f (x', y)) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(0, dy))
x)
dx =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y fun_prop All goals completed! 🐙
· h 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜
(fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y)
x)
dx)
(0, dy) =
((fderiv 𝕜
(fun y' =>
fderiv 𝕜 (fun x' => ↿f (x', y')) x ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x, y')) y' ∘SL ContinuousLinearMap.snd 𝕜 X Y)
y)
dy)
(dx, 0)⊢ Differentiable 𝕜 fun x' =>
fderiv 𝕜 (fun x' => ↿f (x', y)) x' ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => ↿f (x', y')) y ∘SL ContinuousLinearMap.snd 𝕜 X Y fun_prop All goals completed! 🐙
· hf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ Differentiable 𝕜 ↿f exact hf.differentiable (by 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(dx, 0))
(0, dy) =
(((fun xy =>
fderiv 𝕜 (fun x' => fderiv 𝕜 ↿f (x', xy.2)) xy.1 ∘SL ContinuousLinearMap.fst 𝕜 X Y +
fderiv 𝕜 (fun y' => fderiv 𝕜 ↿f (xy.1, y')) xy.2 ∘SL ContinuousLinearMap.snd 𝕜 X Y)
(x, y))
(0, dy))
(dx, 0)⊢ 2 ≠ 0 simp All goals completed! 🐙)
· hf 𝕜:Type u_1inst✝⁷:NontriviallyNormedField 𝕜X:Type u_2Y:Type u_3Z:Type u_4inst✝⁶:NormedAddCommGroup Xinst✝⁵:NormedSpace 𝕜 Xinst✝⁴:NormedAddCommGroup Yinst✝³:NormedSpace 𝕜 Yinst✝²:NormedAddCommGroup Zinst✝¹:NormedSpace 𝕜 Zinst✝:IsRCLikeNormedField 𝕜f:X → Y → Zx:Xdx:Xy:Ydy:Yhf:ContDiff 𝕜 2 ↿fhf':IsSymmSndFDerivAt 𝕜 ↿f (x, y)h:((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (dx, 0)) (0, dy) = ((fderiv 𝕜 (fderiv 𝕜 ↿f) (x, y)) (0, dy)) (dx, 0)⊢ Differentiable 𝕜 (fderiv 𝕜 ↿f) fun_prop All goals completed! 🐙