PhysLean Documentation

PhysLean.Mathematics.Calculus.AdjFDeriv

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:

noncomputable def adjFDeriv (π•œ : Type u_1) [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] (f : E β†’ F) (x : E) (dy : F) :
E

Adjoint FrΓ©chet derivative

adjFDeriv π•œ f x = (fderiv π•œ f x).adjoint

The main purpose of this function is to compute gradient f x = adjFDeriv π•œ f x 1. We provide easy to use API to compute adjFDeriv.

Equations
Instances For
    structure HasAdjFDerivAt (π•œ : Type u_1) [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] (f : E β†’ F) (f' : F β†’ E) (x : E) :

    Function f has adjoint FrΓ©chet derivative f' at x

    f' = adjFDeriv π•œ f x = (fderiv π•œ f x).adjoint

    The main purpose is to compute gradient f x = f' 1 = adjFDeriv π•œ f x 1.

    This structure is analogous to HasFDerivAt and it is often easier to use as theorems for HasAdjFDeriv do not require differentiability assumptions unlike theorems for adjFDeriv.

    Instances For
      theorem HasAdjFDerivAt.adjFDeriv {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {f : E β†’ F} {f' : F β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) :
      adjFDeriv π•œ f x = f'
      theorem DifferentiableAt.hasAdjFDerivAt {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] [CompleteSpace E] [CompleteSpace F] {f : E β†’ F} {x : E} (hf : DifferentiableAt π•œ f x) :
      HasAdjFDerivAt π•œ f (adjFDeriv π•œ f x) x
      theorem HasAdjFDerivAt.contDiffAt_deriv {n : WithTop β„•βˆž} {E : Type u_6} [NormedAddCommGroup E] [NormedSpace ℝ E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace ℝ F] [InnerProductSpace' ℝ F] {G : Type u_8} [NormedAddCommGroup G] [NormedSpace ℝ G] [InnerProductSpace' ℝ G] [CompleteSpace F] [CompleteSpace G] {f : E β†’ F β†’ G} {f' : E β†’ F β†’ G β†’ F} (hf : βˆ€ (x : E) (y : F), HasAdjFDerivAt ℝ (f x) (f' x y) y) (hf' : ContDiff ℝ (n + 1) β†Ώf) :
      ContDiff ℝ n fun (x : E Γ— F Γ— G) => f' x.1 x.2.1 x.2.2
      theorem gradient_eq_adjFDeriv {π•œ : Type u_1} [RCLike π•œ] {U : Type u_5} [NormedAddCommGroup U] [InnerProductSpace π•œ U] [CompleteSpace U] {f : U β†’ π•œ} {x : U} (hf : DifferentiableAt π•œ f x) :
      gradient f x = adjFDeriv π•œ f x 1
      theorem hasAdjFDerivAt_id {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] (x : E) :
      HasAdjFDerivAt π•œ (fun (x : E) => x) (fun (dx : E) => dx) x
      theorem adjFDeriv_id {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] :
      (adjFDeriv π•œ fun (x : E) => x) = fun (x dx : E) => dx
      theorem hasAdjFDerivAt_const {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] (x : E) (y : F) :
      HasAdjFDerivAt π•œ (fun (x : E) => y) (fun (x : F) => 0) x
      theorem adjFDeriv_const {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] (y : F) :
      (adjFDeriv π•œ fun (x : E) => y) = fun (x : E) (x : F) => 0
      theorem HasAdjFDerivAt.comp {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] {f : F β†’ G} {g : E β†’ F} {f' : G β†’ F} {g' : F β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' (g x)) (hg : HasAdjFDerivAt π•œ g g' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => f (g x)) (fun (dz : G) => g' (f' dz)) x
      theorem adjFDeriv_comp {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] [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 : E) => f (g x)) x = fun (dy : G) => adjFDeriv π•œ g x (adjFDeriv π•œ f (g x) dy)
      theorem HasAdjFDerivAt.prodMk {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] {f : E β†’ F} {g : E β†’ G} {f' : F β†’ E} {g' : G β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) (hg : HasAdjFDerivAt π•œ g g' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => (f x, g x)) (fun (dyz : F Γ— G) => f' dyz.1 + g' dyz.2) x
      theorem HasAjdFDerivAt.fst {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] {f : E β†’ F Γ— G} {f' : F Γ— G β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => (f x).1) (fun (dy : F) => f' (dy, 0)) x
      theorem adjFDeriv_fst {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : E β†’ F Γ— G} {x : E} (hf : DifferentiableAt π•œ f x) :
      adjFDeriv π•œ (fun (x : E) => (f x).1) x = fun (dy : F) => adjFDeriv π•œ f x (dy, 0)
      theorem HasAjdFDerivAt.snd {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] {f : E β†’ F Γ— G} {f' : F Γ— G β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => (f x).2) (fun (dz : G) => f' (0, dz)) x
      theorem adjFDeriv_snd {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : E β†’ F Γ— G} {x : E} (hf : DifferentiableAt π•œ f x) :
      adjFDeriv π•œ (fun (x : E) => (f x).2) x = fun (dy : G) => adjFDeriv π•œ f x (0, dy)
      theorem hasAdjFDerivAt_uncurry {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] {f : E β†’ F β†’ G} {xy : E Γ— F} {fx' : G β†’ E} {fy' : G β†’ F} (hf : DifferentiableAt π•œ (β†Ώf) xy) (hfx : HasAdjFDerivAt π•œ (fun (x : E) => f x xy.2) fx' xy.1) (hfy : HasAdjFDerivAt π•œ (fun (x : F) => f xy.1 x) fy' xy.2) :
      HasAdjFDerivAt π•œ (β†Ώf) (fun (dz : G) => (fx' dz, fy' dz)) xy
      theorem adjFDeriv_uncurry {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace π•œ G] [InnerProductSpace' π•œ G] [CompleteSpace E] [CompleteSpace F] [CompleteSpace G] {f : E β†’ F β†’ G} {xy : E Γ— F} (hfx : DifferentiableAt π•œ (β†Ώf) xy) :
      adjFDeriv π•œ (β†Ώf) xy = fun (dz : G) => (adjFDeriv π•œ (fun (x : E) => f x xy.2) xy.1 dz, adjFDeriv π•œ (fun (x : F) => f xy.1 x) xy.2 dz)
      theorem HasAdjFDerivAt.neg {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {f : E β†’ F} {f' : F β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => -f x) (fun (dy : F) => -f' dy) x
      theorem adjFDeriv_neg {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] [CompleteSpace E] [CompleteSpace F] {f : E β†’ F} {x : E} (hf : DifferentiableAt π•œ f x) :
      adjFDeriv π•œ (fun (x : E) => -f x) x = fun (dy : F) => -adjFDeriv π•œ f x dy
      theorem HasAjdFDerivAt.add {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {f g : E β†’ F} {f' g' : F β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) (hg : HasAdjFDerivAt π•œ g g' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => f x + g x) (fun (dy : F) => f' dy + g' dy) x
      theorem adjFDeriv_add {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] [CompleteSpace E] [CompleteSpace F] {f g : E β†’ F} {x : E} (hf : DifferentiableAt π•œ f x) (hg : DifferentiableAt π•œ g x) :
      adjFDeriv π•œ (fun (x : E) => f x + g x) x = fun (dy : F) => adjFDeriv π•œ f x dy + adjFDeriv π•œ g x dy
      theorem HasAdjFDerivAt.sub {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {f g : E β†’ F} {f' g' : F β†’ E} {x : E} (hf : HasAdjFDerivAt π•œ f f' x) (hg : HasAdjFDerivAt π•œ g g' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => f x - g x) (fun (dy : F) => f' dy - g' dy) x
      theorem adjFDeriv_sub {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] [CompleteSpace E] [CompleteSpace F] {f g : E β†’ F} {x : E} (hf : DifferentiableAt π•œ f x) (hg : DifferentiableAt π•œ g x) :
      adjFDeriv π•œ (fun (x : E) => f x - g x) x = fun (dy : F) => adjFDeriv π•œ f x dy - adjFDeriv π•œ g x dy
      theorem HasAdjFDerivAt.smul {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] {x : E} {f : E β†’ F} {g : E β†’ π•œ} {f' : F β†’ E} {g' : π•œ β†’ E} (hf : HasAdjFDerivAt π•œ f f' x) (hg : HasAdjFDerivAt π•œ g g' x) :
      HasAdjFDerivAt π•œ (fun (x : E) => g x β€’ f x) (fun (dy : F) => (starRingEnd π•œ) (g x) β€’ f' dy + g' ((starRingEnd π•œ) (inner π•œ dy (f x)))) x
      theorem adjFDeriv_smul {π•œ : Type u_1} [RCLike π•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace π•œ E] [InnerProductSpace' π•œ E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace π•œ F] [InnerProductSpace' π•œ F] [CompleteSpace E] [CompleteSpace F] {f : E β†’ F} {g : E β†’ π•œ} {x : E} (hf : DifferentiableAt π•œ f x) (hg : DifferentiableAt π•œ g x) :
      adjFDeriv π•œ (fun (x : E) => g x β€’ f x) x = fun (dy : F) => (starRingEnd π•œ) (g x) β€’ adjFDeriv π•œ f x dy + adjFDeriv π•œ g x ((starRingEnd π•œ) (inner π•œ dy (f x)))