From 9043add656177eeac1491a73d2f3ab92bec0013c Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Sat, 29 Dec 2018 14:31:27 -0500 Subject: Imported Upstream version 8.8.2 --- clib/heap.mli | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 clib/heap.mli (limited to 'clib/heap.mli') diff --git a/clib/heap.mli b/clib/heap.mli new file mode 100644 index 00000000..ab0864c7 --- /dev/null +++ b/clib/heap.mli @@ -0,0 +1,54 @@ +(************************************************************************) +(* * The Coq Proof Assistant / The Coq Development Team *) +(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *) +(* t -> int +end + +module type S =sig + + (** Type of functional heaps *) + type t + + (** Type of elements *) + type elt + + (** The empty heap *) + val empty : t + + (** [add x h] returns a new heap containing the elements of [h], plus [x]; + complexity {% $ %}O(log(n)){% $ %} *) + val add : elt -> t -> t + + (** [maximum h] returns the maximum element of [h]; raises [EmptyHeap] + when [h] is empty; complexity {% $ %}O(1){% $ %} *) + val maximum : t -> elt + + (** [remove h] returns a new heap containing the elements of [h], except + the maximum of [h]; raises [EmptyHeap] when [h] is empty; + complexity {% $ %}O(log(n)){% $ %} *) + val remove : t -> t + + (** usual iterators and combinators; elements are presented in + arbitrary order *) + val iter : (elt -> unit) -> t -> unit + + val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a + +end + +exception EmptyHeap + +(** {6 Functional implementation. } *) + +module Functional(X: Ordered) : S with type elt=X.t -- cgit v1.2.3