(** Properties of [findMin] and [deleteMin] *)

(* Specifications: *)
Lemma deleteMin_lt:
forall x h, lt_heap h x -> lt_heap (deleteMin h) x.
Lemma deleteMin_bst:
forall h, bst h -> bst (deleteMin h).
Lemma In_deleteMin:
forall y x h,
findMin h = Some x ->
(In y h <-> E.eq y x \/ In y (deleteMin h)).
Lemma gt_heap_In:
forall x y h, gt_heap h x -> In y h -> E.lt x y.
Lemma findMin_min:
forall x h, findMin h = Some x -> bst h -> forall y, In y h -> le x y.
Lemma findMin_empty:
forall h, h <> Empty -> findMin h <> None.
Lemma deleteMin_lt:
forall x h, lt_heap h x -> lt_heap (deleteMin h) x.
Lemma deleteMin_bst:
forall h, bst h -> bst (deleteMin h).
Lemma In_deleteMin:
forall y x h,
findMin h = Some x ->
(In y h <-> E.eq y x \/ In y (deleteMin h)).
Lemma gt_heap_In:
forall x y h, gt_heap h x -> In y h -> E.lt x y.
Lemma findMin_min:
forall x h, findMin h = Some x -> bst h -> forall y, In y h -> le x y.
Lemma findMin_empty:
forall h, h <> Empty -> findMin h <> None.