Theorem: SciLean.Scalar.exp.arg_x.fwdDeriv_rule (SciLean/Core/Functions/Exp.lean)

State before:
R : Type u_3
C : Type u_1
inst✝³ : Scalar R C
inst✝² : RealScalar R
W : Type u_2
inst✝¹ : Vec C W
U : Type ?u.737
inst✝ : SemiInnerProductSpace C U
x : W → C
hx : CDifferentiable C x
⊢ (fwdDeriv C fun w => exp (x w)) = fun w dw =>
    let xdx := fwdDeriv C x w dw;
    let e := exp xdx.1;
    (e, xdx.2 * e)
Tactic:
unfold fwdDeriv
State after:
R : Type u_3
C : Type u_1
inst✝³ : Scalar R C
inst✝² : RealScalar R
W : Type u_2
inst✝¹ : Vec C W
U : Type ?u.737
inst✝ : SemiInnerProductSpace C U
x : W → C
hx : CDifferentiable C x
⊢ (fun x_1 dx => ((fun w => exp (x w)) x_1, cderiv C (fun w => exp (x w)) x_1 dx)) = fun w dw =>
    let xdx := (x w, cderiv C x w dw);
    let e := exp xdx.1;
    (e, xdx.2 * e)

State before:
R : Type u_3
C : Type u_1
inst✝³ : Scalar R C
inst✝² : RealScalar R
W : Type u_2
inst✝¹ : Vec C W
U : Type ?u.737
inst✝ : SemiInnerProductSpace C U
x : W → C
hx : CDifferentiable C x
⊢ (fun x_1 dx => ((fun w => exp (x w)) x_1, cderiv C (fun w => exp (x w)) x_1 dx)) = fun w dw =>
    let xdx := (x w, cderiv C x w dw);
    let e := exp xdx.1;
    (e, xdx.2 * e)
Tactic:
fun_trans
State after:
R : Type u_3
C : Type u_1
inst✝³ : Scalar R C
inst✝² : RealScalar R
W : Type u_2
inst✝¹ : Vec C W
U : Type ?u.737
inst✝ : SemiInnerProductSpace C U
x : W → C
hx : CDifferentiable C x
⊢ (fun x_1 dx => (exp (x x_1), (fwdDeriv C (fun w => x w) x_1 dx).2 * exp (fwdDeriv C (fun w => x w) x_1 dx).1)) =
    fun w dw => (exp (x w), cderiv C x w dw * exp (x w))

State before:
R : Type u_3
C : Type u_1
inst✝³ : Scalar R C
inst✝² : RealScalar R
W : Type u_2
inst✝¹ : Vec C W
U : Type ?u.737
inst✝ : SemiInnerProductSpace C U
x : W → C
hx : CDifferentiable C x
⊢ (fun x_1 dx => (exp (x x_1), (fwdDeriv C (fun w => x w) x_1 dx).2 * exp (fwdDeriv C (fun w => x w) x_1 dx).1)) =
    fun w dw => (exp (x w), cderiv C x w dw * exp (x w))
Tactic:
rfl
State after:
no goals