eyeling 1.13.0 → 1.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/examples/output/takeuchi.n3 +1003 -1
- package/examples/takeuchi.n3 +66 -13
- package/eyeling.js +79 -1
- package/lib/engine.js +79 -1
- package/package.json +1 -1
- package/test/api.test.js +28 -0
|
@@ -1,3 +1,1005 @@
|
|
|
1
1
|
@prefix : <https://eyereasoner.github.io/eye/reasoning#> .
|
|
2
2
|
|
|
3
|
-
(
|
|
3
|
+
(33 13 8) :needTak true .
|
|
4
|
+
(12 8 34) :needTak true .
|
|
5
|
+
(7 34 13) :needTak true .
|
|
6
|
+
(7 34 13) :tak 13 .
|
|
7
|
+
(32 13 8) :needTak true .
|
|
8
|
+
(12 8 33) :needTak true .
|
|
9
|
+
(7 33 13) :needTak true .
|
|
10
|
+
(11 8 34) :needTak true .
|
|
11
|
+
(7 34 12) :needTak true .
|
|
12
|
+
(33 12 8) :needTak true .
|
|
13
|
+
(7 33 13) :tak 13 .
|
|
14
|
+
(7 34 12) :tak 12 .
|
|
15
|
+
(31 13 8) :needTak true .
|
|
16
|
+
(12 8 32) :needTak true .
|
|
17
|
+
(7 32 13) :needTak true .
|
|
18
|
+
(11 8 33) :needTak true .
|
|
19
|
+
(7 33 12) :needTak true .
|
|
20
|
+
(32 12 8) :needTak true .
|
|
21
|
+
(10 8 34) :needTak true .
|
|
22
|
+
(7 34 11) :needTak true .
|
|
23
|
+
(33 11 8) :needTak true .
|
|
24
|
+
(7 32 13) :tak 13 .
|
|
25
|
+
(7 33 12) :tak 12 .
|
|
26
|
+
(7 34 11) :tak 11 .
|
|
27
|
+
(30 13 8) :needTak true .
|
|
28
|
+
(12 8 31) :needTak true .
|
|
29
|
+
(7 31 13) :needTak true .
|
|
30
|
+
(11 8 32) :needTak true .
|
|
31
|
+
(7 32 12) :needTak true .
|
|
32
|
+
(31 12 8) :needTak true .
|
|
33
|
+
(10 8 33) :needTak true .
|
|
34
|
+
(7 33 11) :needTak true .
|
|
35
|
+
(32 11 8) :needTak true .
|
|
36
|
+
(9 8 34) :needTak true .
|
|
37
|
+
(7 34 10) :needTak true .
|
|
38
|
+
(33 10 8) :needTak true .
|
|
39
|
+
(7 31 13) :tak 13 .
|
|
40
|
+
(7 32 12) :tak 12 .
|
|
41
|
+
(7 33 11) :tak 11 .
|
|
42
|
+
(7 34 10) :tak 10 .
|
|
43
|
+
(29 13 8) :needTak true .
|
|
44
|
+
(12 8 30) :needTak true .
|
|
45
|
+
(7 30 13) :needTak true .
|
|
46
|
+
(11 8 31) :needTak true .
|
|
47
|
+
(7 31 12) :needTak true .
|
|
48
|
+
(30 12 8) :needTak true .
|
|
49
|
+
(10 8 32) :needTak true .
|
|
50
|
+
(7 32 11) :needTak true .
|
|
51
|
+
(31 11 8) :needTak true .
|
|
52
|
+
(9 8 33) :needTak true .
|
|
53
|
+
(7 33 10) :needTak true .
|
|
54
|
+
(32 10 8) :needTak true .
|
|
55
|
+
(8 8 34) :needTak true .
|
|
56
|
+
(7 34 9) :needTak true .
|
|
57
|
+
(33 9 8) :needTak true .
|
|
58
|
+
(7 30 13) :tak 13 .
|
|
59
|
+
(7 31 12) :tak 12 .
|
|
60
|
+
(7 32 11) :tak 11 .
|
|
61
|
+
(7 33 10) :tak 10 .
|
|
62
|
+
(8 8 34) :tak 34 .
|
|
63
|
+
(7 34 9) :tak 9 .
|
|
64
|
+
(28 13 8) :needTak true .
|
|
65
|
+
(12 8 29) :needTak true .
|
|
66
|
+
(7 29 13) :needTak true .
|
|
67
|
+
(11 8 30) :needTak true .
|
|
68
|
+
(7 30 12) :needTak true .
|
|
69
|
+
(29 12 8) :needTak true .
|
|
70
|
+
(10 8 31) :needTak true .
|
|
71
|
+
(7 31 11) :needTak true .
|
|
72
|
+
(30 11 8) :needTak true .
|
|
73
|
+
(9 8 32) :needTak true .
|
|
74
|
+
(7 32 10) :needTak true .
|
|
75
|
+
(31 10 8) :needTak true .
|
|
76
|
+
(8 8 33) :needTak true .
|
|
77
|
+
(7 33 9) :needTak true .
|
|
78
|
+
(32 9 8) :needTak true .
|
|
79
|
+
(7 29 13) :tak 13 .
|
|
80
|
+
(7 30 12) :tak 12 .
|
|
81
|
+
(7 31 11) :tak 11 .
|
|
82
|
+
(7 32 10) :tak 10 .
|
|
83
|
+
(8 8 33) :tak 33 .
|
|
84
|
+
(7 33 9) :tak 9 .
|
|
85
|
+
(27 13 8) :needTak true .
|
|
86
|
+
(12 8 28) :needTak true .
|
|
87
|
+
(7 28 13) :needTak true .
|
|
88
|
+
(11 8 29) :needTak true .
|
|
89
|
+
(7 29 12) :needTak true .
|
|
90
|
+
(28 12 8) :needTak true .
|
|
91
|
+
(10 8 30) :needTak true .
|
|
92
|
+
(7 30 11) :needTak true .
|
|
93
|
+
(29 11 8) :needTak true .
|
|
94
|
+
(9 8 31) :needTak true .
|
|
95
|
+
(7 31 10) :needTak true .
|
|
96
|
+
(30 10 8) :needTak true .
|
|
97
|
+
(8 8 32) :needTak true .
|
|
98
|
+
(7 32 9) :needTak true .
|
|
99
|
+
(31 9 8) :needTak true .
|
|
100
|
+
(7 28 13) :tak 13 .
|
|
101
|
+
(7 29 12) :tak 12 .
|
|
102
|
+
(7 30 11) :tak 11 .
|
|
103
|
+
(7 31 10) :tak 10 .
|
|
104
|
+
(8 8 32) :tak 32 .
|
|
105
|
+
(7 32 9) :tak 9 .
|
|
106
|
+
(26 13 8) :needTak true .
|
|
107
|
+
(12 8 27) :needTak true .
|
|
108
|
+
(7 27 13) :needTak true .
|
|
109
|
+
(11 8 28) :needTak true .
|
|
110
|
+
(7 28 12) :needTak true .
|
|
111
|
+
(27 12 8) :needTak true .
|
|
112
|
+
(10 8 29) :needTak true .
|
|
113
|
+
(7 29 11) :needTak true .
|
|
114
|
+
(28 11 8) :needTak true .
|
|
115
|
+
(9 8 30) :needTak true .
|
|
116
|
+
(7 30 10) :needTak true .
|
|
117
|
+
(29 10 8) :needTak true .
|
|
118
|
+
(8 8 31) :needTak true .
|
|
119
|
+
(7 31 9) :needTak true .
|
|
120
|
+
(30 9 8) :needTak true .
|
|
121
|
+
(7 27 13) :tak 13 .
|
|
122
|
+
(7 28 12) :tak 12 .
|
|
123
|
+
(7 29 11) :tak 11 .
|
|
124
|
+
(7 30 10) :tak 10 .
|
|
125
|
+
(8 8 31) :tak 31 .
|
|
126
|
+
(7 31 9) :tak 9 .
|
|
127
|
+
(25 13 8) :needTak true .
|
|
128
|
+
(12 8 26) :needTak true .
|
|
129
|
+
(7 26 13) :needTak true .
|
|
130
|
+
(11 8 27) :needTak true .
|
|
131
|
+
(7 27 12) :needTak true .
|
|
132
|
+
(26 12 8) :needTak true .
|
|
133
|
+
(10 8 28) :needTak true .
|
|
134
|
+
(7 28 11) :needTak true .
|
|
135
|
+
(27 11 8) :needTak true .
|
|
136
|
+
(9 8 29) :needTak true .
|
|
137
|
+
(7 29 10) :needTak true .
|
|
138
|
+
(28 10 8) :needTak true .
|
|
139
|
+
(8 8 30) :needTak true .
|
|
140
|
+
(7 30 9) :needTak true .
|
|
141
|
+
(29 9 8) :needTak true .
|
|
142
|
+
(7 26 13) :tak 13 .
|
|
143
|
+
(7 27 12) :tak 12 .
|
|
144
|
+
(7 28 11) :tak 11 .
|
|
145
|
+
(7 29 10) :tak 10 .
|
|
146
|
+
(8 8 30) :tak 30 .
|
|
147
|
+
(7 30 9) :tak 9 .
|
|
148
|
+
(24 13 8) :needTak true .
|
|
149
|
+
(12 8 25) :needTak true .
|
|
150
|
+
(7 25 13) :needTak true .
|
|
151
|
+
(11 8 26) :needTak true .
|
|
152
|
+
(7 26 12) :needTak true .
|
|
153
|
+
(25 12 8) :needTak true .
|
|
154
|
+
(10 8 27) :needTak true .
|
|
155
|
+
(7 27 11) :needTak true .
|
|
156
|
+
(26 11 8) :needTak true .
|
|
157
|
+
(9 8 28) :needTak true .
|
|
158
|
+
(7 28 10) :needTak true .
|
|
159
|
+
(27 10 8) :needTak true .
|
|
160
|
+
(8 8 29) :needTak true .
|
|
161
|
+
(7 29 9) :needTak true .
|
|
162
|
+
(28 9 8) :needTak true .
|
|
163
|
+
(7 25 13) :tak 13 .
|
|
164
|
+
(7 26 12) :tak 12 .
|
|
165
|
+
(7 27 11) :tak 11 .
|
|
166
|
+
(7 28 10) :tak 10 .
|
|
167
|
+
(8 8 29) :tak 29 .
|
|
168
|
+
(7 29 9) :tak 9 .
|
|
169
|
+
(23 13 8) :needTak true .
|
|
170
|
+
(12 8 24) :needTak true .
|
|
171
|
+
(7 24 13) :needTak true .
|
|
172
|
+
(11 8 25) :needTak true .
|
|
173
|
+
(7 25 12) :needTak true .
|
|
174
|
+
(24 12 8) :needTak true .
|
|
175
|
+
(10 8 26) :needTak true .
|
|
176
|
+
(7 26 11) :needTak true .
|
|
177
|
+
(25 11 8) :needTak true .
|
|
178
|
+
(9 8 27) :needTak true .
|
|
179
|
+
(7 27 10) :needTak true .
|
|
180
|
+
(26 10 8) :needTak true .
|
|
181
|
+
(8 8 28) :needTak true .
|
|
182
|
+
(7 28 9) :needTak true .
|
|
183
|
+
(27 9 8) :needTak true .
|
|
184
|
+
(7 24 13) :tak 13 .
|
|
185
|
+
(7 25 12) :tak 12 .
|
|
186
|
+
(7 26 11) :tak 11 .
|
|
187
|
+
(7 27 10) :tak 10 .
|
|
188
|
+
(8 8 28) :tak 28 .
|
|
189
|
+
(7 28 9) :tak 9 .
|
|
190
|
+
(22 13 8) :needTak true .
|
|
191
|
+
(12 8 23) :needTak true .
|
|
192
|
+
(7 23 13) :needTak true .
|
|
193
|
+
(11 8 24) :needTak true .
|
|
194
|
+
(7 24 12) :needTak true .
|
|
195
|
+
(23 12 8) :needTak true .
|
|
196
|
+
(10 8 25) :needTak true .
|
|
197
|
+
(7 25 11) :needTak true .
|
|
198
|
+
(24 11 8) :needTak true .
|
|
199
|
+
(9 8 26) :needTak true .
|
|
200
|
+
(7 26 10) :needTak true .
|
|
201
|
+
(25 10 8) :needTak true .
|
|
202
|
+
(8 8 27) :needTak true .
|
|
203
|
+
(7 27 9) :needTak true .
|
|
204
|
+
(26 9 8) :needTak true .
|
|
205
|
+
(7 23 13) :tak 13 .
|
|
206
|
+
(7 24 12) :tak 12 .
|
|
207
|
+
(7 25 11) :tak 11 .
|
|
208
|
+
(7 26 10) :tak 10 .
|
|
209
|
+
(8 8 27) :tak 27 .
|
|
210
|
+
(7 27 9) :tak 9 .
|
|
211
|
+
(21 13 8) :needTak true .
|
|
212
|
+
(12 8 22) :needTak true .
|
|
213
|
+
(7 22 13) :needTak true .
|
|
214
|
+
(11 8 23) :needTak true .
|
|
215
|
+
(7 23 12) :needTak true .
|
|
216
|
+
(22 12 8) :needTak true .
|
|
217
|
+
(10 8 24) :needTak true .
|
|
218
|
+
(7 24 11) :needTak true .
|
|
219
|
+
(23 11 8) :needTak true .
|
|
220
|
+
(9 8 25) :needTak true .
|
|
221
|
+
(7 25 10) :needTak true .
|
|
222
|
+
(24 10 8) :needTak true .
|
|
223
|
+
(8 8 26) :needTak true .
|
|
224
|
+
(7 26 9) :needTak true .
|
|
225
|
+
(25 9 8) :needTak true .
|
|
226
|
+
(7 22 13) :tak 13 .
|
|
227
|
+
(7 23 12) :tak 12 .
|
|
228
|
+
(7 24 11) :tak 11 .
|
|
229
|
+
(7 25 10) :tak 10 .
|
|
230
|
+
(8 8 26) :tak 26 .
|
|
231
|
+
(7 26 9) :tak 9 .
|
|
232
|
+
(20 13 8) :needTak true .
|
|
233
|
+
(12 8 21) :needTak true .
|
|
234
|
+
(7 21 13) :needTak true .
|
|
235
|
+
(11 8 22) :needTak true .
|
|
236
|
+
(7 22 12) :needTak true .
|
|
237
|
+
(21 12 8) :needTak true .
|
|
238
|
+
(10 8 23) :needTak true .
|
|
239
|
+
(7 23 11) :needTak true .
|
|
240
|
+
(22 11 8) :needTak true .
|
|
241
|
+
(9 8 24) :needTak true .
|
|
242
|
+
(7 24 10) :needTak true .
|
|
243
|
+
(23 10 8) :needTak true .
|
|
244
|
+
(8 8 25) :needTak true .
|
|
245
|
+
(7 25 9) :needTak true .
|
|
246
|
+
(24 9 8) :needTak true .
|
|
247
|
+
(7 21 13) :tak 13 .
|
|
248
|
+
(7 22 12) :tak 12 .
|
|
249
|
+
(7 23 11) :tak 11 .
|
|
250
|
+
(7 24 10) :tak 10 .
|
|
251
|
+
(8 8 25) :tak 25 .
|
|
252
|
+
(7 25 9) :tak 9 .
|
|
253
|
+
(19 13 8) :needTak true .
|
|
254
|
+
(12 8 20) :needTak true .
|
|
255
|
+
(7 20 13) :needTak true .
|
|
256
|
+
(11 8 21) :needTak true .
|
|
257
|
+
(7 21 12) :needTak true .
|
|
258
|
+
(20 12 8) :needTak true .
|
|
259
|
+
(10 8 22) :needTak true .
|
|
260
|
+
(7 22 11) :needTak true .
|
|
261
|
+
(21 11 8) :needTak true .
|
|
262
|
+
(9 8 23) :needTak true .
|
|
263
|
+
(7 23 10) :needTak true .
|
|
264
|
+
(22 10 8) :needTak true .
|
|
265
|
+
(8 8 24) :needTak true .
|
|
266
|
+
(7 24 9) :needTak true .
|
|
267
|
+
(23 9 8) :needTak true .
|
|
268
|
+
(7 20 13) :tak 13 .
|
|
269
|
+
(7 21 12) :tak 12 .
|
|
270
|
+
(7 22 11) :tak 11 .
|
|
271
|
+
(7 23 10) :tak 10 .
|
|
272
|
+
(8 8 24) :tak 24 .
|
|
273
|
+
(7 24 9) :tak 9 .
|
|
274
|
+
(18 13 8) :needTak true .
|
|
275
|
+
(12 8 19) :needTak true .
|
|
276
|
+
(7 19 13) :needTak true .
|
|
277
|
+
(11 8 20) :needTak true .
|
|
278
|
+
(7 20 12) :needTak true .
|
|
279
|
+
(19 12 8) :needTak true .
|
|
280
|
+
(10 8 21) :needTak true .
|
|
281
|
+
(7 21 11) :needTak true .
|
|
282
|
+
(20 11 8) :needTak true .
|
|
283
|
+
(9 8 22) :needTak true .
|
|
284
|
+
(7 22 10) :needTak true .
|
|
285
|
+
(21 10 8) :needTak true .
|
|
286
|
+
(8 8 23) :needTak true .
|
|
287
|
+
(7 23 9) :needTak true .
|
|
288
|
+
(22 9 8) :needTak true .
|
|
289
|
+
(7 19 13) :tak 13 .
|
|
290
|
+
(7 20 12) :tak 12 .
|
|
291
|
+
(7 21 11) :tak 11 .
|
|
292
|
+
(7 22 10) :tak 10 .
|
|
293
|
+
(8 8 23) :tak 23 .
|
|
294
|
+
(7 23 9) :tak 9 .
|
|
295
|
+
(17 13 8) :needTak true .
|
|
296
|
+
(12 8 18) :needTak true .
|
|
297
|
+
(7 18 13) :needTak true .
|
|
298
|
+
(11 8 19) :needTak true .
|
|
299
|
+
(7 19 12) :needTak true .
|
|
300
|
+
(18 12 8) :needTak true .
|
|
301
|
+
(10 8 20) :needTak true .
|
|
302
|
+
(7 20 11) :needTak true .
|
|
303
|
+
(19 11 8) :needTak true .
|
|
304
|
+
(9 8 21) :needTak true .
|
|
305
|
+
(7 21 10) :needTak true .
|
|
306
|
+
(20 10 8) :needTak true .
|
|
307
|
+
(8 8 22) :needTak true .
|
|
308
|
+
(7 22 9) :needTak true .
|
|
309
|
+
(21 9 8) :needTak true .
|
|
310
|
+
(7 18 13) :tak 13 .
|
|
311
|
+
(7 19 12) :tak 12 .
|
|
312
|
+
(7 20 11) :tak 11 .
|
|
313
|
+
(7 21 10) :tak 10 .
|
|
314
|
+
(8 8 22) :tak 22 .
|
|
315
|
+
(7 22 9) :tak 9 .
|
|
316
|
+
(16 13 8) :needTak true .
|
|
317
|
+
(12 8 17) :needTak true .
|
|
318
|
+
(7 17 13) :needTak true .
|
|
319
|
+
(11 8 18) :needTak true .
|
|
320
|
+
(7 18 12) :needTak true .
|
|
321
|
+
(17 12 8) :needTak true .
|
|
322
|
+
(10 8 19) :needTak true .
|
|
323
|
+
(7 19 11) :needTak true .
|
|
324
|
+
(18 11 8) :needTak true .
|
|
325
|
+
(9 8 20) :needTak true .
|
|
326
|
+
(7 20 10) :needTak true .
|
|
327
|
+
(19 10 8) :needTak true .
|
|
328
|
+
(8 8 21) :needTak true .
|
|
329
|
+
(7 21 9) :needTak true .
|
|
330
|
+
(20 9 8) :needTak true .
|
|
331
|
+
(7 17 13) :tak 13 .
|
|
332
|
+
(7 18 12) :tak 12 .
|
|
333
|
+
(7 19 11) :tak 11 .
|
|
334
|
+
(7 20 10) :tak 10 .
|
|
335
|
+
(8 8 21) :tak 21 .
|
|
336
|
+
(7 21 9) :tak 9 .
|
|
337
|
+
(15 13 8) :needTak true .
|
|
338
|
+
(12 8 16) :needTak true .
|
|
339
|
+
(7 16 13) :needTak true .
|
|
340
|
+
(11 8 17) :needTak true .
|
|
341
|
+
(7 17 12) :needTak true .
|
|
342
|
+
(16 12 8) :needTak true .
|
|
343
|
+
(10 8 18) :needTak true .
|
|
344
|
+
(7 18 11) :needTak true .
|
|
345
|
+
(17 11 8) :needTak true .
|
|
346
|
+
(9 8 19) :needTak true .
|
|
347
|
+
(7 19 10) :needTak true .
|
|
348
|
+
(18 10 8) :needTak true .
|
|
349
|
+
(8 8 20) :needTak true .
|
|
350
|
+
(7 20 9) :needTak true .
|
|
351
|
+
(19 9 8) :needTak true .
|
|
352
|
+
(7 16 13) :tak 13 .
|
|
353
|
+
(7 17 12) :tak 12 .
|
|
354
|
+
(7 18 11) :tak 11 .
|
|
355
|
+
(7 19 10) :tak 10 .
|
|
356
|
+
(8 8 20) :tak 20 .
|
|
357
|
+
(7 20 9) :tak 9 .
|
|
358
|
+
(14 13 8) :needTak true .
|
|
359
|
+
(12 8 15) :needTak true .
|
|
360
|
+
(7 15 13) :needTak true .
|
|
361
|
+
(11 8 16) :needTak true .
|
|
362
|
+
(7 16 12) :needTak true .
|
|
363
|
+
(15 12 8) :needTak true .
|
|
364
|
+
(10 8 17) :needTak true .
|
|
365
|
+
(7 17 11) :needTak true .
|
|
366
|
+
(16 11 8) :needTak true .
|
|
367
|
+
(9 8 18) :needTak true .
|
|
368
|
+
(7 18 10) :needTak true .
|
|
369
|
+
(17 10 8) :needTak true .
|
|
370
|
+
(8 8 19) :needTak true .
|
|
371
|
+
(7 19 9) :needTak true .
|
|
372
|
+
(18 9 8) :needTak true .
|
|
373
|
+
(7 15 13) :tak 13 .
|
|
374
|
+
(7 16 12) :tak 12 .
|
|
375
|
+
(7 17 11) :tak 11 .
|
|
376
|
+
(7 18 10) :tak 10 .
|
|
377
|
+
(8 8 19) :tak 19 .
|
|
378
|
+
(7 19 9) :tak 9 .
|
|
379
|
+
(13 13 8) :needTak true .
|
|
380
|
+
(12 8 14) :needTak true .
|
|
381
|
+
(7 14 13) :needTak true .
|
|
382
|
+
(11 8 15) :needTak true .
|
|
383
|
+
(7 15 12) :needTak true .
|
|
384
|
+
(14 12 8) :needTak true .
|
|
385
|
+
(10 8 16) :needTak true .
|
|
386
|
+
(7 16 11) :needTak true .
|
|
387
|
+
(15 11 8) :needTak true .
|
|
388
|
+
(9 8 17) :needTak true .
|
|
389
|
+
(7 17 10) :needTak true .
|
|
390
|
+
(16 10 8) :needTak true .
|
|
391
|
+
(8 8 18) :needTak true .
|
|
392
|
+
(7 18 9) :needTak true .
|
|
393
|
+
(17 9 8) :needTak true .
|
|
394
|
+
(13 13 8) :tak 8 .
|
|
395
|
+
(7 14 13) :tak 13 .
|
|
396
|
+
(7 15 12) :tak 12 .
|
|
397
|
+
(7 16 11) :tak 11 .
|
|
398
|
+
(7 17 10) :tak 10 .
|
|
399
|
+
(8 8 18) :tak 18 .
|
|
400
|
+
(7 18 9) :tak 9 .
|
|
401
|
+
(11 8 14) :needTak true .
|
|
402
|
+
(7 14 12) :needTak true .
|
|
403
|
+
(13 12 8) :needTak true .
|
|
404
|
+
(10 8 15) :needTak true .
|
|
405
|
+
(7 15 11) :needTak true .
|
|
406
|
+
(14 11 8) :needTak true .
|
|
407
|
+
(9 8 16) :needTak true .
|
|
408
|
+
(7 16 10) :needTak true .
|
|
409
|
+
(15 10 8) :needTak true .
|
|
410
|
+
(8 8 17) :needTak true .
|
|
411
|
+
(7 17 9) :needTak true .
|
|
412
|
+
(16 9 8) :needTak true .
|
|
413
|
+
(7 14 12) :tak 12 .
|
|
414
|
+
(7 15 11) :tak 11 .
|
|
415
|
+
(7 16 10) :tak 10 .
|
|
416
|
+
(8 8 17) :tak 17 .
|
|
417
|
+
(7 17 9) :tak 9 .
|
|
418
|
+
(10 8 14) :needTak true .
|
|
419
|
+
(7 14 11) :needTak true .
|
|
420
|
+
(13 11 8) :needTak true .
|
|
421
|
+
(12 12 8) :needTak true .
|
|
422
|
+
(11 8 13) :needTak true .
|
|
423
|
+
(7 13 12) :needTak true .
|
|
424
|
+
(9 8 15) :needTak true .
|
|
425
|
+
(7 15 10) :needTak true .
|
|
426
|
+
(14 10 8) :needTak true .
|
|
427
|
+
(8 8 16) :needTak true .
|
|
428
|
+
(7 16 9) :needTak true .
|
|
429
|
+
(15 9 8) :needTak true .
|
|
430
|
+
(7 14 11) :tak 11 .
|
|
431
|
+
(12 12 8) :tak 8 .
|
|
432
|
+
(7 13 12) :tak 12 .
|
|
433
|
+
(7 15 10) :tak 10 .
|
|
434
|
+
(8 8 16) :tak 16 .
|
|
435
|
+
(7 16 9) :tak 9 .
|
|
436
|
+
(9 8 14) :needTak true .
|
|
437
|
+
(7 14 10) :needTak true .
|
|
438
|
+
(13 10 8) :needTak true .
|
|
439
|
+
(12 11 8) :needTak true .
|
|
440
|
+
(10 8 13) :needTak true .
|
|
441
|
+
(7 13 11) :needTak true .
|
|
442
|
+
(8 8 15) :needTak true .
|
|
443
|
+
(7 15 9) :needTak true .
|
|
444
|
+
(14 9 8) :needTak true .
|
|
445
|
+
(7 14 10) :tak 10 .
|
|
446
|
+
(7 13 11) :tak 11 .
|
|
447
|
+
(8 8 15) :tak 15 .
|
|
448
|
+
(7 15 9) :tak 9 .
|
|
449
|
+
(8 8 14) :needTak true .
|
|
450
|
+
(7 14 9) :needTak true .
|
|
451
|
+
(13 9 8) :needTak true .
|
|
452
|
+
(12 10 8) :needTak true .
|
|
453
|
+
(9 8 13) :needTak true .
|
|
454
|
+
(7 13 10) :needTak true .
|
|
455
|
+
(11 11 8) :needTak true .
|
|
456
|
+
(10 8 12) :needTak true .
|
|
457
|
+
(7 12 11) :needTak true .
|
|
458
|
+
(8 8 14) :tak 14 .
|
|
459
|
+
(7 14 9) :tak 9 .
|
|
460
|
+
(7 13 10) :tak 10 .
|
|
461
|
+
(11 11 8) :tak 8 .
|
|
462
|
+
(7 12 11) :tak 11 .
|
|
463
|
+
(12 9 8) :needTak true .
|
|
464
|
+
(8 8 13) :needTak true .
|
|
465
|
+
(7 13 9) :needTak true .
|
|
466
|
+
(11 10 8) :needTak true .
|
|
467
|
+
(9 8 12) :needTak true .
|
|
468
|
+
(7 12 10) :needTak true .
|
|
469
|
+
(8 8 13) :tak 13 .
|
|
470
|
+
(7 13 9) :tak 9 .
|
|
471
|
+
(7 12 10) :tak 10 .
|
|
472
|
+
(11 9 8) :needTak true .
|
|
473
|
+
(8 8 12) :needTak true .
|
|
474
|
+
(7 12 9) :needTak true .
|
|
475
|
+
(10 10 8) :needTak true .
|
|
476
|
+
(9 8 11) :needTak true .
|
|
477
|
+
(7 11 10) :needTak true .
|
|
478
|
+
(8 8 12) :tak 12 .
|
|
479
|
+
(7 12 9) :tak 9 .
|
|
480
|
+
(10 10 8) :tak 8 .
|
|
481
|
+
(7 11 10) :tak 10 .
|
|
482
|
+
(10 9 8) :needTak true .
|
|
483
|
+
(8 8 11) :needTak true .
|
|
484
|
+
(7 11 9) :needTak true .
|
|
485
|
+
(8 8 11) :tak 11 .
|
|
486
|
+
(7 11 9) :tak 9 .
|
|
487
|
+
(9 9 8) :needTak true .
|
|
488
|
+
(8 8 10) :needTak true .
|
|
489
|
+
(7 10 9) :needTak true .
|
|
490
|
+
(9 9 8) :tak 8 .
|
|
491
|
+
(8 8 10) :tak 10 .
|
|
492
|
+
(7 10 9) :tak 9 .
|
|
493
|
+
(8 10 9) :needTak true .
|
|
494
|
+
(8 10 9) :tak 9 .
|
|
495
|
+
(10 9 8) :tak 9 .
|
|
496
|
+
(9 11 9) :needTak true .
|
|
497
|
+
(11 9 9) :needTak true .
|
|
498
|
+
(10 9 9) :needTak true .
|
|
499
|
+
(8 9 11) :needTak true .
|
|
500
|
+
(8 11 9) :needTak true .
|
|
501
|
+
(9 11 9) :tak 9 .
|
|
502
|
+
(8 9 11) :tak 11 .
|
|
503
|
+
(8 11 9) :tak 9 .
|
|
504
|
+
(11 9 8) :tak 9 .
|
|
505
|
+
(9 9 9) :needTak true .
|
|
506
|
+
(8 9 10) :needTak true .
|
|
507
|
+
(9 9 9) :tak 9 .
|
|
508
|
+
(8 9 10) :tak 10 .
|
|
509
|
+
(9 12 9) :needTak true .
|
|
510
|
+
(12 9 9) :needTak true .
|
|
511
|
+
(9 10 9) :needTak true .
|
|
512
|
+
(8 9 12) :needTak true .
|
|
513
|
+
(8 12 9) :needTak true .
|
|
514
|
+
(9 12 9) :tak 9 .
|
|
515
|
+
(9 10 9) :tak 9 .
|
|
516
|
+
(8 9 12) :tak 12 .
|
|
517
|
+
(8 12 9) :tak 9 .
|
|
518
|
+
(12 9 8) :tak 9 .
|
|
519
|
+
(10 9 9) :tak 9 .
|
|
520
|
+
(9 13 9) :needTak true .
|
|
521
|
+
(13 9 9) :needTak true .
|
|
522
|
+
(11 9 9) :tak 9 .
|
|
523
|
+
(8 9 13) :needTak true .
|
|
524
|
+
(8 13 9) :needTak true .
|
|
525
|
+
(9 13 9) :tak 9 .
|
|
526
|
+
(8 9 13) :tak 13 .
|
|
527
|
+
(8 13 9) :tak 9 .
|
|
528
|
+
(13 9 8) :tak 9 .
|
|
529
|
+
(9 8 11) :tak 9 .
|
|
530
|
+
(12 9 9) :tak 9 .
|
|
531
|
+
(14 9 9) :needTak true .
|
|
532
|
+
(9 14 9) :needTak true .
|
|
533
|
+
(11 10 8) :tak 10 .
|
|
534
|
+
(9 8 12) :tak 9 .
|
|
535
|
+
(13 9 9) :tak 9 .
|
|
536
|
+
(8 9 14) :needTak true .
|
|
537
|
+
(8 14 9) :needTak true .
|
|
538
|
+
(9 14 9) :tak 9 .
|
|
539
|
+
(8 9 14) :tak 14 .
|
|
540
|
+
(8 14 9) :tak 9 .
|
|
541
|
+
(10 9 10) :needTak true .
|
|
542
|
+
(9 10 10) :needTak true .
|
|
543
|
+
(14 9 8) :tak 9 .
|
|
544
|
+
(9 8 13) :tak 9 .
|
|
545
|
+
(14 9 9) :tak 9 .
|
|
546
|
+
(9 9 10) :needTak true .
|
|
547
|
+
(8 10 10) :needTak true .
|
|
548
|
+
(9 10 10) :tak 10 .
|
|
549
|
+
(9 9 10) :tak 10 .
|
|
550
|
+
(8 10 10) :tak 10 .
|
|
551
|
+
(15 9 9) :needTak true .
|
|
552
|
+
(9 15 9) :needTak true .
|
|
553
|
+
(10 10 9) :needTak true .
|
|
554
|
+
(9 8 14) :tak 9 .
|
|
555
|
+
(10 8 12) :tak 10 .
|
|
556
|
+
(8 9 15) :needTak true .
|
|
557
|
+
(8 15 9) :needTak true .
|
|
558
|
+
(9 15 9) :tak 9 .
|
|
559
|
+
(10 10 9) :tak 9 .
|
|
560
|
+
(8 9 15) :tak 15 .
|
|
561
|
+
(8 15 9) :tak 9 .
|
|
562
|
+
(8 10 11) :needTak true .
|
|
563
|
+
(15 9 8) :tak 9 .
|
|
564
|
+
(10 9 10) :tak 9 .
|
|
565
|
+
(15 9 9) :tak 9 .
|
|
566
|
+
(8 10 11) :tak 11 .
|
|
567
|
+
(16 9 9) :needTak true .
|
|
568
|
+
(9 16 9) :needTak true .
|
|
569
|
+
(9 8 15) :tak 9 .
|
|
570
|
+
(12 11 8) :tak 11 .
|
|
571
|
+
(12 10 8) :tak 9 .
|
|
572
|
+
(8 9 16) :needTak true .
|
|
573
|
+
(8 16 9) :needTak true .
|
|
574
|
+
(9 16 9) :tak 9 .
|
|
575
|
+
(8 9 16) :tak 16 .
|
|
576
|
+
(8 16 9) :tak 9 .
|
|
577
|
+
(16 9 8) :tak 9 .
|
|
578
|
+
(13 10 8) :tak 10 .
|
|
579
|
+
(10 8 13) :tak 9 .
|
|
580
|
+
(16 9 9) :tak 9 .
|
|
581
|
+
(17 9 9) :needTak true .
|
|
582
|
+
(9 17 9) :needTak true .
|
|
583
|
+
(11 9 11) :needTak true .
|
|
584
|
+
(9 11 11) :needTak true .
|
|
585
|
+
(9 8 16) :tak 9 .
|
|
586
|
+
(10 8 14) :tak 10 .
|
|
587
|
+
(14 10 8) :tak 9 .
|
|
588
|
+
(8 9 17) :needTak true .
|
|
589
|
+
(8 17 9) :needTak true .
|
|
590
|
+
(10 9 11) :needTak true .
|
|
591
|
+
(8 11 11) :needTak true .
|
|
592
|
+
(10 11 9) :needTak true .
|
|
593
|
+
(9 17 9) :tak 9 .
|
|
594
|
+
(9 11 11) :tak 11 .
|
|
595
|
+
(8 9 17) :tak 17 .
|
|
596
|
+
(8 17 9) :tak 9 .
|
|
597
|
+
(8 11 11) :tak 11 .
|
|
598
|
+
(10 11 9) :tak 9 .
|
|
599
|
+
(17 9 8) :tak 9 .
|
|
600
|
+
(10 8 15) :tak 9 .
|
|
601
|
+
(15 10 8) :tak 10 .
|
|
602
|
+
(11 8 13) :tak 11 .
|
|
603
|
+
(17 9 9) :tak 9 .
|
|
604
|
+
(9 9 11) :needTak true .
|
|
605
|
+
(8 11 10) :needTak true .
|
|
606
|
+
(9 9 11) :tak 11 .
|
|
607
|
+
(8 11 10) :tak 10 .
|
|
608
|
+
(18 9 9) :needTak true .
|
|
609
|
+
(9 18 9) :needTak true .
|
|
610
|
+
(8 11 12) :needTak true .
|
|
611
|
+
(11 10 9) :needTak true .
|
|
612
|
+
(10 8 16) :tak 10 .
|
|
613
|
+
(9 8 17) :tak 9 .
|
|
614
|
+
(16 10 8) :tak 9 .
|
|
615
|
+
(8 9 18) :needTak true .
|
|
616
|
+
(8 18 9) :needTak true .
|
|
617
|
+
(9 18 9) :tak 9 .
|
|
618
|
+
(8 11 12) :tak 12 .
|
|
619
|
+
(8 9 18) :tak 18 .
|
|
620
|
+
(8 18 9) :tak 9 .
|
|
621
|
+
(9 11 10) :needTak true .
|
|
622
|
+
(10 8 17) :tak 9 .
|
|
623
|
+
(17 10 8) :tak 10 .
|
|
624
|
+
(18 9 8) :tak 9 .
|
|
625
|
+
(13 12 8) :tak 12 .
|
|
626
|
+
(18 9 9) :tak 9 .
|
|
627
|
+
(9 11 10) :tak 10 .
|
|
628
|
+
(19 9 9) :needTak true .
|
|
629
|
+
(9 19 9) :needTak true .
|
|
630
|
+
(9 8 18) :tak 9 .
|
|
631
|
+
(11 10 9) :tak 10 .
|
|
632
|
+
(8 9 19) :needTak true .
|
|
633
|
+
(8 19 9) :needTak true .
|
|
634
|
+
(9 19 9) :tak 9 .
|
|
635
|
+
(8 9 19) :tak 19 .
|
|
636
|
+
(8 19 9) :tak 9 .
|
|
637
|
+
(10 8 18) :tak 10 .
|
|
638
|
+
(18 10 8) :tak 9 .
|
|
639
|
+
(19 9 8) :tak 9 .
|
|
640
|
+
(10 9 11) :tak 10 .
|
|
641
|
+
(19 9 9) :tak 9 .
|
|
642
|
+
(20 9 9) :needTak true .
|
|
643
|
+
(9 20 9) :needTak true .
|
|
644
|
+
(9 8 19) :tak 9 .
|
|
645
|
+
(11 9 11) :tak 9 .
|
|
646
|
+
(8 9 20) :needTak true .
|
|
647
|
+
(8 20 9) :needTak true .
|
|
648
|
+
(9 20 9) :tak 9 .
|
|
649
|
+
(8 9 20) :tak 20 .
|
|
650
|
+
(8 20 9) :tak 9 .
|
|
651
|
+
(10 8 19) :tak 9 .
|
|
652
|
+
(19 10 8) :tak 10 .
|
|
653
|
+
(20 9 8) :tak 9 .
|
|
654
|
+
(13 11 8) :tak 9 .
|
|
655
|
+
(20 9 9) :tak 9 .
|
|
656
|
+
(21 9 9) :needTak true .
|
|
657
|
+
(9 21 9) :needTak true .
|
|
658
|
+
(9 10 11) :needTak true .
|
|
659
|
+
(9 8 20) :tak 9 .
|
|
660
|
+
(11 8 14) :tak 9 .
|
|
661
|
+
(8 9 21) :needTak true .
|
|
662
|
+
(8 21 9) :needTak true .
|
|
663
|
+
(9 21 9) :tak 9 .
|
|
664
|
+
(9 10 11) :tak 11 .
|
|
665
|
+
(8 9 21) :tak 21 .
|
|
666
|
+
(8 21 9) :tak 9 .
|
|
667
|
+
(9 12 12) :needTak true .
|
|
668
|
+
(12 9 12) :needTak true .
|
|
669
|
+
(10 8 20) :tak 10 .
|
|
670
|
+
(20 10 8) :tak 9 .
|
|
671
|
+
(21 9 8) :tak 9 .
|
|
672
|
+
(14 11 8) :tak 11 .
|
|
673
|
+
(21 9 9) :tak 9 .
|
|
674
|
+
(11 9 12) :needTak true .
|
|
675
|
+
(8 12 12) :needTak true .
|
|
676
|
+
(11 12 9) :needTak true .
|
|
677
|
+
(9 12 12) :tak 12 .
|
|
678
|
+
(8 12 12) :tak 12 .
|
|
679
|
+
(11 12 9) :tak 9 .
|
|
680
|
+
(22 9 9) :needTak true .
|
|
681
|
+
(9 22 9) :needTak true .
|
|
682
|
+
(9 8 21) :tak 9 .
|
|
683
|
+
(12 8 14) :tak 12 .
|
|
684
|
+
(11 8 15) :tak 11 .
|
|
685
|
+
(15 11 8) :tak 9 .
|
|
686
|
+
(10 9 12) :needTak true .
|
|
687
|
+
(8 12 11) :needTak true .
|
|
688
|
+
(11 11 9) :needTak true .
|
|
689
|
+
(8 9 22) :needTak true .
|
|
690
|
+
(8 22 9) :needTak true .
|
|
691
|
+
(9 22 9) :tak 9 .
|
|
692
|
+
(8 12 11) :tak 11 .
|
|
693
|
+
(11 11 9) :tak 9 .
|
|
694
|
+
(8 9 22) :tak 22 .
|
|
695
|
+
(8 22 9) :tak 9 .
|
|
696
|
+
(8 12 13) :needTak true .
|
|
697
|
+
(10 8 21) :tak 9 .
|
|
698
|
+
(21 10 8) :tak 10 .
|
|
699
|
+
(22 9 8) :tak 9 .
|
|
700
|
+
(11 8 16) :tak 9 .
|
|
701
|
+
(16 11 8) :tak 11 .
|
|
702
|
+
(22 9 9) :tak 9 .
|
|
703
|
+
(9 9 12) :needTak true .
|
|
704
|
+
(8 12 10) :needTak true .
|
|
705
|
+
(8 12 13) :tak 13 .
|
|
706
|
+
(9 9 12) :tak 12 .
|
|
707
|
+
(8 12 10) :tak 10 .
|
|
708
|
+
(23 9 9) :needTak true .
|
|
709
|
+
(9 23 9) :needTak true .
|
|
710
|
+
(12 10 10) :needTak true .
|
|
711
|
+
(9 8 22) :tak 9 .
|
|
712
|
+
(11 8 17) :tak 11 .
|
|
713
|
+
(17 11 8) :tak 9 .
|
|
714
|
+
(14 13 8) :tak 13 .
|
|
715
|
+
(8 9 23) :needTak true .
|
|
716
|
+
(8 23 9) :needTak true .
|
|
717
|
+
(11 10 10) :needTak true .
|
|
718
|
+
(9 10 12) :needTak true .
|
|
719
|
+
(9 12 10) :needTak true .
|
|
720
|
+
(9 23 9) :tak 9 .
|
|
721
|
+
(8 9 23) :tak 23 .
|
|
722
|
+
(8 23 9) :tak 9 .
|
|
723
|
+
(9 10 12) :tak 12 .
|
|
724
|
+
(9 12 10) :tak 10 .
|
|
725
|
+
(10 8 22) :tak 10 .
|
|
726
|
+
(22 10 8) :tak 9 .
|
|
727
|
+
(23 9 8) :tak 9 .
|
|
728
|
+
(11 8 18) :tak 9 .
|
|
729
|
+
(18 11 8) :tak 11 .
|
|
730
|
+
(23 9 9) :tak 9 .
|
|
731
|
+
(10 10 10) :needTak true .
|
|
732
|
+
(10 10 10) :tak 10 .
|
|
733
|
+
(24 9 9) :needTak true .
|
|
734
|
+
(9 24 9) :needTak true .
|
|
735
|
+
(10 11 10) :needTak true .
|
|
736
|
+
(9 8 23) :tak 9 .
|
|
737
|
+
(11 8 19) :tak 11 .
|
|
738
|
+
(19 11 8) :tak 9 .
|
|
739
|
+
(8 9 24) :needTak true .
|
|
740
|
+
(8 24 9) :needTak true .
|
|
741
|
+
(9 24 9) :tak 9 .
|
|
742
|
+
(10 11 10) :tak 10 .
|
|
743
|
+
(8 9 24) :tak 24 .
|
|
744
|
+
(8 24 9) :tak 9 .
|
|
745
|
+
(10 8 23) :tak 9 .
|
|
746
|
+
(23 10 8) :tak 10 .
|
|
747
|
+
(24 9 8) :tak 9 .
|
|
748
|
+
(11 8 20) :tak 9 .
|
|
749
|
+
(20 11 8) :tak 11 .
|
|
750
|
+
(11 10 10) :tak 10 .
|
|
751
|
+
(24 9 9) :tak 9 .
|
|
752
|
+
(25 9 9) :needTak true .
|
|
753
|
+
(9 25 9) :needTak true .
|
|
754
|
+
(10 12 10) :needTak true .
|
|
755
|
+
(9 8 24) :tak 9 .
|
|
756
|
+
(11 8 21) :tak 11 .
|
|
757
|
+
(21 11 8) :tak 9 .
|
|
758
|
+
(8 9 25) :needTak true .
|
|
759
|
+
(8 25 9) :needTak true .
|
|
760
|
+
(9 25 9) :tak 9 .
|
|
761
|
+
(10 12 10) :tak 10 .
|
|
762
|
+
(8 9 25) :tak 25 .
|
|
763
|
+
(8 25 9) :tak 9 .
|
|
764
|
+
(10 8 24) :tak 10 .
|
|
765
|
+
(24 10 8) :tak 9 .
|
|
766
|
+
(25 9 8) :tak 9 .
|
|
767
|
+
(11 8 22) :tak 9 .
|
|
768
|
+
(22 11 8) :tak 11 .
|
|
769
|
+
(12 10 10) :tak 10 .
|
|
770
|
+
(25 9 9) :tak 9 .
|
|
771
|
+
(26 9 9) :needTak true .
|
|
772
|
+
(9 26 9) :needTak true .
|
|
773
|
+
(11 8 23) :tak 11 .
|
|
774
|
+
(23 11 8) :tak 9 .
|
|
775
|
+
(9 8 25) :tak 9 .
|
|
776
|
+
(10 9 12) :tak 10 .
|
|
777
|
+
(8 9 26) :needTak true .
|
|
778
|
+
(8 26 9) :needTak true .
|
|
779
|
+
(9 26 9) :tak 9 .
|
|
780
|
+
(8 9 26) :tak 26 .
|
|
781
|
+
(8 26 9) :tak 9 .
|
|
782
|
+
(11 8 24) :tak 9 .
|
|
783
|
+
(10 8 25) :tak 9 .
|
|
784
|
+
(24 11 8) :tak 11 .
|
|
785
|
+
(25 10 8) :tak 10 .
|
|
786
|
+
(26 9 8) :tak 9 .
|
|
787
|
+
(11 9 12) :tak 9 .
|
|
788
|
+
(26 9 9) :tak 9 .
|
|
789
|
+
(27 9 9) :needTak true .
|
|
790
|
+
(9 27 9) :needTak true .
|
|
791
|
+
(11 8 25) :tak 11 .
|
|
792
|
+
(25 11 8) :tak 9 .
|
|
793
|
+
(9 8 26) :tak 9 .
|
|
794
|
+
(12 9 12) :tak 9 .
|
|
795
|
+
(8 9 27) :needTak true .
|
|
796
|
+
(8 27 9) :needTak true .
|
|
797
|
+
(9 27 9) :tak 9 .
|
|
798
|
+
(8 9 27) :tak 27 .
|
|
799
|
+
(8 27 9) :tak 9 .
|
|
800
|
+
(10 8 26) :tak 10 .
|
|
801
|
+
(26 10 8) :tak 9 .
|
|
802
|
+
(27 9 8) :tak 9 .
|
|
803
|
+
(14 12 8) :tak 9 .
|
|
804
|
+
(27 9 9) :tak 9 .
|
|
805
|
+
(28 9 9) :needTak true .
|
|
806
|
+
(9 28 9) :needTak true .
|
|
807
|
+
(9 11 12) :needTak true .
|
|
808
|
+
(11 8 26) :tak 9 .
|
|
809
|
+
(26 11 8) :tak 11 .
|
|
810
|
+
(9 8 27) :tak 9 .
|
|
811
|
+
(12 8 15) :tak 9 .
|
|
812
|
+
(8 9 28) :needTak true .
|
|
813
|
+
(8 28 9) :needTak true .
|
|
814
|
+
(9 28 9) :tak 9 .
|
|
815
|
+
(9 11 12) :tak 12 .
|
|
816
|
+
(8 9 28) :tak 28 .
|
|
817
|
+
(8 28 9) :tak 9 .
|
|
818
|
+
(13 9 13) :needTak true .
|
|
819
|
+
(10 8 27) :tak 9 .
|
|
820
|
+
(27 10 8) :tak 10 .
|
|
821
|
+
(28 9 8) :tak 9 .
|
|
822
|
+
(15 12 8) :tak 12 .
|
|
823
|
+
(28 9 9) :tak 9 .
|
|
824
|
+
(12 9 13) :needTak true .
|
|
825
|
+
(8 13 13) :needTak true .
|
|
826
|
+
(12 13 9) :needTak true .
|
|
827
|
+
(8 13 13) :tak 13 .
|
|
828
|
+
(12 13 9) :tak 9 .
|
|
829
|
+
(29 9 9) :needTak true .
|
|
830
|
+
(9 29 9) :needTak true .
|
|
831
|
+
(11 8 27) :tak 11 .
|
|
832
|
+
(27 11 8) :tak 9 .
|
|
833
|
+
(9 8 28) :tak 9 .
|
|
834
|
+
(12 8 16) :tak 12 .
|
|
835
|
+
(16 12 8) :tak 9 .
|
|
836
|
+
(11 9 13) :needTak true .
|
|
837
|
+
(8 13 12) :needTak true .
|
|
838
|
+
(12 12 9) :needTak true .
|
|
839
|
+
(8 9 29) :needTak true .
|
|
840
|
+
(8 29 9) :needTak true .
|
|
841
|
+
(9 29 9) :tak 9 .
|
|
842
|
+
(8 13 12) :tak 12 .
|
|
843
|
+
(12 12 9) :tak 9 .
|
|
844
|
+
(8 9 29) :tak 29 .
|
|
845
|
+
(8 29 9) :tak 9 .
|
|
846
|
+
(10 8 28) :tak 10 .
|
|
847
|
+
(28 10 8) :tak 9 .
|
|
848
|
+
(29 9 8) :tak 9 .
|
|
849
|
+
(12 8 17) :tak 9 .
|
|
850
|
+
(17 12 8) :tak 12 .
|
|
851
|
+
(29 9 9) :tak 9 .
|
|
852
|
+
(10 9 13) :needTak true .
|
|
853
|
+
(8 13 11) :needTak true .
|
|
854
|
+
(12 11 9) :needTak true .
|
|
855
|
+
(8 13 11) :tak 11 .
|
|
856
|
+
(30 9 9) :needTak true .
|
|
857
|
+
(9 30 9) :needTak true .
|
|
858
|
+
(11 8 28) :tak 9 .
|
|
859
|
+
(28 11 8) :tak 11 .
|
|
860
|
+
(9 8 29) :tak 9 .
|
|
861
|
+
(12 8 18) :tak 12 .
|
|
862
|
+
(18 12 8) :tak 9 .
|
|
863
|
+
(12 11 9) :tak 11 .
|
|
864
|
+
(9 9 13) :needTak true .
|
|
865
|
+
(8 13 10) :needTak true .
|
|
866
|
+
(12 10 9) :needTak true .
|
|
867
|
+
(8 9 30) :needTak true .
|
|
868
|
+
(8 30 9) :needTak true .
|
|
869
|
+
(9 30 9) :tak 9 .
|
|
870
|
+
(9 9 13) :tak 13 .
|
|
871
|
+
(8 13 10) :tak 10 .
|
|
872
|
+
(8 9 30) :tak 30 .
|
|
873
|
+
(8 30 9) :tak 9 .
|
|
874
|
+
(10 8 29) :tak 9 .
|
|
875
|
+
(29 10 8) :tak 10 .
|
|
876
|
+
(30 9 8) :tak 9 .
|
|
877
|
+
(12 8 19) :tak 9 .
|
|
878
|
+
(19 12 8) :tak 12 .
|
|
879
|
+
(30 9 9) :tak 9 .
|
|
880
|
+
(12 10 9) :tak 10 .
|
|
881
|
+
(31 9 9) :needTak true .
|
|
882
|
+
(9 31 9) :needTak true .
|
|
883
|
+
(13 10 10) :needTak true .
|
|
884
|
+
(11 8 29) :tak 11 .
|
|
885
|
+
(29 11 8) :tak 9 .
|
|
886
|
+
(9 8 30) :tak 9 .
|
|
887
|
+
(12 8 20) :tak 12 .
|
|
888
|
+
(20 12 8) :tak 9 .
|
|
889
|
+
(8 9 31) :needTak true .
|
|
890
|
+
(8 31 9) :needTak true .
|
|
891
|
+
(9 10 13) :needTak true .
|
|
892
|
+
(9 13 10) :needTak true .
|
|
893
|
+
(9 31 9) :tak 9 .
|
|
894
|
+
(8 9 31) :tak 31 .
|
|
895
|
+
(8 31 9) :tak 9 .
|
|
896
|
+
(9 10 13) :tak 13 .
|
|
897
|
+
(9 13 10) :tak 10 .
|
|
898
|
+
(10 13 10) :needTak true .
|
|
899
|
+
(10 8 30) :tak 10 .
|
|
900
|
+
(30 10 8) :tak 9 .
|
|
901
|
+
(31 9 8) :tak 9 .
|
|
902
|
+
(12 8 21) :tak 9 .
|
|
903
|
+
(21 12 8) :tak 12 .
|
|
904
|
+
(31 9 9) :tak 9 .
|
|
905
|
+
(10 13 10) :tak 10 .
|
|
906
|
+
(32 9 9) :needTak true .
|
|
907
|
+
(9 32 9) :needTak true .
|
|
908
|
+
(11 8 30) :tak 9 .
|
|
909
|
+
(30 11 8) :tak 11 .
|
|
910
|
+
(9 8 31) :tak 9 .
|
|
911
|
+
(12 8 22) :tak 12 .
|
|
912
|
+
(22 12 8) :tak 9 .
|
|
913
|
+
(13 10 10) :tak 10 .
|
|
914
|
+
(8 9 32) :needTak true .
|
|
915
|
+
(8 32 9) :needTak true .
|
|
916
|
+
(9 32 9) :tak 9 .
|
|
917
|
+
(8 9 32) :tak 32 .
|
|
918
|
+
(8 32 9) :tak 9 .
|
|
919
|
+
(10 8 31) :tak 9 .
|
|
920
|
+
(31 10 8) :tak 10 .
|
|
921
|
+
(32 9 8) :tak 9 .
|
|
922
|
+
(12 8 23) :tak 9 .
|
|
923
|
+
(23 12 8) :tak 12 .
|
|
924
|
+
(10 9 13) :tak 10 .
|
|
925
|
+
(32 9 9) :tak 9 .
|
|
926
|
+
(33 9 9) :needTak true .
|
|
927
|
+
(9 33 9) :needTak true .
|
|
928
|
+
(10 11 11) :needTak true .
|
|
929
|
+
(11 8 31) :tak 11 .
|
|
930
|
+
(31 11 8) :tak 9 .
|
|
931
|
+
(9 8 32) :tak 9 .
|
|
932
|
+
(12 8 24) :tak 12 .
|
|
933
|
+
(24 12 8) :tak 9 .
|
|
934
|
+
(8 9 33) :needTak true .
|
|
935
|
+
(8 33 9) :needTak true .
|
|
936
|
+
(9 33 9) :tak 9 .
|
|
937
|
+
(10 11 11) :tak 11 .
|
|
938
|
+
(8 9 33) :tak 33 .
|
|
939
|
+
(8 33 9) :tak 9 .
|
|
940
|
+
(10 8 32) :tak 10 .
|
|
941
|
+
(32 10 8) :tak 9 .
|
|
942
|
+
(33 9 8) :tak 9 .
|
|
943
|
+
(12 8 25) :tak 9 .
|
|
944
|
+
(25 12 8) :tak 12 .
|
|
945
|
+
(11 9 13) :tak 11 .
|
|
946
|
+
(33 9 9) :tak 9 .
|
|
947
|
+
(34 9 9) :needTak true .
|
|
948
|
+
(11 8 32) :tak 9 .
|
|
949
|
+
(32 11 8) :tak 11 .
|
|
950
|
+
(9 8 33) :tak 9 .
|
|
951
|
+
(12 8 26) :tak 12 .
|
|
952
|
+
(26 12 8) :tak 9 .
|
|
953
|
+
(12 9 13) :tak 9 .
|
|
954
|
+
(8 9 34) :needTak true .
|
|
955
|
+
(8 34 9) :needTak true .
|
|
956
|
+
(8 9 34) :tak 34 .
|
|
957
|
+
(8 34 9) :tak 9 .
|
|
958
|
+
(9 34 9) :needTak true .
|
|
959
|
+
(10 8 33) :tak 9 .
|
|
960
|
+
(33 10 8) :tak 10 .
|
|
961
|
+
(12 8 27) :tak 9 .
|
|
962
|
+
(27 12 8) :tak 12 .
|
|
963
|
+
(13 9 13) :tak 9 .
|
|
964
|
+
(9 34 9) :tak 9 .
|
|
965
|
+
(11 8 33) :tak 11 .
|
|
966
|
+
(33 11 8) :tak 9 .
|
|
967
|
+
(12 8 28) :tak 12 .
|
|
968
|
+
(28 12 8) :tak 9 .
|
|
969
|
+
(15 13 8) :tak 9 .
|
|
970
|
+
(34 9 9) :tak 9 .
|
|
971
|
+
(9 12 13) :needTak true .
|
|
972
|
+
(9 8 34) :tak 9 .
|
|
973
|
+
(12 8 29) :tak 9 .
|
|
974
|
+
(29 12 8) :tak 12 .
|
|
975
|
+
(9 12 13) :tak 13 .
|
|
976
|
+
(10 8 34) :tak 10 .
|
|
977
|
+
(12 8 30) :tak 12 .
|
|
978
|
+
(30 12 8) :tak 9 .
|
|
979
|
+
(16 13 8) :tak 13 .
|
|
980
|
+
(11 8 34) :tak 9 .
|
|
981
|
+
(12 8 31) :tak 9 .
|
|
982
|
+
(31 12 8) :tak 12 .
|
|
983
|
+
(17 13 8) :tak 9 .
|
|
984
|
+
(12 8 32) :tak 12 .
|
|
985
|
+
(32 12 8) :tak 9 .
|
|
986
|
+
(18 13 8) :tak 13 .
|
|
987
|
+
(12 8 33) :tak 9 .
|
|
988
|
+
(33 12 8) :tak 12 .
|
|
989
|
+
(19 13 8) :tak 9 .
|
|
990
|
+
(12 8 34) :tak 12 .
|
|
991
|
+
(20 13 8) :tak 13 .
|
|
992
|
+
(21 13 8) :tak 9 .
|
|
993
|
+
(22 13 8) :tak 13 .
|
|
994
|
+
(23 13 8) :tak 9 .
|
|
995
|
+
(24 13 8) :tak 13 .
|
|
996
|
+
(25 13 8) :tak 9 .
|
|
997
|
+
(26 13 8) :tak 13 .
|
|
998
|
+
(27 13 8) :tak 9 .
|
|
999
|
+
(28 13 8) :tak 13 .
|
|
1000
|
+
(29 13 8) :tak 9 .
|
|
1001
|
+
(30 13 8) :tak 13 .
|
|
1002
|
+
(31 13 8) :tak 9 .
|
|
1003
|
+
(32 13 8) :tak 13 .
|
|
1004
|
+
(33 13 8) :tak 9 .
|
|
1005
|
+
(34 13 8) :tak 13 .
|
package/examples/takeuchi.n3
CHANGED
|
@@ -10,20 +10,73 @@
|
|
|
10
10
|
@prefix math: <http://www.w3.org/2000/10/swap/math#>.
|
|
11
11
|
@prefix : <https://eyereasoner.github.io/eye/reasoning#>.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
# Forward/tabling style: compute only what’s reachable from :needTak.
|
|
14
|
+
|
|
15
|
+
# Seed: only the call we want
|
|
16
|
+
(34 13 8) :needTak true .
|
|
17
|
+
|
|
18
|
+
# If a call is needed and X>Y, mark the three direct subcalls as needed
|
|
19
|
+
{
|
|
20
|
+
(?X ?Y ?Z) :needTak true.
|
|
21
|
+
?X math:greaterThan ?Y.
|
|
22
|
+
(?X 1) math:difference ?X1.
|
|
23
|
+
(?Y 1) math:difference ?Y1.
|
|
24
|
+
(?Z 1) math:difference ?Z1.
|
|
25
|
+
}
|
|
26
|
+
=>
|
|
27
|
+
{
|
|
28
|
+
(?X1 ?Y ?Z) :needTak true.
|
|
29
|
+
(?Y1 ?Z ?X) :needTak true.
|
|
30
|
+
(?Z1 ?X ?Y) :needTak true.
|
|
31
|
+
}.
|
|
32
|
+
|
|
33
|
+
# Base case: if X<=Y then result is Z
|
|
34
|
+
{
|
|
35
|
+
(?X ?Y ?Z) :needTak true.
|
|
36
|
+
?X math:notGreaterThan ?Y.
|
|
37
|
+
}
|
|
38
|
+
=>
|
|
39
|
+
{
|
|
40
|
+
(?X ?Y ?Z) :tak ?Z.
|
|
15
41
|
}.
|
|
16
42
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
43
|
+
# Once the three direct subcalls have results, we also need the “final call” tak(A1,A2,A3)
|
|
44
|
+
{
|
|
45
|
+
(?X ?Y ?Z) :needTak true.
|
|
46
|
+
?X math:greaterThan ?Y.
|
|
47
|
+
|
|
48
|
+
(?X 1) math:difference ?X1.
|
|
49
|
+
(?X1 ?Y ?Z) :tak ?A1.
|
|
50
|
+
|
|
51
|
+
(?Y 1) math:difference ?Y1.
|
|
52
|
+
(?Y1 ?Z ?X) :tak ?A2.
|
|
53
|
+
|
|
54
|
+
(?Z 1) math:difference ?Z1.
|
|
55
|
+
(?Z1 ?X ?Y) :tak ?A3.
|
|
56
|
+
}
|
|
57
|
+
=>
|
|
58
|
+
{
|
|
59
|
+
(?A1 ?A2 ?A3) :needTak true.
|
|
60
|
+
}.
|
|
61
|
+
|
|
62
|
+
# Recursive case: if everything is known, tak(X,Y,Z) is tak(A1,A2,A3)
|
|
63
|
+
{
|
|
64
|
+
(?X ?Y ?Z) :needTak true.
|
|
65
|
+
?X math:greaterThan ?Y.
|
|
66
|
+
|
|
67
|
+
(?X 1) math:difference ?X1.
|
|
68
|
+
(?X1 ?Y ?Z) :tak ?A1.
|
|
69
|
+
|
|
70
|
+
(?Y 1) math:difference ?Y1.
|
|
71
|
+
(?Y1 ?Z ?X) :tak ?A2.
|
|
72
|
+
|
|
73
|
+
(?Z 1) math:difference ?Z1.
|
|
74
|
+
(?Z1 ?X ?Y) :tak ?A3.
|
|
75
|
+
|
|
76
|
+
(?A1 ?A2 ?A3) :tak ?A.
|
|
77
|
+
}
|
|
78
|
+
=>
|
|
79
|
+
{
|
|
80
|
+
(?X ?Y ?Z) :tak ?A.
|
|
26
81
|
}.
|
|
27
82
|
|
|
28
|
-
# test
|
|
29
|
-
{(8 4 2) :tak ?A} => {(8 4 2) :takeuchi ?A}.
|
package/eyeling.js
CHANGED
|
@@ -5306,8 +5306,50 @@ function alphaEqGraphTriples(xs, ys) {
|
|
|
5306
5306
|
// - __byHeadPred: Map<headPredicateId, Rule[]>
|
|
5307
5307
|
// - __wildHeadPred: Rule[] (non-IRI head predicate)
|
|
5308
5308
|
|
|
5309
|
+
// Compound-term fast-key interning.
|
|
5310
|
+
// Used to index strict-ground list literals without relying on object identity.
|
|
5311
|
+
//
|
|
5312
|
+
// This is a major performance win for N3 programs that use compound terms
|
|
5313
|
+
// (especially lists) as subjects/objects, e.g. tabling-style encodings.
|
|
5314
|
+
const __compoundKeyToTid = new Map();
|
|
5315
|
+
// Use a negative id space so we never collide with __tid (which is positive).
|
|
5316
|
+
let __nextCompoundTid = -1;
|
|
5317
|
+
|
|
5318
|
+
function __internCompoundTid(key) {
|
|
5319
|
+
const hit = __compoundKeyToTid.get(key);
|
|
5320
|
+
if (hit !== undefined) return hit;
|
|
5321
|
+
const id = __nextCompoundTid--;
|
|
5322
|
+
__compoundKeyToTid.set(key, id);
|
|
5323
|
+
return id;
|
|
5324
|
+
}
|
|
5325
|
+
|
|
5309
5326
|
function termFastKey(t) {
|
|
5327
|
+
// Atomic terms that already have a stable id.
|
|
5310
5328
|
if (t instanceof Iri || t instanceof Blank || t instanceof Literal) return t.__tid;
|
|
5329
|
+
|
|
5330
|
+
// Structural fast key for strict-ground list terms.
|
|
5331
|
+
// We only index when every element has a fast key; otherwise return null.
|
|
5332
|
+
if (t instanceof ListTerm) {
|
|
5333
|
+
const cached = t.__ftid;
|
|
5334
|
+
if (cached !== undefined) return cached;
|
|
5335
|
+
|
|
5336
|
+
const xs = t.elems;
|
|
5337
|
+
const parts = new Array(xs.length);
|
|
5338
|
+
for (let i = 0; i < xs.length; i++) {
|
|
5339
|
+
const k = termFastKey(xs[i]);
|
|
5340
|
+
if (k === null) return null;
|
|
5341
|
+
parts[i] = k;
|
|
5342
|
+
}
|
|
5343
|
+
|
|
5344
|
+
// Use a compact separator; include length to avoid edge-case collisions.
|
|
5345
|
+
const key = 'L' + xs.length + '\u0001' + parts.join('\u0001');
|
|
5346
|
+
const id = __internCompoundTid(key);
|
|
5347
|
+
|
|
5348
|
+
// Cache on the list object itself (lists are immutable in Eyeling).
|
|
5349
|
+
Object.defineProperty(t, '__ftid', { value: id, enumerable: false });
|
|
5350
|
+
return id;
|
|
5351
|
+
}
|
|
5352
|
+
|
|
5311
5353
|
return null;
|
|
5312
5354
|
}
|
|
5313
5355
|
|
|
@@ -6334,6 +6376,26 @@ function proveGoals(goals, subst, facts, backRules, depth, visited, varGen, maxR
|
|
|
6334
6376
|
continue;
|
|
6335
6377
|
}
|
|
6336
6378
|
|
|
6379
|
+
// If this goal is already on the ancestor chain, avoid picking rules
|
|
6380
|
+
// whose premises would immediately re-enter any already-visited goal.
|
|
6381
|
+
// This cheap guard restores completeness for cases like issue #9 while
|
|
6382
|
+
// still preventing trivial non-termination in mutually recursive rule
|
|
6383
|
+
// cycles.
|
|
6384
|
+
if (frame.goalWasVisited && rStd.premise && rStd.premise.length) {
|
|
6385
|
+
let __cycle = false;
|
|
6386
|
+
for (let i = 0; i < rStd.premise.length; i++) {
|
|
6387
|
+
const premKey = __tripleKeyForVisited(applySubstTriple(rStd.premise[i], substMut));
|
|
6388
|
+
if (visitedCounts.has(premKey)) {
|
|
6389
|
+
__cycle = true;
|
|
6390
|
+
break;
|
|
6391
|
+
}
|
|
6392
|
+
}
|
|
6393
|
+
if (__cycle) {
|
|
6394
|
+
undoTo(mark);
|
|
6395
|
+
continue;
|
|
6396
|
+
}
|
|
6397
|
+
}
|
|
6398
|
+
|
|
6337
6399
|
const newGoals = rStd.premise.concat(frame.restGoals);
|
|
6338
6400
|
|
|
6339
6401
|
const vMark = visitedTrail.length;
|
|
@@ -6464,8 +6526,23 @@ function proveGoals(goals, subst, facts, backRules, depth, visited, varGen, maxR
|
|
|
6464
6526
|
}
|
|
6465
6527
|
|
|
6466
6528
|
// 2) Loop check for backward reasoning
|
|
6529
|
+
//
|
|
6530
|
+
// A strict ancestor loop check ("if visited then fail") is fast but
|
|
6531
|
+
// incomplete. It breaks common Horn patterns where a goal appears again in
|
|
6532
|
+
// a sibling branch and can still succeed via a different (non-cyclic) rule.
|
|
6533
|
+
//
|
|
6534
|
+
// Example (issue #9):
|
|
6535
|
+
// Human <= Woman.
|
|
6536
|
+
// Animal <= Human.
|
|
6537
|
+
// label <= Human, Animal.
|
|
6538
|
+
// While proving Animal we need to re-prove Human, even though Human is an
|
|
6539
|
+
// ancestor goal. EYE succeeds; a strict loop check prunes it.
|
|
6540
|
+
//
|
|
6541
|
+
// We therefore *allow* re-entering a visited goal, but when a goal is
|
|
6542
|
+
// already visited we avoid applying backward rules whose premises would
|
|
6543
|
+
// immediately re-enter any visited goal again (a cheap cycle guard).
|
|
6467
6544
|
const goalKey = __tripleKeyForVisited(goal0);
|
|
6468
|
-
|
|
6545
|
+
const goalWasVisited = visitedCounts.has(goalKey);
|
|
6469
6546
|
|
|
6470
6547
|
// 3) Backward rules (indexed by head predicate) — explored first
|
|
6471
6548
|
if (goal0.p instanceof Iri) {
|
|
@@ -6496,6 +6573,7 @@ function proveGoals(goals, subst, facts, backRules, depth, visited, varGen, maxR
|
|
|
6496
6573
|
curDepth: frame.curDepth,
|
|
6497
6574
|
goalKey,
|
|
6498
6575
|
goalPtid: goal0.p.__tid,
|
|
6576
|
+
goalWasVisited,
|
|
6499
6577
|
});
|
|
6500
6578
|
}
|
|
6501
6579
|
} else {
|
package/lib/engine.js
CHANGED
|
@@ -840,8 +840,50 @@ function alphaEqGraphTriples(xs, ys) {
|
|
|
840
840
|
// - __byHeadPred: Map<headPredicateId, Rule[]>
|
|
841
841
|
// - __wildHeadPred: Rule[] (non-IRI head predicate)
|
|
842
842
|
|
|
843
|
+
// Compound-term fast-key interning.
|
|
844
|
+
// Used to index strict-ground list literals without relying on object identity.
|
|
845
|
+
//
|
|
846
|
+
// This is a major performance win for N3 programs that use compound terms
|
|
847
|
+
// (especially lists) as subjects/objects, e.g. tabling-style encodings.
|
|
848
|
+
const __compoundKeyToTid = new Map();
|
|
849
|
+
// Use a negative id space so we never collide with __tid (which is positive).
|
|
850
|
+
let __nextCompoundTid = -1;
|
|
851
|
+
|
|
852
|
+
function __internCompoundTid(key) {
|
|
853
|
+
const hit = __compoundKeyToTid.get(key);
|
|
854
|
+
if (hit !== undefined) return hit;
|
|
855
|
+
const id = __nextCompoundTid--;
|
|
856
|
+
__compoundKeyToTid.set(key, id);
|
|
857
|
+
return id;
|
|
858
|
+
}
|
|
859
|
+
|
|
843
860
|
function termFastKey(t) {
|
|
861
|
+
// Atomic terms that already have a stable id.
|
|
844
862
|
if (t instanceof Iri || t instanceof Blank || t instanceof Literal) return t.__tid;
|
|
863
|
+
|
|
864
|
+
// Structural fast key for strict-ground list terms.
|
|
865
|
+
// We only index when every element has a fast key; otherwise return null.
|
|
866
|
+
if (t instanceof ListTerm) {
|
|
867
|
+
const cached = t.__ftid;
|
|
868
|
+
if (cached !== undefined) return cached;
|
|
869
|
+
|
|
870
|
+
const xs = t.elems;
|
|
871
|
+
const parts = new Array(xs.length);
|
|
872
|
+
for (let i = 0; i < xs.length; i++) {
|
|
873
|
+
const k = termFastKey(xs[i]);
|
|
874
|
+
if (k === null) return null;
|
|
875
|
+
parts[i] = k;
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
// Use a compact separator; include length to avoid edge-case collisions.
|
|
879
|
+
const key = 'L' + xs.length + '\u0001' + parts.join('\u0001');
|
|
880
|
+
const id = __internCompoundTid(key);
|
|
881
|
+
|
|
882
|
+
// Cache on the list object itself (lists are immutable in Eyeling).
|
|
883
|
+
Object.defineProperty(t, '__ftid', { value: id, enumerable: false });
|
|
884
|
+
return id;
|
|
885
|
+
}
|
|
886
|
+
|
|
845
887
|
return null;
|
|
846
888
|
}
|
|
847
889
|
|
|
@@ -1868,6 +1910,26 @@ function proveGoals(goals, subst, facts, backRules, depth, visited, varGen, maxR
|
|
|
1868
1910
|
continue;
|
|
1869
1911
|
}
|
|
1870
1912
|
|
|
1913
|
+
// If this goal is already on the ancestor chain, avoid picking rules
|
|
1914
|
+
// whose premises would immediately re-enter any already-visited goal.
|
|
1915
|
+
// This cheap guard restores completeness for cases like issue #9 while
|
|
1916
|
+
// still preventing trivial non-termination in mutually recursive rule
|
|
1917
|
+
// cycles.
|
|
1918
|
+
if (frame.goalWasVisited && rStd.premise && rStd.premise.length) {
|
|
1919
|
+
let __cycle = false;
|
|
1920
|
+
for (let i = 0; i < rStd.premise.length; i++) {
|
|
1921
|
+
const premKey = __tripleKeyForVisited(applySubstTriple(rStd.premise[i], substMut));
|
|
1922
|
+
if (visitedCounts.has(premKey)) {
|
|
1923
|
+
__cycle = true;
|
|
1924
|
+
break;
|
|
1925
|
+
}
|
|
1926
|
+
}
|
|
1927
|
+
if (__cycle) {
|
|
1928
|
+
undoTo(mark);
|
|
1929
|
+
continue;
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1871
1933
|
const newGoals = rStd.premise.concat(frame.restGoals);
|
|
1872
1934
|
|
|
1873
1935
|
const vMark = visitedTrail.length;
|
|
@@ -1998,8 +2060,23 @@ function proveGoals(goals, subst, facts, backRules, depth, visited, varGen, maxR
|
|
|
1998
2060
|
}
|
|
1999
2061
|
|
|
2000
2062
|
// 2) Loop check for backward reasoning
|
|
2063
|
+
//
|
|
2064
|
+
// A strict ancestor loop check ("if visited then fail") is fast but
|
|
2065
|
+
// incomplete. It breaks common Horn patterns where a goal appears again in
|
|
2066
|
+
// a sibling branch and can still succeed via a different (non-cyclic) rule.
|
|
2067
|
+
//
|
|
2068
|
+
// Example (issue #9):
|
|
2069
|
+
// Human <= Woman.
|
|
2070
|
+
// Animal <= Human.
|
|
2071
|
+
// label <= Human, Animal.
|
|
2072
|
+
// While proving Animal we need to re-prove Human, even though Human is an
|
|
2073
|
+
// ancestor goal. EYE succeeds; a strict loop check prunes it.
|
|
2074
|
+
//
|
|
2075
|
+
// We therefore *allow* re-entering a visited goal, but when a goal is
|
|
2076
|
+
// already visited we avoid applying backward rules whose premises would
|
|
2077
|
+
// immediately re-enter any visited goal again (a cheap cycle guard).
|
|
2001
2078
|
const goalKey = __tripleKeyForVisited(goal0);
|
|
2002
|
-
|
|
2079
|
+
const goalWasVisited = visitedCounts.has(goalKey);
|
|
2003
2080
|
|
|
2004
2081
|
// 3) Backward rules (indexed by head predicate) — explored first
|
|
2005
2082
|
if (goal0.p instanceof Iri) {
|
|
@@ -2030,6 +2107,7 @@ function proveGoals(goals, subst, facts, backRules, depth, visited, varGen, maxR
|
|
|
2030
2107
|
curDepth: frame.curDepth,
|
|
2031
2108
|
goalKey,
|
|
2032
2109
|
goalPtid: goal0.p.__tid,
|
|
2110
|
+
goalWasVisited,
|
|
2033
2111
|
});
|
|
2034
2112
|
}
|
|
2035
2113
|
} else {
|
package/package.json
CHANGED
package/test/api.test.js
CHANGED
|
@@ -984,6 +984,34 @@ ex:a p:trig ex:b.
|
|
|
984
984
|
/:result\s+:query3\s+\(:path1\s+1\s+:b\)\s*\./,
|
|
985
985
|
],
|
|
986
986
|
},
|
|
987
|
+
|
|
988
|
+
{
|
|
989
|
+
name: '57 issue #9: backward cycle with extra type guard should still derive label',
|
|
990
|
+
opt: { proofComments: false },
|
|
991
|
+
input: `@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
992
|
+
@prefix ex: <http://example.org/ns#> .
|
|
993
|
+
|
|
994
|
+
ex:w a ex:Woman .
|
|
995
|
+
|
|
996
|
+
{
|
|
997
|
+
?s a ex:Woman .
|
|
998
|
+
?s ex:label ?label .
|
|
999
|
+
} => {
|
|
1000
|
+
?s rdfs:label ?label .
|
|
1001
|
+
} .
|
|
1002
|
+
|
|
1003
|
+
{ ?s a ex:Human } <= { ?s a ex:Woman } .
|
|
1004
|
+
{ ?s a ex:Animal } <= { ?s a ex:Human } .
|
|
1005
|
+
|
|
1006
|
+
{ ?s ex:label "human being" } <= {
|
|
1007
|
+
?s a ex:Human .
|
|
1008
|
+
?s a ex:Animal .
|
|
1009
|
+
} .
|
|
1010
|
+
`,
|
|
1011
|
+
expect: [
|
|
1012
|
+
/(?:ex:w|<http:\/\/example\.org\/ns#w>)\s+(?:rdfs:label|<http:\/\/www\.w3\.org\/2000\/01\/rdf-schema#label>)\s+"human being"\s*\./,
|
|
1013
|
+
],
|
|
1014
|
+
},
|
|
987
1015
|
];
|
|
988
1016
|
|
|
989
1017
|
let passed = 0;
|