bool.mli 910 Bytes
Newer Older
1 2
module type S =
sig
3 4
  include Custom.T
  type elem
5

6
  val get: t -> (elem list * elem list) list
7

8 9 10 11 12 13
  val empty : t
  val full  : t
  val cup   : t -> t -> t
  val cap   : t -> t -> t
  val diff  : t -> t -> t
  val atom  : elem -> t
14

15
  val iter: (elem-> unit) -> t -> unit
16

17
  val compute: empty:'b -> full:'b -> cup:('b -> 'b -> 'b)
18
    -> cap:('b -> 'b -> 'b) -> diff:('b -> 'b -> 'b) ->
19
    atom:(elem -> 'b) -> t -> 'b
20

21
  val trivially_disjoint : t -> t -> bool
22 23
end

24
module Make (X : Custom.T) : S with type elem = X.t
25

26 27
module type V =
sig
28

29 30 31 32 33 34 35 36 37 38 39
  module Atom : S

  include S with type elem = Atom.t Var.var_or_atom

  val var : Var.t -> t

  (** returns the union of all leaves in the BDD *)

  val leafconj: t -> Atom.t

  val is_empty : t -> bool
40

41
  val extract : t -> [ `Empty | `Full | `Split of (elem * t * t * t) ]
42

43 44
end

45
module MakeVar (T : S) : V with module Atom = T and type elem = T.t Var.var_or_atom