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.
Hint Resolve eqitC_mon : paco.
Hint Resolve eqitC_wcompat : paco.
Hint Resolve eqit_idclo_compat : paco.
Hint Resolve eqitC_dist : paco.

Lemma eqit_clo_trans b1 b2 vclo
(MON: monotone2 vclo)
(CMP: compose (eqitC b1 b2) vclo <3= compose vclo (eqitC b1 b2)):
eqit_trans_clo b1 b2 false false <3= gupaco2 (eqit_ RR b1 b2 vclo) (eqitC b1 b2).