| 1 |
module type S =
|
| 2 |
sig
|
| 3 |
type t
|
| 4 |
|
| 5 |
val any: t
|
| 6 |
val empty: t
|
| 7 |
val cup: t -> t -> t
|
| 8 |
val cap: t -> t -> t
|
| 9 |
val diff: t -> t -> t
|
| 10 |
val is_empty: t -> bool
|
| 11 |
end
|
| 12 |
|
| 13 |
type 'a bool = ('a list * 'a list) list
|
| 14 |
module Make(X1 : S)(X2 : S) :
|
| 15 |
sig
|
| 16 |
type t = (X1.t * X2.t) list
|
| 17 |
|
| 18 |
val normal: t -> t
|
| 19 |
(* normalized form:
|
| 20 |
(t1,t2),...,(s1,s2) ==> t1 & s1 = 0
|
| 21 |
(t1,t2) => t1 <> 0, t2 <> 0
|
| 22 |
*)
|
| 23 |
|
| 24 |
val boolean_normal: (X1.t * X2.t) bool -> t
|
| 25 |
(* return a normalized form *)
|
| 26 |
|
| 27 |
val boolean: (X1.t * X2.t) bool -> t
|
| 28 |
|
| 29 |
val pi1: t -> X1.t
|
| 30 |
val pi2: t -> X2.t
|
| 31 |
val pi2_restricted: X1.t -> t -> X2.t
|
| 32 |
end
|