Module Cudd.Custom

module Custom: sig .. end


Custom Operations on VDDs
type pid 
type mlvalue 
type common = {
   pid :pid;
   arity :int;
   memo :Cudd.Memo.t;
}
Common information
type ('a, 'b) op1 = {
   common1 :common;
   closure1 :'a -> 'b;
}
Unary operation
type ('a, 'b, 'c) op2 = {
   common2 :common;
   closure2 :'a -> 'b -> 'c;
   ospecial2 :('a Cudd.Vdd.t -> 'b Cudd.Vdd.t -> 'c Cudd.Vdd.t option) option;
   commutative :bool;
   idempotent :bool;
}
Binary operation
type ('a, 'b) test2 = {
   common2t :common;
   closure2t :'a -> 'b -> bool;
   ospecial2t :('a Cudd.Vdd.t -> 'b Cudd.Vdd.t -> bool option) option;
   symetric :bool;
   reflexive :bool;
}
Binary test
type ('a, 'b, 'c, 'd) op3 = {
   common3 :common;
   closure3 :'a -> 'b -> 'c -> 'd;
   ospecial3 :('a Cudd.Vdd.t -> 'b Cudd.Vdd.t -> 'c Cudd.Vdd.t -> 'd Cudd.Vdd.t option)
option
;
}
Ternary operation
type ('a, 'b) opN = {
   commonN :common;
   arityNbdd :int;
   closureN :Cudd.Bdd.vt array -> 'a Cudd.Vdd.t array -> 'b Cudd.Vdd.t option;
}
N-ary operation
type ('a, 'b) opG = {
   commonG :common;
   arityGbdd :int;
   closureG :Cudd.Bdd.vt array -> 'a Cudd.Vdd.t array -> 'b Cudd.Vdd.t option;
   oclosureBeforeRec :(int * bool ->
Cudd.Bdd.vt array ->
'a Cudd.Vdd.t array -> Cudd.Bdd.vt array * 'a Cudd.Vdd.t array)
option
;
   oclosureIte :(int -> 'b Cudd.Vdd.t -> 'b Cudd.Vdd.t -> 'b Cudd.Vdd.t) option;
}
N-ary general operation
type 'a exist = {
   commonexist :common;
   combineexist :('a, 'a, 'a) op2;
}
Existential quantification
type 'a existand = {
   commonexistand :common;
   combineexistand :('a, 'a, 'a) op2;
   bottomexistand :'a;
}
Existential quantification combined with intersection
type ('a, 'b) existop1 = {
   commonexistop1 :common;
   combineexistop1 :('b, 'b, 'b) op2;
   existop1 :('a, 'b) op1;
}
Existop1ential quantification
type ('a, 'b) existandop1 = {
   commonexistandop1 :common;
   combineexistandop1 :('b, 'b, 'b) op2;
   existandop1 :('a, 'b) op1;
   bottomexistandop1 :'b;
}
Existential quantification combined with intersection
val newpid : unit -> pid
val apply_op1 : ('a, 'b) op1 -> 'a Cudd.Vdd.t -> 'b Cudd.Vdd.t
val apply_op2 : ('a, 'b, 'c) op2 ->
'a Cudd.Vdd.t -> 'b Cudd.Vdd.t -> 'c Cudd.Vdd.t
val apply_test2 : ('a, 'b) test2 -> 'a Cudd.Vdd.t -> 'b Cudd.Vdd.t -> bool
val apply_op3 : ('a, 'b, 'c, 'd) op3 ->
'a Cudd.Vdd.t -> 'b Cudd.Vdd.t -> 'c Cudd.Vdd.t -> 'd Cudd.Vdd.t
val apply_opN : ('a, 'b) opN ->
Cudd.Bdd.vt array -> 'a Cudd.Vdd.t array -> 'b Cudd.Vdd.t
val apply_opG : ('a, 'b) opG ->
Cudd.Bdd.vt array -> 'a Cudd.Vdd.t array -> 'b Cudd.Vdd.t
val _apply_exist : 'a exist -> Cudd.Bdd.vt -> 'a Cudd.Vdd.t -> 'a Cudd.Vdd.t
val _apply_existand : 'a existand ->
Cudd.Bdd.vt -> Cudd.Bdd.vt -> 'a Cudd.Vdd.t -> 'a Cudd.Vdd.t
val _apply_existop1 : ('a, 'b) existop1 ->
Cudd.Bdd.vt -> 'a Cudd.Vdd.t -> 'b Cudd.Vdd.t
val _apply_existandop1 : ('a, 'b) existandop1 ->
Cudd.Bdd.vt -> Cudd.Bdd.vt -> 'a Cudd.Vdd.t -> 'b Cudd.Vdd.t