Section EUTTG.
Context {E : Type -> Type} {R1 R2 : Type} (RR : R1 -> R2 -> Prop).
Definition transU := @eqit_trans_clo E R1 R2 RR true true true true.
Definition transD := @eqit_trans_clo E R1 R2 RR true true false false.
Definition bindC := @eqit_bind_clo E R1 R2 true true.
Definition euttVC gH r :=
gupaco2 (eqit_ RR true true id) transD (transU (r \2/ gH)).
Variant euttG rH rL gL gH t1 t2 : Prop :=
| euttG_intro
(IN: gpaco2 (@eqit_ E R1 R2 RR true true (euttVC gH)) transD (transU rH \2/ rL) gL t1 t2)
.
Hint Unfold transU transD bindC euttVC.
Hint Constructors euttG.
Hint Resolve euttVC_mon : paco.
Hint Resolve euttVC_compat : paco.
Hint Resolve euttVC_id : paco.
End EUTTG.
Hint Unfold transU transD bindC euttVC.
Hint Constructors euttG.
Hint Resolve transD_mon transU_mon : paco.
Hint Resolve euttVC_mon : paco.
Hint Resolve euttVC_compat : paco.
Hint Resolve transD_id transU_id euttVC_id : paco.
Instance geuttG_cong_euttge {E R1 R2 RR} gH r g:
Proper (euttge eq ==> euttge eq ==> flip impl)
(gpaco2 (@eqit_ E R1 R2 RR true true (euttVC RR gH)) (transD RR) r g).
Instance geuttG_cong_eq {E R1 R2 RR} gH r g:
Proper (eq_itree eq ==> eq_itree eq ==> flip impl)
(gpaco2 (@eqit_ E R1 R2 RR true true (euttVC RR gH)) (transD RR) r g).

Lemma eqit_ret_gen {E R1 R2 RR} t v
(IN: @eqit E R1 R2 RR true true t (Ret v)):
eqit RR true false t (Ret v).