eyeling 1.24.8 → 1.24.10

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.
Files changed (149) hide show
  1. package/HANDBOOK.md +2 -2
  2. package/README.md +1 -1
  3. package/dist/browser/eyeling.browser.js +10 -10
  4. package/examples/act-alarm-bit-interoperability.n3 +4 -4
  5. package/examples/act-barley-seed-lineage.n3 +4 -4
  6. package/examples/act-docking-abort.n3 +4 -4
  7. package/examples/act-gravity-mediator-witness.n3 +4 -4
  8. package/examples/act-isolation-breach.n3 +4 -4
  9. package/examples/act-photosynthetic-exciton-transfer.n3 +4 -4
  10. package/examples/act-sensor-memory-reset.n3 +4 -4
  11. package/examples/act-tunnel-junction-wake-switch.n3 +4 -4
  12. package/examples/act-yeast-self-reproduction.n3 +4 -4
  13. package/examples/annotation.n3 +1 -1
  14. package/examples/auroracare.n3 +22 -22
  15. package/examples/backward-recursion.n3 +1 -1
  16. package/examples/barley-seed-becoming.n3 +4 -4
  17. package/examples/bmi.n3 +4 -4
  18. package/examples/builtin-coverage.n3 +1 -1
  19. package/examples/calidor.n3 +1 -1
  20. package/examples/collection.n3 +1 -1
  21. package/examples/complex-matrix-stability.n3 +4 -4
  22. package/examples/context-association.n3 +1 -1
  23. package/examples/control-system.n3 +4 -4
  24. package/examples/deck/faltings-genus2-finiteness.md +1 -1
  25. package/examples/deck/high-trust-rdf-bloom-envelope.md +1 -1
  26. package/examples/deck/odrl-dpv-risk-ranked.md +1 -1
  27. package/examples/deck/schema-foaf-mapping.md +1 -1
  28. package/examples/deep-taxonomy-10.n3 +4 -4
  29. package/examples/deep-taxonomy-100.n3 +4 -4
  30. package/examples/deep-taxonomy-1000.n3 +4 -4
  31. package/examples/deep-taxonomy-10000.n3 +4 -4
  32. package/examples/deep-taxonomy-100000.n3 +2 -2
  33. package/examples/delfour.n3 +1 -1
  34. package/examples/digital-product-passport.n3 +1 -1
  35. package/examples/dijkstra-risk-path.n3 +1 -1
  36. package/examples/easter.n3 +4 -4
  37. package/examples/eco-route-insight.n3 +1 -1
  38. package/examples/flandor.n3 +1 -1
  39. package/examples/french-cities.n3 +4 -4
  40. package/examples/fundamental-theorem-arithmetic.n3 +4 -4
  41. package/examples/genetic-algorithm-knapsack.n3 +1 -1
  42. package/examples/genetic-algorithm.n3 +1 -1
  43. package/examples/genetic-knapsack-selection.n3 +1 -1
  44. package/examples/gps.n3 +4 -4
  45. package/examples/harborsmr.n3 +4 -4
  46. package/examples/input/ontology-question-generation.trig +79 -0
  47. package/examples/interop-demo.n3 +1 -1
  48. package/examples/matrix-mechanics.n3 +1 -1
  49. package/examples/medior.n3 +1 -1
  50. package/examples/n3-speaks-for-itself.n3 +1 -1
  51. package/examples/odrl-dpv-ehds-risk-ranked.n3 +1 -1
  52. package/examples/odrl-dpv-healthcare-risk-ranked.n3 +1 -1
  53. package/examples/odrl-dpv-risk-ranked.n3 +1 -1
  54. package/examples/odrl-risk-mitigation.n3 +1 -1
  55. package/examples/odrl-risk.n3 +1 -1
  56. package/examples/ontology-question-generation.n3 +409 -0
  57. package/examples/output/act-alarm-bit-interoperability.md +7 -3
  58. package/examples/output/act-barley-seed-lineage.md +7 -3
  59. package/examples/output/act-docking-abort.md +7 -3
  60. package/examples/output/act-gravity-mediator-witness.md +7 -3
  61. package/examples/output/act-isolation-breach.md +7 -3
  62. package/examples/output/act-photosynthetic-exciton-transfer.md +7 -3
  63. package/examples/output/act-sensor-memory-reset.md +7 -3
  64. package/examples/output/act-tunnel-junction-wake-switch.md +7 -3
  65. package/examples/output/act-yeast-self-reproduction.md +7 -3
  66. package/examples/output/annotation.md +20 -0
  67. package/examples/output/auroracare.md +25 -21
  68. package/examples/output/backward-recursion.md +5 -0
  69. package/examples/output/barley-seed-becoming.md +7 -3
  70. package/examples/output/bmi.md +7 -3
  71. package/examples/output/builtin-coverage.md +6 -0
  72. package/examples/output/calidor.md +4 -0
  73. package/examples/output/collection.md +6 -0
  74. package/examples/output/complex-matrix-stability.md +7 -3
  75. package/examples/output/context-association.md +5 -0
  76. package/examples/output/control-system.md +7 -3
  77. package/examples/output/deep-taxonomy-10.md +7 -3
  78. package/examples/output/deep-taxonomy-100.md +7 -3
  79. package/examples/output/deep-taxonomy-1000.md +7 -3
  80. package/examples/output/deep-taxonomy-10000.md +7 -3
  81. package/examples/output/deep-taxonomy-100000.md +7 -3
  82. package/examples/output/delfour.md +4 -0
  83. package/examples/output/digital-product-passport.md +4 -0
  84. package/examples/output/dijkstra-risk-path.md +5 -0
  85. package/examples/output/easter.md +34 -30
  86. package/examples/output/eco-route-insight.md +5 -0
  87. package/examples/output/flandor.md +4 -0
  88. package/examples/output/french-cities.md +7 -3
  89. package/examples/output/fundamental-theorem-arithmetic.md +7 -3
  90. package/examples/output/genetic-algorithm-knapsack.md +4 -0
  91. package/examples/output/genetic-algorithm.md +4 -0
  92. package/examples/output/genetic-knapsack-selection.md +5 -0
  93. package/examples/output/gps.md +7 -3
  94. package/examples/output/harborsmr.md +7 -3
  95. package/examples/output/interop-demo.md +4 -0
  96. package/examples/output/matrix-mechanics.md +4 -0
  97. package/examples/output/medior.md +4 -0
  98. package/examples/output/n3-speaks-for-itself.md +4 -0
  99. package/examples/output/odrl-dpv-ehds-risk-ranked.md +4 -0
  100. package/examples/output/odrl-dpv-healthcare-risk-ranked.md +4 -0
  101. package/examples/output/odrl-dpv-risk-ranked.md +4 -0
  102. package/examples/output/odrl-risk-mitigation.md +4 -0
  103. package/examples/output/odrl-risk.md +4 -0
  104. package/examples/output/ontology-question-generation.md +31 -0
  105. package/examples/output/parcellocker.md +7 -3
  106. package/examples/output/pn-junction-tunneling.md +4 -0
  107. package/examples/output/queens.md +4 -0
  108. package/examples/output/rc-discharge-envelope.md +5 -0
  109. package/examples/output/rdf-dataset.md +5 -0
  110. package/examples/output/rdf-message-flow.md +5 -0
  111. package/examples/output/rdf-messages.md +5 -0
  112. package/examples/output/resto.md +7 -3
  113. package/examples/output/school-placement-audit.md +5 -0
  114. package/examples/output/smoke-arithmetic.md +5 -0
  115. package/examples/output/sqrt2-cauchy.md +4 -0
  116. package/examples/output/sqrt2-dedekind.md +4 -0
  117. package/examples/output/sudoku.md +4 -0
  118. package/examples/output/transcendental-numbers-stretched.md +4 -0
  119. package/examples/output/transistor-switch.md +4 -0
  120. package/examples/output/triple-terms.md +5 -0
  121. package/examples/output/tunnel-junction-wake-switch-becoming.md +7 -3
  122. package/examples/output/wind-turbine.md +7 -3
  123. package/examples/parcellocker.n3 +2 -2
  124. package/examples/pn-junction-tunneling.n3 +1 -1
  125. package/examples/queens.n3 +1 -1
  126. package/examples/rc-discharge-envelope.n3 +1 -1
  127. package/examples/rdf-dataset.n3 +1 -1
  128. package/examples/rdf-message-flow.n3 +1 -1
  129. package/examples/rdf-messages.n3 +1 -1
  130. package/examples/resto.n3 +4 -4
  131. package/examples/school-placement-audit.n3 +1 -1
  132. package/examples/smoke-arithmetic.n3 +1 -1
  133. package/examples/sqrt2-cauchy.n3 +1 -1
  134. package/examples/sqrt2-dedekind.n3 +1 -1
  135. package/examples/sudoku.n3 +5 -5
  136. package/examples/transcendental-numbers-stretched.n3 +1 -1
  137. package/examples/transistor-switch.n3 +1 -1
  138. package/examples/triple-terms.n3 +1 -1
  139. package/examples/tunnel-junction-wake-switch-becoming.n3 +4 -4
  140. package/examples/wind-turbine.n3 +4 -4
  141. package/eyeling.js +10 -10
  142. package/lib/engine.js +4 -4
  143. package/lib/entry.js +2 -2
  144. package/lib/printing.js +1 -1
  145. package/lib/trace.js +1 -1
  146. package/package.json +1 -1
  147. package/test/api.test.js +1 -1
  148. package/test/playground.test.js +45 -15
  149. package/tools/bundle.js +2 -2
@@ -0,0 +1,409 @@
1
+ # Question generation from ontological patterns
2
+ #
3
+ # Run:
4
+ # npx eyeling -r examples/ontology-question-generation.n3 examples/input/ontology-question-generation.trig
5
+ #
6
+ # The input TriG file contains the ontology. These N3 rules detect common
7
+ # OWL/RDFS modeling patterns, derive structured q:CompetencyQuestion nodes,
8
+ # and render a Markdown report with log:outputString.
9
+
10
+ @prefix : <https://eyereasoner.github.io/eyeling/examples/ontology-question-generation#>.
11
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
12
+ @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
13
+ @prefix owl: <http://www.w3.org/2002/07/owl#>.
14
+ @prefix log: <http://www.w3.org/2000/10/swap/log#>.
15
+ @prefix string:<http://www.w3.org/2000/10/swap/string#>.
16
+
17
+ @prefix q: <http://example.org/question#>.
18
+ @prefix pat: <http://example.org/question/pattern#>.
19
+
20
+ #################################################################
21
+ # Markdown frame
22
+ #################################################################
23
+
24
+ <urn:eyeling:oqg:000:title>
25
+ log:outputString "# ontology-question-generation\n\n".
26
+
27
+ <urn:eyeling:oqg:010:intro>
28
+ log:outputString "This example uses N3 rules to generate candidate competency questions from OWL/RDFS ontology patterns. The rules derive structured `q:CompetencyQuestion` resources and render this Markdown with `log:outputString`.\n\n".
29
+
30
+ <urn:eyeling:oqg:015:sources>
31
+ log:outputString "## Source files\n\n- [N3 rules](../ontology-question-generation.n3)\n- [Input ontology TriG](../input/ontology-question-generation.trig)\n\n".
32
+
33
+ <urn:eyeling:oqg:020:patterns>
34
+ log:outputString "## Detected competency questions\n\n".
35
+
36
+ <urn:eyeling:oqg:900:shape-title>
37
+ log:outputString "\n## RDF shape behind the Markdown\n\n".
38
+
39
+ <urn:eyeling:oqg:910:shape-body>
40
+ log:outputString "Each rendered line is backed by a structured generated resource with a pattern, slots, an answer shape, and priority. That means a later layer can verbalize the same generated questions as Markdown, SPARQL skeletons, SHACL prompts, UI forms, or documentation checks.\n".
41
+
42
+ #################################################################
43
+ # Helper classifications
44
+ #################################################################
45
+
46
+ { ?class a owl:Class. }
47
+ =>
48
+ { ?class q:isOntologicalClass true. }.
49
+
50
+ { ?class a rdfs:Class. }
51
+ =>
52
+ { ?class q:isOntologicalClass true. }.
53
+
54
+ { ?property a owl:ObjectProperty. }
55
+ =>
56
+ { ?property q:isObjectProperty true. }.
57
+
58
+ { ?property a owl:DatatypeProperty. }
59
+ =>
60
+ { ?property q:isDatatypeProperty true. }.
61
+
62
+ { ?property rdfs:domain ?domain. ?property rdfs:range ?range. ?range q:isOntologicalClass true. }
63
+ =>
64
+ { ?property q:isObjectProperty true. }.
65
+
66
+ { ?property rdfs:domain ?domain. ?property rdfs:range ?datatype. ?datatype a rdfs:Datatype. }
67
+ =>
68
+ { ?property q:isDatatypeProperty true. }.
69
+
70
+ #################################################################
71
+ # 1. Class population pattern
72
+ #################################################################
73
+
74
+ { ?class q:isOntologicalClass true. ?class rdfs:label ?classLabel. }
75
+ =>
76
+ {
77
+ [
78
+ a q:CompetencyQuestion;
79
+ q:pattern pat:ClassPopulationQuestion;
80
+ q:aboutClass ?class;
81
+ q:questionTemplate "Which things are instances of {class}?";
82
+ q:slot [ q:slotName "class"; q:slotValue ?class; q:slotLabel ?classLabel ];
83
+ q:expectedAnswerShape pat:SetOfIndividuals;
84
+ q:priority 3
85
+ ].
86
+ }.
87
+
88
+ {
89
+ ?class q:isOntologicalClass true.
90
+ ?class rdfs:label ?classLabel.
91
+ ?class log:uri ?classIri.
92
+ ("urn:eyeling:oqg:100:class:%s" ?classIri) string:format ?key.
93
+ ?out log:uri ?key.
94
+ ("- **Class population** — Which things are instances of `%s`?\n" ?classLabel) string:format ?line.
95
+ }
96
+ =>
97
+ { ?out log:outputString ?line. }.
98
+
99
+ #################################################################
100
+ # 2. Subclass distinction pattern
101
+ #################################################################
102
+
103
+ { ?subClass rdfs:subClassOf ?superClass. ?subClass q:isOntologicalClass true. ?superClass q:isOntologicalClass true. }
104
+ =>
105
+ {
106
+ [
107
+ a q:CompetencyQuestion;
108
+ q:pattern pat:SubclassDistinctionQuestion;
109
+ q:sourcePattern rdfs:subClassOf;
110
+ q:aboutClass ?subClass;
111
+ q:questionTemplate "What distinguishes a {subClass} from a general {superClass}?";
112
+ q:slot [ q:slotName "subClass"; q:slotValue ?subClass ];
113
+ q:slot [ q:slotName "superClass"; q:slotValue ?superClass ];
114
+ q:expectedAnswerShape pat:DefinitionOrConstraint;
115
+ q:priority 4
116
+ ].
117
+ }.
118
+
119
+ {
120
+ ?subClass rdfs:subClassOf ?superClass.
121
+ ?subClass q:isOntologicalClass true.
122
+ ?superClass q:isOntologicalClass true.
123
+ ?subClass rdfs:label ?subLabel.
124
+ ?superClass rdfs:label ?superLabel.
125
+ ?subClass log:uri ?subIri.
126
+ ?superClass log:uri ?superIri.
127
+ ("urn:eyeling:oqg:200:subclass:%s:%s" ?subIri ?superIri) string:format ?key.
128
+ ?out log:uri ?key.
129
+ ("- **Subclass distinction** — What distinguishes `%s` from a general `%s`?\n" ?subLabel ?superLabel) string:format ?line.
130
+ }
131
+ =>
132
+ { ?out log:outputString ?line. }.
133
+
134
+ #################################################################
135
+ # 3. Object property domain/range pattern
136
+ #################################################################
137
+
138
+ { ?property q:isObjectProperty true. ?property rdfs:domain ?domain. ?property rdfs:range ?range. }
139
+ =>
140
+ {
141
+ [
142
+ a q:CompetencyQuestion;
143
+ q:pattern pat:ObjectPropertyQuestion;
144
+ q:sourcePattern pat:DomainRangePattern;
145
+ q:aboutProperty ?property;
146
+ q:questionTemplate "For a given {domain}, which {range} is related by {property}?";
147
+ q:slot [ q:slotName "domain"; q:slotValue ?domain ];
148
+ q:slot [ q:slotName "property"; q:slotValue ?property ];
149
+ q:slot [ q:slotName "range"; q:slotValue ?range ];
150
+ q:expectedAnswerShape pat:SubjectPredicateObjectBindings;
151
+ q:priority 5
152
+ ].
153
+ }.
154
+
155
+ {
156
+ ?property q:isObjectProperty true.
157
+ ?property rdfs:domain ?domain.
158
+ ?property rdfs:range ?range.
159
+ ?property rdfs:label ?propertyLabel.
160
+ ?domain rdfs:label ?domainLabel.
161
+ ?range rdfs:label ?rangeLabel.
162
+ ?property log:uri ?propertyIri.
163
+ ("urn:eyeling:oqg:300:object-property:%s" ?propertyIri) string:format ?key.
164
+ ?out log:uri ?key.
165
+ ("- **Object property** — For a given `%s`, which `%s` is related by `%s`?\n" ?domainLabel ?rangeLabel ?propertyLabel) string:format ?line.
166
+ }
167
+ =>
168
+ { ?out log:outputString ?line. }.
169
+
170
+ #################################################################
171
+ # 4. Datatype property pattern
172
+ #################################################################
173
+
174
+ { ?property q:isDatatypeProperty true. ?property rdfs:domain ?domain. ?property rdfs:range ?datatype. }
175
+ =>
176
+ {
177
+ [
178
+ a q:CompetencyQuestion;
179
+ q:pattern pat:DatatypePropertyQuestion;
180
+ q:sourcePattern pat:DomainDatatypeRangePattern;
181
+ q:aboutProperty ?property;
182
+ q:questionTemplate "What is the {property} value of a given {domain}?";
183
+ q:slot [ q:slotName "domain"; q:slotValue ?domain ];
184
+ q:slot [ q:slotName "property"; q:slotValue ?property ];
185
+ q:slot [ q:slotName "datatype"; q:slotValue ?datatype ];
186
+ q:expectedAnswerShape pat:LiteralValue;
187
+ q:priority 5
188
+ ].
189
+ }.
190
+
191
+ {
192
+ ?property q:isDatatypeProperty true.
193
+ ?property rdfs:domain ?domain.
194
+ ?property rdfs:range ?datatype.
195
+ ?property rdfs:label ?propertyLabel.
196
+ ?domain rdfs:label ?domainLabel.
197
+ ?property log:uri ?propertyIri.
198
+ ("urn:eyeling:oqg:400:datatype-property:%s" ?propertyIri) string:format ?key.
199
+ ?out log:uri ?key.
200
+ ("- **Datatype property** — What is the `%s` value of a given `%s`?\n" ?propertyLabel ?domainLabel) string:format ?line.
201
+ }
202
+ =>
203
+ { ?out log:outputString ?line. }.
204
+
205
+ #################################################################
206
+ # 5. Existential restriction pattern
207
+ #################################################################
208
+
209
+ { ?class rdfs:subClassOf ?restriction. ?restriction a owl:Restriction. ?restriction owl:onProperty ?property. ?restriction owl:someValuesFrom ?filler. }
210
+ =>
211
+ {
212
+ [
213
+ a q:CompetencyQuestion;
214
+ q:pattern pat:ExistentialRestrictionQuestion;
215
+ q:sourcePattern owl:someValuesFrom;
216
+ q:aboutClass ?class;
217
+ q:aboutProperty ?property;
218
+ q:questionTemplate "For each {class}, which {filler} must exist via {property}?";
219
+ q:slot [ q:slotName "class"; q:slotValue ?class ];
220
+ q:slot [ q:slotName "property"; q:slotValue ?property ];
221
+ q:slot [ q:slotName "filler"; q:slotValue ?filler ];
222
+ q:expectedAnswerShape pat:RequiredExistentialWitness;
223
+ q:priority 8
224
+ ].
225
+ }.
226
+
227
+ {
228
+ ?class rdfs:subClassOf ?restriction.
229
+ ?restriction a owl:Restriction.
230
+ ?restriction owl:onProperty ?property.
231
+ ?restriction owl:someValuesFrom ?filler.
232
+ ?class rdfs:label ?classLabel.
233
+ ?property rdfs:label ?propertyLabel.
234
+ ?filler rdfs:label ?fillerLabel.
235
+ ?class log:uri ?classIri.
236
+ ?property log:uri ?propertyIri.
237
+ ?filler log:uri ?fillerIri.
238
+ ("urn:eyeling:oqg:500:some-values:%s:%s:%s" ?classIri ?propertyIri ?fillerIri) string:format ?key.
239
+ ?out log:uri ?key.
240
+ ("- **Existential restriction** — For each `%s`, which `%s` must exist via `%s`?\n" ?classLabel ?fillerLabel ?propertyLabel) string:format ?line.
241
+ }
242
+ =>
243
+ { ?out log:outputString ?line. }.
244
+
245
+ #################################################################
246
+ # 6. Minimum cardinality pattern
247
+ #################################################################
248
+
249
+ { ?class rdfs:subClassOf ?restriction. ?restriction a owl:Restriction. ?restriction owl:onProperty ?property. ?restriction owl:minCardinality ?n. }
250
+ =>
251
+ {
252
+ [
253
+ a q:CompetencyQuestion;
254
+ q:pattern pat:MinimumCardinalityQuestion;
255
+ q:sourcePattern owl:minCardinality;
256
+ q:aboutClass ?class;
257
+ q:aboutProperty ?property;
258
+ q:questionTemplate "Does every {class} need at least {n} value(s) for {property}?";
259
+ q:slot [ q:slotName "class"; q:slotValue ?class ];
260
+ q:slot [ q:slotName "property"; q:slotValue ?property ];
261
+ q:slot [ q:slotName "n"; q:slotValue ?n ];
262
+ q:expectedAnswerShape pat:MinimumCardinalityConstraint;
263
+ q:priority 8
264
+ ].
265
+ }.
266
+
267
+ {
268
+ ?class rdfs:subClassOf ?restriction.
269
+ ?restriction a owl:Restriction.
270
+ ?restriction owl:onProperty ?property.
271
+ ?restriction owl:minCardinality ?n.
272
+ ?class rdfs:label ?classLabel.
273
+ ?property rdfs:label ?propertyLabel.
274
+ ?class log:uri ?classIri.
275
+ ?property log:uri ?propertyIri.
276
+ ("urn:eyeling:oqg:600:min-cardinality:%s:%s:%s" ?classIri ?propertyIri ?n) string:format ?key.
277
+ ?out log:uri ?key.
278
+ ("- **Minimum cardinality** — Does every `%s` need at least `%s` value for `%s`?\n" ?classLabel ?n ?propertyLabel) string:format ?line.
279
+ }
280
+ =>
281
+ { ?out log:outputString ?line. }.
282
+
283
+ #################################################################
284
+ # 7. Disjointness pattern
285
+ #################################################################
286
+
287
+ { ?classA owl:disjointWith ?classB. }
288
+ =>
289
+ {
290
+ [
291
+ a q:CompetencyQuestion;
292
+ q:pattern pat:DisjointnessQuestion;
293
+ q:sourcePattern owl:disjointWith;
294
+ q:questionTemplate "Can something ever be both a {classA} and a {classB}?";
295
+ q:slot [ q:slotName "classA"; q:slotValue ?classA ];
296
+ q:slot [ q:slotName "classB"; q:slotValue ?classB ];
297
+ q:expectedAnswerShape pat:BooleanOrExceptionList;
298
+ q:priority 6
299
+ ].
300
+ }.
301
+
302
+ {
303
+ ?classA owl:disjointWith ?classB.
304
+ ?classA rdfs:label ?labelA.
305
+ ?classB rdfs:label ?labelB.
306
+ ?classA log:uri ?iriA.
307
+ ?classB log:uri ?iriB.
308
+ ("urn:eyeling:oqg:700:disjoint:%s:%s" ?iriA ?iriB) string:format ?key.
309
+ ?out log:uri ?key.
310
+ ("- **Disjointness** — Can something ever be both an `%s` and a `%s`?\n" ?labelA ?labelB) string:format ?line.
311
+ }
312
+ =>
313
+ { ?out log:outputString ?line. }.
314
+
315
+ #################################################################
316
+ # 8. Functional property pattern
317
+ #################################################################
318
+
319
+ { ?property a owl:FunctionalProperty. }
320
+ =>
321
+ {
322
+ [
323
+ a q:CompetencyQuestion;
324
+ q:pattern pat:FunctionalPropertyQuestion;
325
+ q:sourcePattern owl:FunctionalProperty;
326
+ q:aboutProperty ?property;
327
+ q:questionTemplate "Can one subject have multiple values for {property}?";
328
+ q:slot [ q:slotName "property"; q:slotValue ?property ];
329
+ q:expectedAnswerShape pat:BooleanOrConstraint;
330
+ q:priority 6
331
+ ].
332
+ }.
333
+
334
+ {
335
+ ?property a owl:FunctionalProperty.
336
+ ?property rdfs:label ?propertyLabel.
337
+ ?property log:uri ?propertyIri.
338
+ ("urn:eyeling:oqg:800:functional:%s" ?propertyIri) string:format ?key.
339
+ ?out log:uri ?key.
340
+ ("- **Functional property** — Can one subject have multiple values for `%s`?\n" ?propertyLabel) string:format ?line.
341
+ }
342
+ =>
343
+ { ?out log:outputString ?line. }.
344
+
345
+ #################################################################
346
+ # 9. Inverse property pattern
347
+ #################################################################
348
+
349
+ { ?property owl:inverseOf ?inverseProperty. }
350
+ =>
351
+ {
352
+ [
353
+ a q:CompetencyQuestion;
354
+ q:pattern pat:InversePropertyQuestion;
355
+ q:sourcePattern owl:inverseOf;
356
+ q:aboutProperty ?property;
357
+ q:questionTemplate "If {x} has {property} {y}, should {y} have {inverseProperty} {x}?";
358
+ q:slot [ q:slotName "property"; q:slotValue ?property ];
359
+ q:slot [ q:slotName "inverseProperty"; q:slotValue ?inverseProperty ];
360
+ q:expectedAnswerShape pat:InverseRelationCheck;
361
+ q:priority 5
362
+ ].
363
+ }.
364
+
365
+ {
366
+ ?property owl:inverseOf ?inverseProperty.
367
+ ?property rdfs:label ?propertyLabel.
368
+ ?inverseProperty rdfs:label ?inverseLabel.
369
+ ?property log:uri ?propertyIri.
370
+ ?inverseProperty log:uri ?inverseIri.
371
+ ("urn:eyeling:oqg:810:inverse:%s:%s" ?propertyIri ?inverseIri) string:format ?key.
372
+ ?out log:uri ?key.
373
+ ("- **Inverse property** — If `x` has `%s` `y`, should `y` have `%s` `x`?\n" ?propertyLabel ?inverseLabel) string:format ?line.
374
+ }
375
+ =>
376
+ { ?out log:outputString ?line. }.
377
+
378
+ #################################################################
379
+ # 10. Property hierarchy pattern
380
+ #################################################################
381
+
382
+ { ?subProperty rdfs:subPropertyOf ?superProperty. }
383
+ =>
384
+ {
385
+ [
386
+ a q:CompetencyQuestion;
387
+ q:pattern pat:SubpropertyQuestion;
388
+ q:sourcePattern rdfs:subPropertyOf;
389
+ q:aboutProperty ?subProperty;
390
+ q:questionTemplate "When {subProperty} holds, should {superProperty} also hold?";
391
+ q:slot [ q:slotName "subProperty"; q:slotValue ?subProperty ];
392
+ q:slot [ q:slotName "superProperty"; q:slotValue ?superProperty ];
393
+ q:expectedAnswerShape pat:BooleanOrRule;
394
+ q:priority 4
395
+ ].
396
+ }.
397
+
398
+ {
399
+ ?subProperty rdfs:subPropertyOf ?superProperty.
400
+ ?subProperty rdfs:label ?subLabel.
401
+ ?superProperty rdfs:label ?superLabel.
402
+ ?subProperty log:uri ?subIri.
403
+ ?superProperty log:uri ?superIri.
404
+ ("urn:eyeling:oqg:820:subproperty:%s:%s" ?subIri ?superIri) string:format ?key.
405
+ ?out log:uri ?key.
406
+ ("- **Subproperty** — When `%s` holds, should `%s` also hold?\n" ?subLabel ?superLabel) string:format ?line.
407
+ }
408
+ =>
409
+ { ?out log:outputString ?line. }.
@@ -1,15 +1,19 @@
1
1
  # act-alarm-bit-interoperability
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-alarm-bit-interoperability.n3)
6
+
3
7
  ACT harbor alarm bit interoperability
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the classical alarm bit.
7
11
  NO for universal cloning and unrestricted fan-out of the quantum-like token.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The alarm state is modeled as an abstract bit carried by two unlike classical substrates. Because both the optical beacon and the relay register are information media for the same variable, local permutation and copying in both directions are possible. By contrast, the quantum-like token is treated as a superinformation medium, so universal cloning of all of its states is impossible, and unrestricted classical-style fan-out is blocked as well.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - the optical beacon is an information medium
14
18
  C2 OK - the relay register is an information medium
15
19
  C3 OK - both substrates encode the same abstract variable: AlarmBit
@@ -1,15 +1,19 @@
1
1
  # act-barley-seed-lineage
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-barley-seed-lineage.n3)
6
+
3
7
  ACT barley seed lineage — can and can't
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the viable barley lineage.
7
11
  NO for the contrast lineages when digital heredity, repair, protected dormancy, or heritable variation are missing.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The main lineage can achieve genome copying under no-design laws because its hereditary information is digitally instantiated. It can also pass through protected dormancy, germinate, produce propagules, reproduce accurately, close its life cycle, and adaptively persist under saline selection. But the contrast lineages show the "can't" side: non-digital heredity blocks accurate genome copying under no-design laws, lack of repair blocks accurate self-reproduction, lack of dormancy protection blocks lineage closure through a protected seed phase, and lack of heritable variation blocks adaptive evolution and thus blocks evolvability.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - no-design laws are assumed
14
18
  C2 OK - the viable genome can be copied under no-design laws
15
19
  C3 OK - the viable seed can achieve protected dormancy
@@ -1,15 +1,19 @@
1
1
  # act-docking-abort
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-docking-abort.n3)
6
+
3
7
  ACT docking abort token — constructor-theory coverage case
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the classical abort token.
7
11
  NO for universal cloning and unrestricted audit fan-out of the quantum seal.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The docking-abort token is treated as an abstract information variable carried by unlike classical media: lamp state, PLC register, radio frame, and audit display. Because those substrates are information media for the same variable, the token can be permuted locally, cloned locally, copied across media, measured into an output record, and embedded in serial and parallel task networks. By contrast, the quantum authenticity seal is treated as a superinformation medium, so cloning all of its states is impossible and unrestricted audit fan-out is blocked.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - the abort lamp is a computation medium
14
18
  C2 OK - the abort lamp distinguishes the abort bit
15
19
  C3 OK - permutation of the abort bit is possible on the abort lamp
@@ -1,15 +1,19 @@
1
1
  # act-gravity-mediator-witness
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-gravity-mediator-witness.n3)
6
+
3
7
  ACT gravity mediator witness
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the mediator-only witness run.
7
11
  NO for a purely classical mediator model under the same mediator-only conditions.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The positive run assumes locality and interoperability, excludes direct coupling between the two quantum systems, and records an entanglement witness after interaction through the mediator alone. Under those constructor-theoretic conditions, the mediator must be non-classical, so the run rules out a purely classical mediator model. The contrast run keeps the same locality, interoperability, and mediator-only structure but assigns the mediator a purely classical model. In that case the mediator-only entanglement witness is blocked, so the run cannot support the same non-classicality conclusion.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - locality is assumed in the positive run
14
18
  C2 OK - interoperability is assumed in the positive run
15
19
  C3 OK - direct coupling between the two quantum systems is excluded
@@ -1,15 +1,19 @@
1
1
  # act-isolation-breach
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-isolation-breach.n3)
6
+
3
7
  ACT isolation-breach token — broad constructor-theory coverage case
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the classical isolation-breach token.
7
11
  NO for universal cloning and unrestricted fan-out of the quantum provenance seal.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The isolation-breach token is treated as an abstract information variable carried by unlike classical media: a door beacon, a containment PLC, a nurse pager, and an incident board. Because those substrates are information media for the same variable, the token can be prepared, permuted, reversed, cloned locally, copied across media, measured into an output record, and composed into serial and parallel task networks. By contrast, the specimen seal is treated as a superinformation medium, so cloning all of its states is impossible and unrestricted parallel fan-out is blocked.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - the door beacon is an information medium
14
18
  C2 OK - the containment PLC is an information medium
15
19
  C3 OK - the nurse pager is an information medium
@@ -1,15 +1,19 @@
1
1
  # act-photosynthetic-exciton-transfer
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-photosynthetic-exciton-transfer.n3)
6
+
3
7
  ACT photosynthetic exciton transfer
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the tuned antenna complex.
7
11
  NO for the detuned, strongly decohered contrast complex.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The tuned complex can sample exciton pathways coherently, use vibronically assisted transfer, and exploit short-lived quantum assistance along a downhill route to the reaction center. That makes efficient exciton transfer and reaction-center delivery possible in this case. The detuned contrast complex lacks the same alignment: coherent pathway sampling is blocked, vibronic assistance is unavailable, and the energy landscape is mismatched, so efficient reaction-center delivery is not possible in the same operating picture.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - the tuned complex can sample exciton pathways coherently
14
18
  C2 OK - the tuned complex can use vibronically assisted transfer
15
19
  C3 OK - short-lived quantum assistance is enough in the tuned downhill regime
@@ -1,15 +1,19 @@
1
1
  # act-sensor-memory-reset
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-sensor-memory-reset.n3)
6
+
3
7
  ACT sensor memory reset
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES with the battery pack.
7
11
  NO with the ambient heat bath alone.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The alarm latch is a one-bit memory that must be reset to its standard clear state before the radiation sensor can be reused. In this case, the charged battery pack is treated as a work medium, so it can drive a controlled reset and prepare the latch in its reusable standard state. The ambient bath is treated as a heat medium, so by itself it cannot perform the same reliable directed reset. The example also shows an irreversibility pattern: useful work can be degraded into dissipated heat during reset, but the ambient heat bath alone cannot reconstruct the charged work resource.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - the battery pack can drive a controlled reset
14
18
  C2 OK - the alarm latch can be reliably reset from work
15
19
  C3 OK - the latch can be prepared in its standard reusable state
@@ -1,15 +1,19 @@
1
1
  # act-tunnel-junction-wake-switch
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-tunnel-junction-wake-switch.n3)
6
+
3
7
  ACT tunnel-junction wake switch
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the tunnel junction.
7
11
  NO for the conventional low-bias PN junction in the same wake-switch regime.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The tunnel junction is modeled as a heavily doped narrow PN junction with overlapping states, so quantum barrier transfer is possible. That makes sub-threshold current possible in the low-forward-bias regime, which in turn makes ultra-low-bias switching possible for the wake circuit. Because the device is also scanned through a peak-to-valley window, a negative differential response is possible as well. By contrast, the conventional junction lacks the structural conditions for the same transfer mode, so it cannot deliver the same low-bias switching task in this case.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - the tunnel junction can support quantum barrier transfer
14
18
  C2 OK - the tunnel junction is classified as tunneling-dominant
15
19
  C3 OK - the tunnel junction can deliver sub-threshold current
@@ -1,15 +1,19 @@
1
1
  # act-yeast-self-reproduction
2
2
 
3
+ ## Source files
4
+
5
+ - [N3 rules](../act-yeast-self-reproduction.n3)
6
+
3
7
  ACT yeast self-reproduction
4
8
 
5
- Answer
9
+ ## Answer
6
10
  YES for the viable starter culture.
7
11
  NO for accurate self-reproduction in the non-digital contrast lineage.
8
12
 
9
- Reason Why
13
+ ## Reason Why
10
14
  The starter genome is treated as a replicator storing digital hereditary information, while the cell machinery is treated as the vehicle that enables metabolism and copying support. Under no-design laws, digital information makes accurate genome copying possible. Because the replicator is accurate and paired with a vehicle, the whole starter cell qualifies as a self-reproducer. With a variation source and a selection environment, natural selection also becomes possible. By contrast, the non-digital lineage cannot support accurate genome copying under the same no-design-laws assumption, so it cannot sustain the same accurate self-reproduction or natural-selection story.
11
15
 
12
- Check
16
+ ## Check
13
17
  C1 OK - no-design laws are assumed
14
18
  C2 OK - digital information is physically instantiated for the viable lineage
15
19
  C3 OK - a viable replicator is present
@@ -1 +1,21 @@
1
1
  # annotation
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../annotation.n3)
6
+ - [Input TriG](../input/annotation.trig)
7
+
8
+ RDF 1.2 annotation evidence is loaded from the TriG sidecar and represented as ordinary facts.
9
+
10
+ ## Answer
11
+ YES — the annotated statement says `:a :name "Alice"` and gives that statement the identifier `:t`.
12
+
13
+ ## Reason Why
14
+ The input evidence contains the statement that Alice has the name "Alice" and records metadata for the named statement `:t`. In RDF compatibility mode, the named graph form is represented with `log:nameOf`, so `:t` names the statement while `:statedBy` and `:recorded` keep its provenance metadata.
15
+
16
+ ## Check
17
+ C1 OK - the statement `:a :name "Alice"` is present
18
+ C2 OK - `:t` names the annotated statement
19
+ C3 OK - the statement is attributed to `:bob`
20
+ C4 OK - the statement is recorded as `2021-07-07`
21
+ C5 OK - the RDF/TriG input sidecar is linked as source evidence