let f := fun xy : X×Y => a1 xy.1 xy.2
ι : Sort ?u.34852
K : Type
inst✝⁹ : RCLike K
m m' : Type → Type
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
X : Type
inst✝³ : Vec K X
Y : Type
inst✝² : Vec K Y
Z : Type
inst✝¹ : Vec K Z
E : ι → Type
inst✝ : (i : ι) → Vec K (E i)
a0 : X → m Y
a1 : X → Y → m Z
ha0 : CDifferentiableM K a0
ha1 : CDifferentiableM K fun xy => a1 xy.1 xy.2
g : X → m (X × Y) :=
  fun x => do
    let y ← a0 x
    pure (x, y)
⊢ (fwdDerivM K fun x => a0 x >>= a1 x) = fun x dx => do
    let ydy ← fwdDerivM K a0 x dx
    fwdDerivM K (fun xy => a1 xy.1 xy.2) (x, ydy.1) (dx, ydy.2)
ι : Sort ?u.34852
K : Type
inst✝⁹ : RCLike K
m m' : Type → Type
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
X : Type
inst✝³ : Vec K X
Y : Type
inst✝² : Vec K Y
Z : Type
inst✝¹ : Vec K Z
E : ι → Type
inst✝ : (i : ι) → Vec K (E i)
a0 : X → m Y
a1 : X → Y → m Z
ha0 : CDifferentiableM K a0
ha1 : CDifferentiableM K fun xy => a1 xy.1 xy.2
g : X → m (X × Y) :=
  fun x => do
    let y ← a0 x
    pure (x, y)
f : X × Y → m Z := fun xy => a1 xy.1 xy.2
⊢ (fwdDerivM K fun x => a0 x >>= a1 x) = fun x dx => do
    let ydy ← fwdDerivM K a0 x dx
    fwdDerivM K (fun xy => a1 xy.1 xy.2) (x, ydy.1) (dx, ydy.2)