proposition: Lemma prod_inv (A B : Type) : forall (R : relationH (A * B) (A * B)) (x1 x2 : A) (y1 y2 : B), prod_fst_rel R x1 x2 /\ prod_snd_rel R y1 y2 -> R (x1, y1) (x2, y2).
proof: Proof. intros. destruct H. unfold prod_fst_rel, prod_snd_rel in *. cbn in *. apply H0. Qed.
imports: Coq(Morphisms Setoid Relation_Definitions RelationClasses ) ITree(Basics.Utils Indexed.Sum)