Theorem: modify.arg_f.HasAdjDiffM_rule (SciLean/Core/Monads/StateT.lean)

State before:
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
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.263175
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.263186
inst✝ : SemiInnerProductSpace K Z
f : X → S → S
ha0 : HasAdjDiff K fun xs => f xs.1 xs.2
⊢ HasAdjDiffM K fun x => modify (f x)
Tactic:
simp[modify, modifyGet, MonadStateOf.modifyGet, StateT.modifyGet, HasAdjDiffValM, HasAdjDiffM]
State after:
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
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.263175
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.263186
inst✝ : SemiInnerProductSpace K Z
f : X → S → S
ha0 : HasAdjDiff K fun xs => f xs.1 xs.2
⊢ HasAdjDiffM K fun xs => pure (PUnit.unit, f xs.1 xs.2)

State before:
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
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.263175
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.263186
inst✝ : SemiInnerProductSpace K Z
f : X → S → S
ha0 : HasAdjDiff K fun xs => f xs.1 xs.2
⊢ HasAdjDiffM K fun xs => pure (PUnit.unit, f xs.1 xs.2)
Tactic:
fun_prop
State after:
no goals