(** * Facts about [aloop] and [loop] *)
(* begin hide *)
Program
Classes.Morphisms
Setoids.Setoid
Relations.Relations.
Basics.Basics
Basics.CategoryOps
Basics.CategoryTheory
Basics.CategoryKleisli
Basics.CategoryKleisliFacts
Basics.Function
Core.ITreeDefinition
Core.ITreeMonad
Core.KTree
Eq.Eq
Eq.UpToTaus.
Local Open Scope itree.
(* end hide *)
(** ** [ITree.aloop] *)

Lemma eq_itree_iter' {E I1 I2 R1 R2}
(RI : I1 -> I2 -> Prop)
(RR : R1 -> R2 -> Prop)
(body1 : I1 -> itree E (I1 + R1))
(body2 : I2 -> itree E (I2 + R2))
(eutt_body
: forall j1 j2, RI j1 j2 -> eq_itree (sum_rel RI RR) (body1 j1) (body2 j2))
: forall (i1 : I1) (i2 : I2) (RI_i : RI i1 i2),
@eq_itree E _ _ RR (ITree.iter body1 i1) (ITree.iter body2 i2).