(*************************)
  (** ** Reverse           *)
  (*************************)

  Fixpoint rev (l:list A) : list A :=
    match l with
      | [] => []
      | x :: l' => rev l' ++ [x]
    end.

(* Specifications: *)
Lemma rev_app_distr : forall x y:list A, rev (x ++ y) = rev y ++ rev x.