End BindsProperties2.
(* *********************************************************************** *)
(** * Hints *)
Hint Resolve
@app_assoc @app_nil_2 @map_app @dom_one @dom_cons @dom_app @dom_map.
Hint Resolve
@disjoint_sym_1 @disjoint_nil_1 @disjoint_one_2 @disjoint_cons_3
@disjoint_app_3 @disjoint_map_2 @uniq_nil @uniq_push @uniq_one_1
@uniq_cons_3 @uniq_app_4 @uniq_map_2.
Hint Resolve
@binds_one_3 @binds_cons_3 @binds_app_2 @binds_app_3 @binds_map_2.
(* *********************************************************************** *)
(** * List properties *)
(** The following properties are an assortment of structural properties about association lists. *)
Section AssortedListProperties.
Variable  X : Type.
Variables x : X.
Variables xs ys zs : list X.

(* Specifications: *)
Axiom one_eq_app :
one x ++ xs = ys ++ zs ->
(exists qs, ys = x :: qs /\ xs = qs ++ zs) \/
(ys = nil /\ zs = x :: xs).
Axiom app_eq_one :
ys ++ zs = one x ++ xs ->
(exists qs, ys = x :: qs /\ xs = qs ++ zs) \/
(ys = nil /\ zs = x :: xs).
Axiom nil_neq_one_mid :
nil <> xs ++ one x ++ ys.
Axiom one_mid_neq_nil :
xs ++ one x ++ ys <> nil.