Section BasicProperties.
(** Some old specifications written with boolean equalities. *)
Variable s s' s'': t.
Variable x y z : elt.
(** properties of [mem] *)
(** Properties of [equal] *)
(* Properties of [subset] *)
(** Properties of [choose] *)
(** Properties of [add] *)
(** Properties of [remove] *)
(** Properties of [is_empty] *)
(** Properties of [singleton] *)
(** Properties of [union] *)
(* characterisation of [union] via [subset] *)
(** Properties of [inter] *)
(* characterisation of [union] via [subset] *)
(** Properties of [diff] *)
End BasicProperties.
Hint Immediate empty_mem is_empty_equal_empty add_mem_1
remove_mem_1 singleton_equal_add union_mem inter_mem
diff_mem equal_sym add_remove remove_add : set.
Hint Resolve equal_mem_1 subset_mem_1 choose_mem_1
choose_mem_2 add_mem_2 remove_mem_2 equal_refl equal_equal
subset_refl subset_equal subset_antisym
add_mem_3 add_equal remove_mem_3 remove_equal : set.
(** General recursion principle *)

Lemma set_rec:  forall (P:t->Type),
(forall s s', equal s s'=true -> P s -> P s') ->
(forall s x, mem x s=false -> P s -> P (add x s)) ->
P empty -> forall s, P s.