internlm/Lean-Github huggingface dataset:
Theorem: MonadState.get.arg.fwdDerivValM_rule
Proof state before:
case h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type ?u.45496
inst✝² : Vec K X
Y : Type ?u.45507
inst✝¹ : Vec K Y
Z : Type ?u.45518
inst✝ : Vec K Z
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (xs.2, xs.2)) ((), x✝.1) ((), x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure (x✝, x✝)
Tactic:
fun_trans
Proof state after:
no goals
Theorem: MonadStateOf.set.arg_a0.CDifferentiableM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.49480
inst✝¹ : Vec K Y
Z : Type ?u.49491
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
⊢ CDifferentiableM K fun x => set (s x)
Tactic:
simp[set, StateT.set, CDifferentiableValM, CDifferentiableM]
Proof state after:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.49480
inst✝¹ : Vec K Y
Z : Type ?u.49491
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
⊢ CDifferentiableM K fun xs => pure (PUnit.unit, s xs.1)
Theorem: MonadStateOf.set.arg_a0.CDifferentiableM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.49480
inst✝¹ : Vec K Y
Z : Type ?u.49491
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
⊢ CDifferentiableM K fun xs => pure (PUnit.unit, s xs.1)
Tactic:
fun_prop
Proof state after:
no goals
Theorem: MonadStateOf.set.arg_a0.fwdDerivM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
⊢ (fwdDerivM K fun x => set (s x)) = fun x dx =>
    let sds := fwdDeriv K s x dx;
    do
    set sds
    pure ((), ())
Tactic:
funext
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
x✝² x✝¹ : X
x✝ : S × S
⊢ fwdDerivM K (fun x => set (s x)) x✝² x✝¹ x✝ =
    (let sds := fwdDeriv K s x✝² x✝¹;
      do
      set sds
      pure ((), ()))
      x✝
Theorem: MonadStateOf.set.arg_a0.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
x✝² x✝¹ : X
x✝ : S × S
⊢ fwdDerivM K (fun x => set (s x)) x✝² x✝¹ x✝ =
    (let sds := fwdDeriv K s x✝² x✝¹;
      do
      set sds
      pure ((), ()))
      x✝
Tactic:
simp[set, StateT.set,fwdDerivM, bind,Bind.bind, StateT.bind]
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
x✝² x✝¹ : X
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (PUnit.unit, s xs.1)) (x✝², x✝.1) (x✝¹, x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure ((), ()) (fwdDeriv K s x✝² x✝¹)
Theorem: MonadStateOf.set.arg_a0.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
x✝² x✝¹ : X
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (PUnit.unit, s xs.1)) (x✝², x✝.1) (x✝¹, x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure ((), ()) (fwdDeriv K s x✝² x✝¹)
Tactic:
fun_trans
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
x✝² x✝¹ : X
x✝ : S × S
⊢ pure ((PUnit.unit, PUnit.unit), fwdDeriv K (fun x0 => s x0) x✝² x✝¹) = pure ((), ()) (fwdDeriv K s x✝² x✝¹)
Theorem: MonadStateOf.set.arg_a0.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.51058
inst✝¹ : Vec K Y
Z : Type ?u.51069
inst✝ : Vec K Z
s : X → S
ha0 : CDifferentiable K s
x✝² x✝¹ : X
x✝ : S × S
⊢ pure ((PUnit.unit, PUnit.unit), fwdDeriv K (fun x0 => s x0) x✝² x✝¹) = pure ((), ()) (fwdDeriv K s x✝² x✝¹)
Tactic:
congr
Proof state after:
no goals
Theorem: modifyThe.arg_f.CDifferentiableM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.57775
inst✝¹ : Vec K Y
Z : Type ?u.57786
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ CDifferentiableM K fun x => modifyThe S (f x)
Tactic:
simp[modifyThe, MonadStateOf.modifyGet, StateT.modifyGet, CDifferentiableValM, CDifferentiableM]
Proof state after:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.57775
inst✝¹ : Vec K Y
Z : Type ?u.57786
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ CDifferentiableM K fun xs => pure (PUnit.unit, f xs.1 xs.2)
Theorem: modifyThe.arg_f.CDifferentiableM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.57775
inst✝¹ : Vec K Y
Z : Type ?u.57786
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ CDifferentiableM K fun xs => pure (PUnit.unit, f xs.1 xs.2)
Tactic:
fun_prop
Proof state after:
no goals
Theorem: modifyThe.arg_f.fwdDerivM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ (fwdDerivM K fun x => modifyThe S (f x)) = fun x dx => do
    modifyThe (S × S) fun sds =>
        let sds := fwdDeriv K (fun xs => f xs.1 xs.2) (x, sds.1) (dx, sds.2);
        sds
    pure ((), ())
Tactic:
funext
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ fwdDerivM K (fun x => modifyThe S (f x)) x✝² x✝¹ x✝ =
    ((modifyThe (S × S) fun sds =>
          let sds := fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², sds.1) (x✝¹, sds.2);
          sds) >>=
        fun x => pure ((), ()))
      x✝
Theorem: modifyThe.arg_f.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ fwdDerivM K (fun x => modifyThe S (f x)) x✝² x✝¹ x✝ =
    ((modifyThe (S × S) fun sds =>
          let sds := fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², sds.1) (x✝¹, sds.2);
          sds) >>=
        fun x => pure ((), ()))
      x✝
Tactic:
simp[modifyThe, modifyGet, MonadStateOf.modifyGet, StateT.modifyGet,fwdDerivM,bind,Bind.bind, StateT.bind]
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (PUnit.unit, f xs.1 xs.2)) (x✝², x✝.1) (x✝¹, x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure ((), ()) (fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², x✝.1) (x✝¹, x✝.2))
Theorem: modifyThe.arg_f.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (PUnit.unit, f xs.1 xs.2)) (x✝², x✝.1) (x✝¹, x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure ((), ()) (fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², x✝.1) (x✝¹, x✝.2))
Tactic:
fun_trans
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ pure ((PUnit.unit, PUnit.unit), fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2)) =
    pure ((), ()) (fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2))
Theorem: modifyThe.arg_f.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.59537
inst✝¹ : Vec K Y
Z : Type ?u.59548
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ pure ((PUnit.unit, PUnit.unit), fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2)) =
    pure ((), ()) (fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2))
Tactic:
congr
Proof state after:
no goals
Theorem: modify.arg_f.CDifferentiableM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.66517
inst✝¹ : Vec K Y
Z : Type ?u.66528
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ CDifferentiableM K fun x => modify (f x)
Tactic:
simp[modify, modifyGet, MonadStateOf.modifyGet, StateT.modifyGet, CDifferentiableValM, CDifferentiableM]
Proof state after:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.66517
inst✝¹ : Vec K Y
Z : Type ?u.66528
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ CDifferentiableM K fun xs => pure (PUnit.unit, f xs.1 xs.2)
Theorem: modify.arg_f.CDifferentiableM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.66517
inst✝¹ : Vec K Y
Z : Type ?u.66528
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ CDifferentiableM K fun xs => pure (PUnit.unit, f xs.1 xs.2)
Tactic:
fun_prop
Proof state after:
no goals
Theorem: modify.arg_f.fwdDerivM_rule
Proof state before:
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
⊢ (fwdDerivM K fun x => modify (f x)) = fun x dx => do
    modify fun sds =>
        let sds := fwdDeriv K (fun xs => f xs.1 xs.2) (x, sds.1) (dx, sds.2);
        sds
    pure ((), ())
Tactic:
funext
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ fwdDerivM K (fun x => modify (f x)) x✝² x✝¹ x✝ =
    ((modify fun sds =>
          let sds := fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², sds.1) (x✝¹, sds.2);
          sds) >>=
        fun x => pure ((), ()))
      x✝
Theorem: modify.arg_f.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ fwdDerivM K (fun x => modify (f x)) x✝² x✝¹ x✝ =
    ((modify fun sds =>
          let sds := fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², sds.1) (x✝¹, sds.2);
          sds) >>=
        fun x => pure ((), ()))
      x✝
Tactic:
simp[modify, modifyGet, MonadStateOf.modifyGet, StateT.modifyGet,fwdDerivM,bind,Bind.bind, StateT.bind]
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (PUnit.unit, f xs.1 xs.2)) (x✝², x✝.1) (x✝¹, x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure ((), ()) (fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², x✝.1) (x✝¹, x✝.2))
Theorem: modify.arg_f.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ (do
      let r ← fwdDerivM K (fun xs => pure (PUnit.unit, f xs.1 xs.2)) (x✝², x✝.1) (x✝¹, x✝.2)
      pure ((r.1.1, r.2.1), r.1.2, r.2.2)) =
    pure ((), ()) (fwdDeriv K (fun xs => f xs.1 xs.2) (x✝², x✝.1) (x✝¹, x✝.2))
Tactic:
fun_trans
Proof state after:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ pure ((PUnit.unit, PUnit.unit), fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2)) =
    pure ((), ()) (fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2))
Theorem: modify.arg_f.fwdDerivM_rule
Proof state before:
case h.h.h
K : Type
inst✝⁹ : RCLike K
m : Type → Type
m' : outParam (Type → Type)
inst✝⁸ : Monad m
inst✝⁷ : Monad m'
inst✝⁶ : FwdDerivMonad K m m'
inst✝⁵ : LawfulMonad m
inst✝⁴ : LawfulMonad m'
S : Type
inst✝³ : Vec K S
X : Type
inst✝² : Vec K X
Y : Type ?u.68298
inst✝¹ : Vec K Y
Z : Type ?u.68309
inst✝ : Vec K Z
f : X → S → S
ha0 : CDifferentiable K fun xs => f xs.1 xs.2
x✝² x✝¹ : X
x✝ : S × S
⊢ pure ((PUnit.unit, PUnit.unit), fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2)) =
    pure ((), ()) (fwdDeriv K (fun x => f x.1 x.2) (x✝², x✝.1) (x✝¹, x✝.2))
Tactic:
congr
Proof state after:
no goals
Theorem: getThe.arg.HasAdjDiffValM_rule
Proof 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 ?u.200492
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.200503
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.200514
inst✝ : SemiInnerProductSpace K Z
⊢ HasAdjDiffValM K (getThe S)
Tactic:
simp[getThe, MonadStateOf.get, StateT.get,HasAdjDiffValM,HasAdjDiffM]
Proof 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 ?u.200492
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.200503
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.200514
inst✝ : SemiInnerProductSpace K Z
⊢ HasAdjDiffM K fun xs => pure (xs.2, xs.2)
Theorem: getThe.arg.HasAdjDiffValM_rule
Proof 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 ?u.200492
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.200503
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.200514
inst✝ : SemiInnerProductSpace K Z
⊢ HasAdjDiffM K fun xs => pure (xs.2, xs.2)
Tactic:
fun_prop
Proof state after:
no goals
Theorem: getThe.arg.revDerivValM_rule
Proof 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 ?u.202023
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.202034
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.202045
inst✝ : SemiInnerProductSpace K Z
⊢ revDerivValM K (getThe S) = do
    let __do_lift ← getThe S
    pure (__do_lift, fun ds => modifyThe S fun ds' => ds + ds')
Tactic:
funext
Proof state after:
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.202023
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.202034
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.202045
inst✝ : SemiInnerProductSpace K Z
x✝ : S
⊢ revDerivValM K (getThe S) x✝ =
    (getThe S >>= fun __do_lift => pure (__do_lift, fun ds => modifyThe S fun ds' => ds + ds')) x✝
Theorem: getThe.arg.revDerivValM_rule
Proof state before:
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.202023
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.202034
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.202045
inst✝ : SemiInnerProductSpace K Z
x✝ : S
⊢ revDerivValM K (getThe S) x✝ =
    (getThe S >>= fun __do_lift => pure (__do_lift, fun ds => modifyThe S fun ds' => ds + ds')) x✝
Tactic:
simp[getThe, MonadStateOf.get, StateT.get,revDerivValM, revDerivM, pure, StateT.pure, bind, StateT.bind, set, StateT.set, modifyThe, modify, MonadStateOf.modifyGet, StateT.modifyGet]
Proof state after:
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.202023
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.202034
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.202045
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✝)
Theorem: getThe.arg.revDerivValM_rule
Proof state before:
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.202023
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.202034
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.202045
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✝)
Tactic:
fun_trans
Proof state after:
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.202023
inst✝² : SemiInnerProductSpace K X
Y : Type ?u.202034
inst✝¹ : SemiInnerProductSpace K Y
Z : Type ?u.202045
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✝)