File: html.mona

package info (click to toggle)
mona 1.4-7-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,976 kB
  • ctags: 3,713
  • sloc: ansic: 14,363; cpp: 12,610; sh: 1,076; yacc: 493; lex: 358; makefile: 154; lisp: 53
file content (354 lines) | stat: -rw-r--r-- 11,131 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
# Module is html

ws2s;

guide a->(dummy,b), b->(b,b), dummy->(dummy,dummy);	
universe UNI_H:1, u_dummy:0;

# Skeleton

var2 [UNI_H] $ where all1 p: (p in $) => (p^ in $);
defaultwhere1(p) = p in $;


# Type environment

var2 T0,T1;
var2 G0,G1,G2;

# Type predicates

macro NULL(var1 p) = 
   (p notin T0) & (p notin T1) &
   (p notin G0) & (p notin G1) & (p notin G2);

macro TYPE_Bool(var1 p) =
   (p notin T0) & (p notin T1);

macro TYPE0_Bool(var0 t0,t1) =
   ~t0 & ~t1;

macro TYPE_HTML(var1 p) =
   (p in T0) & (p notin T1);

macro TYPE0_HTML(var0 t0,t1) =
   t0 & ~t1;

macro TYPE_LIST(var1 p) =
   (p notin T0) & (p in T1);

macro TYPE0_LIST(var0 t0,t1) =
   ~t0 & t1;

macro TYPE_URL(var1 p) =
   (p in T0) & (p in T1);

macro TYPE0_URL(var0 t0,t1) =
   t0 & t1;

macro GROUP_HTML_word(var1 p,var2 G0,G1,G2) =
   (p notin G0) & (p notin G1) & (p notin G2);

macro GROUP0_HTML_word(var0 g0,g1,g2) =
   ~g0 & ~g1 & ~g2;

macro GROUP_HTML_anchor(var1 p,var2 G0,G1,G2) =
   (p in G0) & (p notin G1) & (p notin G2);

macro GROUP0_HTML_anchor(var0 g0,g1,g2) =
   g0 & ~g1 & ~g2;

macro GROUP_HTML_bold(var1 p,var2 G0,G1,G2) =
   (p notin G0) & (p in G1) & (p notin G2);

macro GROUP0_HTML_bold(var0 g0,g1,g2) =
   ~g0 & g1 & ~g2;

macro GROUP_HTML_italic(var1 p,var2 G0,G1,G2) =
   (p in G0) & (p in G1) & (p notin G2);

macro GROUP0_HTML_italic(var0 g0,g1,g2) =
   g0 & g1 & ~g2;

macro GROUP_HTML_paragraph(var1 p,var2 G0,G1,G2) =
   (p notin G0) & (p notin G1) & (p in G2);

macro GROUP0_HTML_paragraph(var0 g0,g1,g2) =
   ~g0 & ~g1 & g2;

macro GROUP_HTML_rule(var1 p,var2 G0,G1,G2) =
   (p in G0) & (p notin G1) & (p in G2);

macro GROUP0_HTML_rule(var0 g0,g1,g2) =
   g0 & ~g1 & g2;

macro GROUP_HTML_list(var1 p,var2 G0,G1,G2) =
   (p notin G0) & (p in G1) & (p in G2);

macro GROUP0_HTML_list(var0 g0,g1,g2) =
   ~g0 & g1 & g2;

macro GROUP_HTML(var1 p,var2 G0,G1,G2) =
   GROUP_HTML_word(p,G0,G1,G2) | GROUP_HTML_anchor(p,G0,G1,G2) | GROUP_HTML_bold(p,G0,G1,G2) | GROUP_HTML_italic(p,G0,G1,G2) | GROUP_HTML_paragraph(p,G0,G1,G2) | GROUP_HTML_rule(p,G0,G1,G2) | GROUP_HTML_list(p,G0,G1,G2);

macro GROUP0_HTML(var0 g0,g1,g2) =
   GROUP0_HTML_word(g0,g1,g2) | GROUP0_HTML_anchor(g0,g1,g2) | GROUP0_HTML_bold(g0,g1,g2) | GROUP0_HTML_italic(g0,g1,g2) | GROUP0_HTML_paragraph(g0,g1,g2) | GROUP0_HTML_rule(g0,g1,g2) | GROUP0_HTML_list(g0,g1,g2);

macro GROUP_LIST_empty(var1 p,var2 G0) =
   (p notin G0);

macro GROUP0_LIST_empty(var0 g0) =
   ~g0;

macro GROUP_LIST_entity(var1 p,var2 G0) =
   (p in G0);

macro GROUP0_LIST_entity(var0 g0) =
   g0;

macro GROUP_LIST(var1 p,var2 G0) =
   GROUP_LIST_empty(p,G0) | GROUP_LIST_entity(p,G0);

macro GROUP0_LIST(var0 g0) =
   GROUP0_LIST_empty(g0) | GROUP0_LIST_entity(g0);

macro SCALAR_Bool_false_true(var1 p, var2 S0) =
   true;

macro SCALAR0_Bool_false_true(var0 s0) =
   true;

macro SCALAR_Bool(var1 p, var2 S0) =
   SCALAR_Bool_false_true(p,S0);

macro SCALAR0_Bool(var0 s0) =
   SCALAR0_Bool_false_true(s0);

macro SUCC_HTML_word(var1 p) =
   (p.0 notin $) & (p.1 notin $);

macro SUCC_HTML_anchor(var1 p) =
   (p.11 notin $) &   
   (p.1 in $) & NULL(p.1) & (p.0 in $) & TYPE_URL(p.0) & (p.10 in $) & TYPE_HTML(p.10);

macro SUCC_HTML_bold(var1 p) =
   (p.1 notin $) &   (p.0 in $) & TYPE_HTML(p.0);

macro SUCC_HTML_italic(var1 p) =
   (p.1 notin $) &   (p.0 in $) & TYPE_HTML(p.0);

macro SUCC_HTML_paragraph(var1 p) =
   (p.0 notin $) & (p.1 notin $);

macro SUCC_HTML_rule(var1 p) =
   (p.0 notin $) & (p.1 notin $);

macro SUCC_HTML_list(var1 p) =
   (p.1 notin $) &   (p.0 in $) & TYPE_LIST(p.0);

macro SUCC_LIST_empty(var1 p) =
   (p.0 notin $) & (p.1 notin $);

macro SUCC_LIST_entity(var1 p) =
   (p.11 notin $) &   
   (p.1 in $) & NULL(p.1) & (p.0 in $) & TYPE_HTML(p.0) & (p.10 in $) & TYPE_LIST(p.10);

macro SUCC_URL_url(var1 p) =
   (p.0 notin $) & (p.1 notin $);

macro EQ0_HTML(var0 g0_l,g1_l,g2_l,g0_r,g1_r,g2_r) = (
   (g0_l <=> g0_r) & (g1_l <=> g1_r) & (g2_l <=> g2_r)
);

macro WF_HTML(var1 p,var2 G0,G1,G2) = TYPE_HTML(p) & (
   (GROUP_HTML_word(p,G0,G1,G2) & SUCC_HTML_word(p))
  |
   (GROUP_HTML_anchor(p,G0,G1,G2) & SUCC_HTML_anchor(p))
  |
   (GROUP_HTML_bold(p,G0,G1,G2) & SUCC_HTML_bold(p))
  |
   (GROUP_HTML_italic(p,G0,G1,G2) & SUCC_HTML_italic(p))
  |
   (GROUP_HTML_paragraph(p,G0,G1,G2) & SUCC_HTML_paragraph(p))
  |
   (GROUP_HTML_rule(p,G0,G1,G2) & SUCC_HTML_rule(p))
  |
   (GROUP_HTML_list(p,G0,G1,G2) & SUCC_HTML_list(p))
);

macro WF0_HTML(var0 t0,t1,g0,g1,g2) =
   TYPE0_HTML(t0,t1) & (
   (GROUP0_HTML_word(g0,g1,g2))
  |
   (GROUP0_HTML_anchor(g0,g1,g2))
  |
   (GROUP0_HTML_bold(g0,g1,g2))
  |
   (GROUP0_HTML_italic(g0,g1,g2))
  |
   (GROUP0_HTML_paragraph(g0,g1,g2))
  |
   (GROUP0_HTML_rule(g0,g1,g2))
  |
   (GROUP0_HTML_list(g0,g1,g2))
);

macro EQ0_LIST(var0 g0_l,g0_r) = (
   (g0_l <=> g0_r)
);

macro WF_LIST(var1 p,var2 G0) = TYPE_LIST(p) & (
   (GROUP_LIST_empty(p,G0) & SUCC_LIST_empty(p))
  |
   (GROUP_LIST_entity(p,G0) & SUCC_LIST_entity(p))
);

macro WF0_LIST(var0 t0,t1,g0) =
   TYPE0_LIST(t0,t1) & (
   (GROUP0_LIST_empty(g0))
  |
   (GROUP0_LIST_entity(g0))
);

macro WF_URL(var1 p) = TYPE_URL(p) & (
   (SUCC_URL_url(p))
);

macro WF0_URL(var0 t0,t1) =
   TYPE0_URL(t0,t1);

macro TREE_HTML(var1 p,var2 G0,G1,G2) =
   TYPE_HTML(p) & (all1 [p] q: (p<=q) => (NULL(q) | WF_HTML(q,G0,G1,G2) | WF_LIST(q,G0) | WF_URL(q)));

macro SKEL_HTML(var1 p,var2 G0_f,G1_f,G2_f) =
   all1 [p] q: (p<=q) => (
   (TYPE_HTML(q) => (
      (GROUP_HTML_word(q,G0,G1,G2) <=> GROUP_HTML_word(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_anchor(q,G0,G1,G2) <=> GROUP_HTML_anchor(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_bold(q,G0,G1,G2) <=> GROUP_HTML_bold(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_italic(q,G0,G1,G2) <=> GROUP_HTML_italic(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_paragraph(q,G0,G1,G2) <=> GROUP_HTML_paragraph(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_rule(q,G0,G1,G2) <=> GROUP_HTML_rule(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_list(q,G0,G1,G2) <=> GROUP_HTML_list(q,G0_f,G1_f,G2_f))
   )) &
   (TYPE_LIST(q) => (
      (GROUP_LIST_empty(q,G0) <=> GROUP_LIST_empty(q,G0_f)) &
      (GROUP_LIST_entity(q,G0) <=> GROUP_LIST_entity(q,G0_f))
   )) &
   (TYPE_URL(q) => (
      true
   ))
);

macro TREE_LIST(var1 p,var2 G0,G1,G2) =
   TYPE_LIST(p) & (all1 [p] q: (p<=q) => (NULL(q) | WF_LIST(q,G0) | WF_HTML(q,G0,G1,G2) | WF_URL(q)));

macro SKEL_LIST(var1 p,var2 G0_f,G1_f,G2_f) =
   all1 [p] q: (p<=q) => (
   (TYPE_LIST(q) => (
      (GROUP_LIST_empty(q,G0) <=> GROUP_LIST_empty(q,G0_f)) &
      (GROUP_LIST_entity(q,G0) <=> GROUP_LIST_entity(q,G0_f))
   )) &
   (TYPE_HTML(q) => (
      (GROUP_HTML_word(q,G0,G1,G2) <=> GROUP_HTML_word(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_anchor(q,G0,G1,G2) <=> GROUP_HTML_anchor(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_bold(q,G0,G1,G2) <=> GROUP_HTML_bold(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_italic(q,G0,G1,G2) <=> GROUP_HTML_italic(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_paragraph(q,G0,G1,G2) <=> GROUP_HTML_paragraph(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_rule(q,G0,G1,G2) <=> GROUP_HTML_rule(q,G0_f,G1_f,G2_f)) &
      (GROUP_HTML_list(q,G0,G1,G2) <=> GROUP_HTML_list(q,G0_f,G1_f,G2_f))
   )) &
   (TYPE_URL(q) => (
      true
   ))
);

macro TREE_URL(var1 p) =
   TYPE_URL(p) & (all1 [p] q: (p<=q) => (NULL(q) | WF_URL(q)));

macro SKEL_URL(var1 p) =
   all1 [p] q: (p<=q) => (
   (TYPE_URL(q) => (
      true
   ))
);

macro DOT_u(var1 p,var1 q) =
   (TYPE_HTML(p) & GROUP_HTML_word(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_anchor(p,G0,G1,G2) & (q=p.0))
 | (TYPE_HTML(p) & GROUP_HTML_bold(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_italic(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_paragraph(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_rule(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_list(p,G0,G1,G2) & (q=p));

macro DOT_a(var1 p,var1 q) =
   (TYPE_HTML(p) & GROUP_HTML_word(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_anchor(p,G0,G1,G2) & (q=p.10))
 | (TYPE_HTML(p) & GROUP_HTML_bold(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_italic(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_paragraph(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_rule(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_list(p,G0,G1,G2) & (q=p));

macro DOT_b(var1 p,var1 q) =
   (TYPE_HTML(p) & GROUP_HTML_word(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_anchor(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_bold(p,G0,G1,G2) & (q=p.0))
 | (TYPE_HTML(p) & GROUP_HTML_italic(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_paragraph(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_rule(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_list(p,G0,G1,G2) & (q=p));

macro DOT_i(var1 p,var1 q) =
   (TYPE_HTML(p) & GROUP_HTML_word(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_anchor(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_bold(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_italic(p,G0,G1,G2) & (q=p.0))
 | (TYPE_HTML(p) & GROUP_HTML_paragraph(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_rule(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_list(p,G0,G1,G2) & (q=p));

macro DOT_l(var1 p,var1 q) =
   (TYPE_HTML(p) & GROUP_HTML_word(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_anchor(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_bold(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_italic(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_paragraph(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_rule(p,G0,G1,G2) & (q=p))
 | (TYPE_HTML(p) & GROUP_HTML_list(p,G0,G1,G2) & (q=p.0));

macro DOT_h(var1 p,var1 q) =
   (TYPE_LIST(p) & GROUP_LIST_empty(p,G0) & (q=p))
 | (TYPE_LIST(p) & GROUP_LIST_entity(p,G0) & (q=p.0));

macro DOT_next(var1 p,var1 q) =
   (TYPE_LIST(p) & GROUP_LIST_empty(p,G0) & (q=p))
 | (TYPE_LIST(p) & GROUP_LIST_entity(p,G0) & (q=p.10));

macro DOT(var1 p,var1 q) =
   DOT_u(p,q) | DOT_a(p,q) | DOT_b(p,q) | DOT_i(p,q) | DOT_l(p,q) | DOT_h(p,q) | DOT_next(p,q);

macro UP(var1 p,var1 q) =
   (root(p,[p]) & p=q) | DOT(q,p);

# Free variables

assert ex1 [UNI_H] p: root(p,[p]) & TREE_HTML(p,G0,G1,G2);

# Functions

pred FUNC_NoNestedAnchors(universe UNI_h,var2 G0_h,G1_h,G2_h) =
(all1 [UNI_h] POS_p: (TYPE_HTML(POS_p)) => ((ex0 t0_1,t1_1,g0_1,g1_1,g2_1: ex0 t0_4,t1_4,g0_4,g1_4,g2_4: 
(ex1  [UNI_h] POS3: (POS3=POS_p) & (t1_1<=>(POS3 in T1)) & (t0_1<=>(POS3 in T0)) & 
(g2_1<=>(POS3 in G2)) & (g1_1<=>(POS3 in G1)) & (g0_1<=>(POS3 in G0))) & ((TYPE0_HTML(t0_4,t1_4) 
& g0_4 & ~g1_4 & ~g2_4)) & EQ0_HTML(g0_1,g1_1,g2_1,g0_4,g1_4,g2_4)) => (~(ex1 [UNI_h] 
POS_q: (TYPE_HTML(POS_q)) & ((ex1 [UNI_h] POS6: ex1 [UNI_h] POS8: (POS6=POS_p) & 
(POS8=POS_q) & (POS6 < POS8)) & (ex0 t0_9,t1_9,g0_9,g1_9,g2_9: ex0 t0_12,t1_12,g0_12,g1_12,g2_12: 
(ex1 [UNI_h] POS11: (POS11=POS_q) & (t1_9<=>(POS11 in T1)) & (t0_9<=>(POS11 in T0)) 
& (g2_9<=>(POS11 in G2)) & (g1_9<=>(POS11 in G1)) & (g0_9<=>(POS11 in G0))) & ((TYPE0_HTML(t0_12,t1_12) 
& g0_12 & ~g1_12 & ~g2_12)) & EQ0_HTML(g0_9,g1_9,g2_9,g0_12,g1_12,g2_12)))))));

# Main formula

export("html.gta",(ex2 G0_13,G1_13,G2_13: ((G0_13=G0) & (G1_13=G1) & (G2_13=G2)) & FUNC_NoNestedAnchors(UNI_H,G0_13,G1_13,G2_13)));