Ltac set_le_transport keyword :=
lazymatch goal with
| |- @Transport ?A ?B ?R ?a ?b ?PA ?PB =>
lazymatch PA with
| context [keyword] =>
let Xv := fresh "X" in evar (Xv: Type);
let X := eval red in Xv in clear Xv;
unify B (X -> Prop);
eapply set_le_transport
end
end.
(** We defined a few more relation patterns based on [set_le] and [rel_curry], with a similar strategy. *)

Lemma rel_curry_set_le_transport {A1 A2 B1 B2} R sA sB (a1: A1) (a2: A2):
Transport (% set_le R) sA sB
(sA a1 a2)
(exists (b1: B1) (b2: B2), sB b1 b2 /\ R (a1, a2) (b1, b2)).