Theorem: SciLean.Prob.Rand.pure.arg_x.randDeriv_rule (SciLean/Modules/Prob/RandDeriv.lean)

State before:
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
⊢ (randDeriv fun w => pure (x w)) = fun w dw => dpure (x w) ((fderiv ℝ x w) dw)
Tactic:
funext w dw
State after:
case h.h
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
⊢ randDeriv (fun w => pure (x w)) w dw = dpure (x w) ((fderiv ℝ x w) dw)

State before:
case h.h
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
⊢ randDeriv (fun w => pure (x w)) w dw = dpure (x w) ((fderiv ℝ x w) dw)
Tactic:
apply DRand.ext
State after:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
⊢ ∀ (φ : X → ℝ), (randDeriv (fun w => pure (x w)) w dw).action φ = (dpure (x w) ((fderiv ℝ x w) dw)).action φ

State before:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
⊢ ∀ (φ : X → ℝ), (randDeriv (fun w => pure (x w)) w dw).action φ = (dpure (x w) ((fderiv ℝ x w) dw)).action φ
Tactic:
intro φ
State after:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
⊢ (randDeriv (fun w => pure (x w)) w dw).action φ = (dpure (x w) ((fderiv ℝ x w) dw)).action φ

State before:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
⊢ (randDeriv (fun w => pure (x w)) w dw).action φ = (dpure (x w) ((fderiv ℝ x w) dw)).action φ
Tactic:
simp (disch:=first | assumption | sorry) only
  [randDeriv, pure, Erased.out_mk, integral_dirac', dpure]
State after:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
⊢ (fderiv ℝ (fun x' => φ (x x')) w) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)

State before:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
⊢ (fderiv ℝ (fun x' => φ (x x')) w) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)
Tactic:
have h := @fderiv.comp ℝ _ _ _ _ _ _ _ _ _ _ x w φ sorry (hx w)
State after:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
h : fderiv ℝ (φ ∘ x) w = ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)
⊢ (fderiv ℝ (fun x' => φ (x x')) w) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)

State before:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
h : fderiv ℝ (φ ∘ x) w = ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)
⊢ (fderiv ℝ (fun x' => φ (x x')) w) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)
Tactic:
unfold Function.comp at h
State after:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
h : fderiv ℝ (fun x_1 => φ (x x_1)) w = ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)
⊢ (fderiv ℝ (fun x' => φ (x x')) w) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)

State before:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
h : fderiv ℝ (fun x_1 => φ (x x_1)) w = ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)
⊢ (fderiv ℝ (fun x' => φ (x x')) w) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)
Tactic:
rw[h]
State after:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
h : fderiv ℝ (fun x_1 => φ (x x_1)) w = ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)
⊢ (ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)

State before:
case h.h.a
R : Type ?u.22279
inst✝¹⁸ : RealScalar R
W : Type u_1
inst✝¹⁷ : NormedAddCommGroup W
inst✝¹⁶ : NormedSpace ℝ W
inst✝¹⁵ : NormedSpace R W
inst✝¹⁴ : MeasurableSpace W
X : Type
inst✝¹³ : NormedAddCommGroup X
inst✝¹² : NormedSpace ℝ X
inst✝¹¹ : NormedSpace R W
inst✝¹⁰ : MeasurableSpace X
Y : Type ?u.22774
inst✝⁹ : NormedAddCommGroup Y
inst✝⁸ : NormedSpace ℝ Y
inst✝⁷ : NormedSpace R W
inst✝⁶ : MeasurableSpace Y
Z : Type ?u.23013
inst✝⁵ : NormedAddCommGroup Z
inst✝⁴ : NormedSpace ℝ Z
inst✝³ : NormedSpace R W
inst✝² : MeasurableSpace Z
α : Type ?u.23252
inst✝¹ : MeasurableSpace α
β : Type ?u.23258
inst✝ : MeasurableSpace β
x : W → X
hx : Differentiable ℝ x
w dw : W
φ : X → ℝ
h : fderiv ℝ (fun x_1 => φ (x x_1)) w = ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)
⊢ (ContinuousLinearMap.comp (fderiv ℝ φ (x w)) (fderiv ℝ x w)) dw = (fderiv ℝ φ (x w)) ((fderiv ℝ x w) dw)
Tactic:
simp only [ContinuousLinearMap.coe_comp', Function.comp_apply]
State after:
no goals