Theorem: SciLean.parDistribDeriv.comp_rule (SciLean/Core/Distribution/ParametricDistribDeriv.lean)

State before:
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
⊢ (parDistribDeriv fun x => f (g x)) = fun x dx =>
    let ydy := ∂> g x dx;
    parDistribDeriv f ydy.1 ydy.2
Tactic:
funext x dx
State after:
case h.h
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
⊢ parDistribDeriv (fun x => f (g x)) x dx =
    let ydy := ∂> g x dx;
    parDistribDeriv f ydy.1 ydy.2

State before:
case h.h
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
⊢ parDistribDeriv (fun x => f (g x)) x dx =
    let ydy := ∂> g x dx;
    parDistribDeriv f ydy.1 ydy.2
Tactic:
ext φ
State after:
case h.h.a
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
φ : 𝒟 Z
⊢ (parDistribDeriv (fun x => f (g x)) x dx) φ =
    (let ydy := ∂> g x dx;
      parDistribDeriv f ydy.1 ydy.2)
      φ

State before:
case h.h.a
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
φ : 𝒟 Z
⊢ (parDistribDeriv (fun x => f (g x)) x dx) φ =
    (let ydy := ∂> g x dx;
      parDistribDeriv f ydy.1 ydy.2)
      φ
Tactic:
unfold parDistribDeriv
State after:
case h.h.a
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
φ : 𝒟 Z
⊢ (fun φ ⊸ ∂ (x':=x;dx), ((fun x => f (g x)) x') φ) φ =
    (let ydy := ∂> g x dx;
      fun φ ⊸ ∂ (x':=ydy.1;ydy.2), (f x') φ)
      φ

State before:
case h.h.a
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
φ : 𝒟 Z
⊢ (fun φ ⊸ ∂ (x':=x;dx), ((fun x => f (g x)) x') φ) φ =
    (let ydy := ∂> g x dx;
      fun φ ⊸ ∂ (x':=ydy.1;ydy.2), (f x') φ)
      φ
Tactic:
simp[hg]
State after:
case h.h.a
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
φ : 𝒟 Z
⊢ ∂ (x':=x;dx), (f (g x')) φ = ∂ (x':=(∂> g x dx).1;(∂> g x dx).2), (f x') φ

State before:
case h.h.a
R : Type u_1
inst✝⁹ : RealScalar R
W : Type ?u.67507
inst✝⁸ : Vec R W
X : Type u_5
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_3
inst✝¹ : Vec R U
V : Type ?u.69161
inst✝ : Vec R V
f : Y → 𝒟'(Z, U)
g : X → Y
hf : DistribDifferentiable f
hg : CDifferentiable R g
x dx : X
φ : 𝒟 Z
⊢ ∂ (x':=x;dx), (f (g x')) φ = ∂ (x':=(∂> g x dx).1;(∂> g x dx).2), (f x') φ
Tactic:
sorry_proof
State after:
no goals