fun_trans
case h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : RevDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : SemiInnerProductSpace K S
X : Type ?u.221038
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.221049
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.221060
inst✝ : SemiInnerProductSpace K Z
x✝ : S
⊢ (do
      let ysdf ← revDerivM K (fun xs => pure (xs.2, xs.2)) ((), x✝)
      pure ((ysdf.1.1, fun dx ds => ysdf.2 (dx, ds)), ysdf.1.2)) =
    pure ((x✝, fun ds => StateT.modifyGet fun s => (PUnit.unit, ds + s)), x✝)
case h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : RevDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : SemiInnerProductSpace K S
X : Type ?u.221038
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.221049
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.221060
inst✝ : SemiInnerProductSpace K Z
x✝ : S
⊢ pure ((x✝, fun dx ds => pure (PUnit.unit, dx + ds)), x✝) =
    pure ((x✝, fun ds => StateT.modifyGet fun s => (PUnit.unit, ds + s)), x✝)