Hint Extern 1 (Transitive (rel_pull _ _ _)) =>
eapply rel_pull_trans : typeclass_instances.
(** The introduction rule is straightforward, but changes the head terms to the functions used with [rel_pull]. This means that an [RIntro] rule would short-circuit any relational property formulated for the original terms, even if the codomain is a matching [rel_pull] relation and we have an appropriate [RElim] instance. To avoid shadowing such properties, we define our introduction rule as an [RStep] with a low priority. See test [rel_pull_2]. *)

(* Specifications: *)
Lemma rel_pull_rintro {A B A' B'} (f: A -> A') (g: B -> B') R x y:
RStep (R (f x) (g y)) ((R @@ (f, g))%rel x y).