(** Properties of [partition] *)

(* Specifications: *)
Lemma In_partition:
forall x pivot, ~E.eq x pivot ->
forall h, bst h -> (In x h <-> In x (fst (partition pivot h)) \/ In x (snd (partition pivot h))).
Lemma partition_lt:
forall x pivot h,
lt_heap h x -> lt_heap (fst (partition pivot h)) x /\ lt_heap (snd (partition pivot h)) x.
Lemma partition_gt:
forall x pivot h,
gt_heap h x -> gt_heap (fst (partition pivot h)) x /\ gt_heap (snd (partition pivot h)) x.
Lemma partition_split:
forall pivot h,
bst h -> lt_heap (fst (partition pivot h)) pivot /\ gt_heap (snd (partition pivot h)) pivot.
Lemma partition_bst:
forall pivot h,
bst h ->
bst (fst (partition pivot h)) /\ bst (snd (partition pivot h)).
Lemma In_partition:
forall x pivot, ~E.eq x pivot ->
forall h, bst h -> (In x h <-> In x (fst (partition pivot h)) \/ In x (snd (partition pivot h))).
Lemma partition_lt:
forall x pivot h,
lt_heap h x -> lt_heap (fst (partition pivot h)) x /\ lt_heap (snd (partition pivot h)) x.
Lemma partition_gt:
forall x pivot h,
gt_heap h x -> gt_heap (fst (partition pivot h)) x /\ gt_heap (snd (partition pivot h)) x.
Lemma partition_split:
forall pivot h,
bst h -> lt_heap (fst (partition pivot h)) pivot /\ gt_heap (snd (partition pivot h)) pivot.
Lemma partition_bst:
forall pivot h,
bst h ->
bst (fst (partition pivot h)) /\ bst (snd (partition pivot h)).