(** *** Lists *)
Inductive list_rel {A1 A2} (R: rel A1 A2): rel (list A1) (list A2) :=
| nil_rel_def: (list_rel R) (@nil A1) (@nil A2)
| cons_rel_def: (R ++> list_rel R ++> list_rel R)%rel (@cons A1) (@cons A2).
Global Instance nil_rel:
Monotonic (@nil) (forallr R, list_rel R).
Global Instance cons_rel:
Monotonic (@cons) (forallr R, R ++> list_rel R ++> list_rel R).
Global Instance list_subrel {A1 A2}:
Monotonic (@list_rel A1 A2) (subrel ++> subrel).
Global Instance list_subrel_params:
Params (@list_rel) 3.

(* Specifications: *)
Lemma list_rel_refl `(HR: Reflexive):
Reflexive (list_rel R).