eyeling 1.24.7 → 1.24.9

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 (184) hide show
  1. package/HANDBOOK.md +35 -35
  2. package/dist/browser/eyeling.browser.js +14 -1
  3. package/examples/act-alarm-bit-interoperability.n3 +5 -3
  4. package/examples/act-barley-seed-lineage.n3 +5 -3
  5. package/examples/act-docking-abort.n3 +5 -3
  6. package/examples/act-gravity-mediator-witness.n3 +5 -3
  7. package/examples/act-isolation-breach.n3 +5 -3
  8. package/examples/act-photosynthetic-exciton-transfer.n3 +5 -3
  9. package/examples/act-sensor-memory-reset.n3 +5 -3
  10. package/examples/act-tunnel-junction-wake-switch.n3 +5 -3
  11. package/examples/act-yeast-self-reproduction.n3 +5 -3
  12. package/examples/annotation.n3 +5 -0
  13. package/examples/auroracare.n3 +29 -29
  14. package/examples/backward-recursion.n3 +5 -0
  15. package/examples/barley-seed-becoming.n3 +5 -3
  16. package/examples/bmi.n3 +5 -3
  17. package/examples/builtin-coverage.n3 +5 -0
  18. package/examples/calidor.n3 +3 -3
  19. package/examples/collection.n3 +5 -0
  20. package/examples/complex-matrix-stability.n3 +5 -3
  21. package/examples/context-association.n3 +1 -9
  22. package/examples/control-system.n3 +5 -3
  23. package/examples/deep-taxonomy-10.n3 +5 -3
  24. package/examples/deep-taxonomy-100.n3 +5 -3
  25. package/examples/deep-taxonomy-1000.n3 +5 -3
  26. package/examples/deep-taxonomy-10000.n3 +5 -3
  27. package/examples/deep-taxonomy-100000.n3 +3 -1
  28. package/examples/delfour.n3 +3 -3
  29. package/examples/digital-product-passport.n3 +2 -0
  30. package/examples/dijkstra-risk-path.n3 +1 -2
  31. package/examples/easter.n3 +6 -4
  32. package/examples/eco-route-insight.n3 +1 -2
  33. package/examples/flandor.n3 +3 -3
  34. package/examples/french-cities.n3 +5 -3
  35. package/examples/fundamental-theorem-arithmetic.n3 +5 -3
  36. package/examples/genetic-algorithm-knapsack.n3 +1 -1
  37. package/examples/genetic-algorithm.n3 +1 -1
  38. package/examples/genetic-knapsack-selection.n3 +1 -2
  39. package/examples/gps.n3 +5 -3
  40. package/examples/harborsmr.n3 +5 -3
  41. package/examples/input/ontology-question-generation.trig +79 -0
  42. package/examples/input/rdf-message-flow.trig +10 -10
  43. package/examples/input/rdf-messages.trig +6 -6
  44. package/examples/interop-demo.n3 +3 -1
  45. package/examples/matrix-mechanics.n3 +3 -3
  46. package/examples/medior.n3 +3 -3
  47. package/examples/n3-speaks-for-itself.n3 +5 -0
  48. package/examples/odrl-dpv-ehds-risk-ranked.n3 +1 -1
  49. package/examples/odrl-dpv-healthcare-risk-ranked.n3 +1 -1
  50. package/examples/odrl-dpv-risk-ranked.n3 +1 -1
  51. package/examples/odrl-risk-mitigation.n3 +1 -1
  52. package/examples/odrl-risk.n3 +1 -1
  53. package/examples/ontology-question-generation.n3 +409 -0
  54. package/examples/output/{act-alarm-bit-interoperability.txt → act-alarm-bit-interoperability.md} +23 -17
  55. package/examples/output/act-barley-seed-lineage.md +31 -0
  56. package/examples/output/{act-docking-abort.txt → act-docking-abort.md} +25 -19
  57. package/examples/output/{act-gravity-mediator-witness.txt → act-gravity-mediator-witness.md} +27 -21
  58. package/examples/output/{act-isolation-breach.txt → act-isolation-breach.md} +30 -24
  59. package/examples/output/{act-photosynthetic-exciton-transfer.txt → act-photosynthetic-exciton-transfer.md} +23 -17
  60. package/examples/output/{act-sensor-memory-reset.txt → act-sensor-memory-reset.md} +23 -17
  61. package/examples/output/{act-tunnel-junction-wake-switch.txt → act-tunnel-junction-wake-switch.md} +24 -18
  62. package/examples/output/{act-yeast-self-reproduction.txt → act-yeast-self-reproduction.md} +26 -20
  63. package/examples/output/annotation.md +7 -0
  64. package/examples/output/auroracare.md +154 -0
  65. package/examples/output/backward-recursion.md +11 -0
  66. package/examples/output/barley-seed-becoming.md +31 -0
  67. package/examples/output/bmi.md +26 -0
  68. package/examples/output/builtin-coverage.md +7 -0
  69. package/examples/output/calidor.md +35 -0
  70. package/examples/output/collection.md +7 -0
  71. package/examples/output/{complex-matrix-stability.txt → complex-matrix-stability.md} +17 -11
  72. package/examples/output/context-association.md +12 -0
  73. package/examples/output/{control-system.txt → control-system.md} +23 -17
  74. package/examples/output/deep-taxonomy-10.md +21 -0
  75. package/examples/output/deep-taxonomy-100.md +21 -0
  76. package/examples/output/{deep-taxonomy-1000.txt → deep-taxonomy-1000.md} +18 -12
  77. package/examples/output/{deep-taxonomy-10000.txt → deep-taxonomy-10000.md} +18 -12
  78. package/examples/output/{deep-taxonomy-100000.txt → deep-taxonomy-100000.md} +18 -12
  79. package/examples/output/delfour.md +36 -0
  80. package/examples/output/digital-product-passport.md +7 -0
  81. package/examples/output/dijkstra-risk-path.md +16 -0
  82. package/examples/output/{easter.txt → easter.md} +156 -150
  83. package/examples/output/eco-route-insight.md +25 -0
  84. package/examples/output/flandor.md +37 -0
  85. package/examples/output/{french-cities.txt → french-cities.md} +17 -11
  86. package/examples/output/{fundamental-theorem-arithmetic.txt → fundamental-theorem-arithmetic.md} +18 -12
  87. package/examples/output/genetic-algorithm-knapsack.md +7 -0
  88. package/examples/output/genetic-algorithm.md +7 -0
  89. package/examples/output/genetic-knapsack-selection.md +18 -0
  90. package/examples/output/{gps.txt → gps.md} +18 -12
  91. package/examples/output/harborsmr.md +26 -0
  92. package/examples/output/interop-demo.md +7 -0
  93. package/examples/output/matrix-mechanics.md +20 -0
  94. package/examples/output/medior.md +38 -0
  95. package/examples/output/n3-speaks-for-itself.md +58 -0
  96. package/examples/output/{odrl-dpv-ehds-risk-ranked.txt → odrl-dpv-ehds-risk-ranked.md} +20 -15
  97. package/examples/output/{odrl-dpv-healthcare-risk-ranked.txt → odrl-dpv-healthcare-risk-ranked.md} +17 -12
  98. package/examples/output/{odrl-dpv-risk-ranked.txt → odrl-dpv-risk-ranked.md} +21 -16
  99. package/examples/output/{odrl-risk-mitigation.txt → odrl-risk-mitigation.md} +21 -16
  100. package/examples/output/{odrl-risk.txt → odrl-risk.md} +10 -5
  101. package/examples/output/ontology-question-generation.md +31 -0
  102. package/examples/output/parcellocker.md +26 -0
  103. package/examples/output/pn-junction-tunneling.md +29 -0
  104. package/examples/output/queens.md +27 -0
  105. package/examples/output/rc-discharge-envelope.md +16 -0
  106. package/examples/output/rdf-dataset.md +12 -0
  107. package/examples/output/rdf-message-flow.md +12 -0
  108. package/examples/output/rdf-messages.md +12 -0
  109. package/examples/output/{resto.txt → resto.md} +23 -17
  110. package/examples/output/school-placement-audit.md +16 -0
  111. package/examples/output/smoke-arithmetic.md +12 -0
  112. package/examples/output/sqrt2-cauchy.md +19 -0
  113. package/examples/output/sqrt2-dedekind.md +37 -0
  114. package/examples/output/sudoku.md +49 -0
  115. package/examples/output/transcendental-numbers-stretched.md +266 -0
  116. package/examples/output/transistor-switch.md +30 -0
  117. package/examples/output/triple-terms.md +12 -0
  118. package/examples/output/{tunnel-junction-wake-switch-becoming.txt → tunnel-junction-wake-switch-becoming.md} +24 -18
  119. package/examples/output/{wind-turbine.txt → wind-turbine.md} +21 -15
  120. package/examples/parcellocker.n3 +3 -1
  121. package/examples/pn-junction-tunneling.n3 +3 -3
  122. package/examples/queens.n3 +1 -0
  123. package/examples/rc-discharge-envelope.n3 +1 -1
  124. package/examples/rdf-dataset.n3 +5 -0
  125. package/examples/rdf-message-flow.n3 +1 -2
  126. package/examples/rdf-messages.n3 +1 -2
  127. package/examples/resto.n3 +5 -3
  128. package/examples/school-placement-audit.n3 +1 -2
  129. package/examples/smoke-arithmetic.n3 +1 -1
  130. package/examples/sqrt2-cauchy.n3 +2 -0
  131. package/examples/sqrt2-dedekind.n3 +2 -0
  132. package/examples/sudoku.n3 +14 -14
  133. package/examples/transcendental-numbers-stretched.n3 +5 -0
  134. package/examples/transistor-switch.n3 +3 -3
  135. package/examples/triple-terms.n3 +5 -0
  136. package/examples/tunnel-junction-wake-switch-becoming.n3 +5 -3
  137. package/examples/wind-turbine.n3 +5 -3
  138. package/eyeling.js +14 -1
  139. package/lib/explain.js +14 -1
  140. package/package.json +1 -1
  141. package/test/examples.test.js +44 -13
  142. package/test/package.test.js +43 -7
  143. package/examples/output/act-barley-seed-lineage.txt +0 -25
  144. package/examples/output/annotation.n3 +0 -0
  145. package/examples/output/auroracare.txt +0 -149
  146. package/examples/output/backward-recursion.n3 +0 -4
  147. package/examples/output/barley-seed-becoming.txt +0 -25
  148. package/examples/output/bmi.txt +0 -20
  149. package/examples/output/builtin-coverage.n3 +0 -0
  150. package/examples/output/calidor.txt +0 -29
  151. package/examples/output/collection.n3 +0 -0
  152. package/examples/output/context-association.n3 +0 -9
  153. package/examples/output/deep-taxonomy-10.txt +0 -15
  154. package/examples/output/deep-taxonomy-100.txt +0 -15
  155. package/examples/output/delfour.txt +0 -30
  156. package/examples/output/digital-product-passport.txt +0 -1
  157. package/examples/output/dijkstra-risk-path.n3 +0 -3
  158. package/examples/output/eco-route-insight.n3 +0 -3
  159. package/examples/output/flandor.txt +0 -31
  160. package/examples/output/genetic-algorithm-knapsack.txt +0 -1
  161. package/examples/output/genetic-algorithm.txt +0 -1
  162. package/examples/output/genetic-knapsack-selection.n3 +0 -3
  163. package/examples/output/harborsmr.txt +0 -20
  164. package/examples/output/interop-demo.txt +0 -1
  165. package/examples/output/matrix-mechanics.txt +0 -14
  166. package/examples/output/medior.txt +0 -32
  167. package/examples/output/n3-speaks-for-itself.txt +0 -52
  168. package/examples/output/parcellocker.txt +0 -20
  169. package/examples/output/pn-junction-tunneling.txt +0 -23
  170. package/examples/output/queens.txt +0 -21
  171. package/examples/output/rc-discharge-envelope.n3 +0 -9
  172. package/examples/output/rc-discharge-envelope.txt +0 -9
  173. package/examples/output/rdf-dataset.n3 +0 -5
  174. package/examples/output/rdf-message-flow.n3 +0 -7
  175. package/examples/output/rdf-messages.n3 +0 -7
  176. package/examples/output/school-placement-audit.n3 +0 -3
  177. package/examples/output/smoke-arithmetic.n3 +0 -5
  178. package/examples/output/smoke-arithmetic.txt +0 -5
  179. package/examples/output/sqrt2-cauchy.txt +0 -13
  180. package/examples/output/sqrt2-dedekind.txt +0 -31
  181. package/examples/output/sudoku.txt +0 -43
  182. package/examples/output/transcendental-numbers-stretched.txt +0 -260
  183. package/examples/output/transistor-switch.txt +0 -24
  184. package/examples/output/triple-terms.n3 +0 -5
@@ -0,0 +1,58 @@
1
+ # n3-speaks-for-itself
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../n3-speaks-for-itself.n3)
6
+
7
+ @prefix : <https://example.org/n3-speaks#> .
8
+ @prefix foaf: <http://xmlns.com/foaf/0.1/> .
9
+ @prefix id: <https://example.org/id/> .
10
+
11
+ :report :aliceReaches id:bob .
12
+ :report :aliceReaches id:carol .
13
+ :report :aliceReaches id:dave .
14
+ :report :believes {
15
+ id:alice foaf:knows id:bob .
16
+ } .
17
+ :report :believes {
18
+ id:alice foaf:name "Alice" .
19
+ } .
20
+ :report :believes {
21
+ id:bob foaf:knows id:carol .
22
+ } .
23
+ :report :believes {
24
+ id:bob foaf:name "Bob" .
25
+ } .
26
+ :report :believes {
27
+ id:carol foaf:knows id:dave .
28
+ } .
29
+ :report :believes {
30
+ id:carol foaf:name "Carol" .
31
+ } .
32
+ :report :believes {
33
+ id:dave foaf:name "Dave" .
34
+ } .
35
+ :report :trusts <https://alice.example/profile.n3> .
36
+ :report :trusts <https://bob.example/profile.n3> .
37
+ :report :trusts <https://carol.example/profile.n3> .
38
+ {
39
+ id:alice foaf:knows id:bob .
40
+ } :believedFromDoc <https://alice.example/profile.n3> .
41
+ {
42
+ id:alice foaf:name "Alice" .
43
+ } :believedFromDoc <https://alice.example/profile.n3> .
44
+ {
45
+ id:bob foaf:knows id:carol .
46
+ } :believedFromDoc <https://bob.example/profile.n3> .
47
+ {
48
+ id:bob foaf:name "Bob" .
49
+ } :believedFromDoc <https://bob.example/profile.n3> .
50
+ {
51
+ id:carol foaf:knows id:dave .
52
+ } :believedFromDoc <https://carol.example/profile.n3> .
53
+ {
54
+ id:carol foaf:name "Carol" .
55
+ } :believedFromDoc <https://carol.example/profile.n3> .
56
+ {
57
+ id:dave foaf:name "Dave" .
58
+ } :believedFromDoc <https://carol.example/profile.n3> .
@@ -1,21 +1,26 @@
1
+ # odrl-dpv-ehds-risk-ranked
1
2
 
2
- === Ranked DPV Risk Report (EHDS-aligned) ===
3
- Agreement: EHDS Secondary Use Agreement (example)
4
- Profile: Example patient profile (EHDS rights expectations)
3
+ ## Source files
5
4
 
6
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
7
- Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.
5
+ - [N3 rules](../odrl-dpv-ehds-risk-ranked.n3)
8
6
 
9
- - mitigation for clause H1: Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.
10
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
11
- Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.
7
+ ## Ranked DPV Risk Report (EHDS-aligned)
8
+ Agreement: EHDS Secondary Use Agreement (example)
9
+ Profile: Example patient profile (EHDS rights expectations)
12
10
 
13
- - mitigation for clause H2: Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).
14
- score=88 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H3
15
- Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.
11
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
12
+ Risk: secondary use is permitted without an EHDS Data Permit safeguard. Clause H1: Hospital may provide electronic health data for secondary use based on a bilateral data use agreement with the applicant.
16
13
 
17
- - mitigation for clause H3: Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.
18
- score=80 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H4
19
- Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.
14
+ - mitigation for clause H1: Require an EHDS Data Permit (eu-ehds:DataPermit) issued by a Health Data Access Body prior to secondary use.
15
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
16
+ Risk: secondary use may include patients who opted out (EHDS A71). Clause H2: Secondary use may include all patient records for training and evaluating health-related algorithms.
20
17
 
21
- - mitigation for clause H4: Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.
18
+ - mitigation for clause H2: Add an explicit safeguard to exclude records of persons who exercised the EHDS opt-out from secondary use (A71).
19
+ score=88 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H3
20
+ Risk: the agreement permits local downloads rather than processing within a secure processing environment. Clause H3: The applicant may download a complete local copy of the dataset to its own infrastructure for analysis.
21
+
22
+ - mitigation for clause H3: Require processing only within a secure processing environment (e.g., eu-dga:SecureProcessingEnvironment), and prohibit local downloads of raw datasets.
23
+ score=80 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H4
24
+ Risk: secondary-use dataset is only described as pseudonymised, without a safeguard requiring statistically anonymised data for secondary use. Clause H4: The dataset will be provided in pseudonymised form by removing direct identifiers.
25
+
26
+ - mitigation for clause H4: Require an EHDS Health Data Request for statistically anonymised data (eu-ehds:HealthDataRequest), and add a constraint that secondary-use data must be statistically anonymised.
@@ -1,17 +1,22 @@
1
+ # odrl-dpv-healthcare-risk-ranked
1
2
 
2
- === Ranked DPV Risk Report (Healthcare & Life Sciences) ===
3
- Agreement: Example Healthcare & Life-Sciences Data Use Agreement
4
- Profile: Example patient profile
3
+ ## Source files
5
4
 
6
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
7
- Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.
5
+ - [N3 rules](../odrl-dpv-healthcare-risk-ranked.n3)
8
6
 
9
- - mitigation for clause H1: Add an explicit consent constraint for secondary research use.
10
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
11
- Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.
7
+ ## Ranked DPV Risk Report (Healthcare & Life Sciences)
8
+ Agreement: Example Healthcare & Life-Sciences Data Use Agreement
9
+ Profile: Example patient profile
12
10
 
13
- - mitigation for clause H2: Require de-identification/pseudonymisation before external sharing of genomic data.
14
- score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause H4
15
- Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.
11
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H1
12
+ Risk: health/genomic data may be used for research without explicit opt-in consent. Clause H1: Hospital may use EHR and genomic data for internal clinical research and publication.
16
13
 
17
- - mitigation for clause H4: Limit retention to 3 years (or document the legal obligation requiring longer retention).
14
+ - mitigation for clause H1: Add an explicit consent constraint for secondary research use.
15
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause H2
16
+ Risk: genomic data may be shared with external pharma partners without a de-identification/pseudonymisation requirement. Clause H2: Hospital may share genomic data with pharmaceutical partners for drug discovery and R&D.
17
+
18
+ - mitigation for clause H2: Require de-identification/pseudonymisation before external sharing of genomic data.
19
+ score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause H4
20
+ Risk: retention (3650 days) exceeds patient preference (1095 days). Clause H4: Hospital retains patient health records for 10 years.
21
+
22
+ - mitigation for clause H4: Limit retention to 3 years (or document the legal obligation requiring longer retention).
@@ -1,22 +1,27 @@
1
+ # odrl-dpv-risk-ranked
1
2
 
2
- === Ranked DPV Risk Report ===
3
- Agreement: Example Agreement
4
- Profile: Example consumer profile
3
+ ## Source files
5
4
 
6
- score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1
7
- Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.
5
+ - [N3 rules](../odrl-dpv-risk-ranked.n3)
8
6
 
9
- - mitigation for clause C1: Add a notice constraint (minimum noticeDays) before account removal.
10
- - mitigation for clause C1: Add a duty to inform the consumer prior to account removal.
11
- score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3
12
- Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.
7
+ ## Ranked DPV Risk Report
8
+ Agreement: Example Agreement
9
+ Profile: Example consumer profile
13
10
 
14
- - mitigation for clause C3: Add an explicit consent constraint before data sharing.
15
- score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2
16
- Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.
11
+ score=100 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C1
12
+ Risk: account/data removal is permitted without notice safeguards (no notice constraint and no duty to inform). Clause C1: Provider may remove the user account (and associated data) at its discretion.
17
13
 
18
- - mitigation for clause C2: Increase minimum noticeDays in the inform duty to meet the consumer requirement.
19
- score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4
20
- Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.
14
+ - mitigation for clause C1: Add a notice constraint (minimum noticeDays) before account removal.
15
+ - mitigation for clause C1: Add a duty to inform the consumer prior to account removal.
16
+ score=97 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C3
17
+ Risk: user data sharing is permitted without an explicit consent constraint. Clause C3: Provider may share user data with partners for business purposes.
21
18
 
22
- - mitigation for clause C4: Add a permission allowing data export (or remove the prohibition) to support portability.
19
+ - mitigation for clause C3: Add an explicit consent constraint before data sharing.
20
+ score=85 (https://w3id.org/dpv/risk#HighRisk, https://w3id.org/dpv/risk#HighSeverity) clause C2
21
+ Risk: terms may change with notice (3 days) below consumer requirement (14 days). Clause C2: Provider may change terms by informing users at least 3 days in advance.
22
+
23
+ - mitigation for clause C2: Increase minimum noticeDays in the inform duty to meet the consumer requirement.
24
+ score=70 (https://w3id.org/dpv/risk#ModerateRisk, https://w3id.org/dpv/risk#ModerateSeverity) clause C4
25
+ Risk: portability is restricted because exporting user data is prohibited. Clause C4: Users are not permitted to export their data.
26
+
27
+ - mitigation for clause C4: Add a permission allowing data export (or remove the prohibition) to support portability.
@@ -1,18 +1,23 @@
1
+ # odrl-risk-mitigation
1
2
 
2
- === Risk report for Example Platform Agreement (with fixes) (profile: Carol (example consumer)) ===
3
- 1) score=100 (https://example.org/odrl-mitigation-demo#High), clause D6 — Provider can delete user data. This clause is risky because it allows the provider to delete the consumer’s data. Clause D6: We may delete your data at our discretion.
4
- 2) score=93 (https://example.org/odrl-mitigation-demo#High), clause D5 — No data export / portability. This clause is risky because it prohibits exporting data, undermining portability. Clause D5: You may not export or download your data from the service.
5
- 3) score=89 (https://example.org/odrl-mitigation-demo#High), clause D4 — Tracking without opt-in. This clause is risky because it permits tracking without explicit opt-in consent. Clause D4: We may track your activity to improve services.
6
- 4) score=85 (https://example.org/odrl-mitigation-demo#High), clause D2 — Auto-renewal without reminder. This clause is risky because it allows auto-renewal without a reminder. Consumer needs at least 7 days reminder. Clause D2: Your subscription renews automatically unless you cancel.
7
- 5) score=85 (https://example.org/odrl-mitigation-demo#High), clause D1 — Notice period too short. This clause is risky because the notice period (3 days) is below the consumer requirement (14 days). Clause D1: We may change these terms with notice. Notice may be as short as 3 days.
8
- 6) score=79 (https://example.org/odrl-mitigation-demo#Medium), clause D3 — Non-refundable fees. This clause is risky because it declares fees non-refundable, conflicting with a refund/cooling-off expectation (>= 14 days). Clause D3: All fees are non-refundable.
9
- 7) score=73 (https://example.org/odrl-mitigation-demo#Medium), clause D2 — Liability cap too low. This clause is risky because the liability cap (20 EUR) is below the consumer minimum (200 EUR). Clause D2: Your subscription renews automatically unless you cancel.
3
+ ## Source files
10
4
 
11
- --- Suggested mitigations (highest risk first) ---
12
- 1) clause D6 — Provider can delete user data (score=100). Suggested fix: remove provider discretion to delete data; allow deletion only on consumer request or legal obligation.
13
- 2) clause D5 No data export / portability (score=93). Suggested fix: add a permission to export/download user data (data portability).
14
- 3) clause D4Tracking without opt-in (score=89). Suggested fix: require opt-in consent for tracking (optInConsent=true).
15
- 4) clause D2Auto-renewal without reminder (score=85). Suggested fix: add a reminder duty for auto-renewal with reminderDays >= 7.
16
- 5) clause D1Notice period too short (score=85). Suggested fix: ensure prior-notice duty specifies noticeDays >= 14.
17
- 6) clause D3Non-refundable fees (score=79). Suggested fix: allow refunds (e.g., refundAllowed=true) or define a cooling-off period >= 14 days.
18
- 7) clause D2Liability cap too low (score=73). Suggested fix: raise liabilityCapEuro so it is >= 200 EUR (or remove the cap where inappropriate).
5
+ - [N3 rules](../odrl-risk-mitigation.n3)
6
+
7
+ ## Risk report for Example Platform Agreement (with fixes) (profile: Carol (example consumer))
8
+ 1) score=100 (https://example.org/odrl-mitigation-demo#High), clause D6Provider can delete user data. This clause is risky because it allows the provider to delete the consumer’s data. Clause D6: We may delete your data at our discretion.
9
+ 2) score=93 (https://example.org/odrl-mitigation-demo#High), clause D5No data export / portability. This clause is risky because it prohibits exporting data, undermining portability. Clause D5: You may not export or download your data from the service.
10
+ 3) score=89 (https://example.org/odrl-mitigation-demo#High), clause D4Tracking without opt-in. This clause is risky because it permits tracking without explicit opt-in consent. Clause D4: We may track your activity to improve services.
11
+ 4) score=85 (https://example.org/odrl-mitigation-demo#High), clause D2Auto-renewal without reminder. This clause is risky because it allows auto-renewal without a reminder. Consumer needs at least 7 days reminder. Clause D2: Your subscription renews automatically unless you cancel.
12
+ 5) score=85 (https://example.org/odrl-mitigation-demo#High), clause D1Notice period too short. This clause is risky because the notice period (3 days) is below the consumer requirement (14 days). Clause D1: We may change these terms with notice. Notice may be as short as 3 days.
13
+ 6) score=79 (https://example.org/odrl-mitigation-demo#Medium), clause D3 — Non-refundable fees. This clause is risky because it declares fees non-refundable, conflicting with a refund/cooling-off expectation (>= 14 days). Clause D3: All fees are non-refundable.
14
+ 7) score=73 (https://example.org/odrl-mitigation-demo#Medium), clause D2 — Liability cap too low. This clause is risky because the liability cap (20 EUR) is below the consumer minimum (200 EUR). Clause D2: Your subscription renews automatically unless you cancel.
15
+
16
+ --- Suggested mitigations (highest risk first) ---
17
+ 1) clause D6 — Provider can delete user data (score=100). Suggested fix: remove provider discretion to delete data; allow deletion only on consumer request or legal obligation.
18
+ 2) clause D5 — No data export / portability (score=93). Suggested fix: add a permission to export/download user data (data portability).
19
+ 3) clause D4 — Tracking without opt-in (score=89). Suggested fix: require opt-in consent for tracking (optInConsent=true).
20
+ 4) clause D2 — Auto-renewal without reminder (score=85). Suggested fix: add a reminder duty for auto-renewal with reminderDays >= 7.
21
+ 5) clause D1 — Notice period too short (score=85). Suggested fix: ensure prior-notice duty specifies noticeDays >= 14.
22
+ 6) clause D3 — Non-refundable fees (score=79). Suggested fix: allow refunds (e.g., refundAllowed=true) or define a cooling-off period >= 14 days.
23
+ 7) clause D2 — Liability cap too low (score=73). Suggested fix: raise liabilityCapEuro so it is >= 200 EUR (or remove the cap where inappropriate).
@@ -1,6 +1,11 @@
1
+ # odrl-risk
1
2
 
2
- === Risk report for Example SaaS Agreement (profile: Alice (example consumer)) ===
3
- 1) score=100 (https://example.org/agreement#High), clause C2 — Provider can delete user data. This clause is risky because it allows the provider to remove (delete) the consumer’s data. Clause C2: We may delete your data at our discretion, with or without notice.
4
- 2) score=95 (https://example.org/agreement#High), clause C3 — Data sharing without consent. This clause is risky because it permits data sharing without an explicit consent requirement. Clause C3: We may share your data with partners for any purpose.
5
- 3) score=95 (https://example.org/agreement#High), clause C1 — Unilateral change without notice. This clause is risky because it allows unilateral changes without any prior notice. Clause C1: We may change these terms at any time. Continued use means acceptance.
6
- 4) score=60 (https://example.org/agreement#Medium), clause C4 Court access waiver / mandatory arbitration. This clause is risky because it restricts access to court (mandatory arbitration / waiver). Clause C4: You waive your right to go to court; disputes must be arbitrated.
3
+ ## Source files
4
+
5
+ - [N3 rules](../odrl-risk.n3)
6
+
7
+ ## Risk report for Example SaaS Agreement (profile: Alice (example consumer))
8
+ 1) score=100 (https://example.org/agreement#High), clause C2 — Provider can delete user data. This clause is risky because it allows the provider to remove (delete) the consumer’s data. Clause C2: We may delete your data at our discretion, with or without notice.
9
+ 2) score=95 (https://example.org/agreement#High), clause C3 — Data sharing without consent. This clause is risky because it permits data sharing without an explicit consent requirement. Clause C3: We may share your data with partners for any purpose.
10
+ 3) score=95 (https://example.org/agreement#High), clause C1 — Unilateral change without notice. This clause is risky because it allows unilateral changes without any prior notice. Clause C1: We may change these terms at any time. Continued use means acceptance.
11
+ 4) score=60 (https://example.org/agreement#Medium), clause C4 — Court access waiver / mandatory arbitration. This clause is risky because it restricts access to court (mandatory arbitration / waiver). Clause C4: You waive your right to go to court; disputes must be arbitrated.
@@ -0,0 +1,31 @@
1
+ # ontology-question-generation
2
+
3
+ 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`.
4
+
5
+ ## Source files
6
+
7
+ - [N3 rules](../ontology-question-generation.n3)
8
+ - [Input ontology TriG](../input/ontology-question-generation.trig)
9
+
10
+ ## Detected competency questions
11
+
12
+ - **Class population** — Which things are instances of `employee`?
13
+ - **Class population** — Which things are instances of `organization`?
14
+ - **Class population** — Which things are instances of `person`?
15
+ - **Class population** — Which things are instances of `project`?
16
+ - **Subclass distinction** — What distinguishes `employee` from a general `person`?
17
+ - **Object property** — For a given `employee`, which `project` is related by `assigned to`?
18
+ - **Object property** — For a given `organization`, which `person` is related by `employs`?
19
+ - **Object property** — For a given `person`, which `organization` is related by `works for`?
20
+ - **Datatype property** — What is the `birth date` value of a given `person`?
21
+ - **Datatype property** — What is the `legal name` value of a given `organization`?
22
+ - **Existential restriction** — For each `employee`, which `organization` must exist via `works for`?
23
+ - **Minimum cardinality** — Does every `employee` need at least `1` value for `assigned to`?
24
+ - **Disjointness** — Can something ever be both an `organization` and a `person`?
25
+ - **Functional property** — Can one subject have multiple values for `birth date`?
26
+ - **Inverse property** — If `x` has `works for` `y`, should `y` have `employs` `x`?
27
+ - **Subproperty** — When `principal employer` holds, should `works for` also hold?
28
+
29
+ ## RDF shape behind the Markdown
30
+
31
+ 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.
@@ -0,0 +1,26 @@
1
+ # parcellocker
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../parcellocker.n3)
6
+
7
+ ParcelLocker — One-time parcel pickup by a friend
8
+
9
+ ## Answer
10
+ PERMIT
11
+ Noah may collect Maya's parcel from locker B17.
12
+
13
+ ## Reason Why
14
+ Maya created a one-time authorization for Noah only, for this parcel only, at this locker only, and for pickup only. The token is active, the parcel is ready, and the same authorization does not reveal billing details or allow redirection.
15
+
16
+ ## Check
17
+ C1 OK - requester matches the named delegate
18
+ C2 OK - requested parcel matches the authorized parcel
19
+ C3 OK - requested locker matches the authorized locker
20
+ C4 OK - requested action is parcel collection
21
+ C5 OK - requested purpose is pickup only
22
+ C6 OK - authorization is active
23
+ C7 OK - authorization is single-use
24
+ C8 OK - parcel is ready for pickup
25
+ C9 OK - billing details stay hidden
26
+ C10 OK - parcel redirection is not allowed
@@ -0,0 +1,29 @@
1
+ # pn-junction-tunneling
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../pn-junction-tunneling.n3)
6
+
7
+ ## Answer
8
+ In this toy PN-junction tunneling model, heavy doping narrows the depletion region enough for a tunneling window that rises to a peak and then falls, producing a negative-differential region.
9
+ case : pn-junction-tunneling
10
+ peak bias : 2
11
+ peak current proxy : 4
12
+ negative differential region : yes
13
+
14
+ ## Reason Why
15
+ We model tunneling current as an exact overlap count between filled N-side states and empty P-side states while forward bias shifts the bands. Heavy doping is represented by a much narrower depletion region.
16
+ ordinary depletion width (nm) : 8
17
+ tunnel depletion width (nm) : 1
18
+ filled N-side states : [1, 2, 3, 4]
19
+ empty P-side states at 0 bias : [3, 4, 5, 6]
20
+ bias -> overlap current proxy : 0->2, 1->3, 2->4, 3->3, 4->2, 5->1, 6->0
21
+ peak point : 2 -> 4
22
+ high-bias point : 6 -> 0
23
+
24
+ ## Check
25
+ heavily doped barrier is narrower : yes
26
+ peak occurs before overlap closes : yes
27
+ negative differential region present : yes
28
+ high-bias overlap closes : yes
29
+ peak equals full four-state overlap: yes
@@ -0,0 +1,27 @@
1
+ # queens
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../queens.n3)
6
+
7
+ Solving 14-Queens...
8
+ Printing at most 1 solution(s).
9
+
10
+ Solution 1:
11
+ Q . . . . . . . . . . . . .
12
+ . . Q . . . . . . . . . . .
13
+ . . . . Q . . . . . . . . .
14
+ . . . . . . Q . . . . . . .
15
+ . . . . . . . . . . . Q . .
16
+ . . . . . . . . . Q . . . .
17
+ . . . . . . . . . . . . Q .
18
+ . . . Q . . . . . . . . . .
19
+ . . . . . . . . . . . . . Q
20
+ . . . . . . . . Q . . . . .
21
+ . Q . . . . . . . . . . . .
22
+ . . . . . Q . . . . . . . .
23
+ . . . . . . . Q . . . . . .
24
+ . . . . . . . . . . Q . . .
25
+ As column positions by row: [1, 3, 5, 7, 12, 10, 13, 4, 14, 9, 2, 6, 8, 11]
26
+
27
+ Total solutions for 14-Queens: 365596
@@ -0,0 +1,16 @@
1
+ # rc-discharge-envelope
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../rc-discharge-envelope.n3)
6
+ - [Input TriG](../input/rc-discharge-envelope.trig)
7
+
8
+ ## Answer
9
+ exact decay symbol : exp(-1/4)
10
+ certified decay interval : [0.7788007830, 0.7788007831]
11
+ first below tolerance step : 13
12
+ first below tolerance time : 0.325 s
13
+ upper voltage at step 13 : 0.930581 V
14
+
15
+ ## Explanation
16
+ The physical decay factor is exp(-1/4), but the example uses a finite double interval as the certificate. Because the interval lies strictly between 0 and 1, the capacitor voltage envelope contracts each sample. The upper envelope is the safety-relevant bound: once it falls below 1.0 V, every compatible exact trajectory is below tolerance.
@@ -0,0 +1,12 @@
1
+ # rdf-dataset
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../rdf-dataset.n3)
6
+ - [Input TriG](../input/rdf-dataset.trig)
7
+
8
+ VERSION "1.2"
9
+
10
+ @prefix : <https://eyereasoner.github.io/eyeling/examples/rdf-dataset#> .
11
+
12
+ :workOrder :entails <<( :sensor :needs :inspection )>> .
@@ -0,0 +1,12 @@
1
+ # rdf-message-flow
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../rdf-message-flow.n3)
6
+ - [Input TriG](../input/rdf-message-flow.trig)
7
+
8
+ ## Answer
9
+ Continuous RDF Message flow accepted: 5 ordered messages moved through the ingest → validate → interpret → route → sink pipeline. The threshold was 26, so results 21 and 22 were archived, the heartbeat kept the stream alive, and results 28 and 29 were emitted as alerts.
10
+
11
+ ## Explanation
12
+ The N3 source starts only :m001 at ingress. Each message must reach :sink before the continuous-flow rule releases its msg:nextMessage. Observation payloads are inspected with log:includes inside each message formula, while the empty heartbeat uses the same envelope and routing stages without a payload. This models messages flowing through a live stream while preserving message boundaries.
@@ -0,0 +1,12 @@
1
+ # rdf-messages
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../rdf-messages.n3)
6
+ - [Input TriG](../input/rdf-messages.trig)
7
+
8
+ ## Answer
9
+ RDF Message log accepted: 3 explicit message boundaries are preserved. Message :m002 is an empty heartbeat, and the local blank-node label _:b0 is safely reused in separate messages.
10
+
11
+ ## Explanation
12
+ The N3 source models an RDF Message Log as an ordered sequence of RDF Messages. Each non-empty message has a formula-valued payload that is inspected with log:includes, so the observation data stays inside the message boundary instead of being treated as one global graph. The two temperature results, 22 and 23, are different observations from the same stream but are contextualized by their message boundaries.
@@ -1,20 +1,26 @@
1
- RESTdesc — Restaurant finder
1
+ # resto
2
2
 
3
- Answer
4
- A restaurant was found and reserved.
5
- Restaurant: Maximiliaan
6
- Date: 2026-04-08
7
- Seating: outside terrace
3
+ ## Source files
8
4
 
9
- Reason Why
10
- The plan resolved the person's address, turned it into a map point, checked the local weather, selected a suitable restaurant, and then created a reservation. Because the weather came back mild and stable (22 C and 1016 mbar), the chosen seating stayed outdoors.
5
+ - [N3 rules](../resto.n3)
11
6
 
12
- Check
13
- C1 OK - the preferences service resolved the person's address.
14
- C2 OK - the location service turned the address into map coordinates.
15
- C3 OK - the weather services supplied temperature and pressure for that location.
16
- C4 OK - the weather interpretation justified outdoor seating.
17
- C5 OK - the recommendation step selected a restaurant that can accept reservations.
18
- C6 OK - the reservation preserved the requested dinner date.
19
- C7 OK - the reservation preserved the outdoor seating preference.
20
- C8 OK - the final goal pattern from the original RESTdesc query is satisfied.
7
+ RESTdesc — Restaurant finder
8
+
9
+ ## Answer
10
+ A restaurant was found and reserved.
11
+ Restaurant: Maximiliaan
12
+ Date: 2026-04-08
13
+ Seating: outside terrace
14
+
15
+ ## Reason Why
16
+ The plan resolved the person's address, turned it into a map point, checked the local weather, selected a suitable restaurant, and then created a reservation. Because the weather came back mild and stable (22 C and 1016 mbar), the chosen seating stayed outdoors.
17
+
18
+ ## Check
19
+ C1 OK - the preferences service resolved the person's address.
20
+ C2 OK - the location service turned the address into map coordinates.
21
+ C3 OK - the weather services supplied temperature and pressure for that location.
22
+ C4 OK - the weather interpretation justified outdoor seating.
23
+ C5 OK - the recommendation step selected a restaurant that can accept reservations.
24
+ C6 OK - the reservation preserved the requested dinner date.
25
+ C7 OK - the reservation preserved the outdoor seating preference.
26
+ C8 OK - the final goal pattern from the original RESTdesc query is satisfied.
@@ -0,0 +1,16 @@
1
+ # school-placement-audit
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../school-placement-audit.n3)
6
+ - [Input TriG](../input/school-placement-audit.trig)
7
+
8
+ ## Answer
9
+ audit result : fail
10
+ children affected by straight-line rule : Ada, Björn, Davi
11
+ largest hidden detour : Ada, 3000 m
12
+ recommended assignments : Ada -> Lindholmen; Björn -> Backa; Clara -> Haga; Davi -> Haga
13
+ explanation requested : yes
14
+
15
+ ## Explanation
16
+ The support-tool rule chooses the school with the smallest straight-line distance, using preference rank only as a tie-breaker. The independent audit recomputes each candidate with walking-route distance plus 600 m per preference step. Any provisional assignment that is not the audited best, or that requires more than 2500 m of walking, is flagged. Ada and Björn look close to Centrum on a map, but their walking routes cross barriers and exceed the walking limit; Davi is also better served by the first-preference Haga route. This illustrates why a decision-support label is not enough: route geometry, preferences, and audit records must be inspectable.
@@ -0,0 +1,12 @@
1
+ # smoke-arithmetic
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../smoke-arithmetic.n3)
6
+ - [Input TriG](../input/smoke-arithmetic.trig)
7
+
8
+ ## Answer
9
+ product = 42
10
+
11
+ ## Explanation
12
+ The compiled rule multiplies :x and :y using math:product.
@@ -0,0 +1,19 @@
1
+ # sqrt2-cauchy
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../sqrt2-cauchy.n3)
6
+
7
+ Approximation (at limit): sqrt2 ≈ 1.414213562373095
8
+ n=0 x=1.0 delta=seed err=1
9
+ n=1 x=1.5 delta=0.5 err=0.25
10
+ n=2 x=1.4166666666666665 delta=0.08333333333333348 err=0.006944444444444198
11
+ n=3 x=1.4142156862745097 delta=0.002450980392156854 err=0.000006007304882427178
12
+ n=4 x=1.4142135623746899 delta=0.0000021238998197947723 err=4.510614104447086e-12
13
+ n=5 x=1.414213562373095 delta=1.5949463971764999e-12 err=4.440892098500626e-16
14
+ n=6 x=1.414213562373095 delta=0 err=4.440892098500626e-16
15
+ n=7 x=1.414213562373095 delta=0 err=4.440892098500626e-16
16
+ n=8 x=1.414213562373095 delta=0 err=4.440892098500626e-16
17
+ n=9 x=1.414213562373095 delta=0 err=4.440892098500626e-16
18
+ n=10 x=1.414213562373095 delta=0 err=4.440892098500626e-16
19
+ Tail check: for i,j in (4..10), all |x_i - x_j| < 0.0001 (finite check)
@@ -0,0 +1,37 @@
1
+ # sqrt2-dedekind
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../sqrt2-dedekind.n3)
6
+
7
+ q=-2 q^2=4 => LEFT (q<0 OR q^2<2)
8
+ q=-1 q^2=1 => LEFT (q<0 OR q^2<2)
9
+ q=-0.5 q^2=0.25 => LEFT (q<0 OR q^2<2)
10
+ q=-0.1 q^2=0.010000000000000002 => LEFT (q<0 OR q^2<2)
11
+ q=0 q^2=0 => LEFT (q<0 OR q^2<2)
12
+ q=0.5 q^2=0.25 => LEFT (q<0 OR q^2<2)
13
+ q=1 q^2=1 => LEFT (q<0 OR q^2<2)
14
+ q=1.3 q^2=1.6900000000000002 => LEFT (q<0 OR q^2<2)
15
+ q=1.4 q^2=1.9599999999999997 => LEFT (q<0 OR q^2<2)
16
+ q=1.41 q^2=1.9880999999999998 => LEFT (q<0 OR q^2<2)
17
+ q=1.414 q^2=1.9993959999999997 => LEFT (q<0 OR q^2<2)
18
+ q=1.4142 q^2=1.9999616399999998 => LEFT (q<0 OR q^2<2)
19
+ q=1.4143 q^2=2.0002444899999996 => RIGHT (q>=0 AND q^2>=2)
20
+ q=1.42 q^2=2.0164 => RIGHT (q>=0 AND q^2>=2)
21
+ q=1.5 q^2=2.25 => RIGHT (q>=0 AND q^2>=2)
22
+ q=2 q^2=4 => RIGHT (q>=0 AND q^2>=2)
23
+ successor: from -2 to -1 (s^2=1)
24
+ successor: from -1 to -0.5 (s^2=0.25)
25
+ successor: from -0.5 to -0.25 (s^2=0.0625)
26
+ successor: from -0.1 to -0.05 (s^2=0.0025000000000000005)
27
+ successor: from 0 to 1 (s^2=1)
28
+ successor: from 0.5 to 1.2 (s^2=1.44)
29
+ successor: from 1 to 1.3333333333333333 (s^2=1.7777777777777777)
30
+ successor: from 1.3 to 1.393939393939394 (s^2=1.9430670339761251)
31
+ successor: from 1.4 to 1.411764705882353 (s^2=1.9930795847750868)
32
+ successor: from 1.41 to 1.4134897360703813 (s^2=1.9979532339763162)
33
+ successor: from 1.414 to 1.4141769185705917 (s^2=1.9998963570178139)
34
+ successor: from 1.4142 to 1.4142112354285044 (s^2=1.9999934184122166)
35
+ Check: cut is proper on the sample (has LEFT and RIGHT witnesses)
36
+ Check: downward-closed on the sample (finite for-all test)
37
+ Check: no maximal element witnessed for all LEFT seed members (constructive successors)
@@ -0,0 +1,49 @@
1
+ # sudoku
2
+
3
+ ## Source files
4
+
5
+ - [N3 rules](../sudoku.n3)
6
+
7
+ ## Answer
8
+ The puzzle is solved, and the completed grid is the unique valid Sudoku solution.
9
+ case : sudoku
10
+ default puzzle : classic
11
+
12
+ Puzzle
13
+ 1 . . | . . 7 | . 9 .
14
+ . 3 . | . 2 . | . . 8
15
+ . . 9 | 6 . . | 5 . .
16
+
17
+ . . 5 | 3 . . | 9 . .
18
+ . 1 . | . 8 . | . . 2
19
+ 6 . . | . . 4 | . . .
20
+
21
+ 3 . . | . . . | . 1 .
22
+ . 4 . | . . . | . . 7
23
+ . . 7 | . . . | 3 . .
24
+
25
+ Completed grid
26
+ 1 6 2 | 8 5 7 | 4 9 3
27
+ 5 3 4 | 1 2 9 | 6 7 8
28
+ 7 8 9 | 6 4 3 | 5 2 1
29
+
30
+ 4 7 5 | 3 1 2 | 9 8 6
31
+ 9 1 3 | 5 8 6 | 7 4 2
32
+ 6 2 8 | 7 9 4 | 1 3 5
33
+
34
+ 3 5 6 | 4 7 8 | 2 1 9
35
+ 2 4 1 | 9 3 5 | 8 6 7
36
+ 8 9 7 | 2 6 1 | 3 5 4
37
+
38
+ ## Reason Why
39
+ The solver starts from 23 clues and fills the remaining 58 cells by combining constraint propagation with depth-first search. At each step it chooses the empty cell with the fewest legal digits, places forced singles immediately, and only guesses when more than one candidate remains. Across the search it made 213 forced placements and tried 22 guesses, visited 23 search nodes overall, and backtracked 12 times before reaching the completed grid. The solver also confirmed that the solution is unique. Early steps: r2c3=4: guess, r5c3=3: forced, r2c1=5: guess, r2c4=1: guess, r2c6=9: forced, r2c7=6: guess, r2c8=7: forced, r1c7=4: guess, … and 50 more placements
40
+
41
+ ## Check
42
+ C1 OK - every given clue is preserved in the final grid.
43
+ C2 OK - the final grid contains only digits 1 through 9, with no blanks left.
44
+ C3 OK - each row contains every digit exactly once.
45
+ C4 OK - each column contains every digit exactly once.
46
+ C5 OK - each 3×3 box contains every digit exactly once.
47
+ C6 OK - replaying the recorded placements from the original puzzle remains legal at every step.
48
+ C7 OK - the search statistics and the successful proof path are internally consistent.
49
+ C8 OK - a second search found no alternative solution, so the solution is unique.