Section Facts.
Context {D E : Type -> Type} (ctx : D ~> itree (D +' E)).
(** Unfolding of [interp_mrec]. *)
Definition _interp_mrec {R : Type} (ot : itreeF (D +' E) R _) : itree E R :=
match ot with
| RetF r => Ret r
| TauF t => Tau (interp_mrec ctx t)
| VisF e k =>
match e with
| inl1 d => Tau (interp_mrec ctx (ctx _ d >>= k))
| inr1 e => Vis e (fun x => Tau (interp_mrec ctx (k x)))
end
end.

Lemma unfold_interp_mrec R (t : itree (D +' E) R) :
interp_mrec ctx t ≅ _interp_mrec (observe t).