internlm/Lean-Github huggingface dataset:
Theorem: Bind.bind.arg_a0a1.fwdDerivM_rule
Proof state before:
ι : 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
⊢ CDifferentiableM K fun x => do
    let y ← a0 x
    pure (x, y)
Tactic:
apply FwdDerivMonad.CDifferentiableM_pair a0 ha0
Proof state after:
no goals
Theorem: Bind.bind.arg_a0a1.fwdDerivM_rule
Proof state before:
ι : 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
hg :
  CDifferentiableM K fun x => do
    let y ← a0 x
    pure (x, y)
⊢ CDifferentiableM K f
Tactic:
fun_prop
Proof state after:
no goals
Theorem: ite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.46344
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)
c : Prop
dec : Decidable c
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
⊢ CDifferentiableM K fun x => if c then t x else e x
Tactic:
induction dec
Proof state after:
case isFalse
ι : Sort ?u.46344
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)
c : Prop
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
h✝ : ¬c
⊢ CDifferentiableM K fun x => if c then t x else e x

case isTrue
ι : Sort ?u.46344
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)
c : Prop
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
h✝ : c
⊢ CDifferentiableM K fun x => if c then t x else e x
Theorem: ite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.46344
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)
c : Prop
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
h : c
⊢ CDifferentiableM K fun x => if c then t x else e x
Tactic:
case isTrue h  => simp[ht,h]
Proof state after:
no goals
Theorem: ite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.46344
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)
c : Prop
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
h : ¬c
⊢ CDifferentiableM K fun x => if c then t x else e x
Tactic:
case isFalse h => simp[he,h]
Proof state after:
no goals
Theorem: ite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.46344
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)
c : Prop
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
h : c
⊢ CDifferentiableM K fun x => if c then t x else e x
Tactic:
simp[ht,h]
Proof state after:
no goals
Theorem: ite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.46344
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)
c : Prop
t e : X → m Y
ht : CDifferentiableM K t
he : CDifferentiableM K e
h : ¬c
⊢ CDifferentiableM K fun x => if c then t x else e x
Tactic:
simp[he,h]
Proof state after:
no goals
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.46993
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)
c : Prop
dec : Decidable c
t e : X → m Y
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y
Tactic:
induction dec
Proof state after:
case isFalse
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h✝ : ¬c
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y

case isTrue
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h✝ : c
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : c
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y
Tactic:
case isTrue h  => ext y; simp[h]
Proof state after:
no goals
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : ¬c
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y
Tactic:
case isFalse h => ext y; simp[h]
Proof state after:
no goals
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : c
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y
Tactic:
ext y
Proof state after:
case h.h
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : c
y x✝ : X
⊢ fwdDerivM K (fun x => if c then t x else e x) y x✝ = (if c then fwdDerivM K t y else fwdDerivM K e y) x✝
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
case h.h
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : c
y x✝ : X
⊢ fwdDerivM K (fun x => if c then t x else e x) y x✝ = (if c then fwdDerivM K t y else fwdDerivM K e y) x✝
Tactic:
simp[h]
Proof state after:
no goals
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : ¬c
⊢ (fwdDerivM K fun x => if c then t x else e x) = fun y => if c then fwdDerivM K t y else fwdDerivM K e y
Tactic:
ext y
Proof state after:
case h.h
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : ¬c
y x✝ : X
⊢ fwdDerivM K (fun x => if c then t x else e x) y x✝ = (if c then fwdDerivM K t y else fwdDerivM K e y) x✝
Theorem: ite.arg_te.fwdDerivM_rule
Proof state before:
case h.h
ι : Sort ?u.46993
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)
c : Prop
t e : X → m Y
h : ¬c
y x✝ : X
⊢ fwdDerivM K (fun x => if c then t x else e x) y x✝ = (if c then fwdDerivM K t y else fwdDerivM K e y) x✝
Tactic:
simp[h]
Proof state after:
no goals
Theorem: dite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.48025
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)
c : Prop
dec : Decidable c
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x
Tactic:
induction dec
Proof state after:
case isFalse
ι : Sort ?u.48025
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
h✝ : ¬c
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x

case isTrue
ι : Sort ?u.48025
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
h✝ : c
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x
Theorem: dite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.48025
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
h : c
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x
Tactic:
case isTrue h  => simp[ht,h]
Proof state after:
no goals
Theorem: dite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.48025
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
h : ¬c
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x
Tactic:
case isFalse h => simp[he,h]
Proof state after:
no goals
Theorem: dite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.48025
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
h : c
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x
Tactic:
simp[ht,h]
Proof state after:
no goals
Theorem: dite.arg_te.CDifferentiableM_rule
Proof state before:
ι : Sort ?u.48025
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
ht : ∀ (h : c), CDifferentiableM K (t h)
he : ∀ (h : ¬c), CDifferentiableM K (e h)
h : ¬c
⊢ CDifferentiableM K fun x => if h : c then t h x else e h x
Tactic:
simp[he,h]
Proof state after:
no goals
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.48749
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)
c : Prop
dec : Decidable c
t : c → X → m Y
e : ¬c → X → m Y
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y
Tactic:
induction dec
Proof state after:
case isFalse
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h✝ : ¬c
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y

case isTrue
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h✝ : c
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y
Tactic:
case isTrue h  => ext y; simp[h]
Proof state after:
no goals
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y
Tactic:
case isFalse h => ext y; simp[h]
Proof state after:
no goals
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y
Tactic:
ext y
Proof state after:
case h.h
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
y x✝ : X
⊢ fwdDerivM K (fun x => if h : c then t h x else e h x) y x✝ =
    (if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y) x✝
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
case h.h
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
y x✝ : X
⊢ fwdDerivM K (fun x => if h : c then t h x else e h x) y x✝ =
    (if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y) x✝
Tactic:
simp[h]
Proof state after:
no goals
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
⊢ (fwdDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y
Tactic:
ext y
Proof state after:
case h.h
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
y x✝ : X
⊢ fwdDerivM K (fun x => if h : c then t h x else e h x) y x✝ =
    (if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y) x✝
Theorem: dite.arg_te.fwdDerivM_rule
Proof state before:
case h.h
ι : Sort ?u.48749
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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
y x✝ : X
⊢ fwdDerivM K (fun x => if h : c then t h x else e h x) y x✝ =
    (if h : c then fwdDerivM K (t h) y else fwdDerivM K (e h) y) x✝
Tactic:
simp[h]
Proof state after:
no goals
Theorem: SciLean.HasAdjDiffM.const_rule
Proof state before:
ι : Sort ?u.4270
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'
X : Type
inst✝³ : SemiInnerProductSpace K X
Y : Type
inst✝² : SemiInnerProductSpace K Y
Z : Type
inst✝¹ : SemiInnerProductSpace K Z
E : ι → Type
inst✝ : (i : ι) → SemiInnerProductSpace K (E i)
y : m Y
hy : HasAdjDiffValM K y
⊢ HasAdjDiffM K fun x => y
Tactic:
have h : (fun _ : X => y)
         =
         fun _ : X => pure () >>= fun _ => y := by simp
Proof state after:
ι : Sort ?u.4270
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'
X : Type
inst✝³ : SemiInnerProductSpace K X
Y : Type
inst✝² : SemiInnerProductSpace K Y
Z : Type
inst✝¹ : SemiInnerProductSpace K Z
E : ι → Type
inst✝ : (i : ι) → SemiInnerProductSpace K (E i)
y : m Y
hy : HasAdjDiffValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ HasAdjDiffM K fun x => y
Theorem: SciLean.HasAdjDiffM.const_rule
Proof state before:
ι : Sort ?u.4270
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'
X : Type
inst✝³ : SemiInnerProductSpace K X
Y : Type
inst✝² : SemiInnerProductSpace K Y
Z : Type
inst✝¹ : SemiInnerProductSpace K Z
E : ι → Type
inst✝ : (i : ι) → SemiInnerProductSpace K (E i)
y : m Y
hy : HasAdjDiffValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ HasAdjDiffM K fun x => y
Tactic:
rw[h]
Proof state after:
ι : Sort ?u.4270
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'
X : Type
inst✝³ : SemiInnerProductSpace K X
Y : Type
inst✝² : SemiInnerProductSpace K Y
Z : Type
inst✝¹ : SemiInnerProductSpace K Z
E : ι → Type
inst✝ : (i : ι) → SemiInnerProductSpace K (E i)
y : m Y
hy : HasAdjDiffValM K y
h :
  (fun x => y) = fun x => do
    pure ()
    y
⊢ HasAdjDiffM K fun x => do
    pure ()
    y