End ListProperties.
(* *********************************************************************** *)
(** * Properties of [map] and [dom] *)
(** The following lemmas are used mainly to simplify applications of [map] and [dom] to association lists.  See also the [simpl_env] and [rewrite_env] tactics below. *)
Section Properties.
Variables A B key : Type.
Variable  f       : A -> B.
Variable  x       : atom.
Variable  b       : A.
Variables E F G   : list (atom*A).

(* Specifications: *)
Axiom map_nil :
map f (@nil (atom*A)) = nil.
Axiom map_one :
map f (x ~ b) = (x ~ f b).
Axiom map_cons :
map f ((x, b) :: E) = x ~ f b ++ map f E.
Axiom map_app :
map f (E ++ F) = map f E ++ map f F.
Axiom dom_nil :
dom (@nil (atom*A)) = empty.
Axiom dom_one :
dom (x ~ b) [=] singleton x.
Axiom dom_cons :
dom ((x, b) :: E) [=] union (singleton x) (dom E).
Axiom dom_app :
dom (E ++ F) [=] union (dom E) (dom F).
Axiom dom_map :
dom (map f E) [=] dom E.