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.
- package/HANDBOOK.md +2 -2
- package/README.md +1 -1
- package/dist/browser/eyeling.browser.js +10 -10
- package/examples/act-alarm-bit-interoperability.n3 +4 -4
- package/examples/act-barley-seed-lineage.n3 +4 -4
- package/examples/act-docking-abort.n3 +4 -4
- package/examples/act-gravity-mediator-witness.n3 +4 -4
- package/examples/act-isolation-breach.n3 +4 -4
- package/examples/act-photosynthetic-exciton-transfer.n3 +4 -4
- package/examples/act-sensor-memory-reset.n3 +4 -4
- package/examples/act-tunnel-junction-wake-switch.n3 +4 -4
- package/examples/act-yeast-self-reproduction.n3 +4 -4
- package/examples/annotation.n3 +1 -1
- package/examples/auroracare.n3 +22 -22
- package/examples/backward-recursion.n3 +1 -1
- package/examples/barley-seed-becoming.n3 +4 -4
- package/examples/bmi.n3 +4 -4
- package/examples/builtin-coverage.n3 +1 -1
- package/examples/calidor.n3 +1 -1
- package/examples/collection.n3 +1 -1
- package/examples/complex-matrix-stability.n3 +4 -4
- package/examples/context-association.n3 +1 -1
- package/examples/control-system.n3 +4 -4
- package/examples/deck/faltings-genus2-finiteness.md +1 -1
- package/examples/deck/high-trust-rdf-bloom-envelope.md +1 -1
- package/examples/deck/odrl-dpv-risk-ranked.md +1 -1
- package/examples/deck/schema-foaf-mapping.md +1 -1
- package/examples/deep-taxonomy-10.n3 +4 -4
- package/examples/deep-taxonomy-100.n3 +4 -4
- package/examples/deep-taxonomy-1000.n3 +4 -4
- package/examples/deep-taxonomy-10000.n3 +4 -4
- package/examples/deep-taxonomy-100000.n3 +2 -2
- package/examples/delfour.n3 +1 -1
- package/examples/digital-product-passport.n3 +1 -1
- package/examples/dijkstra-risk-path.n3 +1 -1
- package/examples/easter.n3 +4 -4
- package/examples/eco-route-insight.n3 +1 -1
- package/examples/flandor.n3 +1 -1
- package/examples/french-cities.n3 +4 -4
- package/examples/fundamental-theorem-arithmetic.n3 +4 -4
- package/examples/genetic-algorithm-knapsack.n3 +1 -1
- package/examples/genetic-algorithm.n3 +1 -1
- package/examples/genetic-knapsack-selection.n3 +1 -1
- package/examples/gps.n3 +4 -4
- package/examples/harborsmr.n3 +4 -4
- package/examples/input/ontology-question-generation.trig +79 -0
- package/examples/interop-demo.n3 +1 -1
- package/examples/matrix-mechanics.n3 +1 -1
- package/examples/medior.n3 +1 -1
- package/examples/n3-speaks-for-itself.n3 +1 -1
- package/examples/odrl-dpv-ehds-risk-ranked.n3 +1 -1
- package/examples/odrl-dpv-healthcare-risk-ranked.n3 +1 -1
- package/examples/odrl-dpv-risk-ranked.n3 +1 -1
- package/examples/odrl-risk-mitigation.n3 +1 -1
- package/examples/odrl-risk.n3 +1 -1
- package/examples/ontology-question-generation.n3 +409 -0
- package/examples/output/act-alarm-bit-interoperability.md +7 -3
- package/examples/output/act-barley-seed-lineage.md +7 -3
- package/examples/output/act-docking-abort.md +7 -3
- package/examples/output/act-gravity-mediator-witness.md +7 -3
- package/examples/output/act-isolation-breach.md +7 -3
- package/examples/output/act-photosynthetic-exciton-transfer.md +7 -3
- package/examples/output/act-sensor-memory-reset.md +7 -3
- package/examples/output/act-tunnel-junction-wake-switch.md +7 -3
- package/examples/output/act-yeast-self-reproduction.md +7 -3
- package/examples/output/annotation.md +20 -0
- package/examples/output/auroracare.md +25 -21
- package/examples/output/backward-recursion.md +5 -0
- package/examples/output/barley-seed-becoming.md +7 -3
- package/examples/output/bmi.md +7 -3
- package/examples/output/builtin-coverage.md +6 -0
- package/examples/output/calidor.md +4 -0
- package/examples/output/collection.md +6 -0
- package/examples/output/complex-matrix-stability.md +7 -3
- package/examples/output/context-association.md +5 -0
- package/examples/output/control-system.md +7 -3
- package/examples/output/deep-taxonomy-10.md +7 -3
- package/examples/output/deep-taxonomy-100.md +7 -3
- package/examples/output/deep-taxonomy-1000.md +7 -3
- package/examples/output/deep-taxonomy-10000.md +7 -3
- package/examples/output/deep-taxonomy-100000.md +7 -3
- package/examples/output/delfour.md +4 -0
- package/examples/output/digital-product-passport.md +4 -0
- package/examples/output/dijkstra-risk-path.md +5 -0
- package/examples/output/easter.md +34 -30
- package/examples/output/eco-route-insight.md +5 -0
- package/examples/output/flandor.md +4 -0
- package/examples/output/french-cities.md +7 -3
- package/examples/output/fundamental-theorem-arithmetic.md +7 -3
- package/examples/output/genetic-algorithm-knapsack.md +4 -0
- package/examples/output/genetic-algorithm.md +4 -0
- package/examples/output/genetic-knapsack-selection.md +5 -0
- package/examples/output/gps.md +7 -3
- package/examples/output/harborsmr.md +7 -3
- package/examples/output/interop-demo.md +4 -0
- package/examples/output/matrix-mechanics.md +4 -0
- package/examples/output/medior.md +4 -0
- package/examples/output/n3-speaks-for-itself.md +4 -0
- package/examples/output/odrl-dpv-ehds-risk-ranked.md +4 -0
- package/examples/output/odrl-dpv-healthcare-risk-ranked.md +4 -0
- package/examples/output/odrl-dpv-risk-ranked.md +4 -0
- package/examples/output/odrl-risk-mitigation.md +4 -0
- package/examples/output/odrl-risk.md +4 -0
- package/examples/output/ontology-question-generation.md +31 -0
- package/examples/output/parcellocker.md +7 -3
- package/examples/output/pn-junction-tunneling.md +4 -0
- package/examples/output/queens.md +4 -0
- package/examples/output/rc-discharge-envelope.md +5 -0
- package/examples/output/rdf-dataset.md +5 -0
- package/examples/output/rdf-message-flow.md +5 -0
- package/examples/output/rdf-messages.md +5 -0
- package/examples/output/resto.md +7 -3
- package/examples/output/school-placement-audit.md +5 -0
- package/examples/output/smoke-arithmetic.md +5 -0
- package/examples/output/sqrt2-cauchy.md +4 -0
- package/examples/output/sqrt2-dedekind.md +4 -0
- package/examples/output/sudoku.md +4 -0
- package/examples/output/transcendental-numbers-stretched.md +4 -0
- package/examples/output/transistor-switch.md +4 -0
- package/examples/output/triple-terms.md +5 -0
- package/examples/output/tunnel-junction-wake-switch-becoming.md +7 -3
- package/examples/output/wind-turbine.md +7 -3
- package/examples/parcellocker.n3 +2 -2
- package/examples/pn-junction-tunneling.n3 +1 -1
- package/examples/queens.n3 +1 -1
- package/examples/rc-discharge-envelope.n3 +1 -1
- package/examples/rdf-dataset.n3 +1 -1
- package/examples/rdf-message-flow.n3 +1 -1
- package/examples/rdf-messages.n3 +1 -1
- package/examples/resto.n3 +4 -4
- package/examples/school-placement-audit.n3 +1 -1
- package/examples/smoke-arithmetic.n3 +1 -1
- package/examples/sqrt2-cauchy.n3 +1 -1
- package/examples/sqrt2-dedekind.n3 +1 -1
- package/examples/sudoku.n3 +5 -5
- package/examples/transcendental-numbers-stretched.n3 +1 -1
- package/examples/transistor-switch.n3 +1 -1
- package/examples/triple-terms.n3 +1 -1
- package/examples/tunnel-junction-wake-switch-becoming.n3 +4 -4
- package/examples/wind-turbine.n3 +4 -4
- package/eyeling.js +10 -10
- package/lib/engine.js +4 -4
- package/lib/entry.js +2 -2
- package/lib/printing.js +1 -1
- package/lib/trace.js +1 -1
- package/package.json +1 -1
- package/test/api.test.js +1 -1
- package/test/playground.test.js +45 -15
- 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
|