End Disjoint.
(* *********************************************************************** *)
(** * Basic facts about [uniq] *)
Section UniqProperties.
Variables A B   : Type.
Variables f     : A -> B.
Variables x     : atom.
Variables a b   : A.
Variables E F G : list (atom*A).

(* Specifications: *)
Axiom uniq_one_1 :
uniq (x ~ b).
Axiom uniq_cons_1 :
uniq ((x, a) :: E) ->
uniq E.
Axiom uniq_cons_2 :
uniq ((x, a) :: E) ->
~ In x (dom E).
Axiom uniq_cons_3 :
uniq E ->
~ In x (dom E) ->
uniq ((x, a) :: E).
Axiom uniq_cons_iff :
uniq ((x, a) :: E) <-> uniq E /\ ~ In x (dom E).
Axiom uniq_app_1 :
uniq (E ++ F) -> uniq E.
Axiom uniq_app_2 :
uniq (E ++ F) -> uniq F.
Axiom uniq_app_3 :
uniq (E ++ F) -> disjoint E F.
Axiom uniq_app_4 :
uniq E ->
uniq F ->
disjoint E F ->
uniq (E ++ F).
Axiom uniq_app_iff :
uniq (E ++ F) <-> uniq E /\ uniq F /\ disjoint E F.
Axiom uniq_map_1 :
uniq (map f E) ->
uniq E.
Axiom uniq_map_2 :
uniq E ->
uniq (map f E).
Axiom uniq_map_iff :
uniq (map f E) <-> uniq E.