Theorem: SciLean.Bind.bind.arg_fx.DistribDifferentiable_rule (SciLean/Core/Distribution/ParametricDistribDeriv.lean)

State before:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
⊢ DistribDifferentiable fun x => Distribution.bind (g x) (f x) L
Tactic:
intro x
State after:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
⊢ DistribDifferentiableAt (fun x => Distribution.bind (g x) (f x) L) x

State before:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
⊢ DistribDifferentiableAt (fun x => Distribution.bind (g x) (f x) L) x
Tactic:
unfold DistribDifferentiableAt
State after:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
⊢ ∀ (φ : X → 𝒟 Z),
    CDifferentiableAt R φ x → CDifferentiableAt R (fun x => ((fun x => Distribution.bind (g x) (f x) L) x) (φ x)) x

State before:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
⊢ ∀ (φ : X → 𝒟 Z),
    CDifferentiableAt R φ x → CDifferentiableAt R (fun x => ((fun x => Distribution.bind (g x) (f x) L) x) (φ x)) x
Tactic:
intro φ hφ
State after:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
φ : X → 𝒟 Z
hφ : CDifferentiableAt R φ x
⊢ CDifferentiableAt R (fun x => ((fun x => Distribution.bind (g x) (f x) L) x) (φ x)) x

State before:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
φ : X → 𝒟 Z
hφ : CDifferentiableAt R φ x
⊢ CDifferentiableAt R (fun x => ((fun x => Distribution.bind (g x) (f x) L) x) (φ x)) x
Tactic:
simp
State after:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
φ : X → 𝒟 Z
hφ : CDifferentiableAt R φ x
⊢ CDifferentiableAt R (fun x => ⟪g x, fun x' => extAction' (f x x') ⇑(φ x)⟫[L]) x

State before:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type u_6
inst✝⁸ : Vec R W
X : Type u_7
inst✝⁷ : Vec R X
inst✝⁶ : MeasureSpace X
Y : Type u_4
inst✝⁵ : Vec R Y
inst✝⁴ : Module ℝ Y
Z : Type u_2
inst✝³ : Vec R Z
inst✝² : Module ℝ Z
U : Type u_5
inst✝¹ : Vec R U
V : Type u_3
inst✝ : Vec R V
f : X → Y → 𝒟'(Z, V)
g : X → 𝒟'(Y, U)
L : U ⊸[R] V ⊸[R] W
hf :
  DistribDifferentiable fun x =>
    match x with
    | (x, y) => f x y
hg : DistribDifferentiable g
x : X
φ : X → 𝒟 Z
hφ : CDifferentiableAt R φ x
⊢ CDifferentiableAt R (fun x => ⟪g x, fun x' => extAction' (f x x') ⇑(φ x)⟫[L]) x
Tactic:
sorry_proof
State after:
no goals