(*
	Add_part.
*)

Definition add_part (A : part_set E) (x : E) := union A (single x).

(* Specifications: *)
Lemma add_part_comp : forall (A A' : part_set E) (x x' : E), Equal A A' -> Equal x x' -> Equal (add_part A x) (add_part A' x').
Lemma add_part_in : forall (A : part_set E) (x : E), in_part x (add_part A x).
Lemma add_part_com : forall (A : part_set E) (x y : E), Equal (add_part (add_part A x) y) (add_part (add_part A y) x).
Lemma add_in : forall (A : part_set E) (x : E), in_part x A -> Equal (add_part A x) A.
Lemma add_part_in_el_diff : forall (A : part_set E) (x y : E), in_part y (add_part A x) -> ~ Equal y x -> in_part y A.
Lemma add_part_in_el_not_in : forall (A : part_set E) (x y : E), in_part y (add_part A x) -> ~ in_part y A -> Equal y x.
Lemma add_part_simpl : forall (A B : part_set E) (x : E), ~ in_part x A -> ~ in_part x B -> Equal (add_part A x) (add_part B x) -> Equal A B.