Imports
/- Copyright (c) 2025 Tomas Skrivan. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Tomas Skrivan -/ module public import Mathlib.Analysis.Calculus.Gradient.Basic public import Physlib.Mathematics.FDerivCurry public import Physlib.Mathematics.InnerProductSpace.Adjoint public import Physlib.Mathematics.InnerProductSpace.Calculus

Adjoint Fréchet derivative

adjFDeriv 𝕜 f x = (fderiv 𝕜 f x).adjoint

The main purpose of defining adjFDeriv is to compute gradient f x = adjFDeriv 𝕜 f x 1. The advantage of working with adjFDeriv is that we can formulate composition theorem.

The reason why we do not want to compute fderiv and then adjoint is that to compute fderiv 𝕜 f or adjoint f we decompose f = f₁ ∘ ... ∘ fₙ and then apply composition theorem. The problem is that this decomposition has to be done differently for fderiv and adjoint. The problem is that when working with fderiv the natural product type is X × Y but when working with adjoint the natural product is WithLp 2 (X × Y). For example:

@[expose] public sectionAll goals completed! 🐙lemma adjoint.isBoundedBilinearMap_real : IsBoundedBilinearMap (fun (fy : (X →L[] Y)×Y) => fy.1.adjoint fy.2) := { add_left := X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y (x₁ x₂ : X →L[] Y) (y : Y), (adjoint (x₁ + x₂, y).1) (x₁ + x₂, y).2 = (adjoint (x₁, y).1) (x₁, y).2 + (adjoint (x₂, y).1) (x₂, y).2 All goals completed! 🐙 smul_left := X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y (c : ) (x : X →L[] Y) (y : Y), (adjoint (c x, y).1) (c x, y).2 = c (adjoint (x, y).1) (x, y).2 All goals completed! 🐙 add_right := X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y (x : X →L[] Y) (y₁ y₂ : Y), (adjoint (x, y₁ + y₂).1) (x, y₁ + y₂).2 = (adjoint (x, y₁).1) (x, y₁).2 + (adjoint (x, y₂).1) (x, y₂).2 All goals completed! 🐙 smul_right := X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y (c : ) (x : X →L[] Y) (y : Y), (adjoint (x, c y).1) (x, c y).2 = c (adjoint (x, y).1) (x, y).2 All goals completed! 🐙 bound := X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y C > 0, (x : X →L[] Y) (y : Y), (adjoint (x, y).1) (x, y).2 C * x * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y C, 0 < C (x : X →L[] Y) (y : Y), (adjoint x) y C * x * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y0 < 1 (x : X →L[] Y) (y : Y), (adjoint x) y 1 * x * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y0 < 1X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y (x : X →L[] Y) (y : Y), (adjoint x) y 1 * x * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y0 < 1 All goals completed! 🐙 X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Y (x : X →L[] Y) (y : Y), (adjoint x) y 1 * x * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Yf:X →L[] Yy:Y(adjoint f) y 1 * f * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Yf:X →L[] Yy:Y(adjoint f) y adjoint f * yX:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Yf:X →L[] Yy:Yadjoint f * y 1 * f * y X:Type u_6inst✝⁵:NormedAddCommGroup Xinst✝⁴:InnerProductSpace Xinst✝³:CompleteSpace XY:Type u_7inst✝²:NormedAddCommGroup Yinst✝¹:InnerProductSpace Yinst✝:CompleteSpace Yf:X →L[] Yy:Yadjoint f * y 1 * f * y All goals completed! 🐙 }lemma gradient_eq_adjFDeriv {f : U 𝕜} {x : U} (hf : DifferentiableAt 𝕜 f x) : gradient f x = adjFDeriv 𝕜 f x 1 := 𝕜:Type u_1inst✝³:RCLike 𝕜U:Type u_5inst✝²:NormedAddCommGroup Uinst✝¹:InnerProductSpace 𝕜 Uinst✝:CompleteSpace Uf:U 𝕜x:Uhf:DifferentiableAt 𝕜 f xgradient f x = adjFDeriv 𝕜 f x 1 𝕜:Type u_1inst✝³:RCLike 𝕜U:Type u_5inst✝²:NormedAddCommGroup Uinst✝¹:InnerProductSpace 𝕜 Uinst✝:CompleteSpace Uf:U 𝕜x:Uhf:DifferentiableAt 𝕜 f x (v : U), inner 𝕜 (gradient f x) v = inner 𝕜 (adjFDeriv 𝕜 f x 1) v 𝕜:Type u_1inst✝³:RCLike 𝕜U:Type u_5inst✝²:NormedAddCommGroup Uinst✝¹:InnerProductSpace 𝕜 Uinst✝:CompleteSpace Uf:U 𝕜x:Uhf:DifferentiableAt 𝕜 f x (v : U), inner 𝕜 ((InnerProductSpace.toDual 𝕜 U).symm (fderiv 𝕜 f x)) v = inner 𝕜 (adjFDeriv 𝕜 f x 1) v All goals completed! 🐙attribute [fun_prop] HasAdjFDerivAt.differentiableAtlemma hasAdjFDerivAt_id (x : E) : HasAdjFDerivAt 𝕜 (fun x : E => x) (fun dx => dx) x where differentiableAt := 𝕜:Type u_1inst✝³:RCLike 𝕜E:Type u_2inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace 𝕜 Einst✝:InnerProductSpace' 𝕜 Ex:EDifferentiableAt 𝕜 (fun x => x) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝³:RCLike 𝕜E:Type u_2inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace 𝕜 Einst✝:InnerProductSpace' 𝕜 Ex:EHasAdjoint 𝕜 (fderiv 𝕜 (fun x => x) x) fun dx => dx 𝕜:Type u_1inst✝³:RCLike 𝕜E:Type u_2inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace 𝕜 Einst✝:InnerProductSpace' 𝕜 Ex:EHasAdjoint 𝕜 id fun x => x; All goals completed! 🐙All goals completed! 🐙lemma adjFDeriv_id' : adjFDeriv 𝕜 (id : E E) = fun _ dx => dx := 𝕜:Type u_1inst✝³:RCLike 𝕜E:Type u_2inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace 𝕜 Einst✝:InnerProductSpace' 𝕜 EadjFDeriv 𝕜 id = fun x dx => dx All goals completed! 🐙lemma hasAdjFDerivAt_const (x : E) (y : F) : HasAdjFDerivAt 𝕜 (fun _ : E => y) (fun _ => 0) x where differentiableAt := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Fx:Ey:FDifferentiableAt 𝕜 (fun x => y) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Fx:Ey:FHasAdjoint 𝕜 (fderiv 𝕜 (fun x => y) x) fun x => 0 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Fx:Ey:FHasAdjoint 𝕜 0 fun x => 0; All goals completed! 🐙All goals completed! 🐙lemma HasAdjFDerivAt.comp {f : F G} {g : E F} {f' g'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' (g x)) (hg : HasAdjFDerivAt 𝕜 g g' x) : HasAdjFDerivAt 𝕜 (fun x => f (g x)) (fun dz => g' (f' dz)) x where differentiableAt := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:F Gg:E Ff':G Fg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' (g x)hg:HasAdjFDerivAt 𝕜 g g' xDifferentiableAt 𝕜 (fun x => f (g x)) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:F Gg:E Ff':G Fg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' (g x)hg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => f (g x)) x) fun dz => g' (f' dz) 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:F Gg:E Ff':G Fg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' (g x)hg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 f (g x) ∘SL fderiv 𝕜 g x) fun dz => g' (f' dz) All goals completed! 🐙lemma adjFDeriv_comp [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : F G} {g : E F} {x : E} (hf : DifferentiableAt 𝕜 f (g x)) (hg : DifferentiableAt 𝕜 g x) : adjFDeriv 𝕜 (fun x => f (g x)) x = fun dy => adjFDeriv 𝕜 g x (adjFDeriv 𝕜 f (g x) dy) := 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:F Gg:E Fx:Ehf:DifferentiableAt 𝕜 f (g x)hg:DifferentiableAt 𝕜 g xadjFDeriv 𝕜 (fun x => f (g x)) x = fun dy => adjFDeriv 𝕜 g x (adjFDeriv 𝕜 f (g x) dy) 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:F Gg:E Fx:Ehf:DifferentiableAt 𝕜 f (g x)hg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 (fun x => f (g x)) (fun dy => adjFDeriv 𝕜 g x (adjFDeriv 𝕜 f (g x) dy)) x 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:F Gg:E Fx:Ehf:DifferentiableAt 𝕜 f (g x)hg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 f (adjFDeriv 𝕜 f (g x)) (g x)𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:F Gg:E Fx:Ehf:DifferentiableAt 𝕜 f (g x)hg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 g (adjFDeriv 𝕜 g x) x 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:F Gg:E Fx:Ehf:DifferentiableAt 𝕜 f (g x)hg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 g (adjFDeriv 𝕜 g x) x All goals completed! 🐙lemma HasAdjFDerivAt.prodMk {f : E F} {g : E G} {f' g'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' x) (hg : HasAdjFDerivAt 𝕜 g g' x) : HasAdjFDerivAt 𝕜 (fun x => (f x, g x)) (fun dyz => f' dyz.fst + g' dyz.snd) x where differentiableAt := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xDifferentiableAt 𝕜 (fun x => (f x, g x)) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => (f x, g x)) x) fun dyz => f' dyz.1 + g' dyz.2 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 ((fderiv 𝕜 f x).prod (fderiv 𝕜 g x)) fun dyz => f' dyz.1 + g' dyz.2 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (⇑(fderiv 𝕜 f x)) f'𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (⇑(fderiv 𝕜 g x)) g' 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (⇑(fderiv 𝕜 f x)) f' All goals completed! 🐙 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E Fg:E Gf':F Eg':G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (⇑(fderiv 𝕜 g x)) g' All goals completed! 🐙lemma HasAjdFDerivAt.fst {f : E F×G} {f'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' x) : HasAdjFDerivAt 𝕜 (fun x => (f x).fst) (fun dy => f' (dy, 0)) x where differentiableAt := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F × Gf':F × G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xDifferentiableAt 𝕜 (fun x => (f x).1) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F × Gf':F × G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => (f x).1) x) fun dy => f' (dy, 0) 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F × Gf':F × G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xHasAdjoint 𝕜 (ContinuousLinearMap.fst 𝕜 F G ∘SL fderiv 𝕜 f x) fun dy => f' (dy, 0) All goals completed! 🐙lemma adjFDeriv_fst [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : E F×G} {x : E} (hf : DifferentiableAt 𝕜 f x) : adjFDeriv 𝕜 (fun x => (f x).fst) x = fun dy => adjFDeriv 𝕜 f x (dy, 0) := 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F × Gx:Ehf:DifferentiableAt 𝕜 f xadjFDeriv 𝕜 (fun x => (f x).1) x = fun dy => adjFDeriv 𝕜 f x (dy, 0) 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F × Gx:Ehf:DifferentiableAt 𝕜 f xHasAdjFDerivAt 𝕜 (fun x => (f x).1) (fun dy => adjFDeriv 𝕜 f x (dy, 0)) x All goals completed! 🐙𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Fx:F × EDifferentiableAt 𝕜 id x All goals completed! 🐙lemma HasAjdFDerivAt.snd {f : E F×G} {f'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' x) : HasAdjFDerivAt 𝕜 (fun x => (f x).snd) (fun dz => f' (0, dz)) x where differentiableAt := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F × Gf':F × G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xDifferentiableAt 𝕜 (fun x => (f x).2) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F × Gf':F × G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => (f x).2) x) fun dz => f' (0, dz) 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F × Gf':F × G Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xHasAdjoint 𝕜 (ContinuousLinearMap.snd 𝕜 F G ∘SL fderiv 𝕜 f x) fun dz => f' (0, dz) All goals completed! 🐙lemma adjFDeriv_snd [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : E F×G} {x : E} (hf : DifferentiableAt 𝕜 f x) : adjFDeriv 𝕜 (fun x => (f x).snd) x = fun dy => adjFDeriv 𝕜 f x (0, dy) := 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F × Gx:Ehf:DifferentiableAt 𝕜 f xadjFDeriv 𝕜 (fun x => (f x).2) x = fun dy => adjFDeriv 𝕜 f x (0, dy) 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F × Gx:Ehf:DifferentiableAt 𝕜 f xHasAdjFDerivAt 𝕜 (fun x => (f x).2) (fun dy => adjFDeriv 𝕜 f x (0, dy)) x All goals completed! 🐙𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Fx:F × EDifferentiableAt 𝕜 id x All goals completed! 🐙lemma hasAdjFDerivAt_uncurry {f : E F G} {xy} {fx' fy'} (hf : DifferentiableAt 𝕜 (f) xy) (hfx : HasAdjFDerivAt 𝕜 (f · xy.2) fx' xy.1) (hfy : HasAdjFDerivAt 𝕜 (f xy.1 ·) fy' xy.2) : HasAdjFDerivAt 𝕜 (f) (fun dz => (fx' dz, fy' dz)) xy where differentiableAt :=hf hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fderiv 𝕜 (f) xy) fun dz => (fx' dz, fy' dz) 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun a => (fderiv 𝕜 (fun a => (fun a a_1 => f a a_1) a) xy) a) fun dz => (fx' dz, fy' dz) 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun a => (fderiv 𝕜 (fun x => f x xy.2) xy.1) a.1 + (fderiv 𝕜 (fun x => f xy.1 x) xy.2) a.2) fun dz => (fx' dz, fy' dz) 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun a => (fderiv 𝕜 (fun x => f x xy.2) xy.1) a.1 + (fderiv 𝕜 (fun x => f xy.1 x) xy.2) a.2) ?g'𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2?g' = fun dz => (fx' dz, fy' dz)𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2G E × F case adjoint 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun a => (fderiv 𝕜 (fun x => f x xy.2) xy.1) a.1 + (fderiv 𝕜 (fun x => f xy.1 x) xy.2) a.2) ?g' 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun x => (fderiv 𝕜 (fun x => f x xy.2) xy.1) x.1) ?f'𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun x => (fderiv 𝕜 (fun x => f xy.1 x) xy.2) x.2) ?g'𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2G E × F𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2G E × F 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2HasAdjoint 𝕜 (fun x => (fderiv 𝕜 (fun x => f xy.1 x) xy.2) x.2) ?g'𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2G E × F All goals completed! 🐙 case eq 𝕜:Type u_1inst✝⁹:RCLike 𝕜E:Type u_2inst✝⁸:NormedAddCommGroup Einst✝⁷:NormedSpace 𝕜 Einst✝⁶:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace 𝕜 Finst✝³:InnerProductSpace' 𝕜 FG:Type u_4inst✝²:NormedAddCommGroup Ginst✝¹:NormedSpace 𝕜 Ginst✝:InnerProductSpace' 𝕜 Gf:E F Gxy:E × Ffx':G Efy':G Fhf:DifferentiableAt 𝕜 (f) xyhfx:HasAdjFDerivAt 𝕜 (fun x => f x xy.2) fx' xy.1hfy:HasAdjFDerivAt 𝕜 (fun x => f xy.1 x) fy' xy.2(fun y => (fx' y, 0) + (0, fy' y)) = fun dz => (fx' dz, fy' dz) All goals completed! 🐙lemma adjFDeriv_uncurry [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : E F G} {xy} (hfx : DifferentiableAt 𝕜 (f) xy) : adjFDeriv 𝕜 (f) xy = fun dz => (adjFDeriv 𝕜 (f · xy.snd) xy.fst dz, adjFDeriv 𝕜 (f xy.fst ·) xy.snd dz) := 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyadjFDeriv 𝕜 (f) xy = fun dz => (adjFDeriv 𝕜 (fun x => f x xy.2) xy.1 dz, adjFDeriv 𝕜 (fun x => f xy.1 x) xy.2 dz) 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyHasAdjFDerivAt 𝕜 (f) (fun dz => (adjFDeriv 𝕜 (fun x => f x xy.2) xy.1 dz, adjFDeriv 𝕜 (fun x => f xy.1 x) xy.2 dz)) xy 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyDifferentiableAt 𝕜 (f) xy𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyHasAdjFDerivAt 𝕜 (fun x => f x xy.2) (adjFDeriv 𝕜 (fun x => f x xy.2) xy.1) xy.1𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyHasAdjFDerivAt 𝕜 (fun x => f xy.1 x) (adjFDeriv 𝕜 (fun x => f xy.1 x) xy.2) xy.2 𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyHasAdjFDerivAt 𝕜 (fun x => f x xy.2) (adjFDeriv 𝕜 (fun x => f x xy.2) xy.1) xy.1𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyHasAdjFDerivAt 𝕜 (fun x => f xy.1 x) (adjFDeriv 𝕜 (fun x => f xy.1 x) xy.2) xy.2 apply DifferentiableAt.hasAdjFDerivAt (𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyDifferentiableAt 𝕜 (fun x => f x xy.2) xy.1 All goals completed! 🐙) apply DifferentiableAt.hasAdjFDerivAt (𝕜:Type u_1inst✝¹²:RCLike 𝕜E:Type u_2inst✝¹¹:NormedAddCommGroup Einst✝¹⁰:NormedSpace 𝕜 Einst✝⁹:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁸:NormedAddCommGroup Finst✝⁷:NormedSpace 𝕜 Finst✝⁶:InnerProductSpace' 𝕜 FG:Type u_4inst✝⁵:NormedAddCommGroup Ginst✝⁴:NormedSpace 𝕜 Ginst✝³:InnerProductSpace' 𝕜 Ginst✝²:CompleteSpace Einst✝¹:CompleteSpace Finst✝:CompleteSpace Gf:E F Gxy:E × Fhfx:DifferentiableAt 𝕜 (f) xyDifferentiableAt 𝕜 (fun x => f xy.1 x) xy.2 All goals completed! 🐙)lemma HasAdjFDerivAt.neg {f : E F} {f'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' x) : HasAdjFDerivAt 𝕜 (fun x => - f x) (fun dy => - f' dy) x where differentiableAt := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Ff':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xDifferentiableAt 𝕜 (fun x => -f x) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Ff':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => -f x) x) fun dy => -f' dy 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Ff':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xHasAdjoint 𝕜 (-fderiv 𝕜 f x) fun dy => -f' dy; All goals completed! 🐙lemma adjFDeriv_neg [CompleteSpace E] [CompleteSpace F] {f : E F} {x : E} (hf : DifferentiableAt 𝕜 f x) : adjFDeriv 𝕜 (fun x => - f x) x = fun dy => - adjFDeriv 𝕜 f x dy := 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fx:Ehf:DifferentiableAt 𝕜 f xadjFDeriv 𝕜 (fun x => -f x) x = fun dy => -adjFDeriv 𝕜 f x dy 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fx:Ehf:DifferentiableAt 𝕜 f xHasAdjFDerivAt 𝕜 (fun x => -f x) (fun dy => -adjFDeriv 𝕜 f x dy) x All goals completed! 🐙lemma HasAjdFDerivAt.add {f g : E F} {f' g'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' x) (hg : HasAdjFDerivAt 𝕜 g g' x) : HasAdjFDerivAt 𝕜 (fun x => f x + g x) (fun dy => f' dy + g' dy) x where differentiableAt := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Fg:E Ff':F Eg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xDifferentiableAt 𝕜 (fun x => f x + g x) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Fg:E Ff':F Eg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => f x + g x) x) fun dy => f' dy + g' dy 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Fg:E Ff':F Eg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 f x + fderiv 𝕜 g x) fun dy => f' dy + g' dy All goals completed! 🐙lemma adjFDeriv_add [CompleteSpace E] [CompleteSpace F] {f g : E F} {x : E} (hf : DifferentiableAt 𝕜 f x) (hg : DifferentiableAt 𝕜 g x) : adjFDeriv 𝕜 (fun x => f x + g x) x = fun dy => adjFDeriv 𝕜 f x dy + adjFDeriv 𝕜 g x dy := 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xadjFDeriv 𝕜 (fun x => f x + g x) x = fun dy => adjFDeriv 𝕜 f x dy + adjFDeriv 𝕜 g x dy 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 (fun x => f x + g x) (fun dy => adjFDeriv 𝕜 f x dy + adjFDeriv 𝕜 g x dy) x 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 f (adjFDeriv 𝕜 f x) x𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 g (adjFDeriv 𝕜 g x) x 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 g (adjFDeriv 𝕜 g x) x All goals completed! 🐙lemma HasAdjFDerivAt.sub {f g : E F} {f' g'} {x : E} (hf : HasAdjFDerivAt 𝕜 f f' x) (hg : HasAdjFDerivAt 𝕜 g g' x) : HasAdjFDerivAt 𝕜 (fun x => f x - g x) (fun dy => f' dy - g' dy) x where differentiableAt := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Fg:E Ff':F Eg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xDifferentiableAt 𝕜 (fun x => f x - g x) x All goals completed! 🐙 hasAdjoint_fderiv := 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Fg:E Ff':F Eg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 (fun x => f x - g x) x) fun dy => f' dy - g' dy 𝕜:Type u_1inst✝⁶:RCLike 𝕜E:Type u_2inst✝⁵:NormedAddCommGroup Einst✝⁴:NormedSpace 𝕜 Einst✝³:InnerProductSpace' 𝕜 EF:Type u_3inst✝²:NormedAddCommGroup Finst✝¹:NormedSpace 𝕜 Finst✝:InnerProductSpace' 𝕜 Ff:E Fg:E Ff':F Eg':F Ex:Ehf:HasAdjFDerivAt 𝕜 f f' xhg:HasAdjFDerivAt 𝕜 g g' xHasAdjoint 𝕜 (fderiv 𝕜 f x - fderiv 𝕜 g x) fun dy => f' dy - g' dy All goals completed! 🐙lemma adjFDeriv_sub [CompleteSpace E] [CompleteSpace F] {f g : E F} {x : E} (hf : DifferentiableAt 𝕜 f x) (hg : DifferentiableAt 𝕜 g x) : adjFDeriv 𝕜 (fun x => f x - g x) x = fun dy => adjFDeriv 𝕜 f x dy - adjFDeriv 𝕜 g x dy := 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xadjFDeriv 𝕜 (fun x => f x - g x) x = fun dy => adjFDeriv 𝕜 f x dy - adjFDeriv 𝕜 g x dy 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 (fun x => f x - g x) (fun dy => adjFDeriv 𝕜 f x dy - adjFDeriv 𝕜 g x dy) x 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 f (adjFDeriv 𝕜 f x) x𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 g (adjFDeriv 𝕜 g x) x 𝕜:Type u_1inst✝⁸:RCLike 𝕜E:Type u_2inst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace 𝕜 Einst✝⁵:InnerProductSpace' 𝕜 EF:Type u_3inst✝⁴:NormedAddCommGroup Finst✝³:NormedSpace 𝕜 Finst✝²:InnerProductSpace' 𝕜 Finst✝¹:CompleteSpace Einst✝:CompleteSpace Ff:E Fg:E Fx:Ehf:DifferentiableAt 𝕜 f xhg:DifferentiableAt 𝕜 g xHasAdjFDerivAt 𝕜 g (adjFDeriv 𝕜 g x) x All goals completed! 🐙set_option backward.isDefEq.respectTransparency false in open InnerProductSpace in lemma HasAdjFDerivAt.inner {E : Type*} [NormedAddCommGroup E] [NormedSpace E] [InnerProductSpace' E] (x : E × E) : HasAdjFDerivAt (fun (x : E × E) => x.1, x.2⟫_) (fun y => y (x.2, x.1)) x where differentiableAt := E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × EDifferentiableAt (fun x => x.1, x.2⟫_) x All goals completed! 🐙 hasAdjoint_fderiv := E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × EHasAdjoint (fderiv (fun x => x.1, x.2⟫_) x) fun y => y (x.2, x.1) E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × E| HasAdjoint (fderiv (fun x => x.1, x.2⟫_) x) fun y => y (x.2, x.1) E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × E| (fderiv (fun x => x.1, x.2⟫_) x) E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × E| fun t => (fderiv (fun x => x.1, x.2⟫_) x) t E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Et:E × E| (fderiv (fun x => x.1, x.2⟫_) x) t rw [fderiv_inner_apply' (E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Et:E × EDifferentiableAt Prod.fst x All goals completed! 🐙) (E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Et:E × EDifferentiableAt Prod.snd x All goals completed! 🐙)] E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Et:E × E| x.1, t.2⟫_ + t.1, x.2⟫_ E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × E (x_1 : E × E) (y : ), y (x.2, x.1), x_1⟫_ = y, x.1, x_1.2⟫_ + x_1.1, x.2⟫_⟫_ E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Ea:E × Eb:b (x.2, x.1), a⟫_ = b, x.1, a.2⟫_ + a.1, x.2⟫_⟫_ E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Ea:E × Eb:b * x.2, a.1⟫_ + b * x.1, a.2⟫_ = (x.1, a.2⟫_ + a.1, x.2⟫_) * b conv_lhs => E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Ea:E × Eb:| b * x.2, a.1⟫_ E:Type u_6inst✝²:NormedAddCommGroup Einst✝¹:NormedSpace Einst✝:InnerProductSpace' Ex:E × Ea:E × Eb:| b * a.1, x.2⟫_ All goals completed! 🐙