Section eqit_closure.
Context {E : Type -> Type} {R1 R2 : Type} (RR : R1 -> R2 -> Prop).
(** *** "Up-to" principles for coinduction. *)
Inductive eqit_trans_clo b1 b2 b1' b2' (r : itree E R1 -> itree E R2 -> Prop)
: itree E R1 -> itree E R2 -> Prop :=
| eqit_trans_clo_intro t1 t2 t1' t2' RR1 RR2
(EQVl: eqit RR1 b1 b1' t1 t1')
(EQVr: eqit RR2 b2 b2' t2 t2')
(REL: r t1' t2')
(LERR1: forall x x' y, RR1 x x' -> RR x' y -> RR x y)
(LERR2: forall x y y', RR2 y y' -> RR x y' -> RR x y)
: eqit_trans_clo b1 b2 b1' b2' r t1 t2
.
Hint Constructors eqit_trans_clo.
Definition eqitC b1 b2 := eqit_trans_clo b1 b2 false false.
Hint Unfold eqitC.

Lemma eqitC_mon b1 b2 r1 r2 t1 t2
(IN: eqitC b1 b2 r1 t1 t2)
(LE: r1 <2= r2):
eqitC b1 b2 r2 t1 t2.