PhysLean Documentation

PhysLean.Mathematics.VariationalCalculus.HasVarAdjDeriv

Variational adjoint derivative #

Variational adjoint derivative of F at u is a generalization of (fderiv ℝ F u).adjoint to function spaces. In particular, variational gradient is an analog of gradient F u := (fderiv ℝ F u).adjoint 1.

The definition of HasVarAdjDerivAt is constructed exactly such that we can prove composition theorem saying

  HasVarAdjDerivAt F F' (G u)) → HasVarAdjDerivAt G G' u →
    HasVarAdjDerivAt (F ∘ G) (G' ∘ F') u

This theorem is the main tool to mechanistically compute variational gradient.

structure HasVarAdjDerivAt {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {Y : Type u_2} [NormedAddCommGroup Y] [NormedSpace Y] [MeasureTheory.MeasureSpace Y] {U : Type u_3} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_4} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] (F : (XU)YV) (F' : (YV)XU) (u : XU) :

This is analogue of saying F' = (fderiv ℝ F u).adjoint.

This definition is useful as we can prove composition theorem for it and HasVarGradient F grad u can be computed by grad := F' (fun _ => 1).

Instances For
    theorem HasVarAdjDerivAt.apply_smooth_of_smooth {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] {F : (XU)XV} {F' : (XV)XU} {u v : XU} (h : HasVarAdjDerivAt F F' u) (hv : ContDiff (↑) v) :
    ContDiff (↑) (F v)
    theorem HasVarAdjDerivAt.apply_smooth_self {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] {F : (XU)XV} {F' : (XV)XU} {u : XU} (h : HasVarAdjDerivAt F F' u) :
    ContDiff (↑) (F u)
    theorem HasVarAdjDerivAt.smooth_R {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] {F : (XU)XV} {F' : (XV)XU} {u : XU} (h : HasVarAdjDerivAt F F' u) {φ : XU} ( : ContDiff φ) (x : X) :
    ContDiff fun (s : ) => F (fun (x' : X) => φ s x') x
    theorem HasVarAdjDerivAt.smooth_linear {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] {x : X} {F : (XU)XV} {F' : (XV)XU} {u : XU} (h : HasVarAdjDerivAt F F' u) {φ : XU} ( : ContDiff φ) :
    ContDiff fun (s' : ) => F (fun (x : X) => φ 0 x + s' deriv (fun (x_1 : ) => φ x_1 x) 0) x
    theorem HasVarAdjDerivAt.differentiable_linear {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] {F : (XU)XV} {F' : (XV)XU} {u : XU} (h : HasVarAdjDerivAt F F' u) {φ : XU} ( : ContDiff φ) (x : X) :
    Differentiable fun (s' : ) => F (fun (x : X) => φ 0 x + s' deriv (fun (x_1 : ) => φ x_1 x) 0) x
    theorem HasVarAdjDerivAt.id {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] (u : XU) (hu : ContDiff (↑) u) :
    HasVarAdjDerivAt (fun (φ : XU) => φ) (fun (ψ : XU) => ψ) u
    theorem HasVarAdjDerivAt.const {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] (u : XU) (v : XV) (hu : ContDiff (↑) u) (hv : ContDiff (↑) v) :
    HasVarAdjDerivAt (fun (x : XU) => v) (fun (x : XV) => 0) u
    theorem HasVarAdjDerivAt.comp {X : Type u_5} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {Y : Type u_1} [NormedAddCommGroup Y] [NormedSpace Y] [MeasureTheory.MeasureSpace Y] {Z : Type u_2} [NormedAddCommGroup Z] [NormedSpace Z] [MeasureTheory.MeasureSpace Z] {U : Type u_6} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] {W : Type u_4} [NormedAddCommGroup W] [NormedSpace W] [InnerProductSpace' W] {F : (YV)ZW} {G : (XU)YV} {u : XU} {F' : (ZW)YV} {G' : (YV)XU} (hF : HasVarAdjDerivAt F F' (G u)) (hG : HasVarAdjDerivAt G G' u) :
    HasVarAdjDerivAt (fun (u : XU) => F (G u)) (fun (ψ : ZW) => G' (F' ψ)) u
    theorem HasVarAdjDerivAt.deriv' (u : ) (hu : ContDiff (↑) u) :
    HasVarAdjDerivAt (fun (φ : ) => deriv φ) (fun (φ : ) (x : ) => -deriv φ x) u
    theorem HasVarAdjDerivAt.deriv {U : Type u_1} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] (F : (U)) (F' : ()U) (u : U) (hF : HasVarAdjDerivAt F F' u) :
    HasVarAdjDerivAt (fun (φ : U) => deriv (F φ)) (fun (ψ : ) (x : ) => F' (fun (x' : ) => -deriv ψ x') x) u
    theorem HasVarAdjDerivAt.fmap {X : Type u_3} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_1} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_2} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] [CompleteSpace U] [CompleteSpace V] (f : XUV) {f' : XUVU} (u : XU) (hu : ContDiff (↑) u) (hf' : ContDiff f) (hf : ∀ (x : X) (u : U), HasAdjFDerivAt (f x) (f' x u) u) :
    HasVarAdjDerivAt (fun (φ : XU) (x : X) => f x (φ x)) (fun (ψ : XV) (x : X) => f' x (u x) (ψ x)) u
    theorem HasVarAdjDerivAt.neg {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] (F : (XU)XV) (F' : (XV)XU) (u : XU) (hF : HasVarAdjDerivAt F F' u) :
    HasVarAdjDerivAt (fun (φ : XU) (x : X) => -F φ x) (fun (ψ : XV) (x : X) => -F' ψ x) u
    theorem HasVarAdjDerivAt.add {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] {U : Type u_2} [NormedAddCommGroup U] [NormedSpace U] [InnerProductSpace' U] {V : Type u_3} [NormedAddCommGroup V] [NormedSpace V] [InnerProductSpace' V] [OpensMeasurableSpace X] [MeasureTheory.IsFiniteMeasureOnCompacts MeasureTheory.volume] (F G : (XU)XV) (F' G' : (XV)XU) (u : XU) (hF : HasVarAdjDerivAt F F' u) (hG : HasVarAdjDerivAt G G' u) :
    HasVarAdjDerivAt (fun (φ : XU) (x : X) => F φ x + G φ x) (fun (ψ : XV) (x : X) => F' ψ x + G' ψ x) u
    theorem HasVarAdjDerivAt.mul {X : Type u_1} [NormedAddCommGroup X] [NormedSpace X] [MeasureTheory.MeasureSpace X] [OpensMeasurableSpace X] [MeasureTheory.IsFiniteMeasureOnCompacts MeasureTheory.volume] (F G F' G' : (X)X) (u : X) (hF : HasVarAdjDerivAt F F' u) (hG : HasVarAdjDerivAt G G' u) :
    HasVarAdjDerivAt (fun (φ : X) (x : X) => F φ x * G φ x) (fun (ψ : X) (x : X) => F' (fun (x' : X) => ψ x' * G u x') x + G' (fun (x' : X) => F u x' * ψ x') x) u