(* ---------------------------------------------------------------------- *)
(** **** Properties of dom *)

(* Specifications: *)
(** Dom builds a list. *)
Axiom dom_empty : forall A,
dom (@empty A) = nil.
Axiom dom_empty_inv : forall A (E : gen_env A),
dom (E) = nil ->
E = (@empty A).
Axiom dom_single : forall A x (v : A),
dom (x ∶ v) = (x :: nil).
Axiom dom_singles : forall A xs (vs : list A),
length xs = length vs ->
dom (xs ∷ vs) = xs.
Axiom dom_singles_incl : forall A xs (vs : list A),
List.incl (dom (xs ∷ vs)) xs.
Axiom dom_concat : forall A (E F : gen_env A),
dom (E & F) = List.app (dom F) (dom E).
Lemma dom_empty :
dom (@empty A) = nil.
Lemma dom_singles_incl : forall xs vs,
List.incl (dom (xs ∷ vs)) xs.
Lemma dom_concat : forall E F,
dom (E & F) = List.app (dom F) (dom E).