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_one_alt_1
@disjoint_cons_3 @disjoint_cons_alt_2 @disjoint_app_3
@disjoint_map_2 @disjoint_map_var_2 @uniq_nil @uniq_push @uniq_alt
@uniq_one_1 @uniq_one_alt_1 @uniq_cons_3 @uniq_cons_alt_2
@uniq_app_4 @uniq_map_2 @uniq_map_var_2.
Hint Resolve
@binds_one_3 @binds_cons_2 @binds_cons_3 @binds_cons_alt_2
@binds_app_2 @binds_app_3 @binds_map_2 @binds_map_var_2.
(* *********************************************************************** *)
(** * List properties *)
(** The following properties are an assortment of structural properties about assumption lists. *)
Section AssortedListProperties.
Variable  X : Type.
Variables x : X.
Variables xs ys zs : list X.

Lemma one_eq_app :
one x ++ xs = ys ++ zs ->
(exists qs, ys = x :: qs /\ xs = qs ++ zs) \/
(ys = nil /\ zs = x :: xs).