funext x
case Vis.a
E : Type → Type
ε : Type
F : Type → Type
T R : Type
h : E ~> ExceptT ε (Fitree F)
k : T → Fitree E R
T✝ : Type
e✝ : E T✝
k✝ : T✝ → Fitree E T
ih :
  ∀ (a : T✝),
    interp h (bind (k✝ a) k) =
      bind (interp h (k✝ a)) fun x? =>
        match x? with
        | Except.error ε_1 => ret (Except.error ε_1)
        | Except.ok x => interp h (k x)
fequal2 : ∀ (α β : Type 1) (f g : α → β) (x y : α), f = g → x = y → f x = g y
⊢ (fun x =>
      match x with
      | Except.ok a => interp h (bind (k✝ a) k)
      | Except.error e => ret (Except.error e)) =
    fun x =>
    bind
      (match x with
      | Except.ok a => interp h (k✝ a)
      | Except.error e => ret (Except.error e))
      fun x? =>
      match x? with
      | Except.error e => ret (Except.error e)
      | Except.ok x => interp h (k x)
case Vis.a.h
E : Type → Type
ε : Type
F : Type → Type
T R : Type
h : E ~> ExceptT ε (Fitree F)
k : T → Fitree E R
T✝ : Type
e✝ : E T✝
k✝ : T✝ → Fitree E T
ih :
  ∀ (a : T✝),
    interp h (bind (k✝ a) k) =
      bind (interp h (k✝ a)) fun x? =>
        match x? with
        | Except.error ε_1 => ret (Except.error ε_1)
        | Except.ok x => interp h (k x)
fequal2 : ∀ (α β : Type 1) (f g : α → β) (x y : α), f = g → x = y → f x = g y
x : Except ε T✝
⊢ (match x with
    | Except.ok a => interp h (bind (k✝ a) k)
    | Except.error e => ret (Except.error e)) =
    bind
      (match x with
      | Except.ok a => interp h (k✝ a)
      | Except.error e => ret (Except.error e))
      fun x? =>
      match x? with
      | Except.error e => ret (Except.error e)
      | Except.ok x => interp h (k x)