Theorem: dite.arg_te.revDerivM_rule (SciLean/Core/Monads/RevDerivMonad.lean)

State before:
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
dec : Decidable c
t : c → X → m Y
e : ¬c → X → m Y
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
induction dec
State after:
case isFalse
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h✝ : ¬c
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y

case isTrue
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h✝ : c
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y

State before:
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
case isTrue h  => ext y; simp[h]
State after:
no goals

State before:
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
case isFalse h => ext y; simp[h]
State after:
no goals

State before:
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
ext y
State after:
case h
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
y : X
⊢ revDerivM K (fun x => if h : c then t h x else e h x) y = if h : c then revDerivM K (t h) y else revDerivM K (e h) y

State before:
case h
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : c
y : X
⊢ revDerivM K (fun x => if h : c then t h x else e h x) y = if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
simp[h]
State after:
no goals

State before:
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
⊢ (revDerivM K fun x => if h : c then t h x else e h x) = fun y =>
    if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
ext y
State after:
case h
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
y : X
⊢ revDerivM K (fun x => if h : c then t h x else e h x) y = if h : c then revDerivM K (t h) y else revDerivM K (e h) y

State before:
case h
ι : Sort ?u.96370
K : Type
inst✝⁹ : RCLike K
m m' : 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)
c : Prop
t : c → X → m Y
e : ¬c → X → m Y
h : ¬c
y : X
⊢ revDerivM K (fun x => if h : c then t h x else e h x) y = if h : c then revDerivM K (t h) y else revDerivM K (e h) y
Tactic:
simp[h]
State after:
no goals