Definition Injective {A B} (f : A->B) :=
forall x y, f x = f y -> x = y.
Section fix_X.
Variable X:Type.
Implicit Types (A B: list X) (a b c: X).

(* Specifications: *)
Lemma last_app_eq A B a b :
A++[a] = B++[b] -> A = B /\ a = b.
Lemma rev_eq A B:
List.rev A = List.rev B <-> A = B.
Lemma rev_nil A:
rev A = [] -> A = [].
Lemma map_inj (Y:Type) A B (f: X -> Y) :
Injective f -> map f A = map f B <-> A = B.