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.
@@ -1,3 +1,1005 @@
1
1
  @prefix : <https://eyereasoner.github.io/eye/reasoning#> .
2
2
 
3
- (8 4 2) :takeuchi 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 .
@@ -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
- {(?X ?Y ?Z) :tak ?Z} <= {
14
- ?X math:notGreaterThan ?Y.
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
- {(?X ?Y ?Z) :tak ?A} <= {
18
- ?X math:greaterThan ?Y. # guard makes this clause disjoint from the base case
19
- (?X 1) math:difference ?X1.
20
- (?X1 ?Y ?Z) :tak ?A1.
21
- (?Y 1) math:difference ?Y1.
22
- (?Y1 ?Z ?X) :tak ?A2.
23
- (?Z 1) math:difference ?Z1.
24
- (?Z1 ?X ?Y) :tak ?A3.
25
- (?A1 ?A2 ?A3) :tak ?A.
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
- if (visitedCounts.has(goalKey)) continue;
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
- if (visitedCounts.has(goalKey)) continue;
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyeling",
3
- "version": "1.13.0",
3
+ "version": "1.13.2",
4
4
  "description": "A minimal Notation3 (N3) reasoner in JavaScript.",
5
5
  "main": "./index.js",
6
6
  "keywords": [
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;