Theorem: SciLean.fwdDerivM.const_rule (SciLean/Core/Monads/FwdDerivMonad.lean)

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
⊢ (fwdDerivM K fun x => y) = fun x x => fwdDerivValM K y
Tactic:
have h : (fun _ : X => y)
         =
         fun _ : X => pure () >>= fun _ => y := by simp
State after:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fwdDerivM K fun x => y) = fun x x => fwdDerivValM K y

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fwdDerivM K fun x => y) = fun x x => fwdDerivValM K y
Tactic:
rw[h]
State after:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fwdDerivM K fun x => do
      pure ()
      y) =
    fun x x => fwdDerivValM K y

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fwdDerivM K fun x => do
      pure ()
      y) =
    fun x x => fwdDerivValM K y
Tactic:
rw[fwdDerivM_bind]
State after:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fun x dx => do
      let ydy ← fwdDerivM K (fun x => pure ()) x dx
      fwdDerivM K (fun x => y) ydy.1 ydy.2) =
    fun x x => fwdDerivValM K y

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fun x dx => do
      let ydy ← fwdDerivM K (fun x => pure ()) x dx
      fwdDerivM K (fun x => y) ydy.1 ydy.2) =
    fun x x => fwdDerivValM K y

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()
Tactic:
rw[fwdDerivM_pure]
State after:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fun x dx => do
      let ydy ← (fun x dx => pure (fwdDeriv K (fun x => ()) x dx)) x dx
      fwdDerivM K (fun x => y) ydy.1 ydy.2) =
    fun x x => fwdDerivValM K y

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fun x dx => do
      let ydy ← (fun x dx => pure (fwdDeriv K (fun x => ()) x dx)) x dx
      fwdDerivM K (fun x => y) ydy.1 ydy.2) =
    fun x x => fwdDerivValM K y

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()
Tactic:
fun_trans
State after:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fun x dx => fwdDerivM K (fun x => y) () PUnit.unit) = fun x x => fwdDerivValM K y

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ (fun x dx => fwdDerivM K (fun x => y) () PUnit.unit) = fun x x => fwdDerivValM K y

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()
Tactic:
simp [fwdDerivValM]
State after:
case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()

State before:
case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()
Tactic:
fun_prop
State after:
case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()

State before:
case hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => y

case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()
Tactic:
apply hy
State after:
case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()

State before:
case hg
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiableM K fun x => pure ()
Tactic:
apply CDifferentiableM_pure
State after:
case hg.hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()

State before:
case hg.hf
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ CDifferentiable K fun x => ()
Tactic:
fun_prop
State after:
no goals

State before:
ι : Sort ?u.8988
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'
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)
y : m Y
hy : CDifferentiableValM K y
⊢ (fun x => y) = fun x => do
    pure ()
    y
Tactic:
simp
State after:
no goals