Project

General

Profile

Statistics
| Branch: | Revision:

cool / src / lib / CoAlgFormula.mli @ 40a714df

History | View | Annotate | Download (6.13 KB)

1
(** This module implements coalgebraic formulae
2
    (e.g. parsing, printing, (de-)constructing, ...).
3
    @author Florian Widmann
4
 *)
5

    
6

    
7
exception CoAlgException of string
8

    
9
type sort = int
10

    
11
type rational = { nominator: int; denominator: int }
12

    
13
val rational_of_int : int -> int -> rational
14

    
15
type formula =
16
  | TRUE
17
  | FALSE
18
  | AP of string (* named atom *)
19
  | NOT of formula
20
  | AT of string * formula (* @ *)
21
  | OR of formula * formula
22
  | AND of formula * formula
23
  | EQU of formula * formula (* equivalence <=> *)
24
  | IMP of formula * formula (* implication <-> *)
25
  | EX of string * formula (* exists, diamond of K *)
26
  | AX of string * formula (* forall, box of K *)
27
  | ENFORCES of int list * formula (* CL *)
28
  | ALLOWS   of int list * formula (* CL *)
29
  | MIN of int * string * formula (* some more intuitive diamond for GML *)
30
  | MAX of int * string * formula (* some more intuitive box for GML *)
31
  | MORETHAN of int * string * formula (* diamond of GML *)
32
  | MAXEXCEPT of int * string * formula (* box of GML, means: ¬>_nR.¬C *)
33
  | ATLEASTPROB of rational * formula (* = {>= 1/2} C  ---> C occurs with *)
34
                                      (*  probability of at least 50% *) 
35
  | LESSPROBFAIL of rational * formula (* = [1/2] C = {< 1/2} ¬ C ---> C fails with *)
36
                                       (* probability of less than 50% *)
37
  | CONST of string  (* constant functor with value string *)
38
  | CONSTN of string  (* constant functor with value other than string *)
39
  | ID of formula (* modality of the identity functor *)
40
  | NORM of formula * formula (* default implication *)
41
  | NORMN of formula * formula (* \neg NORM (\neg A, \neg B) *)
42
  | CHC of formula * formula
43
  | FUS of bool * formula
44
  | MU of string * formula
45
  | NU of string * formula
46
  | VAR of string
47
  | AF of formula
48
  | EF of formula
49
  | AG of formula
50
  | EG of formula
51
  | AU of formula * formula
52
  | EU of formula * formula
53
  | AR of formula * formula
54
  | ER of formula * formula
55
  | AB of formula * formula
56
  | EB of formula * formula
57

    
58
exception ConversionException of formula
59

    
60
type sortedFormula = sort * formula
61

    
62
val iter : (formula -> unit) -> formula -> unit (* iterate over all sub formulas *)
63
val convert_post : (formula -> formula) -> formula -> formula (* run over all subformulas in post order *)
64
val convertToK : formula -> formula (* tries to convert a formula to a pure K formula *)
65
val convertToGML : formula -> formula (* tries to convert a formula to a pure GML formula *)
66

    
67
val isNominal : string -> bool
68

    
69
val sizeFormula : formula -> int
70
val sizeSortedFormula : sortedFormula -> int
71

    
72
val string_of_formula : formula -> string
73
val exportFormula : formula -> string
74
val exportTatlFormula : formula -> string
75
val exportSortedFormula : sortedFormula -> string
76
val exportQuery : sortedFormula list -> sortedFormula -> string
77
val exportQueryParsable : sortedFormula list -> sortedFormula -> string
78
val importFormula : string -> formula
79
val importSortedFormula : string -> sortedFormula
80
val importQuery : string -> sortedFormula list * sortedFormula
81

    
82
val verifyFormula : formula -> unit
83

    
84
val nnfNeg : formula -> formula
85
val nnf : formula -> formula
86

    
87
val simplify : formula -> formula
88

    
89
val dest_ap : formula -> string
90
val dest_nom : formula -> string
91
val dest_not : formula -> formula
92
val dest_at : formula -> string * formula
93
val dest_or : formula -> formula * formula
94
val dest_and : formula -> formula * formula
95
val dest_equ : formula -> formula * formula
96
val dest_imp : formula -> formula * formula
97
val dest_ex : formula -> string * formula
98
val dest_ax : formula -> string * formula
99
val dest_min : formula -> int * string * formula
100
val dest_max : formula -> int * string * formula
101
val dest_choice : formula -> formula * formula
102
val dest_fusion : formula -> bool * formula
103

    
104
val is_true : formula -> bool
105
val is_false : formula -> bool
106
val is_ap : formula -> bool
107
val is_nom : formula -> bool
108
val is_not : formula -> bool
109
val is_at : formula -> bool
110
val is_or : formula -> bool
111
val is_and : formula -> bool
112
val is_equ : formula -> bool
113
val is_imp : formula -> bool
114
val is_ex : formula -> bool
115
val is_ax : formula -> bool
116
val is_min : formula -> bool
117
val is_max : formula -> bool
118
val is_choice : formula -> bool
119
val is_fusion : formula -> bool
120

    
121
val const_true : formula
122
val const_false : formula
123
val const_ap : string -> formula
124
val const_nom : string -> formula
125
val const_not : formula -> formula
126
val const_at : string -> formula -> formula
127
val const_or : formula -> formula -> formula
128
val const_and : formula -> formula -> formula
129
val const_equ : formula -> formula -> formula
130
val const_imp : formula -> formula -> formula
131
val const_ex : string -> formula -> formula
132
val const_ax : string -> formula -> formula
133
val const_min : int -> string -> formula -> formula
134
val const_max : int -> string -> formula -> formula
135
val const_enforces : int list -> formula -> formula
136
val const_allows : int list -> formula -> formula
137
val const_choice : formula -> formula -> formula
138
val const_fusion : bool -> formula -> formula
139

    
140
type hcFormula = (hcFormula_node, formula) HashConsing.hash_consed
141
and hcFormula_node =
142
  | HCTRUE
143
  | HCFALSE
144
  | HCAP of string
145
  | HCNOT of string
146
  | HCAT of string * hcFormula
147
  | HCOR of hcFormula * hcFormula
148
  | HCAND of hcFormula * hcFormula
149
  | HCEX of string * hcFormula
150
  | HCAX of string * hcFormula
151
  | HCENFORCES of int list * hcFormula
152
  | HCALLOWS of int list * hcFormula
153
  | HCMORETHAN of int * string * hcFormula (* GML Diamond *)
154
  | HCMAXEXCEPT of int * string * hcFormula (* GML Box *)
155
  | HCATLEASTPROB of rational * hcFormula
156
  | HCLESSPROBFAIL of rational * hcFormula (* the probability for failing is less than ... *)
157
  | HCCONST of string
158
  | HCCONSTN of string
159
  | HCID of hcFormula
160
  | HCNORM of hcFormula * hcFormula
161
  | HCNORMN of hcFormula * hcFormula
162
  | HCCHC of hcFormula * hcFormula
163
  | HCFUS of bool * hcFormula
164
  | HCMU of string * hcFormula
165
  | HCNU of string * hcFormula
166
  | HCVAR of string
167

    
168
module HcFormula : (HashConsing.S with type nde = hcFormula_node and type fml = formula)
169

    
170
val hc_formula : HcFormula.t -> formula -> hcFormula
171
val hc_replace : HcFormula.t -> string -> hcFormula -> hcFormula -> hcFormula
172
val hc_freeIn : string -> hcFormula -> bool
173

    
174
module HcFHt : (Hashtbl.S with type key = hcFormula)