deriva 0.0.3

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 (1282) hide show
  1. package/LICENSE.md +9 -0
  2. package/README.md +73 -0
  3. package/bin/deriva.js +7 -0
  4. package/conformance-report.md +25 -0
  5. package/docs/compact-reasoning-workbench.md +35 -0
  6. package/docs/guide.md +622 -0
  7. package/docs/language-reference.md +860 -0
  8. package/examples/abstract-interpretation.pl +49 -0
  9. package/examples/access-control-policy.pl +52 -0
  10. package/examples/ackermann.pl +47 -0
  11. package/examples/age.pl +26 -0
  12. package/examples/aliases-and-namespaces.pl +20 -0
  13. package/examples/alignment-demo.pl +44 -0
  14. package/examples/allen-interval-calculus.pl +64 -0
  15. package/examples/ancestor.pl +22 -0
  16. package/examples/animal.pl +21 -0
  17. package/examples/annotation.pl +34 -0
  18. package/examples/auroracare.pl +309 -0
  19. package/examples/backward.pl +11 -0
  20. package/examples/basic-monadic.pl +10032 -0
  21. package/examples/bayes-diagnosis.pl +108 -0
  22. package/examples/bayes-therapy.pl +186 -0
  23. package/examples/beam-deflection.pl +48 -0
  24. package/examples/binomial-vandermonde.pl +48 -0
  25. package/examples/blocks-world-planning.pl +77 -0
  26. package/examples/bmi.pl +232 -0
  27. package/examples/braking-safety-worlds.pl +69 -0
  28. package/examples/buck-converter-design.pl +83 -0
  29. package/examples/cache-performance.pl +56 -0
  30. package/examples/canary-release.pl +51 -0
  31. package/examples/cat-koko.pl +24 -0
  32. package/examples/catalan-convolution.pl +36 -0
  33. package/examples/cdcl-sat-solver.pl +65 -0
  34. package/examples/chart-parser.pl +64 -0
  35. package/examples/clinical-trial-screening.pl +97 -0
  36. package/examples/collatz-1000.pl +44 -0
  37. package/examples/combinatorics-findall-sort.pl +38 -0
  38. package/examples/competitive-enzyme-kinetics.pl +78 -0
  39. package/examples/complex.pl +133 -0
  40. package/examples/composition-of-injective-functions-is-injective.pl +50 -0
  41. package/examples/context-association.pl +53 -0
  42. package/examples/context-schema-audit.pl +46 -0
  43. package/examples/continued-fraction-sqrt2.pl +35 -0
  44. package/examples/control-system.pl +76 -0
  45. package/examples/critical-path-schedule.pl +80 -0
  46. package/examples/cyclic-path.pl +18 -0
  47. package/examples/d3-group.pl +99 -0
  48. package/examples/dairy-energy-balance.pl +66 -0
  49. package/examples/data-negotiation.pl +38 -0
  50. package/examples/deep-taxonomy-10.pl +106 -0
  51. package/examples/deep-taxonomy-100.pl +376 -0
  52. package/examples/deep-taxonomy-1000.pl +3076 -0
  53. package/examples/deep-taxonomy-10000.pl +30076 -0
  54. package/examples/deep-taxonomy-100000.pl +300076 -0
  55. package/examples/delfour.pl +281 -0
  56. package/examples/deontic-logic.pl +52 -0
  57. package/examples/derived-backward-rule.pl +30 -0
  58. package/examples/derived-rule.pl +27 -0
  59. package/examples/diamond-property.pl +38 -0
  60. package/examples/dijkstra-findall-sort.pl +43 -0
  61. package/examples/dijkstra-risk-path.pl +86 -0
  62. package/examples/dijkstra.pl +50 -0
  63. package/examples/dining-philosophers.pl +147 -0
  64. package/examples/dog.pl +25 -0
  65. package/examples/dpv-odrl-purpose-mapping.pl +48 -0
  66. package/examples/drone-corridor-planner.pl +47 -0
  67. package/examples/easter-computus.pl +88 -0
  68. package/examples/electrical-rc-filter.pl +37 -0
  69. package/examples/epidemic-policy.pl +66 -0
  70. package/examples/equality-saturation.pl +82 -0
  71. package/examples/equivalence-classes-overlap-implies-same-class.pl +27 -0
  72. package/examples/eulerian-path.pl +87 -0
  73. package/examples/ev-range-worlds.pl +87 -0
  74. package/examples/existential-rule.pl +14 -0
  75. package/examples/exoplanet-validation-worlds.pl +94 -0
  76. package/examples/expression-eval.pl +45 -0
  77. package/examples/family-cousins.pl +64 -0
  78. package/examples/fastpow.pl +61 -0
  79. package/examples/fft8-numeric.pl +85 -0
  80. package/examples/fibonacci.pl +59 -0
  81. package/examples/field-nitrogen-balance.pl +73 -0
  82. package/examples/flandor.pl +296 -0
  83. package/examples/floating-point.pl +28 -0
  84. package/examples/four-color-map.pl +133 -0
  85. package/examples/fundamental-theorem-arithmetic.pl +119 -0
  86. package/examples/gd-step-certified.pl +155 -0
  87. package/examples/gdpr-compliance.pl +69 -0
  88. package/examples/good-cobbler.pl +16 -0
  89. package/examples/gps.pl +144 -0
  90. package/examples/graph-reachability.pl +33 -0
  91. package/examples/graph.pl +35 -0
  92. package/examples/gray-code-counter.pl +47 -0
  93. package/examples/greatest-lower-bound-uniqueness.pl +30 -0
  94. package/examples/group-inverse-uniqueness.pl +36 -0
  95. package/examples/hamiltonian-path.pl +50 -0
  96. package/examples/hamming-code.pl +109 -0
  97. package/examples/hanoi.pl +18 -0
  98. package/examples/heat-loss.pl +56 -0
  99. package/examples/herbrand-witnesses.pl +31 -0
  100. package/examples/heron-theorem.pl +42 -0
  101. package/examples/ideal-gas-law.pl +39 -0
  102. package/examples/illegitimate-reasoning.pl +88 -0
  103. package/examples/integer-partitions.pl +34 -0
  104. package/examples/intuitionistic-logic-kripke.pl +67 -0
  105. package/examples/job-shop-scheduling.pl +48 -0
  106. package/examples/knapsack-optimization.pl +46 -0
  107. package/examples/knowledge-engineering-alignment-flow.pl +46 -0
  108. package/examples/knuth-bendix-completion.pl +54 -0
  109. package/examples/language.pl +24 -0
  110. package/examples/law-of-cosines.pl +37 -0
  111. package/examples/least-squares-regression.pl +85 -0
  112. package/examples/linear-logic-resources.pl +51 -0
  113. package/examples/list-collection.pl +35 -0
  114. package/examples/lldm.pl +80 -0
  115. package/examples/manufacturing-quality-control.pl +73 -0
  116. package/examples/map-four-color-search.pl +65 -0
  117. package/examples/markov-logic-network.pl +87 -0
  118. package/examples/matrix-chain-order.pl +78 -0
  119. package/examples/matrix-noncommutativity.pl +43 -0
  120. package/examples/microgrid-dispatch.pl +89 -0
  121. package/examples/missionaries-cannibals.pl +53 -0
  122. package/examples/modal-logic-kripke.pl +45 -0
  123. package/examples/modular-exponentiation.pl +34 -0
  124. package/examples/monkey-bananas.pl +44 -0
  125. package/examples/n-queens-8.pl +34 -0
  126. package/examples/network-sla.pl +48 -0
  127. package/examples/newton-raphson.pl +48 -0
  128. package/examples/nixon-diamond.pl +37 -0
  129. package/examples/observability-log-correlation.pl +40 -0
  130. package/examples/odrl-dpv-fpv-trust-flow.pl +51 -0
  131. package/examples/odrl-dpv-healthcare-risk-ranked.pl +270 -0
  132. package/examples/odrl-dpv-risk-ranked.pl +320 -0
  133. package/examples/orbital-transfer-design.pl +116 -0
  134. package/examples/output/abstract-interpretation.pl +16 -0
  135. package/examples/output/access-control-policy.pl +2 -0
  136. package/examples/output/ackermann.pl +12 -0
  137. package/examples/output/age.pl +2 -0
  138. package/examples/output/aliases-and-namespaces.pl +5 -0
  139. package/examples/output/alignment-demo.pl +32 -0
  140. package/examples/output/allen-interval-calculus.pl +154 -0
  141. package/examples/output/ancestor.pl +6 -0
  142. package/examples/output/animal.pl +4 -0
  143. package/examples/output/annotation.pl +4 -0
  144. package/examples/output/auroracare.pl +117 -0
  145. package/examples/output/backward.pl +1 -0
  146. package/examples/output/basic-monadic.pl +1518 -0
  147. package/examples/output/bayes-diagnosis.pl +13 -0
  148. package/examples/output/bayes-therapy.pl +23 -0
  149. package/examples/output/beam-deflection.pl +5 -0
  150. package/examples/output/binomial-vandermonde.pl +4 -0
  151. package/examples/output/blocks-world-planning.pl +4 -0
  152. package/examples/output/bmi.pl +32 -0
  153. package/examples/output/braking-safety-worlds.pl +18 -0
  154. package/examples/output/buck-converter-design.pl +6 -0
  155. package/examples/output/cache-performance.pl +4 -0
  156. package/examples/output/canary-release.pl +5 -0
  157. package/examples/output/cat-koko.pl +3 -0
  158. package/examples/output/catalan-convolution.pl +4 -0
  159. package/examples/output/cdcl-sat-solver.pl +7 -0
  160. package/examples/output/chart-parser.pl +6 -0
  161. package/examples/output/clinical-trial-screening.pl +9 -0
  162. package/examples/output/collatz-1000.pl +1000 -0
  163. package/examples/output/combinatorics-findall-sort.pl +2 -0
  164. package/examples/output/competitive-enzyme-kinetics.pl +6 -0
  165. package/examples/output/complex.pl +6 -0
  166. package/examples/output/composition-of-injective-functions-is-injective.pl +2 -0
  167. package/examples/output/context-association.pl +3 -0
  168. package/examples/output/context-schema-audit.pl +12 -0
  169. package/examples/output/continued-fraction-sqrt2.pl +4 -0
  170. package/examples/output/control-system.pl +6 -0
  171. package/examples/output/critical-path-schedule.pl +19 -0
  172. package/examples/output/cyclic-path.pl +16 -0
  173. package/examples/output/d3-group.pl +2 -0
  174. package/examples/output/dairy-energy-balance.pl +13 -0
  175. package/examples/output/data-negotiation.pl +1 -0
  176. package/examples/output/deep-taxonomy-10.pl +16 -0
  177. package/examples/output/deep-taxonomy-100.pl +16 -0
  178. package/examples/output/deep-taxonomy-1000.pl +16 -0
  179. package/examples/output/deep-taxonomy-10000.pl +16 -0
  180. package/examples/output/deep-taxonomy-100000.pl +16 -0
  181. package/examples/output/delfour.pl +31 -0
  182. package/examples/output/deontic-logic.pl +4 -0
  183. package/examples/output/derived-backward-rule.pl +3 -0
  184. package/examples/output/derived-rule.pl +2 -0
  185. package/examples/output/diamond-property.pl +4 -0
  186. package/examples/output/dijkstra-findall-sort.pl +2 -0
  187. package/examples/output/dijkstra-risk-path.pl +29 -0
  188. package/examples/output/dijkstra.pl +16 -0
  189. package/examples/output/dining-philosophers.pl +350 -0
  190. package/examples/output/dog.pl +1 -0
  191. package/examples/output/dpv-odrl-purpose-mapping.pl +18 -0
  192. package/examples/output/drone-corridor-planner.pl +17 -0
  193. package/examples/output/easter-computus.pl +30 -0
  194. package/examples/output/electrical-rc-filter.pl +3 -0
  195. package/examples/output/epidemic-policy.pl +14 -0
  196. package/examples/output/equality-saturation.pl +5 -0
  197. package/examples/output/equivalence-classes-overlap-implies-same-class.pl +18 -0
  198. package/examples/output/eulerian-path.pl +3 -0
  199. package/examples/output/ev-range-worlds.pl +19 -0
  200. package/examples/output/existential-rule.pl +2 -0
  201. package/examples/output/exoplanet-validation-worlds.pl +22 -0
  202. package/examples/output/expression-eval.pl +1 -0
  203. package/examples/output/family-cousins.pl +28 -0
  204. package/examples/output/fastpow.pl +6 -0
  205. package/examples/output/fft8-numeric.pl +4 -0
  206. package/examples/output/fibonacci.pl +6 -0
  207. package/examples/output/field-nitrogen-balance.pl +21 -0
  208. package/examples/output/flandor.pl +43 -0
  209. package/examples/output/floating-point.pl +9 -0
  210. package/examples/output/four-color-map.pl +3 -0
  211. package/examples/output/fundamental-theorem-arithmetic.pl +9 -0
  212. package/examples/output/gd-step-certified.pl +79 -0
  213. package/examples/output/gdpr-compliance.pl +6 -0
  214. package/examples/output/good-cobbler.pl +1 -0
  215. package/examples/output/gps.pl +21 -0
  216. package/examples/output/graph-reachability.pl +3 -0
  217. package/examples/output/graph.pl +21 -0
  218. package/examples/output/gray-code-counter.pl +1 -0
  219. package/examples/output/greatest-lower-bound-uniqueness.pl +2 -0
  220. package/examples/output/group-inverse-uniqueness.pl +2 -0
  221. package/examples/output/hamiltonian-path.pl +121 -0
  222. package/examples/output/hamming-code.pl +6 -0
  223. package/examples/output/hanoi.pl +1 -0
  224. package/examples/output/heat-loss.pl +5 -0
  225. package/examples/output/herbrand-witnesses.pl +7 -0
  226. package/examples/output/heron-theorem.pl +4 -0
  227. package/examples/output/ideal-gas-law.pl +3 -0
  228. package/examples/output/illegitimate-reasoning.pl +15 -0
  229. package/examples/output/integer-partitions.pl +4 -0
  230. package/examples/output/intuitionistic-logic-kripke.pl +5 -0
  231. package/examples/output/job-shop-scheduling.pl +3 -0
  232. package/examples/output/knapsack-optimization.pl +4 -0
  233. package/examples/output/knowledge-engineering-alignment-flow.pl +17 -0
  234. package/examples/output/knuth-bendix-completion.pl +7 -0
  235. package/examples/output/language.pl +6 -0
  236. package/examples/output/law-of-cosines.pl +3 -0
  237. package/examples/output/least-squares-regression.pl +5 -0
  238. package/examples/output/linear-logic-resources.pl +2 -0
  239. package/examples/output/list-collection.pl +3 -0
  240. package/examples/output/lldm.pl +6 -0
  241. package/examples/output/manufacturing-quality-control.pl +6 -0
  242. package/examples/output/map-four-color-search.pl +1 -0
  243. package/examples/output/markov-logic-network.pl +32 -0
  244. package/examples/output/matrix-chain-order.pl +4 -0
  245. package/examples/output/matrix-noncommutativity.pl +3 -0
  246. package/examples/output/microgrid-dispatch.pl +6 -0
  247. package/examples/output/missionaries-cannibals.pl +3 -0
  248. package/examples/output/modal-logic-kripke.pl +4 -0
  249. package/examples/output/modular-exponentiation.pl +4 -0
  250. package/examples/output/monkey-bananas.pl +5 -0
  251. package/examples/output/n-queens-8.pl +1 -0
  252. package/examples/output/network-sla.pl +4 -0
  253. package/examples/output/newton-raphson.pl +3 -0
  254. package/examples/output/nixon-diamond.pl +5 -0
  255. package/examples/output/observability-log-correlation.pl +28 -0
  256. package/examples/output/odrl-dpv-fpv-trust-flow.pl +9 -0
  257. package/examples/output/odrl-dpv-healthcare-risk-ranked.pl +42 -0
  258. package/examples/output/odrl-dpv-risk-ranked.pl +120 -0
  259. package/examples/output/orbital-transfer-design.pl +7 -0
  260. package/examples/output/partial-evaluator.pl +4 -0
  261. package/examples/output/path-discovery.pl +3 -0
  262. package/examples/output/peano-arithmetic.pl +3 -0
  263. package/examples/output/peano-calculus.pl +3 -0
  264. package/examples/output/peasant.pl +10 -0
  265. package/examples/output/pell-equation.pl +4 -0
  266. package/examples/output/pendulum-period.pl +4 -0
  267. package/examples/output/pointer-analysis.pl +8 -0
  268. package/examples/output/polynomial.pl +14 -0
  269. package/examples/output/prime-range.pl +3 -0
  270. package/examples/output/proof-contrapositive.pl +3 -0
  271. package/examples/output/quadratic-formula.pl +6 -0
  272. package/examples/output/radioactive-decay.pl +5 -0
  273. package/examples/output/register-allocation.pl +8 -0
  274. package/examples/output/reusable-builtins.pl +5 -0
  275. package/examples/output/riemann-hypothesis.pl +12 -0
  276. package/examples/output/route-planning.pl +4 -0
  277. package/examples/output/sat-solver-dpll.pl +11 -0
  278. package/examples/output/security-incident-correlation.pl +3 -0
  279. package/examples/output/send-more-money.pl +3 -0
  280. package/examples/output/service-impact.pl +11 -0
  281. package/examples/output/shoelace-polygon-area.pl +1 -0
  282. package/examples/output/sieve.pl +1 -0
  283. package/examples/output/skolem-functions.pl +16 -0
  284. package/examples/output/socket-age.pl +1 -0
  285. package/examples/output/socket-family.pl +3 -0
  286. package/examples/output/socrates.pl +2 -0
  287. package/examples/output/stable-marriage.pl +2 -0
  288. package/examples/output/statistics-summary.pl +4 -0
  289. package/examples/output/stirling-bell-numbers.pl +4 -0
  290. package/examples/output/sudoku-4x4.pl +2 -0
  291. package/examples/output/superdense-coding.pl +6 -0
  292. package/examples/output/symbolic-derivative.pl +4 -0
  293. package/examples/output/term-tools.pl +6 -0
  294. package/examples/output/totient-summatory.pl +4 -0
  295. package/examples/output/trust-flow-provenance-threshold.pl +6 -0
  296. package/examples/output/truth-maintenance-system.pl +25 -0
  297. package/examples/output/turing.pl +12 -0
  298. package/examples/output/type-inference.pl +8 -0
  299. package/examples/output/vector-similarity.pl +4 -0
  300. package/examples/output/vulnerability-impact.pl +20 -0
  301. package/examples/output/web-names.pl +3 -0
  302. package/examples/output/weighted-interval-scheduling.pl +5 -0
  303. package/examples/output/witch.pl +7 -0
  304. package/examples/output/wolf-goat-cabbage.pl +3 -0
  305. package/examples/output/workplace-compliance.pl +4 -0
  306. package/examples/output/zebra.pl +3 -0
  307. package/examples/partial-evaluator.pl +73 -0
  308. package/examples/path-discovery.pl +45013 -0
  309. package/examples/peano-arithmetic.pl +33 -0
  310. package/examples/peano-calculus.pl +37 -0
  311. package/examples/peasant.pl +29 -0
  312. package/examples/pell-equation.pl +33 -0
  313. package/examples/pendulum-period.pl +50 -0
  314. package/examples/pointer-analysis.pl +48 -0
  315. package/examples/polynomial.pl +124 -0
  316. package/examples/prime-range.pl +44 -0
  317. package/examples/proof/access-control-policy.pl +158 -0
  318. package/examples/proof/age.pl +71 -0
  319. package/examples/proof/aliases-and-namespaces.pl +78 -0
  320. package/examples/proof/ancestor.pl +140 -0
  321. package/examples/proof/animal.pl +68 -0
  322. package/examples/proof/annotation.pl +80 -0
  323. package/examples/proof/backward.pl +22 -0
  324. package/examples/proof/bayes-diagnosis.pl +208 -0
  325. package/examples/proof/beam-deflection.pl +227 -0
  326. package/examples/proof/cache-performance.pl +310 -0
  327. package/examples/proof/canary-release.pl +172 -0
  328. package/examples/proof/cat-koko.pl +86 -0
  329. package/examples/proof/chart-parser.pl +488 -0
  330. package/examples/proof/clinical-trial-screening.pl +389 -0
  331. package/examples/proof/composition-of-injective-functions-is-injective.pl +258 -0
  332. package/examples/proof/context-association.pl +78 -0
  333. package/examples/proof/data-negotiation.pl +76 -0
  334. package/examples/proof/deontic-logic.pl +109 -0
  335. package/examples/proof/derived-backward-rule.pl +74 -0
  336. package/examples/proof/derived-rule.pl +43 -0
  337. package/examples/proof/diamond-property.pl +307 -0
  338. package/examples/proof/dog.pl +31 -0
  339. package/examples/proof/dpv-odrl-purpose-mapping.pl +348 -0
  340. package/examples/proof/electrical-rc-filter.pl +105 -0
  341. package/examples/proof/epidemic-policy.pl +774 -0
  342. package/examples/proof/equivalence-classes-overlap-implies-same-class.pl +1098 -0
  343. package/examples/proof/existential-rule.pl +32 -0
  344. package/examples/proof/expression-eval.pl +105 -0
  345. package/examples/proof/floating-point.pl +160 -0
  346. package/examples/proof/gdpr-compliance.pl +199 -0
  347. package/examples/proof/good-cobbler.pl +16 -0
  348. package/examples/proof/graph-reachability.pl +151 -0
  349. package/examples/proof/greatest-lower-bound-uniqueness.pl +150 -0
  350. package/examples/proof/group-inverse-uniqueness.pl +84 -0
  351. package/examples/proof/hanoi.pl +185 -0
  352. package/examples/proof/heat-loss.pl +228 -0
  353. package/examples/proof/ideal-gas-law.pl +151 -0
  354. package/examples/proof/intuitionistic-logic-kripke.pl +133 -0
  355. package/examples/proof/linear-logic-resources.pl +205 -0
  356. package/examples/proof/list-collection.pl +52 -0
  357. package/examples/proof/modal-logic-kripke.pl +125 -0
  358. package/examples/proof/nixon-diamond.pl +181 -0
  359. package/examples/proof/proof-contrapositive.pl +78 -0
  360. package/examples/proof/reusable-builtins.pl +124 -0
  361. package/examples/proof/security-incident-correlation.pl +270 -0
  362. package/examples/proof/socket-age.pl +32 -0
  363. package/examples/proof/socket-family.pl +59 -0
  364. package/examples/proof/socrates.pl +38 -0
  365. package/examples/proof/term-tools.pl +95 -0
  366. package/examples/proof/witch.pl +216 -0
  367. package/examples/proof-contrapositive.pl +27 -0
  368. package/examples/quadratic-formula.pl +56 -0
  369. package/examples/radioactive-decay.pl +58 -0
  370. package/examples/register-allocation.pl +77 -0
  371. package/examples/reusable-builtins.pl +36 -0
  372. package/examples/riemann-hypothesis.pl +110 -0
  373. package/examples/route-planning.pl +32 -0
  374. package/examples/sat-solver-dpll.pl +88 -0
  375. package/examples/security-incident-correlation.pl +69 -0
  376. package/examples/send-more-money.pl +71 -0
  377. package/examples/service-impact.pl +41 -0
  378. package/examples/shoelace-polygon-area.pl +22 -0
  379. package/examples/sieve.pl +20 -0
  380. package/examples/skolem-functions.pl +52 -0
  381. package/examples/socket-age.pl +39 -0
  382. package/examples/socket-family.pl +28 -0
  383. package/examples/socrates.pl +19 -0
  384. package/examples/stable-marriage.pl +92 -0
  385. package/examples/statistics-summary.pl +56 -0
  386. package/examples/stirling-bell-numbers.pl +65 -0
  387. package/examples/sudoku-4x4.pl +54 -0
  388. package/examples/superdense-coding.pl +84 -0
  389. package/examples/symbolic-derivative.pl +39 -0
  390. package/examples/term-tools.pl +32 -0
  391. package/examples/totient-summatory.pl +31 -0
  392. package/examples/trust-flow-provenance-threshold.pl +47 -0
  393. package/examples/truth-maintenance-system.pl +61 -0
  394. package/examples/turing.pl +69 -0
  395. package/examples/type-inference.pl +57 -0
  396. package/examples/vector-similarity.pl +60 -0
  397. package/examples/vulnerability-impact.pl +69 -0
  398. package/examples/web-names.pl +38 -0
  399. package/examples/weighted-interval-scheduling.pl +80 -0
  400. package/examples/witch.pl +38 -0
  401. package/examples/wolf-goat-cabbage.pl +55 -0
  402. package/examples/workplace-compliance.pl +41 -0
  403. package/examples/zebra.pl +45 -0
  404. package/index.d.ts +231 -0
  405. package/index.js +4 -0
  406. package/package.json +53 -0
  407. package/playground.html +1259 -0
  408. package/src/builtins/aggregation.js +81 -0
  409. package/src/builtins/arithmetic.js +208 -0
  410. package/src/builtins/context.js +42 -0
  411. package/src/builtins/control.js +43 -0
  412. package/src/builtins/core.js +78 -0
  413. package/src/builtins/lists.js +283 -0
  414. package/src/builtins/registry.js +48 -0
  415. package/src/builtins/strings.js +234 -0
  416. package/src/builtins/terms.js +69 -0
  417. package/src/cli.js +194 -0
  418. package/src/explain.js +326 -0
  419. package/src/hash.js +294 -0
  420. package/src/index.js +47 -0
  421. package/src/parser.js +551 -0
  422. package/src/program.js +536 -0
  423. package/src/solver.js +757 -0
  424. package/src/term.js +349 -0
  425. package/test/conformance/README.md +72 -0
  426. package/test/conformance/cases/aggregation/044_findall_user_goal.pl +6 -0
  427. package/test/conformance/cases/aggregation/057_countall_empty_and_nonempty.pl +4 -0
  428. package/test/conformance/cases/aggregation/058_sumall_numeric_template.pl +5 -0
  429. package/test/conformance/cases/aggregation/059_aggregate_min_template.pl +5 -0
  430. package/test/conformance/cases/aggregation/060_aggregate_max_compound_key.pl +5 -0
  431. package/test/conformance/cases/aggregation/075_aggregation_edges.pl +12 -0
  432. package/test/conformance/cases/aggregation/098_aggregation_nested_templates.pl +11 -0
  433. package/test/conformance/cases/aggregation/aggregate_max_no_answers_fails.pl +2 -0
  434. package/test/conformance/cases/aggregation/aggregate_min_structured_key.pl +5 -0
  435. package/test/conformance/cases/aggregation/countall_zero.pl +2 -0
  436. package/test/conformance/cases/aggregation/extra_aggregate_max_iri_key.pl +4 -0
  437. package/test/conformance/cases/aggregation/extra_aggregate_min_tie_first.pl +5 -0
  438. package/test/conformance/cases/aggregation/extra_countall_with_filter.pl +5 -0
  439. package/test/conformance/cases/aggregation/extra_findall_repeated_template.pl +4 -0
  440. package/test/conformance/cases/aggregation/extra_sumall_float_template.pl +4 -0
  441. package/test/conformance/cases/aggregation/findall_empty_bag.pl +2 -0
  442. package/test/conformance/cases/aggregation/sumall_empty_zero.pl +2 -0
  443. package/test/conformance/cases/arithmetic/024_numeric_literal_readback.pl +6 -0
  444. package/test/conformance/cases/arithmetic/029_arithmetic_and_comparison.pl +11 -0
  445. package/test/conformance/cases/arithmetic/039_numeric_functions.pl +9 -0
  446. package/test/conformance/cases/arithmetic/040_between_enumeration.pl +3 -0
  447. package/test/conformance/cases/arithmetic/041_smallest_divisor.pl +3 -0
  448. package/test/conformance/cases/arithmetic/054_numeric_and_lexical_comparison.pl +5 -0
  449. package/test/conformance/cases/arithmetic/061_date_difference.pl +4 -0
  450. package/test/conformance/cases/arithmetic/062_reusable_numeric_builtins.pl +10 -0
  451. package/test/conformance/cases/arithmetic/066_numeric_edges.pl +14 -0
  452. package/test/conformance/cases/arithmetic/079_big_integer_arithmetic.pl +8 -0
  453. package/test/conformance/cases/arithmetic/080_rounding_modes.pl +10 -0
  454. package/test/conformance/cases/arithmetic/081_zero_safe_numeric_functions.pl +9 -0
  455. package/test/conformance/cases/arithmetic/082_comparison_semantics.pl +10 -0
  456. package/test/conformance/cases/arithmetic/083_between_modes_and_empty_ranges.pl +8 -0
  457. package/test/conformance/cases/arithmetic/between_bound_value.pl +2 -0
  458. package/test/conformance/cases/arithmetic/between_singleton.pl +2 -0
  459. package/test/conformance/cases/arithmetic/duration_comparison.pl +2 -0
  460. package/test/conformance/cases/arithmetic/extra_acos_one.pl +2 -0
  461. package/test/conformance/cases/arithmetic/extra_asin_zero.pl +2 -0
  462. package/test/conformance/cases/arithmetic/extra_atan2_axis.pl +2 -0
  463. package/test/conformance/cases/arithmetic/extra_difference_leap_day.pl +2 -0
  464. package/test/conformance/cases/arithmetic/extra_difference_same_day.pl +2 -0
  465. package/test/conformance/cases/arithmetic/extra_div_float_exact.pl +2 -0
  466. package/test/conformance/cases/arithmetic/extra_div_integer_trunc.pl +2 -0
  467. package/test/conformance/cases/arithmetic/extra_division_by_zero_fails.pl +2 -0
  468. package/test/conformance/cases/arithmetic/extra_exp_zero.pl +2 -0
  469. package/test/conformance/cases/arithmetic/extra_ge_equal_duration.pl +2 -0
  470. package/test/conformance/cases/arithmetic/extra_le_equal_string.pl +2 -0
  471. package/test/conformance/cases/arithmetic/extra_log_one.pl +2 -0
  472. package/test/conformance/cases/arithmetic/extra_mod_negative_right.pl +2 -0
  473. package/test/conformance/cases/arithmetic/extra_pow_large_integer.pl +2 -0
  474. package/test/conformance/cases/arithmetic/float_add_and_div.pl +3 -0
  475. package/test/conformance/cases/arithmetic/min_max_mixed.pl +3 -0
  476. package/test/conformance/cases/arithmetic/mod_negative_left.pl +2 -0
  477. package/test/conformance/cases/arithmetic/neg_abs_integer.pl +4 -0
  478. package/test/conformance/cases/arithmetic/pow_negative_exponent_fails.pl +2 -0
  479. package/test/conformance/cases/arithmetic/pow_zero_exponent.pl +2 -0
  480. package/test/conformance/cases/arithmetic/rounding_negative_float.pl +5 -0
  481. package/test/conformance/cases/arithmetic/smallest_divisor_prime.pl +2 -0
  482. package/test/conformance/cases/arithmetic/sqrt_negative_fails.pl +2 -0
  483. package/test/conformance/cases/atoms/008_graphic_atoms.pl +6 -0
  484. package/test/conformance/cases/atoms/016_arity_zero_atom.pl +4 -0
  485. package/test/conformance/cases/atoms/018_quoted_atom_readback.pl +6 -0
  486. package/test/conformance/cases/atoms/103_angle_iri_atoms.pl +7 -0
  487. package/test/conformance/cases/atoms/angle_iri_percent_encoded.pl +2 -0
  488. package/test/conformance/cases/atoms/extra_graphic_backslash_atom.pl +2 -0
  489. package/test/conformance/cases/atoms/extra_iri_mailto_plus.pl +2 -0
  490. package/test/conformance/cases/atoms/extra_iri_uuid_scheme.pl +2 -0
  491. package/test/conformance/cases/atoms/extra_quoted_atom_with_quote_readback.pl +2 -0
  492. package/test/conformance/cases/atoms/graphic_angle_atom_stays_graphic.pl +4 -0
  493. package/test/conformance/cases/atoms/graphic_atom_predicate.pl +3 -0
  494. package/test/conformance/cases/atoms/graphic_less_than_atom.pl +4 -0
  495. package/test/conformance/cases/atoms/iri_as_predicate_name_quoted.pl +3 -0
  496. package/test/conformance/cases/atoms/iri_atoms_in_lists.pl +4 -0
  497. package/test/conformance/cases/atoms/iri_mailto_readback.pl +4 -0
  498. package/test/conformance/cases/atoms/iri_query_fragment_readback.pl +4 -0
  499. package/test/conformance/cases/atoms/iri_quoted_absolute_readback.pl +5 -0
  500. package/test/conformance/cases/atoms/iri_quoted_and_angle_unify.pl +3 -0
  501. package/test/conformance/cases/atoms/iri_urn_readback.pl +4 -0
  502. package/test/conformance/cases/atoms/quoted_relative_iri_not_angle.pl +2 -0
  503. package/test/conformance/cases/atoms/quoted_urn_iri_readback.pl +4 -0
  504. package/test/conformance/cases/atoms/zero_arity_atom_roundtrip.pl +5 -0
  505. package/test/conformance/cases/automatic-tabling/038_automatic_tabling.pl +7 -0
  506. package/test/conformance/cases/automatic-tabling/102_recursive_inference.pl +10 -0
  507. package/test/conformance/cases/automatic-tabling/automatic_left_recursion_path.pl +6 -0
  508. package/test/conformance/cases/automatic-tabling/automatic_tabling_preserves_answers.pl +6 -0
  509. package/test/conformance/cases/automatic-tabling/extra_automatic_bound_cycle.pl +6 -0
  510. package/test/conformance/cases/automatic-tabling/extra_automatic_open_call_fallback.pl +4 -0
  511. package/test/conformance/cases/builtins/037_matching_and_comparison.pl +7 -0
  512. package/test/conformance/cases/builtins/076_composed_reusable_builtins.pl +8 -0
  513. package/test/conformance/cases/builtins/100_reusable_builtin_workflow.pl +10 -0
  514. package/test/conformance/cases/builtins/atom_string_iri_atom.pl +3 -0
  515. package/test/conformance/cases/builtins/eq_unifies_iri_atoms.pl +3 -0
  516. package/test/conformance/cases/builtins/extra_difference_end_before_start_fails.pl +2 -0
  517. package/test/conformance/cases/builtins/extra_difference_invalid_date_fails.pl +2 -0
  518. package/test/conformance/cases/builtins/extra_eq_binds_both_sides.pl +2 -0
  519. package/test/conformance/cases/builtins/extra_neq_different_iri_atoms.pl +2 -0
  520. package/test/conformance/cases/builtins/extra_neq_same_iri_fails.pl +2 -0
  521. package/test/conformance/cases/context/032_holds_parts.pl +4 -0
  522. package/test/conformance/cases/context/051_nested_holds_parts.pl +4 -0
  523. package/test/conformance/cases/context/052_holds_member.pl +3 -0
  524. package/test/conformance/cases/context/094_context_holds_enumeration.pl +7 -0
  525. package/test/conformance/cases/context/extra_holds_atom_parts.pl +2 -0
  526. package/test/conformance/cases/context/extra_holds_ignores_string_parts.pl +2 -0
  527. package/test/conformance/cases/context/extra_holds_list_parts.pl +2 -0
  528. package/test/conformance/cases/context/extra_holds_term_nested_order.pl +2 -0
  529. package/test/conformance/cases/context/holds_compound_formula.pl +2 -0
  530. package/test/conformance/cases/context/holds_fails_when_missing.pl +2 -0
  531. package/test/conformance/cases/context/holds_parts_from_formula.pl +2 -0
  532. package/test/conformance/cases/control/014_failure_filters_answers.pl +7 -0
  533. package/test/conformance/cases/control/043_once_user_predicate.pl +5 -0
  534. package/test/conformance/cases/control/074_forall_edges.pl +10 -0
  535. package/test/conformance/cases/control/097_control_negation_once_forall.pl +13 -0
  536. package/test/conformance/cases/control/double_negation_ground_goal.pl +3 -0
  537. package/test/conformance/cases/control/extra_forall_bound_check.pl +2 -0
  538. package/test/conformance/cases/control/extra_forall_counterexample_fails.pl +2 -0
  539. package/test/conformance/cases/control/extra_not_unbound_existing_goal_fails.pl +3 -0
  540. package/test/conformance/cases/control/extra_not_unbound_unknown_goal_succeeds.pl +2 -0
  541. package/test/conformance/cases/control/extra_once_empty_fails.pl +2 -0
  542. package/test/conformance/cases/control/extra_once_preserves_binding.pl +2 -0
  543. package/test/conformance/cases/control/forall_detects_counterexample.pl +5 -0
  544. package/test/conformance/cases/control/forall_empty_generator_true.pl +2 -0
  545. package/test/conformance/cases/control/negation_with_bound_generator.pl +5 -0
  546. package/test/conformance/cases/control/once_keeps_first_answer.pl +4 -0
  547. package/test/conformance/cases/declarations/104_mode_determinism_declarations.pl +11 -0
  548. package/test/conformance/cases/declarations/det_semidet_do_not_emit_without_materialize.pl +5 -0
  549. package/test/conformance/cases/declarations/memoize_is_ordinary_fact.pl +4 -0
  550. package/test/conformance/cases/declarations/mode_determinism_are_facts.pl +8 -0
  551. package/test/conformance/cases/declarations/mode_ignored_when_arity_mismatch.pl +5 -0
  552. package/test/conformance/cases/lists/005_list_deconstruction.pl +6 -0
  553. package/test/conformance/cases/lists/015_improper_list_unification.pl +6 -0
  554. package/test/conformance/cases/lists/020_nested_list_terms.pl +5 -0
  555. package/test/conformance/cases/lists/031_lists_aggregation_ordering.pl +10 -0
  556. package/test/conformance/cases/lists/035_list_relations.pl +5 -0
  557. package/test/conformance/cases/lists/036_append_splits.pl +3 -0
  558. package/test/conformance/cases/lists/045_sort_deduplicates_atoms.pl +3 -0
  559. package/test/conformance/cases/lists/046_append_bound_prefix_suffix.pl +4 -0
  560. package/test/conformance/cases/lists/047_nth0_index_generation.pl +3 -0
  561. package/test/conformance/cases/lists/048_set_nth0_edges.pl +4 -0
  562. package/test/conformance/cases/lists/049_select_duplicate_occurrences.pl +3 -0
  563. package/test/conformance/cases/lists/063_reusable_list_builtins.pl +11 -0
  564. package/test/conformance/cases/lists/067_list_edges.pl +10 -0
  565. package/test/conformance/cases/lists/068_list_generation_order.pl +7 -0
  566. package/test/conformance/cases/lists/069_list_summaries_and_sets.pl +9 -0
  567. package/test/conformance/cases/lists/084_append_and_select_composition.pl +7 -0
  568. package/test/conformance/cases/lists/085_nth_and_update_edges.pl +8 -0
  569. package/test/conformance/cases/lists/086_slicing_pipeline.pl +10 -0
  570. package/test/conformance/cases/lists/087_sort_reverse_length.pl +8 -0
  571. package/test/conformance/cases/lists/088_list_summaries_failures.pl +8 -0
  572. package/test/conformance/cases/lists/empty_list_term.pl +4 -0
  573. package/test/conformance/cases/lists/extra_append_all_splits_three.pl +2 -0
  574. package/test/conformance/cases/lists/extra_append_to_improper_tail.pl +2 -0
  575. package/test/conformance/cases/lists/extra_drop_all.pl +2 -0
  576. package/test/conformance/cases/lists/extra_head_and_rest_improper.pl +2 -0
  577. package/test/conformance/cases/lists/extra_last_singleton.pl +2 -0
  578. package/test/conformance/cases/lists/extra_length_improper_fails.pl +2 -0
  579. package/test/conformance/cases/lists/extra_list_to_set_stable_order.pl +2 -0
  580. package/test/conformance/cases/lists/extra_member_repeated_nested.pl +2 -0
  581. package/test/conformance/cases/lists/extra_not_member_compound_fails.pl +2 -0
  582. package/test/conformance/cases/lists/extra_not_member_compound_success.pl +2 -0
  583. package/test/conformance/cases/lists/extra_nth0_duplicate_indexes.pl +2 -0
  584. package/test/conformance/cases/lists/extra_reverse_nested_terms.pl +2 -0
  585. package/test/conformance/cases/lists/extra_select_structured_duplicate.pl +2 -0
  586. package/test/conformance/cases/lists/extra_slice_end.pl +2 -0
  587. package/test/conformance/cases/lists/extra_sort_iri_atoms.pl +2 -0
  588. package/test/conformance/cases/lists/extra_take_all.pl +2 -0
  589. package/test/conformance/cases/lists/head_rest_last.pl +4 -0
  590. package/test/conformance/cases/lists/improper_list_readback.pl +4 -0
  591. package/test/conformance/cases/lists/length_empty_and_nested.pl +3 -0
  592. package/test/conformance/cases/lists/list_to_set_structural_duplicates.pl +2 -0
  593. package/test/conformance/cases/lists/list_with_iri_atoms.pl +4 -0
  594. package/test/conformance/cases/lists/min_list_empty_fails.pl +2 -0
  595. package/test/conformance/cases/lists/nth0_known_value.pl +2 -0
  596. package/test/conformance/cases/lists/nth0_out_of_range_fails.pl +2 -0
  597. package/test/conformance/cases/lists/reverse_empty.pl +2 -0
  598. package/test/conformance/cases/lists/select_all_occurrences.pl +2 -0
  599. package/test/conformance/cases/lists/set_nth0_middle.pl +2 -0
  600. package/test/conformance/cases/lists/slice_middle.pl +2 -0
  601. package/test/conformance/cases/lists/slice_out_of_range_fails.pl +2 -0
  602. package/test/conformance/cases/lists/sort_structured_terms.pl +2 -0
  603. package/test/conformance/cases/lists/sum_list_empty_zero.pl +2 -0
  604. package/test/conformance/cases/lists/sum_min_max_list.pl +4 -0
  605. package/test/conformance/cases/lists/take_zero_and_drop_all.pl +3 -0
  606. package/test/conformance/cases/materialize/027_default_derived_output.pl +5 -0
  607. package/test/conformance/cases/materialize/028_materialize_focus.pl +5 -0
  608. package/test/conformance/cases/materialize/053_materialize_excludes_source_fact.pl +6 -0
  609. package/test/conformance/cases/materialize/099_materialize_multiple_arities.pl +8 -0
  610. package/test/conformance/cases/materialize/arity_specific_outputs.pl +4 -0
  611. package/test/conformance/cases/materialize/extra_materialize_derived_only_with_same_source.pl +4 -0
  612. package/test/conformance/cases/materialize/extra_materialize_selects_arity.pl +4 -0
  613. package/test/conformance/cases/materialize/source_facts_suppressed.pl +5 -0
  614. package/test/conformance/cases/negation/033_negation_once_generators.pl +7 -0
  615. package/test/conformance/cases/negation/042_negation_filter.pl +7 -0
  616. package/test/conformance/cases/negation/050_not_member_filter.pl +6 -0
  617. package/test/conformance/cases/negation/extra_not_with_bound_fails.pl +3 -0
  618. package/test/conformance/cases/negation/extra_not_with_bound_success.pl +3 -0
  619. package/test/conformance/cases/negation/not_known_goal_fails.pl +4 -0
  620. package/test/conformance/cases/negation/not_unknown_goal_succeeds.pl +3 -0
  621. package/test/conformance/cases/negation/stratified_negation_answers.pl +6 -0
  622. package/test/conformance/cases/rules/001_fact_output.pl +4 -0
  623. package/test/conformance/cases/rules/002_rule_recursion.pl +7 -0
  624. package/test/conformance/cases/rules/011_predicate_arity.pl +6 -0
  625. package/test/conformance/cases/rules/013_multiple_clauses_order.pl +6 -0
  626. package/test/conformance/cases/rules/017_three_step_recursion.pl +8 -0
  627. package/test/conformance/cases/rules/022_rule_head_structure.pl +5 -0
  628. package/test/conformance/cases/rules/077_recursive_path_with_lists.pl +10 -0
  629. package/test/conformance/cases/rules/078_mutual_recursion_with_arithmetic.pl +7 -0
  630. package/test/conformance/cases/rules/extra_left_to_right_multiple_bindings.pl +5 -0
  631. package/test/conformance/cases/rules/extra_structured_head_rule.pl +3 -0
  632. package/test/conformance/cases/rules/left_to_right_body_binding.pl +4 -0
  633. package/test/conformance/cases/rules/transitive_rule_three_edges.pl +6 -0
  634. package/test/conformance/cases/strings/023_quoted_escapes_readback.pl +5 -0
  635. package/test/conformance/cases/strings/030_strings_and_atoms.pl +4 -0
  636. package/test/conformance/cases/strings/055_string_matching_filters.pl +6 -0
  637. package/test/conformance/cases/strings/056_string_and_atom_concat.pl +3 -0
  638. package/test/conformance/cases/strings/064_reusable_string_builtins.pl +12 -0
  639. package/test/conformance/cases/strings/070_matches_named_captures.pl +13 -0
  640. package/test/conformance/cases/strings/071_string_edges.pl +10 -0
  641. package/test/conformance/cases/strings/072_string_conversions.pl +10 -0
  642. package/test/conformance/cases/strings/089_string_split_join_pipeline.pl +7 -0
  643. package/test/conformance/cases/strings/090_string_substring_replace_edges.pl +9 -0
  644. package/test/conformance/cases/strings/091_string_case_and_trim.pl +7 -0
  645. package/test/conformance/cases/strings/092_scalar_string_conversions.pl +9 -0
  646. package/test/conformance/cases/strings/093_regex_named_captures_context.pl +8 -0
  647. package/test/conformance/cases/strings/atom_string_from_string.pl +2 -0
  648. package/test/conformance/cases/strings/casefold_atoms.pl +3 -0
  649. package/test/conformance/cases/strings/contains_empty_needle.pl +2 -0
  650. package/test/conformance/cases/strings/extra_atom_string_number_input.pl +2 -0
  651. package/test/conformance/cases/strings/extra_join_empty_list.pl +2 -0
  652. package/test/conformance/cases/strings/extra_join_iri_and_atom.pl +2 -0
  653. package/test/conformance/cases/strings/extra_lowercase_iri_atom.pl +2 -0
  654. package/test/conformance/cases/strings/extra_matches_invalid_pattern_fails.pl +2 -0
  655. package/test/conformance/cases/strings/extra_named_regex_optional_missing.pl +2 -0
  656. package/test/conformance/cases/strings/extra_number_string_atom_input.pl +2 -0
  657. package/test/conformance/cases/strings/extra_replace_multiple.pl +2 -0
  658. package/test/conformance/cases/strings/extra_split_empty_separator.pl +2 -0
  659. package/test/conformance/cases/strings/extra_substring_last_char.pl +2 -0
  660. package/test/conformance/cases/strings/extra_term_string_iri_list.pl +2 -0
  661. package/test/conformance/cases/strings/extra_uppercase_mixed_string.pl +2 -0
  662. package/test/conformance/cases/strings/join_mixed_scalars.pl +2 -0
  663. package/test/conformance/cases/strings/matches_simple_alternation.pl +2 -0
  664. package/test/conformance/cases/strings/named_regex_two_groups.pl +2 -0
  665. package/test/conformance/cases/strings/not_matches_simple_pattern.pl +2 -0
  666. package/test/conformance/cases/strings/number_string_from_string.pl +2 -0
  667. package/test/conformance/cases/strings/number_string_rejects_non_numeric.pl +2 -0
  668. package/test/conformance/cases/strings/replace_empty_search_no_change.pl +2 -0
  669. package/test/conformance/cases/strings/split_without_separator_match.pl +2 -0
  670. package/test/conformance/cases/strings/substring_out_of_range_fails.pl +2 -0
  671. package/test/conformance/cases/strings/substring_zero_count.pl +2 -0
  672. package/test/conformance/cases/strings/term_string_nested_term.pl +2 -0
  673. package/test/conformance/cases/strings/trim_tabs_and_spaces.pl +3 -0
  674. package/test/conformance/cases/syntax/004_conjunction_and_parentheses.pl +5 -0
  675. package/test/conformance/cases/syntax/006_comma_formula_data.pl +4 -0
  676. package/test/conformance/cases/syntax/009_comments_and_whitespace.pl +5 -0
  677. package/test/conformance/cases/syntax/019_parenthesized_three_conjuncts.pl +7 -0
  678. package/test/conformance/cases/syntax/025_body_parentheses_with_formula_data.pl +5 -0
  679. package/test/conformance/cases/syntax/comments_inside_program.pl +4 -0
  680. package/test/conformance/cases/syntax/extra_comments_after_terms.pl +3 -0
  681. package/test/conformance/cases/syntax/extra_nested_parenthesized_body.pl +2 -0
  682. package/test/conformance/cases/syntax/parenthesized_query_style_body.pl +5 -0
  683. package/test/conformance/cases/syntax/quoted_atom_with_newline_escape.pl +3 -0
  684. package/test/conformance/cases/syntax/string_with_tab_escape.pl +2 -0
  685. package/test/conformance/cases/terms/003_terms_and_readback.pl +16 -0
  686. package/test/conformance/cases/terms/065_reusable_term_control_builtins.pl +11 -0
  687. package/test/conformance/cases/terms/073_term_introspection_edges.pl +11 -0
  688. package/test/conformance/cases/terms/095_term_introspection_roundtrip.pl +8 -0
  689. package/test/conformance/cases/terms/096_functor_scalar_edges.pl +8 -0
  690. package/test/conformance/cases/terms/arg_first_and_second.pl +3 -0
  691. package/test/conformance/cases/terms/arg_zero_fails.pl +2 -0
  692. package/test/conformance/cases/terms/compound_name_arguments_atom_zero_args.pl +3 -0
  693. package/test/conformance/cases/terms/compound_name_arguments_bad_args_fail.pl +2 -0
  694. package/test/conformance/cases/terms/compound_name_arguments_builds_atom_from_empty_args.pl +3 -0
  695. package/test/conformance/cases/terms/compound_name_arguments_builds_compound.pl +2 -0
  696. package/test/conformance/cases/terms/compound_name_arguments_iri_name.pl +2 -0
  697. package/test/conformance/cases/terms/extra_arg_atom_fails.pl +2 -0
  698. package/test/conformance/cases/terms/extra_arg_first_last.pl +2 -0
  699. package/test/conformance/cases/terms/extra_arg_zero_fails.pl +2 -0
  700. package/test/conformance/cases/terms/extra_compound_name_arguments_bad_args_fails.pl +2 -0
  701. package/test/conformance/cases/terms/extra_compound_name_arguments_construct_atom_zero.pl +2 -0
  702. package/test/conformance/cases/terms/extra_compound_name_arguments_construct_iri.pl +2 -0
  703. package/test/conformance/cases/terms/extra_compound_name_arguments_decompose_list.pl +2 -0
  704. package/test/conformance/cases/terms/extra_functor_list_cons.pl +2 -0
  705. package/test/conformance/cases/terms/extra_functor_number_scalar.pl +2 -0
  706. package/test/conformance/cases/terms/extra_functor_string_scalar.pl +2 -0
  707. package/test/conformance/cases/terms/functor_atom_arity_zero.pl +3 -0
  708. package/test/conformance/cases/terms/functor_number_and_string.pl +3 -0
  709. package/test/conformance/cases/terms/herbrand_witness_different_inputs_distinct.pl +2 -0
  710. package/test/conformance/cases/terms/herbrand_witness_one_input.pl +5 -0
  711. package/test/conformance/cases/terms/herbrand_witness_same_inputs_same_term.pl +2 -0
  712. package/test/conformance/cases/terms/herbrand_witness_two_inputs.pl +5 -0
  713. package/test/conformance/cases/terms/term_string_readback_iri_list.pl +2 -0
  714. package/test/conformance/cases/unification/012_nested_compound_unification.pl +5 -0
  715. package/test/conformance/cases/unification/021_repeated_variable_head.pl +7 -0
  716. package/test/conformance/cases/unification/034_equality_and_inequality.pl +6 -0
  717. package/test/conformance/cases/unification/compound_arity_mismatch_fails.pl +2 -0
  718. package/test/conformance/cases/unification/extra_eq_iri_and_quoted_atom.pl +2 -0
  719. package/test/conformance/cases/unification/extra_eq_list_tail_binding.pl +2 -0
  720. package/test/conformance/cases/unification/extra_eq_nested_repeated_fails.pl +2 -0
  721. package/test/conformance/cases/unification/extra_eq_nested_repeated_success.pl +2 -0
  722. package/test/conformance/cases/unification/extra_eq_scalar_number_atom.pl +2 -0
  723. package/test/conformance/cases/unification/extra_eq_scalar_string_number.pl +2 -0
  724. package/test/conformance/cases/unification/extra_neq_compound_arity_mismatch.pl +2 -0
  725. package/test/conformance/cases/unification/extra_neq_scalar_same_lexical_fails.pl +2 -0
  726. package/test/conformance/cases/unification/extra_variable_clause_locality.pl +4 -0
  727. package/test/conformance/cases/unification/list_tail_binding.pl +2 -0
  728. package/test/conformance/cases/unification/nested_repeated_variable.pl +2 -0
  729. package/test/conformance/cases/unification/scalar_cross_type_same_lexical_value.pl +3 -0
  730. package/test/conformance/cases/variables/007_anonymous_variables.pl +5 -0
  731. package/test/conformance/cases/variables/010_variable_scope_and_reuse.pl +8 -0
  732. package/test/conformance/cases/variables/026_question_underscore_named_variable_reuse.pl +5 -0
  733. package/test/conformance/cases/variables/101_question_mark_variables.pl +7 -0
  734. package/test/conformance/cases/variables/anonymous_in_two_goals.pl +4 -0
  735. package/test/conformance/cases/variables/clause_local_variable_names.pl +5 -0
  736. package/test/conformance/cases/variables/extra_anonymous_not_reused.pl +2 -0
  737. package/test/conformance/cases/variables/extra_named_variable_reused.pl +2 -0
  738. package/test/conformance/cases/variables/extra_question_underscore_named_distinct.pl +2 -0
  739. package/test/conformance/cases/variables/extra_question_uppercase_named.pl +2 -0
  740. package/test/conformance/cases/variables/question_anonymous_not_reused.pl +6 -0
  741. package/test/conformance/cases/variables/question_underscore_named_reuse.pl +5 -0
  742. package/test/conformance/cases/variables/question_uppercase_variable.pl +4 -0
  743. package/test/conformance/cases/variables/question_variable_digits_and_underscore.pl +2 -0
  744. package/test/conformance/cases/variables/question_variable_uppercase_name.pl +2 -0
  745. package/test/conformance/cases/variables/variable_scope_per_clause.pl +6 -0
  746. package/test/conformance/errors/atoms/extra_angle_iri_backslash_rejected.pl +1 -0
  747. package/test/conformance/errors/atoms/extra_angle_iri_pipe_rejected.pl +1 -0
  748. package/test/conformance/errors/atoms/extra_angle_iri_quote_rejected.pl +1 -0
  749. package/test/conformance/errors/atoms/hash_comment_not_atom_at_line_start.pl +1 -0
  750. package/test/conformance/errors/atoms/relative_angle_name_rejected.pl +1 -0
  751. package/test/conformance/errors/atoms/space_in_angle_iri_rejected.pl +1 -0
  752. package/test/conformance/errors/atoms/unclosed_angle_iri_rejected.pl +1 -0
  753. package/test/conformance/errors/atoms/zero_arity_compound_rejected.pl +1 -0
  754. package/test/conformance/errors/lists/extra_missing_tail_after_bar.pl +1 -0
  755. package/test/conformance/errors/lists/extra_unclosed_list_tail.pl +1 -0
  756. package/test/conformance/errors/lists/missing_list_tail.pl +1 -0
  757. package/test/conformance/errors/rules/extra_empty_head_with_body.pl +1 -0
  758. package/test/conformance/errors/rules/extra_rule_without_body.pl +1 -0
  759. package/test/conformance/errors/rules/rule_head_cannot_be_empty_parentheses.pl +1 -0
  760. package/test/conformance/errors/syntax/angle_iri_with_space_rejected.pl +1 -0
  761. package/test/conformance/errors/syntax/bad_question_digit_variable.pl +1 -0
  762. package/test/conformance/errors/syntax/bad_question_variable.pl +1 -0
  763. package/test/conformance/errors/syntax/colon_name_rejected.pl +1 -0
  764. package/test/conformance/errors/syntax/empty_body_after_rule_marker.pl +1 -0
  765. package/test/conformance/errors/syntax/empty_compound_nested.pl +1 -0
  766. package/test/conformance/errors/syntax/extra_bad_backtick_character.pl +1 -0
  767. package/test/conformance/errors/syntax/extra_bad_iri_empty_body.pl +1 -0
  768. package/test/conformance/errors/syntax/extra_bad_list_double_comma.pl +1 -0
  769. package/test/conformance/errors/syntax/extra_bad_list_double_tail.pl +1 -0
  770. package/test/conformance/errors/syntax/extra_bad_number_two_decimal_points.pl +1 -0
  771. package/test/conformance/errors/syntax/extra_double_period_rejected.pl +1 -0
  772. package/test/conformance/errors/syntax/extra_extra_closing_paren.pl +1 -0
  773. package/test/conformance/errors/syntax/extra_missing_closing_rule_body.pl +1 -0
  774. package/test/conformance/errors/syntax/extra_missing_head_rejected.pl +1 -0
  775. package/test/conformance/errors/syntax/missing_final_dot_rejected.pl +1 -0
  776. package/test/conformance/errors/syntax/missing_period.pl +1 -0
  777. package/test/conformance/errors/syntax/relative_angle_iri_rejected.pl +1 -0
  778. package/test/conformance/errors/syntax/trailing_comma_in_body.pl +1 -0
  779. package/test/conformance/errors/syntax/unclosed_compound.pl +1 -0
  780. package/test/conformance/errors/syntax/unclosed_list.pl +1 -0
  781. package/test/conformance/errors/syntax/unclosed_list_rejected.pl +1 -0
  782. package/test/conformance/errors/syntax/unclosed_quoted_atom.pl +1 -0
  783. package/test/conformance/errors/syntax/unclosed_quoted_atom_rejected.pl +1 -0
  784. package/test/conformance/errors/syntax/unclosed_string.pl +1 -0
  785. package/test/conformance/errors/syntax/unquoted_colon_predicate.pl +1 -0
  786. package/test/conformance/errors/syntax/unquoted_dotted_predicate.pl +1 -0
  787. package/test/conformance/errors/syntax/uppercase_predicate_rejected.pl +1 -0
  788. package/test/conformance/errors/terms/extra_empty_nested_compound.pl +1 -0
  789. package/test/conformance/errors/terms/extra_empty_top_level_compound.pl +1 -0
  790. package/test/conformance/errors/terms/zero_arity_compound_nested_rejected.pl +1 -0
  791. package/test/conformance/errors/variables/bare_underscore_in_list_rejected.pl +1 -0
  792. package/test/conformance/errors/variables/bare_underscore_name_in_compound_rejected.pl +1 -0
  793. package/test/conformance/errors/variables/bare_underscore_rejected.pl +1 -0
  794. package/test/conformance/errors/variables/extra_bare_underscore_in_rule_head.pl +1 -0
  795. package/test/conformance/errors/variables/extra_question_dash_variable.pl +1 -0
  796. package/test/conformance/errors/variables/extra_uppercase_in_list.pl +1 -0
  797. package/test/conformance/errors/variables/question_digit_rejected.pl +1 -0
  798. package/test/conformance/errors/variables/question_dot_rejected.pl +1 -0
  799. package/test/conformance/errors/variables/underscore_named_rejected.pl +1 -0
  800. package/test/conformance/errors/variables/uppercase_in_body_rejected.pl +1 -0
  801. package/test/conformance/errors/variables/uppercase_variable_rejected.pl +1 -0
  802. package/test/conformance/expected/aggregation/044_findall_user_goal.pl +1 -0
  803. package/test/conformance/expected/aggregation/057_countall_empty_and_nonempty.pl +1 -0
  804. package/test/conformance/expected/aggregation/058_sumall_numeric_template.pl +1 -0
  805. package/test/conformance/expected/aggregation/059_aggregate_min_template.pl +1 -0
  806. package/test/conformance/expected/aggregation/060_aggregate_max_compound_key.pl +1 -0
  807. package/test/conformance/expected/aggregation/075_aggregation_edges.pl +7 -0
  808. package/test/conformance/expected/aggregation/098_aggregation_nested_templates.pl +5 -0
  809. package/test/conformance/expected/aggregation/aggregate_max_no_answers_fails.pl +1 -0
  810. package/test/conformance/expected/aggregation/aggregate_min_structured_key.pl +1 -0
  811. package/test/conformance/expected/aggregation/countall_zero.pl +1 -0
  812. package/test/conformance/expected/aggregation/extra_aggregate_max_iri_key.pl +1 -0
  813. package/test/conformance/expected/aggregation/extra_aggregate_min_tie_first.pl +1 -0
  814. package/test/conformance/expected/aggregation/extra_countall_with_filter.pl +1 -0
  815. package/test/conformance/expected/aggregation/extra_findall_repeated_template.pl +1 -0
  816. package/test/conformance/expected/aggregation/extra_sumall_float_template.pl +1 -0
  817. package/test/conformance/expected/aggregation/findall_empty_bag.pl +1 -0
  818. package/test/conformance/expected/aggregation/sumall_empty_zero.pl +1 -0
  819. package/test/conformance/expected/arithmetic/024_numeric_literal_readback.pl +3 -0
  820. package/test/conformance/expected/arithmetic/029_arithmetic_and_comparison.pl +9 -0
  821. package/test/conformance/expected/arithmetic/039_numeric_functions.pl +7 -0
  822. package/test/conformance/expected/arithmetic/040_between_enumeration.pl +3 -0
  823. package/test/conformance/expected/arithmetic/041_smallest_divisor.pl +1 -0
  824. package/test/conformance/expected/arithmetic/054_numeric_and_lexical_comparison.pl +3 -0
  825. package/test/conformance/expected/arithmetic/061_date_difference.pl +2 -0
  826. package/test/conformance/expected/arithmetic/062_reusable_numeric_builtins.pl +8 -0
  827. package/test/conformance/expected/arithmetic/066_numeric_edges.pl +12 -0
  828. package/test/conformance/expected/arithmetic/079_big_integer_arithmetic.pl +6 -0
  829. package/test/conformance/expected/arithmetic/080_rounding_modes.pl +8 -0
  830. package/test/conformance/expected/arithmetic/081_zero_safe_numeric_functions.pl +7 -0
  831. package/test/conformance/expected/arithmetic/082_comparison_semantics.pl +8 -0
  832. package/test/conformance/expected/arithmetic/083_between_modes_and_empty_ranges.pl +8 -0
  833. package/test/conformance/expected/arithmetic/between_bound_value.pl +1 -0
  834. package/test/conformance/expected/arithmetic/between_singleton.pl +1 -0
  835. package/test/conformance/expected/arithmetic/duration_comparison.pl +1 -0
  836. package/test/conformance/expected/arithmetic/extra_acos_one.pl +1 -0
  837. package/test/conformance/expected/arithmetic/extra_asin_zero.pl +1 -0
  838. package/test/conformance/expected/arithmetic/extra_atan2_axis.pl +1 -0
  839. package/test/conformance/expected/arithmetic/extra_difference_leap_day.pl +1 -0
  840. package/test/conformance/expected/arithmetic/extra_difference_same_day.pl +1 -0
  841. package/test/conformance/expected/arithmetic/extra_div_float_exact.pl +1 -0
  842. package/test/conformance/expected/arithmetic/extra_div_integer_trunc.pl +1 -0
  843. package/test/conformance/expected/arithmetic/extra_division_by_zero_fails.pl +0 -0
  844. package/test/conformance/expected/arithmetic/extra_exp_zero.pl +1 -0
  845. package/test/conformance/expected/arithmetic/extra_ge_equal_duration.pl +1 -0
  846. package/test/conformance/expected/arithmetic/extra_le_equal_string.pl +1 -0
  847. package/test/conformance/expected/arithmetic/extra_log_one.pl +1 -0
  848. package/test/conformance/expected/arithmetic/extra_mod_negative_right.pl +1 -0
  849. package/test/conformance/expected/arithmetic/extra_pow_large_integer.pl +1 -0
  850. package/test/conformance/expected/arithmetic/float_add_and_div.pl +2 -0
  851. package/test/conformance/expected/arithmetic/min_max_mixed.pl +2 -0
  852. package/test/conformance/expected/arithmetic/mod_negative_left.pl +1 -0
  853. package/test/conformance/expected/arithmetic/neg_abs_integer.pl +2 -0
  854. package/test/conformance/expected/arithmetic/pow_negative_exponent_fails.pl +1 -0
  855. package/test/conformance/expected/arithmetic/pow_zero_exponent.pl +1 -0
  856. package/test/conformance/expected/arithmetic/rounding_negative_float.pl +4 -0
  857. package/test/conformance/expected/arithmetic/smallest_divisor_prime.pl +1 -0
  858. package/test/conformance/expected/arithmetic/sqrt_negative_fails.pl +1 -0
  859. package/test/conformance/expected/atoms/008_graphic_atoms.pl +3 -0
  860. package/test/conformance/expected/atoms/016_arity_zero_atom.pl +1 -0
  861. package/test/conformance/expected/atoms/018_quoted_atom_readback.pl +3 -0
  862. package/test/conformance/expected/atoms/103_angle_iri_atoms.pl +3 -0
  863. package/test/conformance/expected/atoms/angle_iri_percent_encoded.pl +0 -0
  864. package/test/conformance/expected/atoms/extra_graphic_backslash_atom.pl +0 -0
  865. package/test/conformance/expected/atoms/extra_iri_mailto_plus.pl +0 -0
  866. package/test/conformance/expected/atoms/extra_iri_uuid_scheme.pl +0 -0
  867. package/test/conformance/expected/atoms/extra_quoted_atom_with_quote_readback.pl +0 -0
  868. package/test/conformance/expected/atoms/graphic_angle_atom_stays_graphic.pl +1 -0
  869. package/test/conformance/expected/atoms/graphic_atom_predicate.pl +1 -0
  870. package/test/conformance/expected/atoms/graphic_less_than_atom.pl +1 -0
  871. package/test/conformance/expected/atoms/iri_as_predicate_name_quoted.pl +1 -0
  872. package/test/conformance/expected/atoms/iri_atoms_in_lists.pl +1 -0
  873. package/test/conformance/expected/atoms/iri_mailto_readback.pl +1 -0
  874. package/test/conformance/expected/atoms/iri_query_fragment_readback.pl +1 -0
  875. package/test/conformance/expected/atoms/iri_quoted_absolute_readback.pl +2 -0
  876. package/test/conformance/expected/atoms/iri_quoted_and_angle_unify.pl +0 -0
  877. package/test/conformance/expected/atoms/iri_urn_readback.pl +1 -0
  878. package/test/conformance/expected/atoms/quoted_relative_iri_not_angle.pl +0 -0
  879. package/test/conformance/expected/atoms/quoted_urn_iri_readback.pl +1 -0
  880. package/test/conformance/expected/atoms/zero_arity_atom_roundtrip.pl +3 -0
  881. package/test/conformance/expected/automatic-tabling/038_automatic_tabling.pl +2 -0
  882. package/test/conformance/expected/automatic-tabling/102_recursive_inference.pl +6 -0
  883. package/test/conformance/expected/automatic-tabling/automatic_left_recursion_path.pl +2 -0
  884. package/test/conformance/expected/automatic-tabling/automatic_tabling_preserves_answers.pl +3 -0
  885. package/test/conformance/expected/automatic-tabling/extra_automatic_bound_cycle.pl +2 -0
  886. package/test/conformance/expected/automatic-tabling/extra_automatic_open_call_fallback.pl +2 -0
  887. package/test/conformance/expected/builtins/037_matching_and_comparison.pl +5 -0
  888. package/test/conformance/expected/builtins/076_composed_reusable_builtins.pl +5 -0
  889. package/test/conformance/expected/builtins/100_reusable_builtin_workflow.pl +6 -0
  890. package/test/conformance/expected/builtins/atom_string_iri_atom.pl +1 -0
  891. package/test/conformance/expected/builtins/eq_unifies_iri_atoms.pl +0 -0
  892. package/test/conformance/expected/builtins/extra_difference_end_before_start_fails.pl +0 -0
  893. package/test/conformance/expected/builtins/extra_difference_invalid_date_fails.pl +0 -0
  894. package/test/conformance/expected/builtins/extra_eq_binds_both_sides.pl +1 -0
  895. package/test/conformance/expected/builtins/extra_neq_different_iri_atoms.pl +1 -0
  896. package/test/conformance/expected/builtins/extra_neq_same_iri_fails.pl +1 -0
  897. package/test/conformance/expected/context/032_holds_parts.pl +3 -0
  898. package/test/conformance/expected/context/051_nested_holds_parts.pl +3 -0
  899. package/test/conformance/expected/context/052_holds_member.pl +2 -0
  900. package/test/conformance/expected/context/094_context_holds_enumeration.pl +8 -0
  901. package/test/conformance/expected/context/extra_holds_atom_parts.pl +2 -0
  902. package/test/conformance/expected/context/extra_holds_ignores_string_parts.pl +0 -0
  903. package/test/conformance/expected/context/extra_holds_list_parts.pl +2 -0
  904. package/test/conformance/expected/context/extra_holds_term_nested_order.pl +3 -0
  905. package/test/conformance/expected/context/holds_compound_formula.pl +1 -0
  906. package/test/conformance/expected/context/holds_fails_when_missing.pl +1 -0
  907. package/test/conformance/expected/context/holds_parts_from_formula.pl +2 -0
  908. package/test/conformance/expected/control/014_failure_filters_answers.pl +1 -0
  909. package/test/conformance/expected/control/043_once_user_predicate.pl +1 -0
  910. package/test/conformance/expected/control/074_forall_edges.pl +5 -0
  911. package/test/conformance/expected/control/097_control_negation_once_forall.pl +5 -0
  912. package/test/conformance/expected/control/double_negation_ground_goal.pl +1 -0
  913. package/test/conformance/expected/control/extra_forall_bound_check.pl +1 -0
  914. package/test/conformance/expected/control/extra_forall_counterexample_fails.pl +0 -0
  915. package/test/conformance/expected/control/extra_not_unbound_existing_goal_fails.pl +0 -0
  916. package/test/conformance/expected/control/extra_not_unbound_unknown_goal_succeeds.pl +1 -0
  917. package/test/conformance/expected/control/extra_once_empty_fails.pl +0 -0
  918. package/test/conformance/expected/control/extra_once_preserves_binding.pl +1 -0
  919. package/test/conformance/expected/control/forall_detects_counterexample.pl +1 -0
  920. package/test/conformance/expected/control/forall_empty_generator_true.pl +1 -0
  921. package/test/conformance/expected/control/negation_with_bound_generator.pl +1 -0
  922. package/test/conformance/expected/control/once_keeps_first_answer.pl +1 -0
  923. package/test/conformance/expected/declarations/104_mode_determinism_declarations.pl +4 -0
  924. package/test/conformance/expected/declarations/det_semidet_do_not_emit_without_materialize.pl +1 -0
  925. package/test/conformance/expected/declarations/memoize_is_ordinary_fact.pl +1 -0
  926. package/test/conformance/expected/declarations/mode_determinism_are_facts.pl +3 -0
  927. package/test/conformance/expected/declarations/mode_ignored_when_arity_mismatch.pl +1 -0
  928. package/test/conformance/expected/lists/005_list_deconstruction.pl +2 -0
  929. package/test/conformance/expected/lists/015_improper_list_unification.pl +3 -0
  930. package/test/conformance/expected/lists/020_nested_list_terms.pl +2 -0
  931. package/test/conformance/expected/lists/031_lists_aggregation_ordering.pl +9 -0
  932. package/test/conformance/expected/lists/035_list_relations.pl +4 -0
  933. package/test/conformance/expected/lists/036_append_splits.pl +3 -0
  934. package/test/conformance/expected/lists/045_sort_deduplicates_atoms.pl +1 -0
  935. package/test/conformance/expected/lists/046_append_bound_prefix_suffix.pl +2 -0
  936. package/test/conformance/expected/lists/047_nth0_index_generation.pl +1 -0
  937. package/test/conformance/expected/lists/048_set_nth0_edges.pl +2 -0
  938. package/test/conformance/expected/lists/049_select_duplicate_occurrences.pl +2 -0
  939. package/test/conformance/expected/lists/063_reusable_list_builtins.pl +9 -0
  940. package/test/conformance/expected/lists/067_list_edges.pl +8 -0
  941. package/test/conformance/expected/lists/068_list_generation_order.pl +10 -0
  942. package/test/conformance/expected/lists/069_list_summaries_and_sets.pl +7 -0
  943. package/test/conformance/expected/lists/084_append_and_select_composition.pl +10 -0
  944. package/test/conformance/expected/lists/085_nth_and_update_edges.pl +8 -0
  945. package/test/conformance/expected/lists/086_slicing_pipeline.pl +7 -0
  946. package/test/conformance/expected/lists/087_sort_reverse_length.pl +6 -0
  947. package/test/conformance/expected/lists/088_list_summaries_failures.pl +6 -0
  948. package/test/conformance/expected/lists/empty_list_term.pl +1 -0
  949. package/test/conformance/expected/lists/extra_append_all_splits_three.pl +4 -0
  950. package/test/conformance/expected/lists/extra_append_to_improper_tail.pl +1 -0
  951. package/test/conformance/expected/lists/extra_drop_all.pl +1 -0
  952. package/test/conformance/expected/lists/extra_head_and_rest_improper.pl +1 -0
  953. package/test/conformance/expected/lists/extra_last_singleton.pl +1 -0
  954. package/test/conformance/expected/lists/extra_length_improper_fails.pl +0 -0
  955. package/test/conformance/expected/lists/extra_list_to_set_stable_order.pl +1 -0
  956. package/test/conformance/expected/lists/extra_member_repeated_nested.pl +2 -0
  957. package/test/conformance/expected/lists/extra_not_member_compound_fails.pl +0 -0
  958. package/test/conformance/expected/lists/extra_not_member_compound_success.pl +1 -0
  959. package/test/conformance/expected/lists/extra_nth0_duplicate_indexes.pl +2 -0
  960. package/test/conformance/expected/lists/extra_reverse_nested_terms.pl +1 -0
  961. package/test/conformance/expected/lists/extra_select_structured_duplicate.pl +2 -0
  962. package/test/conformance/expected/lists/extra_slice_end.pl +1 -0
  963. package/test/conformance/expected/lists/extra_sort_iri_atoms.pl +1 -0
  964. package/test/conformance/expected/lists/extra_take_all.pl +1 -0
  965. package/test/conformance/expected/lists/head_rest_last.pl +3 -0
  966. package/test/conformance/expected/lists/improper_list_readback.pl +1 -0
  967. package/test/conformance/expected/lists/length_empty_and_nested.pl +2 -0
  968. package/test/conformance/expected/lists/list_to_set_structural_duplicates.pl +1 -0
  969. package/test/conformance/expected/lists/list_with_iri_atoms.pl +1 -0
  970. package/test/conformance/expected/lists/min_list_empty_fails.pl +1 -0
  971. package/test/conformance/expected/lists/nth0_known_value.pl +1 -0
  972. package/test/conformance/expected/lists/nth0_out_of_range_fails.pl +1 -0
  973. package/test/conformance/expected/lists/reverse_empty.pl +1 -0
  974. package/test/conformance/expected/lists/select_all_occurrences.pl +3 -0
  975. package/test/conformance/expected/lists/set_nth0_middle.pl +1 -0
  976. package/test/conformance/expected/lists/slice_middle.pl +0 -0
  977. package/test/conformance/expected/lists/slice_out_of_range_fails.pl +1 -0
  978. package/test/conformance/expected/lists/sort_structured_terms.pl +1 -0
  979. package/test/conformance/expected/lists/sum_list_empty_zero.pl +1 -0
  980. package/test/conformance/expected/lists/sum_min_max_list.pl +3 -0
  981. package/test/conformance/expected/lists/take_zero_and_drop_all.pl +2 -0
  982. package/test/conformance/expected/materialize/027_default_derived_output.pl +3 -0
  983. package/test/conformance/expected/materialize/028_materialize_focus.pl +1 -0
  984. package/test/conformance/expected/materialize/053_materialize_excludes_source_fact.pl +1 -0
  985. package/test/conformance/expected/materialize/099_materialize_multiple_arities.pl +4 -0
  986. package/test/conformance/expected/materialize/arity_specific_outputs.pl +0 -0
  987. package/test/conformance/expected/materialize/extra_materialize_derived_only_with_same_source.pl +1 -0
  988. package/test/conformance/expected/materialize/extra_materialize_selects_arity.pl +0 -0
  989. package/test/conformance/expected/materialize/source_facts_suppressed.pl +1 -0
  990. package/test/conformance/expected/negation/033_negation_once_generators.pl +2 -0
  991. package/test/conformance/expected/negation/042_negation_filter.pl +2 -0
  992. package/test/conformance/expected/negation/050_not_member_filter.pl +1 -0
  993. package/test/conformance/expected/negation/extra_not_with_bound_fails.pl +0 -0
  994. package/test/conformance/expected/negation/extra_not_with_bound_success.pl +1 -0
  995. package/test/conformance/expected/negation/not_known_goal_fails.pl +0 -0
  996. package/test/conformance/expected/negation/not_unknown_goal_succeeds.pl +1 -0
  997. package/test/conformance/expected/negation/stratified_negation_answers.pl +1 -0
  998. package/test/conformance/expected/rules/001_fact_output.pl +1 -0
  999. package/test/conformance/expected/rules/002_rule_recursion.pl +2 -0
  1000. package/test/conformance/expected/rules/011_predicate_arity.pl +2 -0
  1001. package/test/conformance/expected/rules/013_multiple_clauses_order.pl +2 -0
  1002. package/test/conformance/expected/rules/017_three_step_recursion.pl +3 -0
  1003. package/test/conformance/expected/rules/022_rule_head_structure.pl +2 -0
  1004. package/test/conformance/expected/rules/077_recursive_path_with_lists.pl +3 -0
  1005. package/test/conformance/expected/rules/078_mutual_recursion_with_arithmetic.pl +7 -0
  1006. package/test/conformance/expected/rules/extra_left_to_right_multiple_bindings.pl +2 -0
  1007. package/test/conformance/expected/rules/extra_structured_head_rule.pl +1 -0
  1008. package/test/conformance/expected/rules/left_to_right_body_binding.pl +1 -0
  1009. package/test/conformance/expected/rules/transitive_rule_three_edges.pl +6 -0
  1010. package/test/conformance/expected/strings/023_quoted_escapes_readback.pl +2 -0
  1011. package/test/conformance/expected/strings/030_strings_and_atoms.pl +2 -0
  1012. package/test/conformance/expected/strings/055_string_matching_filters.pl +2 -0
  1013. package/test/conformance/expected/strings/056_string_and_atom_concat.pl +1 -0
  1014. package/test/conformance/expected/strings/064_reusable_string_builtins.pl +10 -0
  1015. package/test/conformance/expected/strings/070_matches_named_captures.pl +1 -0
  1016. package/test/conformance/expected/strings/071_string_edges.pl +8 -0
  1017. package/test/conformance/expected/strings/072_string_conversions.pl +8 -0
  1018. package/test/conformance/expected/strings/089_string_split_join_pipeline.pl +4 -0
  1019. package/test/conformance/expected/strings/090_string_substring_replace_edges.pl +7 -0
  1020. package/test/conformance/expected/strings/091_string_case_and_trim.pl +5 -0
  1021. package/test/conformance/expected/strings/092_scalar_string_conversions.pl +7 -0
  1022. package/test/conformance/expected/strings/093_regex_named_captures_context.pl +5 -0
  1023. package/test/conformance/expected/strings/atom_string_from_string.pl +1 -0
  1024. package/test/conformance/expected/strings/casefold_atoms.pl +2 -0
  1025. package/test/conformance/expected/strings/contains_empty_needle.pl +1 -0
  1026. package/test/conformance/expected/strings/extra_atom_string_number_input.pl +1 -0
  1027. package/test/conformance/expected/strings/extra_join_empty_list.pl +1 -0
  1028. package/test/conformance/expected/strings/extra_join_iri_and_atom.pl +1 -0
  1029. package/test/conformance/expected/strings/extra_lowercase_iri_atom.pl +1 -0
  1030. package/test/conformance/expected/strings/extra_matches_invalid_pattern_fails.pl +0 -0
  1031. package/test/conformance/expected/strings/extra_named_regex_optional_missing.pl +1 -0
  1032. package/test/conformance/expected/strings/extra_number_string_atom_input.pl +1 -0
  1033. package/test/conformance/expected/strings/extra_replace_multiple.pl +1 -0
  1034. package/test/conformance/expected/strings/extra_split_empty_separator.pl +1 -0
  1035. package/test/conformance/expected/strings/extra_substring_last_char.pl +1 -0
  1036. package/test/conformance/expected/strings/extra_term_string_iri_list.pl +1 -0
  1037. package/test/conformance/expected/strings/extra_uppercase_mixed_string.pl +1 -0
  1038. package/test/conformance/expected/strings/join_mixed_scalars.pl +1 -0
  1039. package/test/conformance/expected/strings/matches_simple_alternation.pl +1 -0
  1040. package/test/conformance/expected/strings/named_regex_two_groups.pl +1 -0
  1041. package/test/conformance/expected/strings/not_matches_simple_pattern.pl +1 -0
  1042. package/test/conformance/expected/strings/number_string_from_string.pl +1 -0
  1043. package/test/conformance/expected/strings/number_string_rejects_non_numeric.pl +1 -0
  1044. package/test/conformance/expected/strings/replace_empty_search_no_change.pl +1 -0
  1045. package/test/conformance/expected/strings/split_without_separator_match.pl +1 -0
  1046. package/test/conformance/expected/strings/substring_out_of_range_fails.pl +1 -0
  1047. package/test/conformance/expected/strings/substring_zero_count.pl +1 -0
  1048. package/test/conformance/expected/strings/term_string_nested_term.pl +1 -0
  1049. package/test/conformance/expected/strings/trim_tabs_and_spaces.pl +1 -0
  1050. package/test/conformance/expected/syntax/004_conjunction_and_parentheses.pl +1 -0
  1051. package/test/conformance/expected/syntax/006_comma_formula_data.pl +1 -0
  1052. package/test/conformance/expected/syntax/009_comments_and_whitespace.pl +2 -0
  1053. package/test/conformance/expected/syntax/019_parenthesized_three_conjuncts.pl +1 -0
  1054. package/test/conformance/expected/syntax/025_body_parentheses_with_formula_data.pl +1 -0
  1055. package/test/conformance/expected/syntax/comments_inside_program.pl +0 -0
  1056. package/test/conformance/expected/syntax/extra_comments_after_terms.pl +0 -0
  1057. package/test/conformance/expected/syntax/extra_nested_parenthesized_body.pl +1 -0
  1058. package/test/conformance/expected/syntax/parenthesized_query_style_body.pl +1 -0
  1059. package/test/conformance/expected/syntax/quoted_atom_with_newline_escape.pl +0 -0
  1060. package/test/conformance/expected/syntax/string_with_tab_escape.pl +0 -0
  1061. package/test/conformance/expected/terms/003_terms_and_readback.pl +13 -0
  1062. package/test/conformance/expected/terms/065_reusable_term_control_builtins.pl +6 -0
  1063. package/test/conformance/expected/terms/073_term_introspection_edges.pl +9 -0
  1064. package/test/conformance/expected/terms/095_term_introspection_roundtrip.pl +6 -0
  1065. package/test/conformance/expected/terms/096_functor_scalar_edges.pl +6 -0
  1066. package/test/conformance/expected/terms/arg_first_and_second.pl +2 -0
  1067. package/test/conformance/expected/terms/arg_zero_fails.pl +1 -0
  1068. package/test/conformance/expected/terms/compound_name_arguments_atom_zero_args.pl +1 -0
  1069. package/test/conformance/expected/terms/compound_name_arguments_bad_args_fail.pl +1 -0
  1070. package/test/conformance/expected/terms/compound_name_arguments_builds_atom_from_empty_args.pl +1 -0
  1071. package/test/conformance/expected/terms/compound_name_arguments_builds_compound.pl +1 -0
  1072. package/test/conformance/expected/terms/compound_name_arguments_iri_name.pl +1 -0
  1073. package/test/conformance/expected/terms/extra_arg_atom_fails.pl +0 -0
  1074. package/test/conformance/expected/terms/extra_arg_first_last.pl +1 -0
  1075. package/test/conformance/expected/terms/extra_arg_zero_fails.pl +0 -0
  1076. package/test/conformance/expected/terms/extra_compound_name_arguments_bad_args_fails.pl +0 -0
  1077. package/test/conformance/expected/terms/extra_compound_name_arguments_construct_atom_zero.pl +1 -0
  1078. package/test/conformance/expected/terms/extra_compound_name_arguments_construct_iri.pl +1 -0
  1079. package/test/conformance/expected/terms/extra_compound_name_arguments_decompose_list.pl +1 -0
  1080. package/test/conformance/expected/terms/extra_functor_list_cons.pl +1 -0
  1081. package/test/conformance/expected/terms/extra_functor_number_scalar.pl +1 -0
  1082. package/test/conformance/expected/terms/extra_functor_string_scalar.pl +1 -0
  1083. package/test/conformance/expected/terms/functor_atom_arity_zero.pl +1 -0
  1084. package/test/conformance/expected/terms/functor_number_and_string.pl +2 -0
  1085. package/test/conformance/expected/terms/herbrand_witness_different_inputs_distinct.pl +1 -0
  1086. package/test/conformance/expected/terms/herbrand_witness_one_input.pl +2 -0
  1087. package/test/conformance/expected/terms/herbrand_witness_same_inputs_same_term.pl +1 -0
  1088. package/test/conformance/expected/terms/herbrand_witness_two_inputs.pl +2 -0
  1089. package/test/conformance/expected/terms/term_string_readback_iri_list.pl +1 -0
  1090. package/test/conformance/expected/unification/012_nested_compound_unification.pl +2 -0
  1091. package/test/conformance/expected/unification/021_repeated_variable_head.pl +2 -0
  1092. package/test/conformance/expected/unification/034_equality_and_inequality.pl +4 -0
  1093. package/test/conformance/expected/unification/compound_arity_mismatch_fails.pl +1 -0
  1094. package/test/conformance/expected/unification/extra_eq_iri_and_quoted_atom.pl +0 -0
  1095. package/test/conformance/expected/unification/extra_eq_list_tail_binding.pl +1 -0
  1096. package/test/conformance/expected/unification/extra_eq_nested_repeated_fails.pl +0 -0
  1097. package/test/conformance/expected/unification/extra_eq_nested_repeated_success.pl +1 -0
  1098. package/test/conformance/expected/unification/extra_eq_scalar_number_atom.pl +1 -0
  1099. package/test/conformance/expected/unification/extra_eq_scalar_string_number.pl +1 -0
  1100. package/test/conformance/expected/unification/extra_neq_compound_arity_mismatch.pl +1 -0
  1101. package/test/conformance/expected/unification/extra_neq_scalar_same_lexical_fails.pl +0 -0
  1102. package/test/conformance/expected/unification/extra_variable_clause_locality.pl +2 -0
  1103. package/test/conformance/expected/unification/list_tail_binding.pl +1 -0
  1104. package/test/conformance/expected/unification/nested_repeated_variable.pl +1 -0
  1105. package/test/conformance/expected/unification/scalar_cross_type_same_lexical_value.pl +2 -0
  1106. package/test/conformance/expected/variables/007_anonymous_variables.pl +1 -0
  1107. package/test/conformance/expected/variables/010_variable_scope_and_reuse.pl +2 -0
  1108. package/test/conformance/expected/variables/026_question_underscore_named_variable_reuse.pl +1 -0
  1109. package/test/conformance/expected/variables/101_question_mark_variables.pl +3 -0
  1110. package/test/conformance/expected/variables/anonymous_in_two_goals.pl +1 -0
  1111. package/test/conformance/expected/variables/clause_local_variable_names.pl +2 -0
  1112. package/test/conformance/expected/variables/extra_anonymous_not_reused.pl +1 -0
  1113. package/test/conformance/expected/variables/extra_named_variable_reused.pl +1 -0
  1114. package/test/conformance/expected/variables/extra_question_underscore_named_distinct.pl +1 -0
  1115. package/test/conformance/expected/variables/extra_question_uppercase_named.pl +1 -0
  1116. package/test/conformance/expected/variables/question_anonymous_not_reused.pl +4 -0
  1117. package/test/conformance/expected/variables/question_underscore_named_reuse.pl +1 -0
  1118. package/test/conformance/expected/variables/question_uppercase_variable.pl +1 -0
  1119. package/test/conformance/expected/variables/question_variable_digits_and_underscore.pl +1 -0
  1120. package/test/conformance/expected/variables/question_variable_uppercase_name.pl +1 -0
  1121. package/test/conformance/expected/variables/variable_scope_per_clause.pl +2 -0
  1122. package/test/conformance/expected-errors/atoms/extra_angle_iri_backslash_rejected.txt +1 -0
  1123. package/test/conformance/expected-errors/atoms/extra_angle_iri_pipe_rejected.txt +1 -0
  1124. package/test/conformance/expected-errors/atoms/extra_angle_iri_quote_rejected.txt +1 -0
  1125. package/test/conformance/expected-errors/atoms/hash_comment_not_atom_at_line_start.txt +1 -0
  1126. package/test/conformance/expected-errors/atoms/relative_angle_name_rejected.txt +1 -0
  1127. package/test/conformance/expected-errors/atoms/space_in_angle_iri_rejected.txt +1 -0
  1128. package/test/conformance/expected-errors/atoms/unclosed_angle_iri_rejected.txt +1 -0
  1129. package/test/conformance/expected-errors/atoms/zero_arity_compound_rejected.txt +1 -0
  1130. package/test/conformance/expected-errors/lists/extra_missing_tail_after_bar.txt +1 -0
  1131. package/test/conformance/expected-errors/lists/extra_unclosed_list_tail.txt +1 -0
  1132. package/test/conformance/expected-errors/lists/missing_list_tail.txt +1 -0
  1133. package/test/conformance/expected-errors/rules/extra_empty_head_with_body.txt +1 -0
  1134. package/test/conformance/expected-errors/rules/extra_rule_without_body.txt +1 -0
  1135. package/test/conformance/expected-errors/rules/rule_head_cannot_be_empty_parentheses.txt +1 -0
  1136. package/test/conformance/expected-errors/syntax/angle_iri_with_space_rejected.txt +1 -0
  1137. package/test/conformance/expected-errors/syntax/bad_question_digit_variable.txt +1 -0
  1138. package/test/conformance/expected-errors/syntax/bad_question_variable.txt +1 -0
  1139. package/test/conformance/expected-errors/syntax/colon_name_rejected.txt +1 -0
  1140. package/test/conformance/expected-errors/syntax/empty_body_after_rule_marker.txt +1 -0
  1141. package/test/conformance/expected-errors/syntax/empty_compound_nested.txt +1 -0
  1142. package/test/conformance/expected-errors/syntax/extra_bad_backtick_character.txt +1 -0
  1143. package/test/conformance/expected-errors/syntax/extra_bad_iri_empty_body.txt +1 -0
  1144. package/test/conformance/expected-errors/syntax/extra_bad_list_double_comma.txt +1 -0
  1145. package/test/conformance/expected-errors/syntax/extra_bad_list_double_tail.txt +1 -0
  1146. package/test/conformance/expected-errors/syntax/extra_bad_number_two_decimal_points.txt +1 -0
  1147. package/test/conformance/expected-errors/syntax/extra_double_period_rejected.txt +1 -0
  1148. package/test/conformance/expected-errors/syntax/extra_extra_closing_paren.txt +1 -0
  1149. package/test/conformance/expected-errors/syntax/extra_missing_closing_rule_body.txt +1 -0
  1150. package/test/conformance/expected-errors/syntax/extra_missing_head_rejected.txt +1 -0
  1151. package/test/conformance/expected-errors/syntax/missing_final_dot_rejected.txt +1 -0
  1152. package/test/conformance/expected-errors/syntax/missing_period.txt +1 -0
  1153. package/test/conformance/expected-errors/syntax/relative_angle_iri_rejected.txt +1 -0
  1154. package/test/conformance/expected-errors/syntax/trailing_comma_in_body.txt +1 -0
  1155. package/test/conformance/expected-errors/syntax/unclosed_compound.txt +1 -0
  1156. package/test/conformance/expected-errors/syntax/unclosed_list.txt +1 -0
  1157. package/test/conformance/expected-errors/syntax/unclosed_list_rejected.txt +1 -0
  1158. package/test/conformance/expected-errors/syntax/unclosed_quoted_atom.txt +1 -0
  1159. package/test/conformance/expected-errors/syntax/unclosed_quoted_atom_rejected.txt +1 -0
  1160. package/test/conformance/expected-errors/syntax/unclosed_string.txt +1 -0
  1161. package/test/conformance/expected-errors/syntax/unquoted_colon_predicate.txt +1 -0
  1162. package/test/conformance/expected-errors/syntax/unquoted_dotted_predicate.txt +1 -0
  1163. package/test/conformance/expected-errors/syntax/uppercase_predicate_rejected.txt +1 -0
  1164. package/test/conformance/expected-errors/terms/extra_empty_nested_compound.txt +1 -0
  1165. package/test/conformance/expected-errors/terms/extra_empty_top_level_compound.txt +1 -0
  1166. package/test/conformance/expected-errors/terms/zero_arity_compound_nested_rejected.txt +1 -0
  1167. package/test/conformance/expected-errors/variables/bare_underscore_in_list_rejected.txt +1 -0
  1168. package/test/conformance/expected-errors/variables/bare_underscore_name_in_compound_rejected.txt +1 -0
  1169. package/test/conformance/expected-errors/variables/bare_underscore_rejected.txt +1 -0
  1170. package/test/conformance/expected-errors/variables/extra_bare_underscore_in_rule_head.txt +1 -0
  1171. package/test/conformance/expected-errors/variables/extra_question_dash_variable.txt +1 -0
  1172. package/test/conformance/expected-errors/variables/extra_uppercase_in_list.txt +1 -0
  1173. package/test/conformance/expected-errors/variables/question_digit_rejected.txt +1 -0
  1174. package/test/conformance/expected-errors/variables/question_dot_rejected.txt +1 -0
  1175. package/test/conformance/expected-errors/variables/underscore_named_rejected.txt +1 -0
  1176. package/test/conformance/expected-errors/variables/uppercase_in_body_rejected.txt +1 -0
  1177. package/test/conformance/expected-errors/variables/uppercase_variable_rejected.txt +1 -0
  1178. package/test/conformance/expected-proofs/proofs/automatic_recursive.pl +59 -0
  1179. package/test/conformance/expected-proofs/proofs/bindings_nested_term.pl +16 -0
  1180. package/test/conformance/expected-proofs/proofs/builtin_numeric.pl +16 -0
  1181. package/test/conformance/expected-proofs/proofs/conjunction_order.pl +19 -0
  1182. package/test/conformance/expected-proofs/proofs/extra_aggregate_min.pl +16 -0
  1183. package/test/conformance/expected-proofs/proofs/extra_automatic_path_bound.pl +57 -0
  1184. package/test/conformance/expected-proofs/proofs/extra_compound_name_arguments.pl +16 -0
  1185. package/test/conformance/expected-proofs/proofs/extra_eq_builtin.pl +16 -0
  1186. package/test/conformance/expected-proofs/proofs/extra_findall_builtin.pl +16 -0
  1187. package/test/conformance/expected-proofs/proofs/extra_forall_builtin.pl +15 -0
  1188. package/test/conformance/expected-proofs/proofs/extra_holds_parts.pl +32 -0
  1189. package/test/conformance/expected-proofs/proofs/extra_iri_join.pl +16 -0
  1190. package/test/conformance/expected-proofs/proofs/extra_negation_success.pl +15 -0
  1191. package/test/conformance/expected-proofs/proofs/extra_nested_list_binding.pl +16 -0
  1192. package/test/conformance/expected-proofs/proofs/extra_once_member.pl +22 -0
  1193. package/test/conformance/expected-proofs/proofs/extra_recursive_path.pl +59 -0
  1194. package/test/conformance/expected-proofs/proofs/herbrand_witness.pl +16 -0
  1195. package/test/conformance/expected-proofs/proofs/iri_atom.pl +16 -0
  1196. package/test/conformance/expected-proofs/proofs/list_builtin.pl +20 -0
  1197. package/test/conformance/expected-proofs/proofs/once_child.pl +22 -0
  1198. package/test/conformance/expected-proofs/proofs/rule_fact.pl +16 -0
  1199. package/test/conformance/expected-warnings/negation/extra_stratified_multiple_negations_quiet.pl +1 -0
  1200. package/test/conformance/expected-warnings/negation/extra_stratified_multiple_negations_quiet.txt +0 -0
  1201. package/test/conformance/expected-warnings/negation/extra_stratified_negation_with_recursion_quiet.pl +1 -0
  1202. package/test/conformance/expected-warnings/negation/extra_stratified_negation_with_recursion_quiet.txt +0 -0
  1203. package/test/conformance/expected-warnings/negation/extra_unstratified_indirect_self_with_fact.pl +0 -0
  1204. package/test/conformance/expected-warnings/negation/extra_unstratified_indirect_self_with_fact.txt +2 -0
  1205. package/test/conformance/expected-warnings/negation/extra_unstratified_positive_negative_loop.pl +0 -0
  1206. package/test/conformance/expected-warnings/negation/extra_unstratified_positive_negative_loop.txt +2 -0
  1207. package/test/conformance/expected-warnings/negation/extra_unstratified_three_cycle_all_negative.pl +0 -0
  1208. package/test/conformance/expected-warnings/negation/extra_unstratified_three_cycle_all_negative.txt +4 -0
  1209. package/test/conformance/expected-warnings/negation/extra_warning_preserves_empty_stdout.pl +0 -0
  1210. package/test/conformance/expected-warnings/negation/extra_warning_preserves_empty_stdout.txt +3 -0
  1211. package/test/conformance/expected-warnings/negation/negative_unknown_group_quiet.pl +1 -0
  1212. package/test/conformance/expected-warnings/negation/negative_unknown_group_quiet.txt +0 -0
  1213. package/test/conformance/expected-warnings/negation/no_negation_quiet.pl +1 -0
  1214. package/test/conformance/expected-warnings/negation/no_negation_quiet.txt +0 -0
  1215. package/test/conformance/expected-warnings/negation/stratified_negative_unknown_after_positive_quiet.pl +1 -0
  1216. package/test/conformance/expected-warnings/negation/stratified_negative_unknown_after_positive_quiet.txt +0 -0
  1217. package/test/conformance/expected-warnings/negation/stratified_quiet.pl +1 -0
  1218. package/test/conformance/expected-warnings/negation/stratified_quiet.txt +0 -0
  1219. package/test/conformance/expected-warnings/negation/stratified_two_level_quiet.pl +1 -0
  1220. package/test/conformance/expected-warnings/negation/stratified_two_level_quiet.txt +0 -0
  1221. package/test/conformance/expected-warnings/negation/unstratified_mutual.pl +0 -0
  1222. package/test/conformance/expected-warnings/negation/unstratified_mutual.txt +3 -0
  1223. package/test/conformance/expected-warnings/negation/unstratified_positive_prefix.pl +0 -0
  1224. package/test/conformance/expected-warnings/negation/unstratified_positive_prefix.txt +2 -0
  1225. package/test/conformance/expected-warnings/negation/unstratified_self.pl +0 -0
  1226. package/test/conformance/expected-warnings/negation/unstratified_self.txt +2 -0
  1227. package/test/conformance/expected-warnings/negation/unstratified_three_step.pl +1 -0
  1228. package/test/conformance/expected-warnings/negation/unstratified_three_step.txt +2 -0
  1229. package/test/conformance/expected-warnings/negation/unstratified_two_arity_cycle.pl +0 -0
  1230. package/test/conformance/expected-warnings/negation/unstratified_two_arity_cycle.txt +3 -0
  1231. package/test/conformance/expected-warnings/negation/unstratified_two_independent_cycles.pl +0 -0
  1232. package/test/conformance/expected-warnings/negation/unstratified_two_independent_cycles.txt +5 -0
  1233. package/test/conformance/expected-warnings/negation/unstratified_with_iri_predicates.pl +0 -0
  1234. package/test/conformance/expected-warnings/negation/unstratified_with_iri_predicates.txt +3 -0
  1235. package/test/conformance/expected-warnings/negation/warning_preserves_multiple_stdout_answers.pl +0 -0
  1236. package/test/conformance/expected-warnings/negation/warning_preserves_multiple_stdout_answers.txt +3 -0
  1237. package/test/conformance/proofs/proofs/automatic_recursive.pl +6 -0
  1238. package/test/conformance/proofs/proofs/bindings_nested_term.pl +4 -0
  1239. package/test/conformance/proofs/proofs/builtin_numeric.pl +3 -0
  1240. package/test/conformance/proofs/proofs/conjunction_order.pl +5 -0
  1241. package/test/conformance/proofs/proofs/extra_aggregate_min.pl +4 -0
  1242. package/test/conformance/proofs/proofs/extra_automatic_path_bound.pl +6 -0
  1243. package/test/conformance/proofs/proofs/extra_compound_name_arguments.pl +2 -0
  1244. package/test/conformance/proofs/proofs/extra_eq_builtin.pl +2 -0
  1245. package/test/conformance/proofs/proofs/extra_findall_builtin.pl +4 -0
  1246. package/test/conformance/proofs/proofs/extra_forall_builtin.pl +2 -0
  1247. package/test/conformance/proofs/proofs/extra_holds_parts.pl +2 -0
  1248. package/test/conformance/proofs/proofs/extra_iri_join.pl +2 -0
  1249. package/test/conformance/proofs/proofs/extra_negation_success.pl +3 -0
  1250. package/test/conformance/proofs/proofs/extra_nested_list_binding.pl +2 -0
  1251. package/test/conformance/proofs/proofs/extra_once_member.pl +2 -0
  1252. package/test/conformance/proofs/proofs/extra_recursive_path.pl +5 -0
  1253. package/test/conformance/proofs/proofs/herbrand_witness.pl +3 -0
  1254. package/test/conformance/proofs/proofs/iri_atom.pl +4 -0
  1255. package/test/conformance/proofs/proofs/list_builtin.pl +3 -0
  1256. package/test/conformance/proofs/proofs/once_child.pl +5 -0
  1257. package/test/conformance/proofs/proofs/rule_fact.pl +4 -0
  1258. package/test/conformance/warnings/negation/extra_stratified_multiple_negations_quiet.pl +4 -0
  1259. package/test/conformance/warnings/negation/extra_stratified_negation_with_recursion_quiet.pl +5 -0
  1260. package/test/conformance/warnings/negation/extra_unstratified_indirect_self_with_fact.pl +5 -0
  1261. package/test/conformance/warnings/negation/extra_unstratified_positive_negative_loop.pl +5 -0
  1262. package/test/conformance/warnings/negation/extra_unstratified_three_cycle_all_negative.pl +5 -0
  1263. package/test/conformance/warnings/negation/extra_warning_preserves_empty_stdout.pl +3 -0
  1264. package/test/conformance/warnings/negation/negative_unknown_group_quiet.pl +2 -0
  1265. package/test/conformance/warnings/negation/no_negation_quiet.pl +3 -0
  1266. package/test/conformance/warnings/negation/stratified_negative_unknown_after_positive_quiet.pl +3 -0
  1267. package/test/conformance/warnings/negation/stratified_quiet.pl +4 -0
  1268. package/test/conformance/warnings/negation/stratified_two_level_quiet.pl +5 -0
  1269. package/test/conformance/warnings/negation/unstratified_mutual.pl +5 -0
  1270. package/test/conformance/warnings/negation/unstratified_positive_prefix.pl +5 -0
  1271. package/test/conformance/warnings/negation/unstratified_self.pl +4 -0
  1272. package/test/conformance/warnings/negation/unstratified_three_step.pl +6 -0
  1273. package/test/conformance/warnings/negation/unstratified_two_arity_cycle.pl +4 -0
  1274. package/test/conformance/warnings/negation/unstratified_two_independent_cycles.pl +6 -0
  1275. package/test/conformance/warnings/negation/unstratified_with_iri_predicates.pl +4 -0
  1276. package/test/conformance/warnings/negation/warning_preserves_multiple_stdout_answers.pl +5 -0
  1277. package/test/run-all.mjs +20 -0
  1278. package/test/run-conformance-report.mjs +120 -0
  1279. package/test/run-conformance.mjs +189 -0
  1280. package/test/run-examples.mjs +155 -0
  1281. package/test/run-regression.mjs +1291 -0
  1282. package/test/test-style.mjs +94 -0
package/docs/guide.md ADDED
@@ -0,0 +1,622 @@
1
+ # Deriva Guide
2
+
3
+ This guide introduces Deriva, a small Horn-clause language and engine whose source syntax is Prolog-like but deliberately its own compact language for facts, rules, goals, answers, and proofs. Deriva works over ordinary terms, lists, arithmetic, strings, and finite search. Run it with the `deriva` CLI, or use `node bin/deriva.js` when working directly from a source checkout.
4
+
5
+ Programs write relations directly, for example `ancestor(pat, emma)` or `status(case1, accepted)`. Web identifiers can be written as ordinary quoted atoms that include angle brackets, for example `'<https://schema.org/name>'`, when a program needs explicit IRI-shaped names without prefix declarations. Deriva output is ordinary Deriva syntax: by default, the CLI materializes selected answer facts and prints those facts only. Pass `--proof` (or `-p`) when you also want each answer followed by a `why/2` explanation fact that records the proof. Programs may add `materialize/2` declarations such as `materialize(answer, 2).` to focus output on selected predicates.
6
+
7
+ Execution is automatically hybrid. Ordinary predicates use indexed
8
+ goal-directed resolution, while dependency analysis detects recursive groups
9
+ and tables their bound calls. Programs describe relations without choosing the
10
+ engine's search strategy.
11
+
12
+
13
+ For the normative language definition, including lexical syntax, terms, clauses, goals, built-ins, automatic hybrid reasoning, `materialize/2`, and conformance boundaries, read the [Deriva language reference](language-reference.md).
14
+
15
+ ## Contents
16
+
17
+ 1. [Quick start](#quick-start)
18
+ 2. [Running deriva](#running-deriva)
19
+ 3. [Default output](#default-output)
20
+ 4. [Writing programs](#writing-programs)
21
+ 5. [Aggregation helpers](#aggregation-helpers)
22
+ 6. [Context data](#context-data)
23
+ 7. [Example catalog](#example-catalog)
24
+ 8. [Golden outputs, tests, and conformance](#golden-outputs-tests-and-conformance)
25
+ 9. [Development and release](#development-and-release)
26
+ 10. [Relationship to Eyeling](#relationship-to-eyeling)
27
+ 11. [Performance notes](#performance-notes)
28
+ 12. [Implementation limits](#implementation-limits)
29
+
30
+ ## Quick start
31
+
32
+ Deriva has no runtime npm dependencies and no build step. From a source checkout, run the CLI entry point directly with Node.js 18 or newer:
33
+
34
+ ```sh
35
+ node bin/deriva.js --version
36
+ node bin/deriva.js examples/ancestor.pl
37
+ node bin/deriva.js facts.pl rules.pl
38
+ printf 'works(stdin, true) :- eq(ok, ok).\n' | node bin/deriva.js -
39
+ ```
40
+
41
+ You can also use npm's local package-bin runner from the checkout:
42
+
43
+ ```sh
44
+ npm exec --yes --package=. -- deriva --version
45
+ npm exec --yes --package=. -- deriva examples/ancestor.pl
46
+ ```
47
+
48
+ To make the `deriva` command available on your `PATH` while developing this checkout, prefer npm's package link instead of a manual symlink:
49
+
50
+ ```sh
51
+ npm link
52
+ deriva --version
53
+ ```
54
+
55
+ `npm install -g .` is another local-checkout option if you want npm to install the package globally instead of linking it. Avoid hand-written `/usr/local/bin` symlinks unless you really need one; npm already reads the `bin` entry in `package.json` and creates the correct executable shim.
56
+
57
+ ## Running deriva
58
+
59
+ The commands in this section use `deriva` for readability. In a source checkout where you have not run `npm link` or `npm install -g .`, replace `deriva` with `node bin/deriva.js`, or run the command through `npm exec --yes --package=. -- deriva`.
60
+
61
+ Show the package version:
62
+
63
+ ```sh
64
+ deriva --version
65
+ deriva -v
66
+ ```
67
+
68
+ Run a program and let deriva print derived binary facts:
69
+
70
+ ```sh
71
+ deriva examples/ancestor.pl
72
+ ```
73
+
74
+ Enable proof explanations when you want machine-readable provenance:
75
+
76
+ ```sh
77
+ deriva --proof examples/ancestor.pl
78
+ deriva -p examples/ancestor.pl
79
+ ```
80
+
81
+ deriva-readable explanations are opt-in proof output. Each `why/2` fact contains a nested abstract proof term, and a blank line separates consecutive explanations. Using deriva syntax for explanations keeps them in the same language as the answers themselves: they are readable by humans, parseable by deriva, easy to test, and can be transformed or explained further like any other deriva data. For example:
82
+
83
+ ```deriva
84
+ type(socrates, mortal).
85
+ why(
86
+ type(socrates, mortal),
87
+ proof(
88
+ goal(type(socrates, mortal)),
89
+ by(rule("socrates.pl", clause(4))),
90
+ bindings([binding("X", socrates)]),
91
+ uses([
92
+ proof(
93
+ goal(type(socrates, man)),
94
+ by(fact("socrates.pl", clause(3)))
95
+ )
96
+ ])
97
+ )
98
+ ).
99
+
100
+ ```
101
+
102
+ The explanation output can itself be read as deriva input; for example, another program can materialize `why/2` facts such as `why(type(socrates, mortal), Proof)`. `--proof` adds only these explanation facts; it does not change the answers found by the solver.
103
+
104
+ ### Explanation cookbook
105
+
106
+ Deriva answers can carry their own provenance when proof output is enabled.
107
+
108
+ Explain one derived fact:
109
+
110
+ ```sh
111
+ deriva --proof examples/socrates.pl
112
+ ```
113
+
114
+ The output contains the answer and a `why/2` fact. The proof term shows the source rule that produced the answer and the source fact used below it. Source references use `rule("file.pl", clause(N))` and `fact("file.pl", clause(N))`, where `N` is the 1-based clause number in that file.
115
+
116
+ Inspect variable bindings with a small policy program:
117
+
118
+ ```deriva
119
+ score(case1, 95).
120
+ threshold(90).
121
+
122
+ status(Case, accepted) :-
123
+ score(Case, Score),
124
+ threshold(T),
125
+ ge(Score, T).
126
+ ```
127
+
128
+ ```sh
129
+ deriva --proof policy.pl
130
+ ```
131
+
132
+ The explanation contains the instantiated answer and the variables that made the rule succeed:
133
+
134
+ ```deriva
135
+ status(case1, accepted).
136
+ why(
137
+ status(case1, accepted),
138
+ proof(
139
+ goal(status(case1, accepted)),
140
+ by(rule("policy.pl", clause(3))),
141
+ bindings([binding("Case", case1), binding("Score", 95), binding("T", 90)]),
142
+ uses([...])
143
+ )
144
+ ).
145
+ ```
146
+
147
+ Use the `uses([...])` list to follow the proof tree. In the policy example it contains one subproof for `score(case1, 95)`, one for `threshold(90)`, and one for the built-in comparison `ge(95, 90)`. Built-ins are shown as `builtin(Name, Arity)` because they do not come from source clauses.
148
+
149
+ Reuse explanations as data:
150
+
151
+ ```sh
152
+ deriva --proof examples/socrates.pl > socrates.why.pl
153
+ ```
154
+
155
+ The resulting file is ordinary Deriva syntax containing both answers and `why/2` proof facts.
156
+
157
+ Compose multiple files, stdin, and URLs:
158
+
159
+ ```sh
160
+ deriva facts.pl rules.pl
161
+ printf 'works(stdin, true) :- eq(ok, ok).\n' | deriva -
162
+ deriva https://example.test/program.pl
163
+ ```
164
+
165
+ ## Default output
166
+
167
+ Deriva programs write relation predicates directly:
168
+
169
+ ```deriva
170
+ parent(pat, jan).
171
+ parent(jan, emma).
172
+
173
+ ancestor(X, Y) :- parent(X, Y).
174
+ ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z).
175
+ ```
176
+
177
+ By default, deriva asks for new ground consequences of selected output predicates, suppresses duplicates, excludes source facts, sorts the result, and prints Prolog facts:
178
+
179
+ ```deriva
180
+ ancestor(jan, emma).
181
+ ancestor(pat, emma).
182
+ ancestor(pat, jan).
183
+ ```
184
+
185
+ This default is intentionally output-oriented. It is not a complete bottom-up saturation engine. Built-ins and proof search remain goal-directed; use `materialize/2` declarations and small output predicates when you want a specific relation, arity, or non-binary answer.
186
+
187
+ ### Focusing default output
188
+
189
+ Large examples often have internal helper predicates. Add `materialize/2` declarations to restrict default output to selected predicates:
190
+
191
+ ```deriva
192
+ materialize(answer, 2).
193
+
194
+ seed(case1).
195
+ helper(Case, score(95)) :- seed(Case).
196
+ answer(Case, accepted) :- helper(Case, score(95)).
197
+ ```
198
+
199
+ The default output is then:
200
+
201
+ ```deriva
202
+ answer(case1, accepted).
203
+ ```
204
+
205
+ `materialize/2` is a declaration, not a logical rule to prove. It affects which predicates the CLI prints, not the meaning of the rules themselves. Materialized output facts are not inserted back into the running program for later goals. Source facts are indexed and reused normally, and answers for automatically tabled recursive predicates are reused inside the same solver run.
206
+
207
+ ## Writing programs
208
+
209
+ A good deriva program normally has three layers:
210
+
211
+ 1. source facts;
212
+ 2. helper predicates for calculation or search;
213
+ 3. concise relation-style outputs, usually binary predicates such as `status(Case, Value)`, `reason(Case, Text)`, `ancestor(Person, Ancestor)`, or `cost(Path, Amount)`.
214
+
215
+ Example:
216
+
217
+ ```deriva
218
+ score(case1, 95).
219
+ threshold(90).
220
+
221
+ accepted(Case) :-
222
+ score(Case, Score),
223
+ threshold(Threshold),
224
+ ge(Score, Threshold).
225
+
226
+ status(Case, accepted) :- accepted(Case).
227
+ reason(Case, "score exceeds threshold") :- accepted(Case).
228
+ ```
229
+
230
+ When `status/2` and `reason/2` are derived, they appear in default output. If the program has many helper binary predicates, declare the intended output predicates:
231
+
232
+ ```deriva
233
+ materialize(status, 2).
234
+ materialize(reason, 2).
235
+ ```
236
+
237
+ ### Naming
238
+
239
+ Predicate names and atom constants use the same lexical form. Namespace-like names should be plain names such as `type`, `person_name`, or `odrl_permission`; colon names are not part of the language.
240
+
241
+ ### Embedding remains general
242
+
243
+ The CLI is output-oriented and uses `materialize/2` to decide what to print. Embedders can still use the JavaScript API and `Solver` directly for arbitrary goals and arities.
244
+
245
+ Add `-s` or `--stats` when you want lightweight solver counters on stderr without changing stdout:
246
+
247
+ ```sh
248
+ deriva -s examples/observability-log-correlation.pl
249
+ ```
250
+
251
+ Add `-w` or `--warnings` when you want non-fatal portability diagnostics, such as unstratified `not/1` dependencies, printed to stderr while normal answer output still goes to stdout:
252
+
253
+ ```sh
254
+ deriva --warnings test/conformance/warnings/negation/unstratified_mutual.pl
255
+ ```
256
+
257
+ The playground has matching `--stats` and `--proof` checkboxes, so browser runs can show the same counters or explanations like the CLI.
258
+
259
+
260
+ ### Builtins
261
+
262
+ Deriva builtins are registered by name and arity in small modules under [`src/builtins`](../src/builtins). This keeps the runtime portable to Node.js and the browser while giving each builtin family a clear boundary. Built-ins are called as ordinary Deriva predicates. See the [Deriva language reference](language-reference.md#9-standard-built-in-predicates) for the portable profile. The bundled implementation currently registers 80 name/arity entries across 78 predicate names:
263
+
264
+ | Family | Count | Built-ins |
265
+ |---|---:|---|
266
+ | Core and host | 4 | `eq/2`, `neq/2`, `local_time/1`, `difference/3` |
267
+ | Arithmetic, comparison, and generators | 29 | `neg/2`, `abs/2`, `sin/2`, `cos/2`, `tan/2`, `asin/2`, `acos/2`, `sqrt/2`, `floor/2`, `ceiling/2`, `trunc/2`, `rounded/2`, `exp/2`, `log/2`, `add/3`, `sub/3`, `mul/3`, `div/3`, `mod/3`, `min/3`, `max/3`, `pow/3`, `atan2/3`, `lt/2`, `gt/2`, `le/2`, `ge/2`, `between/3`, `smallest_divisor_from/3` |
268
+ | Strings and conversions | 15 | `str_concat/3`, `contains/2`, `matches/2`, `matches/3`, `not_matches/2`, `split/3`, `join/3`, `substring/4`, `replace/4`, `lowercase/2`, `uppercase/2`, `trim/2`, `number_string/2`, `atom_string/2`, `term_string/2` |
269
+ | Lists | 19 | `append/3`, `nth0/3`, `set_nth0/4`, `head/2`, `rest/2`, `last/2`, `take/3`, `drop/3`, `slice/4`, `member/2`, `select/3`, `not_member/2`, `reverse/2`, `length/2`, `sum_list/2`, `min_list/2`, `max_list/2`, `list_to_set/2`, `sort/2` |
270
+ | Aggregation | 5 | `findall/3`, `countall/2`, `sumall/3`, `aggregate_min/5`, `aggregate_max/5` |
271
+ | Control | 3 | `not/1`, `once/1`, `forall/2` |
272
+ | Context and terms | 5 | `holds/2`, `holds/3`, `functor/3`, `arg/3`, `compound_name_arguments/3` |
273
+ | **Total** | **80** | |
274
+
275
+
276
+ To add a builtin, create or extend a module with `register(registry)` and call `registry.add(name, arity, handler, options)`. The default registry is assembled in [`src/builtins/registry.js`](../src/builtins/registry.js). Builtins that are only safe for specific argument modes should provide a `ready` predicate and `fallbackWhenNotReady: true`, so user-defined clauses remain visible until the builtin is applicable.
277
+
278
+
279
+ ## Aggregation helpers
280
+
281
+ Deriva includes goal-directed aggregation helpers for finite searches:
282
+
283
+ ```deriva
284
+ countall(Goal, Count).
285
+ sumall(Value, Goal, Sum).
286
+ aggregate_min(Key, Template, Goal, Bestkey, Besttemplate).
287
+ aggregate_max(Key, Template, Goal, Bestkey, Besttemplate).
288
+ ```
289
+
290
+ Use `countall/2` for solution counts, `sumall/3` for numeric totals, and `aggregate_min/5` or `aggregate_max/5` when a search should keep only the best candidate instead of collecting and sorting every answer. The key can be a number, atom constant, string, compound term, or list; normal term ordering is used, so compound keys such as `[Cost, Path]` are useful for deterministic tie-breaking.
291
+
292
+ Example:
293
+
294
+ ```deriva
295
+ best_cycle(Cycle, Cost) :-
296
+ cities(Cities),
297
+ aggregate_min([Cost, Cycle], Cycle, candidate_cycle(Cities, Cycle, Cost), [Cost, Cycle], Cycle).
298
+ ```
299
+
300
+ ## Context data
301
+
302
+ Comma terms can be data as well as conjunctions. deriva provides two context utilities:
303
+
304
+ ```deriva
305
+ holds((name(alice, "Alice"), knows(alice, bob)), name(S, O)).
306
+ holds((ready, name(alice, "Alice"), route(alice, bob, 7)), Name, Args).
307
+ ```
308
+
309
+ Use `holds/2` when you want to match the member term directly, for example `name(S, O)`, `route(A, B, Cost)`, or `edge(A, arc(B, Cost))`. Use `holds/3` when you need the predicate name and argument list as data: it exposes any-arity member as atom constant `Name` plus a proper list `Args`, so zero-, binary-, and ternary members appear as `ready/0`, `name/2`, and `route/3` shapes without a special binary predicate. These utilities are useful for quoted context data, but they do not make those context members true in the ambient program. The [`context-schema-audit.pl`](../examples/context-schema-audit.pl) example shows a case that really needs `holds/3`: it audits heterogeneous message contexts by extracting every member as `Name + Args`, computing each arity, and checking the resulting shape against a schema without knowing the predicate names in advance.
310
+
311
+ `matches/3` can create context data from named regular-expression captures, which is useful when text logs or messages need to become facts before later rules inspect them with `holds/2` or `holds/3`. See [`observability-log-correlation.pl`](../examples/observability-log-correlation.pl) for a complete log-correlation example.
312
+
313
+
314
+ ## Example catalog
315
+
316
+ | Example | Description | Golden output |
317
+ | --- | --- | --- |
318
+ | [`abstract-interpretation.pl`](../examples/abstract-interpretation.pl) | Performs a sign-domain abstract interpretation and reports a possible divide-by-zero warning. | [`output/abstract-interpretation.pl`](../examples/output/abstract-interpretation.pl) |
319
+ | [`access-control-policy.pl`](../examples/access-control-policy.pl) | Evaluates role and condition based access decisions. | [`output/access-control-policy.pl`](../examples/output/access-control-policy.pl) |
320
+ | [`ackermann.pl`](../examples/ackermann.pl) | Computes Ackermann-style hyperoperation values. | [`output/ackermann.pl`](../examples/output/ackermann.pl) |
321
+ | [`age.pl`](../examples/age.pl) | Checks whether people meet age thresholds. | [`output/age.pl`](../examples/output/age.pl) |
322
+ | [`aliases-and-namespaces.pl`](../examples/aliases-and-namespaces.pl) | Shows ordinary predicate names for vocabulary aliases. | [`output/aliases-and-namespaces.pl`](../examples/output/aliases-and-namespaces.pl) |
323
+ | [`alignment-demo.pl`](../examples/alignment-demo.pl) | Rolls dataset concepts up through a small alignment taxonomy. | [`output/alignment-demo.pl`](../examples/output/alignment-demo.pl) |
324
+ | [`allen-interval-calculus.pl`](../examples/allen-interval-calculus.pl) | Classifies interval relations with integer time offsets. | [`output/allen-interval-calculus.pl`](../examples/output/allen-interval-calculus.pl) |
325
+ | [`ancestor.pl`](../examples/ancestor.pl) | Derives ancestors from parent facts. | [`output/ancestor.pl`](../examples/output/ancestor.pl) |
326
+ | [`animal.pl`](../examples/animal.pl) | Classifies animals from traits. | [`output/animal.pl`](../examples/output/animal.pl) |
327
+ | [`annotation.pl`](../examples/annotation.pl) | Derives facts from quoted annotation data. | [`output/annotation.pl`](../examples/output/annotation.pl) |
328
+ | [`auroracare.pl`](../examples/auroracare.pl) | Evaluates purpose-based medical data access scenarios. | [`output/auroracare.pl`](../examples/output/auroracare.pl) |
329
+ | [`backward.pl`](../examples/backward.pl) | Shows a backward-rule pattern as a goal-directed numeric rule. | [`output/backward.pl`](../examples/output/backward.pl) |
330
+ | [`basic-monadic.pl`](../examples/basic-monadic.pl) | Runs the basic monadic benchmark with explicit indexed edge joins instead of specialized search builtins. | [`output/basic-monadic.pl`](../examples/output/basic-monadic.pl) |
331
+ | [`bayes-diagnosis.pl`](../examples/bayes-diagnosis.pl) | Computes scaled Bayesian diagnosis posteriors. | [`output/bayes-diagnosis.pl`](../examples/output/bayes-diagnosis.pl) |
332
+ | [`bayes-therapy.pl`](../examples/bayes-therapy.pl) | Ranks therapies using Bayesian disease likelihoods. | [`output/bayes-therapy.pl`](../examples/output/bayes-therapy.pl) |
333
+ | [`beam-deflection.pl`](../examples/beam-deflection.pl) | Computes cantilever beam deflection. | [`output/beam-deflection.pl`](../examples/output/beam-deflection.pl) |
334
+ | [`binomial-vandermonde.pl`](../examples/binomial-vandermonde.pl) | Computes binomial coefficients and checks Vandermonde's identity. | [`output/binomial-vandermonde.pl`](../examples/output/binomial-vandermonde.pl) |
335
+ | [`blocks-world-planning.pl`](../examples/blocks-world-planning.pl) | Searches a finite blocks-world plan. | [`output/blocks-world-planning.pl`](../examples/output/blocks-world-planning.pl) |
336
+ | [`bmi.pl`](../examples/bmi.pl) | Normalizes BMI inputs and classifies weight. | [`output/bmi.pl`](../examples/output/bmi.pl) |
337
+ | [`braking-safety-worlds.pl`](../examples/braking-safety-worlds.pl) | Classifies braking safety under alternative worlds. | [`output/braking-safety-worlds.pl`](../examples/output/braking-safety-worlds.pl) |
338
+ | [`buck-converter-design.pl`](../examples/buck-converter-design.pl) | Checks buck-converter ripple design. | [`output/buck-converter-design.pl`](../examples/output/buck-converter-design.pl) |
339
+ | [`cache-performance.pl`](../examples/cache-performance.pl) | Summarizes cache latency performance. | [`output/cache-performance.pl`](../examples/output/cache-performance.pl) |
340
+ | [`canary-release.pl`](../examples/canary-release.pl) | Decides canary rollout or rollback. | [`output/canary-release.pl`](../examples/output/canary-release.pl) |
341
+ | [`cat-koko.pl`](../examples/cat-koko.pl) | Demonstrates named existential witnesses from a Cat Koko rule pattern. | [`output/cat-koko.pl`](../examples/output/cat-koko.pl) |
342
+ | [`catalan-convolution.pl`](../examples/catalan-convolution.pl) | Computes Catalan numbers by automatically tabled convolution. | [`output/catalan-convolution.pl`](../examples/output/catalan-convolution.pl) |
343
+ | [`cdcl-sat-solver.pl`](../examples/cdcl-sat-solver.pl) | Simulates one CDCL conflict-analysis step with a learned clause and backjumped model. | [`output/cdcl-sat-solver.pl`](../examples/output/cdcl-sat-solver.pl) |
344
+ | [`chart-parser.pl`](../examples/chart-parser.pl) | Parses small sentences with an automatically tabled chart parser. | [`output/chart-parser.pl`](../examples/output/chart-parser.pl) |
345
+ | [`clinical-trial-screening.pl`](../examples/clinical-trial-screening.pl) | Screens candidates for a trial. | [`output/clinical-trial-screening.pl`](../examples/output/clinical-trial-screening.pl) |
346
+ | [`collatz-1000.pl`](../examples/collatz-1000.pl) | Materializes Collatz trajectories for starts 1000 down to 1. | [`output/collatz-1000.pl`](../examples/output/collatz-1000.pl) |
347
+ | [`combinatorics-findall-sort.pl`](../examples/combinatorics-findall-sort.pl) | Collects and sorts finite combinations. | [`output/combinatorics-findall-sort.pl`](../examples/output/combinatorics-findall-sort.pl) |
348
+ | [`competitive-enzyme-kinetics.pl`](../examples/competitive-enzyme-kinetics.pl) | Computes inhibited enzyme reaction rates. | [`output/competitive-enzyme-kinetics.pl`](../examples/output/competitive-enzyme-kinetics.pl) |
349
+ | [`complex.pl`](../examples/complex.pl) | Performs arithmetic on complex pairs. | [`output/complex.pl`](../examples/output/complex.pl) |
350
+ | [`composition-of-injective-functions-is-injective.pl`](../examples/composition-of-injective-functions-is-injective.pl) | Encodes composition and injectivity of finite functions. | [`output/composition-of-injective-functions-is-injective.pl`](../examples/output/composition-of-injective-functions-is-injective.pl) |
351
+ | [`context-association.pl`](../examples/context-association.pl) | Associates named contexts with their contents. | [`output/context-association.pl`](../examples/output/context-association.pl) |
352
+ | [`context-schema-audit.pl`](../examples/context-schema-audit.pl) | Audits mixed-arity context members with `holds/3`. | [`output/context-schema-audit.pl`](../examples/output/context-schema-audit.pl) |
353
+ | [`continued-fraction-sqrt2.pl`](../examples/continued-fraction-sqrt2.pl) | Computes sqrt(2) continued-fraction convergents and Pell errors. | [`output/continued-fraction-sqrt2.pl`](../examples/output/continued-fraction-sqrt2.pl) |
354
+ | [`control-system.pl`](../examples/control-system.pl) | Evaluates control-system measurements and targets. | [`output/control-system.pl`](../examples/output/control-system.pl) |
355
+ | [`critical-path-schedule.pl`](../examples/critical-path-schedule.pl) | Computes earliest starts and the critical path for a project network. | [`output/critical-path-schedule.pl`](../examples/output/critical-path-schedule.pl) |
356
+ | [`cyclic-path.pl`](../examples/cyclic-path.pl) | Computes paths in a cyclic graph. | [`output/cyclic-path.pl`](../examples/output/cyclic-path.pl) |
357
+ | [`d3-group.pl`](../examples/d3-group.pl) | Enumerates subgroups of the D3 group. | [`output/d3-group.pl`](../examples/output/d3-group.pl) |
358
+ | [`dairy-energy-balance.pl`](../examples/dairy-energy-balance.pl) | Classifies dairy cow energy balance. | [`output/dairy-energy-balance.pl`](../examples/output/dairy-energy-balance.pl) |
359
+ | [`data-negotiation.pl`](../examples/data-negotiation.pl) | Chooses an accepted data-negotiation offer. | [`output/data-negotiation.pl`](../examples/output/data-negotiation.pl) |
360
+ | [`deep-taxonomy-10.pl`](../examples/deep-taxonomy-10.pl) | Stress-tests recursive taxonomy depth 10. | [`output/deep-taxonomy-10.pl`](../examples/output/deep-taxonomy-10.pl) |
361
+ | [`deep-taxonomy-100.pl`](../examples/deep-taxonomy-100.pl) | Stress-tests recursive taxonomy depth 100. | [`output/deep-taxonomy-100.pl`](../examples/output/deep-taxonomy-100.pl) |
362
+ | [`deep-taxonomy-1000.pl`](../examples/deep-taxonomy-1000.pl) | Stress-tests recursive taxonomy depth 1000. | [`output/deep-taxonomy-1000.pl`](../examples/output/deep-taxonomy-1000.pl) |
363
+ | [`deep-taxonomy-10000.pl`](../examples/deep-taxonomy-10000.pl) | Stress-tests recursive taxonomy depth 10000. | [`output/deep-taxonomy-10000.pl`](../examples/output/deep-taxonomy-10000.pl) |
364
+ | [`deep-taxonomy-100000.pl`](../examples/deep-taxonomy-100000.pl) | Stress-tests recursive taxonomy depth 100000. | [`output/deep-taxonomy-100000.pl`](../examples/output/deep-taxonomy-100000.pl) |
365
+ | [`delfour.pl`](../examples/delfour.pl) | Derives shopping and authorization recommendations. | [`output/delfour.pl`](../examples/output/delfour.pl) |
366
+ | [`deontic-logic.pl`](../examples/deontic-logic.pl) | Reports obligations, prohibitions, and violations. | [`output/deontic-logic.pl`](../examples/output/deontic-logic.pl) |
367
+ | [`derived-backward-rule.pl`](../examples/derived-backward-rule.pl) | Derives an inverse-property backward rule from rule data. | [`output/derived-backward-rule.pl`](../examples/output/derived-backward-rule.pl) |
368
+ | [`derived-rule.pl`](../examples/derived-rule.pl) | Derives conclusions from rule data. | [`output/derived-rule.pl`](../examples/output/derived-rule.pl) |
369
+ | [`diamond-property.pl`](../examples/diamond-property.pl) | Checks the diamond property of a relation. | [`output/diamond-property.pl`](../examples/output/diamond-property.pl) |
370
+ | [`dijkstra-findall-sort.pl`](../examples/dijkstra-findall-sort.pl) | Finds shortest paths using collected candidates. | [`output/dijkstra-findall-sort.pl`](../examples/output/dijkstra-findall-sort.pl) |
371
+ | [`dijkstra-risk-path.pl`](../examples/dijkstra-risk-path.pl) | Ranks routes by cost and trust. | [`output/dijkstra-risk-path.pl`](../examples/output/dijkstra-risk-path.pl) |
372
+ | [`dijkstra.pl`](../examples/dijkstra.pl) | Enumerates weighted simple paths. | [`output/dijkstra.pl`](../examples/output/dijkstra.pl) |
373
+ | [`dining-philosophers.pl`](../examples/dining-philosophers.pl) | Simulates Chandy-Misra fork exchanges. | [`output/dining-philosophers.pl`](../examples/output/dining-philosophers.pl) |
374
+ | [`dog.pl`](../examples/dog.pl) | Counts dogs and derives when a license is required. | [`output/dog.pl`](../examples/output/dog.pl) |
375
+ | [`dpv-odrl-purpose-mapping.pl`](../examples/dpv-odrl-purpose-mapping.pl) | Maps a DPV process into an ODRL permission view. | [`output/dpv-odrl-purpose-mapping.pl`](../examples/output/dpv-odrl-purpose-mapping.pl) |
376
+ | [`drone-corridor-planner.pl`](../examples/drone-corridor-planner.pl) | Plans bounded drone corridor routes. | [`output/drone-corridor-planner.pl`](../examples/output/drone-corridor-planner.pl) |
377
+ | [`easter-computus.pl`](../examples/easter-computus.pl) | Computes Gregorian Easter dates. | [`output/easter-computus.pl`](../examples/output/easter-computus.pl) |
378
+ | [`electrical-rc-filter.pl`](../examples/electrical-rc-filter.pl) | Sizes an RC low-pass filter. | [`output/electrical-rc-filter.pl`](../examples/output/electrical-rc-filter.pl) |
379
+ | [`equality-saturation.pl`](../examples/equality-saturation.pl) | Performs bounded equality saturation and extracts the cheapest equivalent expression. | [`output/equality-saturation.pl`](../examples/output/equality-saturation.pl) |
380
+ | [`epidemic-policy.pl`](../examples/epidemic-policy.pl) | Chooses policies from risk and social cost. | [`output/epidemic-policy.pl`](../examples/output/epidemic-policy.pl) |
381
+ | [`equivalence-classes-overlap-implies-same-class.pl`](../examples/equivalence-classes-overlap-implies-same-class.pl) | Packages the shared-member proof pattern for equivalence classes. | [`output/equivalence-classes-overlap-implies-same-class.pl`](../examples/output/equivalence-classes-overlap-implies-same-class.pl) |
382
+ | [`eulerian-path.pl`](../examples/eulerian-path.pl) | Finds an Eulerian path using each edge once. | [`output/eulerian-path.pl`](../examples/output/eulerian-path.pl) |
383
+ | [`ev-range-worlds.pl`](../examples/ev-range-worlds.pl) | Estimates electric-vehicle trip feasibility. | [`output/ev-range-worlds.pl`](../examples/output/ev-range-worlds.pl) |
384
+ | [`existential-rule.pl`](../examples/existential-rule.pl) | Represents existential-style witnesses with explicit Herbrand terms. | [`output/existential-rule.pl`](../examples/output/existential-rule.pl) |
385
+ | [`exoplanet-validation-worlds.pl`](../examples/exoplanet-validation-worlds.pl) | Validates exoplanet candidates across worlds. | [`output/exoplanet-validation-worlds.pl`](../examples/output/exoplanet-validation-worlds.pl) |
386
+ | [`expression-eval.pl`](../examples/expression-eval.pl) | Evaluates a small arithmetic expression tree. | [`output/expression-eval.pl`](../examples/output/expression-eval.pl) |
387
+ | [`family-cousins.pl`](../examples/family-cousins.pl) | Derives cousin and family labels. | [`output/family-cousins.pl`](../examples/output/family-cousins.pl) |
388
+ | [`fastpow.pl`](../examples/fastpow.pl) | Computes powers by repeated squaring. | [`output/fastpow.pl`](../examples/output/fastpow.pl) |
389
+ | [`fft8-numeric.pl`](../examples/fft8-numeric.pl) | Runs an 8-point FFT over complex pairs. | [`output/fft8-numeric.pl`](../examples/output/fft8-numeric.pl) |
390
+ | [`fibonacci.pl`](../examples/fibonacci.pl) | Computes large Fibonacci numbers by fast doubling. | [`output/fibonacci.pl`](../examples/output/fibonacci.pl) |
391
+ | [`field-nitrogen-balance.pl`](../examples/field-nitrogen-balance.pl) | Classifies field nitrogen balance. | [`output/field-nitrogen-balance.pl`](../examples/output/field-nitrogen-balance.pl) |
392
+ | [`flandor.pl`](../examples/flandor.pl) | Derives a Flanders macro-insight authorization and retooling package. | [`output/flandor.pl`](../examples/output/flandor.pl) |
393
+ | [`floating-point.pl`](../examples/floating-point.pl) | Exercises floating-point arithmetic and comparisons. | [`output/floating-point.pl`](../examples/output/floating-point.pl) |
394
+ | [`four-color-map.pl`](../examples/four-color-map.pl) | Checks a four-colour map assignment. | [`output/four-color-map.pl`](../examples/output/four-color-map.pl) |
395
+ | [`fundamental-theorem-arithmetic.pl`](../examples/fundamental-theorem-arithmetic.pl) | Factors integers and reconstructs products. | [`output/fundamental-theorem-arithmetic.pl`](../examples/output/fundamental-theorem-arithmetic.pl) |
396
+ | [`gd-step-certified.pl`](../examples/gd-step-certified.pl) | Certifies a gradient-descent step. | [`output/gd-step-certified.pl`](../examples/output/gd-step-certified.pl) |
397
+ | [`gdpr-compliance.pl`](../examples/gdpr-compliance.pl) | Checks GDPR-style processing compliance. | [`output/gdpr-compliance.pl`](../examples/output/gdpr-compliance.pl) |
398
+ | [`good-cobbler.pl`](../examples/good-cobbler.pl) | Demonstrates term-level structure with a good-cobbler statement. | [`output/good-cobbler.pl`](../examples/output/good-cobbler.pl) |
399
+ | [`gps.pl`](../examples/gps.pl) | Finds and verifies route paths. | [`output/gps.pl`](../examples/output/gps.pl) |
400
+ | [`graph-reachability.pl`](../examples/graph-reachability.pl) | Derives reachable nodes in a graph. | [`output/graph-reachability.pl`](../examples/output/graph-reachability.pl) |
401
+ | [`graph.pl`](../examples/graph.pl) | Derives transitive paths over French-city road links while showing the productive recursive rule order. | [`output/graph.pl`](../examples/output/graph.pl) |
402
+ | [`gray-code-counter.pl`](../examples/gray-code-counter.pl) | Generates Gray-code counter states. | [`output/gray-code-counter.pl`](../examples/output/gray-code-counter.pl) |
403
+ | [`greatest-lower-bound-uniqueness.pl`](../examples/greatest-lower-bound-uniqueness.pl) | Shows uniqueness of greatest lower bounds in a finite order instance. | [`output/greatest-lower-bound-uniqueness.pl`](../examples/output/greatest-lower-bound-uniqueness.pl) |
404
+ | [`group-inverse-uniqueness.pl`](../examples/group-inverse-uniqueness.pl) | Shows uniqueness of inverses in a finite group instance. | [`output/group-inverse-uniqueness.pl`](../examples/output/group-inverse-uniqueness.pl) |
405
+ | [`hamiltonian-path.pl`](../examples/hamiltonian-path.pl) | Finds a Hamiltonian path. | [`output/hamiltonian-path.pl`](../examples/output/hamiltonian-path.pl) |
406
+ | [`hamming-code.pl`](../examples/hamming-code.pl) | Corrects a single-bit Hamming word. | [`output/hamming-code.pl`](../examples/output/hamming-code.pl) |
407
+ | [`hanoi.pl`](../examples/hanoi.pl) | Derives the Towers of Hanoi moves. | [`output/hanoi.pl`](../examples/output/hanoi.pl) |
408
+ | [`heat-loss.pl`](../examples/heat-loss.pl) | Computes conductive heat loss. | [`output/heat-loss.pl`](../examples/output/heat-loss.pl) |
409
+ | [`herbrand-witnesses.pl`](../examples/herbrand-witnesses.pl) | Represents existential-style consequences as stable Herbrand witness terms. | [`output/herbrand-witnesses.pl`](../examples/output/herbrand-witnesses.pl) |
410
+ | [`heron-theorem.pl`](../examples/heron-theorem.pl) | Computes triangle area by Heron's theorem. | [`output/heron-theorem.pl`](../examples/output/heron-theorem.pl) |
411
+ | [`ideal-gas-law.pl`](../examples/ideal-gas-law.pl) | Applies the ideal gas law. | [`output/ideal-gas-law.pl`](../examples/output/ideal-gas-law.pl) |
412
+ | [`illegitimate-reasoning.pl`](../examples/illegitimate-reasoning.pl) | Detects suspect reasoning patterns. | [`output/illegitimate-reasoning.pl`](../examples/output/illegitimate-reasoning.pl) |
413
+ | [`integer-partitions.pl`](../examples/integer-partitions.pl) | Counts integer partitions with automatic tabling. | [`output/integer-partitions.pl`](../examples/output/integer-partitions.pl) |
414
+ | [`intuitionistic-logic-kripke.pl`](../examples/intuitionistic-logic-kripke.pl) | Emulates intuitionistic Kripke forcing and constructive implication. | [`output/intuitionistic-logic-kripke.pl`](../examples/output/intuitionistic-logic-kripke.pl) |
415
+ | [`job-shop-scheduling.pl`](../examples/job-shop-scheduling.pl) | Searches a small job-shop schedule and minimizes makespan. | [`output/job-shop-scheduling.pl`](../examples/output/job-shop-scheduling.pl) |
416
+ | [`knapsack-optimization.pl`](../examples/knapsack-optimization.pl) | Optimizes a finite 0/1 knapsack pack with aggregation. | [`output/knapsack-optimization.pl`](../examples/output/knapsack-optimization.pl) |
417
+ | [`knuth-bendix-completion.pl`](../examples/knuth-bendix-completion.pl) | Checks bounded Knuth-Bendix-style critical pairs for joinability. | [`output/knuth-bendix-completion.pl`](../examples/output/knuth-bendix-completion.pl) |
418
+ | [`knowledge-engineering-alignment-flow.pl`](../examples/knowledge-engineering-alignment-flow.pl) | Specializes reusable alignment rules into a target-shaped flow view. | [`output/knowledge-engineering-alignment-flow.pl`](../examples/output/knowledge-engineering-alignment-flow.pl) |
419
+ | [`language.pl`](../examples/language.pl) | Shows the modern Deriva surface syntax in one compact recursive graph example. | [`output/language.pl`](../examples/output/language.pl) |
420
+ | [`law-of-cosines.pl`](../examples/law-of-cosines.pl) | Computes a triangle side by cosine law. | [`output/law-of-cosines.pl`](../examples/output/law-of-cosines.pl) |
421
+ | [`least-squares-regression.pl`](../examples/least-squares-regression.pl) | Fits a least-squares regression line. | [`output/least-squares-regression.pl`](../examples/output/least-squares-regression.pl) |
422
+ | [`linear-logic-resources.pl`](../examples/linear-logic-resources.pl) | Emulates linear logic resource consumption with explicit state threading. | [`output/linear-logic-resources.pl`](../examples/output/linear-logic-resources.pl) |
423
+ | [`list-collection.pl`](../examples/list-collection.pl) | Demonstrates list and collection built-ins. | [`output/list-collection.pl`](../examples/output/list-collection.pl) |
424
+ | [`lldm.pl`](../examples/lldm.pl) | Calculates leg-length discrepancy measurements. | [`output/lldm.pl`](../examples/output/lldm.pl) |
425
+ | [`manufacturing-quality-control.pl`](../examples/manufacturing-quality-control.pl) | Evaluates process capability and quality. | [`output/manufacturing-quality-control.pl`](../examples/output/manufacturing-quality-control.pl) |
426
+ | [`markov-logic-network.pl`](../examples/markov-logic-network.pl) | Scores finite possible worlds with weighted soft formulas in a Markov Logic Network style. | [`output/markov-logic-network.pl`](../examples/output/markov-logic-network.pl) |
427
+ | [`map-four-color-search.pl`](../examples/map-four-color-search.pl) | Searches for a valid four-colouring of the EU neighbour graph. | [`output/map-four-color-search.pl`](../examples/output/map-four-color-search.pl) |
428
+ | [`matrix-chain-order.pl`](../examples/matrix-chain-order.pl) | Finds an optimal matrix-chain multiplication order. | [`output/matrix-chain-order.pl`](../examples/output/matrix-chain-order.pl) |
429
+ | [`matrix-noncommutativity.pl`](../examples/matrix-noncommutativity.pl) | Multiplies 2x2 matrices and shows non-commutativity. | [`output/matrix-noncommutativity.pl`](../examples/output/matrix-noncommutativity.pl) |
430
+ | [`microgrid-dispatch.pl`](../examples/microgrid-dispatch.pl) | Plans microgrid dispatch and reserve. | [`output/microgrid-dispatch.pl`](../examples/output/microgrid-dispatch.pl) |
431
+ | [`missionaries-cannibals.pl`](../examples/missionaries-cannibals.pl) | Solves the missionaries-and-cannibals river crossing puzzle. | [`output/missionaries-cannibals.pl`](../examples/output/missionaries-cannibals.pl) |
432
+ | [`modal-logic-kripke.pl`](../examples/modal-logic-kripke.pl) | Emulates modal box and diamond operators over a finite Kripke frame. | [`output/modal-logic-kripke.pl`](../examples/output/modal-logic-kripke.pl) |
433
+ | [`modular-exponentiation.pl`](../examples/modular-exponentiation.pl) | Computes modular powers by repeated squaring. | [`output/modular-exponentiation.pl`](../examples/output/modular-exponentiation.pl) |
434
+ | [`monkey-bananas.pl`](../examples/monkey-bananas.pl) | Solves the monkey-and-bananas puzzle. | [`output/monkey-bananas.pl`](../examples/output/monkey-bananas.pl) |
435
+ | [`n-queens-8.pl`](../examples/n-queens-8.pl) | Solves the 8-queens search problem with diagonal constraints. | [`output/n-queens-8.pl`](../examples/output/n-queens-8.pl) |
436
+ | [`network-sla.pl`](../examples/network-sla.pl) | Checks network path SLA compliance. | [`output/network-sla.pl`](../examples/output/network-sla.pl) |
437
+ | [`newton-raphson.pl`](../examples/newton-raphson.pl) | Finds roots by Newton-Raphson iteration. | [`output/newton-raphson.pl`](../examples/output/newton-raphson.pl) |
438
+ | [`nixon-diamond.pl`](../examples/nixon-diamond.pl) | Reports the classic Nixon-diamond conflict. | [`output/nixon-diamond.pl`](../examples/output/nixon-diamond.pl) |
439
+ | [`observability-log-correlation.pl`](../examples/observability-log-correlation.pl) | Extracts named regex captures from observability logs and correlates events by trace id. | [`output/observability-log-correlation.pl`](../examples/output/observability-log-correlation.pl) |
440
+ | [`odrl-dpv-fpv-trust-flow.pl`](../examples/odrl-dpv-fpv-trust-flow.pl) | Decides ODRL/DPV data flows with local FPV trust gates. | [`output/odrl-dpv-fpv-trust-flow.pl`](../examples/output/odrl-dpv-fpv-trust-flow.pl) |
441
+ | [`odrl-dpv-healthcare-risk-ranked.pl`](../examples/odrl-dpv-healthcare-risk-ranked.pl) | Ranks healthcare policy risks and mitigations. | [`output/odrl-dpv-healthcare-risk-ranked.pl`](../examples/output/odrl-dpv-healthcare-risk-ranked.pl) |
442
+ | [`odrl-dpv-risk-ranked.pl`](../examples/odrl-dpv-risk-ranked.pl) | Ranks data-policy risks and mitigations. | [`output/odrl-dpv-risk-ranked.pl`](../examples/output/odrl-dpv-risk-ranked.pl) |
443
+ | [`orbital-transfer-design.pl`](../examples/orbital-transfer-design.pl) | Designs a Hohmann orbital transfer. | [`output/orbital-transfer-design.pl`](../examples/output/orbital-transfer-design.pl) |
444
+ | [`path-discovery.pl`](../examples/path-discovery.pl) | Discovers bounded air-route paths. | [`output/path-discovery.pl`](../examples/output/path-discovery.pl) |
445
+ | [`partial-evaluator.pl`](../examples/partial-evaluator.pl) | Specializes tiny expression programs by folding static inputs into residual code. | [`output/partial-evaluator.pl`](../examples/output/partial-evaluator.pl) |
446
+ | [`peano-arithmetic.pl`](../examples/peano-arithmetic.pl) | Computes Peano addition, multiplication, and factorial. | [`output/peano-arithmetic.pl`](../examples/output/peano-arithmetic.pl) |
447
+ | [`peano-calculus.pl`](../examples/peano-calculus.pl) | Computes Peano addition, multiplication, and factorial. | [`output/peano-calculus.pl`](../examples/output/peano-calculus.pl) |
448
+ | [`peasant.pl`](../examples/peasant.pl) | Performs peasant multiplication and exponentiation. | [`output/peasant.pl`](../examples/output/peasant.pl) |
449
+ | [`pell-equation.pl`](../examples/pell-equation.pl) | Generates Pell-equation solutions by recurrence. | [`output/pell-equation.pl`](../examples/output/pell-equation.pl) |
450
+ | [`pendulum-period.pl`](../examples/pendulum-period.pl) | Computes simple pendulum periods. | [`output/pendulum-period.pl`](../examples/output/pendulum-period.pl) |
451
+ | [`pointer-analysis.pl`](../examples/pointer-analysis.pl) | Computes Andersen-style inclusion-based points-to facts over address, assign, store, and load constraints. | [`output/pointer-analysis.pl`](../examples/output/pointer-analysis.pl) |
452
+ | [`polynomial.pl`](../examples/polynomial.pl) | Finds complex integer polynomial roots. | [`output/polynomial.pl`](../examples/output/polynomial.pl) |
453
+ | [`prime-range.pl`](../examples/prime-range.pl) | Finds primes in a finite range and computes a totient value. | [`output/prime-range.pl`](../examples/output/prime-range.pl) |
454
+ | [`proof-contrapositive.pl`](../examples/proof-contrapositive.pl) | Models proof by contrapositive. | [`output/proof-contrapositive.pl`](../examples/output/proof-contrapositive.pl) |
455
+ | [`quadratic-formula.pl`](../examples/quadratic-formula.pl) | Solves sample quadratic equations. | [`output/quadratic-formula.pl`](../examples/output/quadratic-formula.pl) |
456
+ | [`radioactive-decay.pl`](../examples/radioactive-decay.pl) | Computes radioactive decay over time. | [`output/radioactive-decay.pl`](../examples/output/radioactive-decay.pl) |
457
+ | [`register-allocation.pl`](../examples/register-allocation.pl) | Allocates temporaries to two registers with spilling by bounded graph-coloring search. | [`output/register-allocation.pl`](../examples/output/register-allocation.pl) |
458
+ | [`reusable-builtins.pl`](../examples/reusable-builtins.pl) | Tours reusable numeric, list, and string builtins. | [`output/reusable-builtins.pl`](../examples/output/reusable-builtins.pl) |
459
+ | [`riemann-hypothesis.pl`](../examples/riemann-hypothesis.pl) | Checks a finite catalogue of non-trivial zeta zeros against the Riemann-hypothesis condition. | [`output/riemann-hypothesis.pl`](../examples/output/riemann-hypothesis.pl) |
460
+ | [`route-planning.pl`](../examples/route-planning.pl) | Finds routes and records them as explicit route terms. | [`output/route-planning.pl`](../examples/output/route-planning.pl) |
461
+ | [`sat-solver-dpll.pl`](../examples/sat-solver-dpll.pl) | Searches a CNF formula with DPLL-style recursive decisions and early contradiction pruning. | [`output/sat-solver-dpll.pl`](../examples/output/sat-solver-dpll.pl) |
462
+ | [`security-incident-correlation.pl`](../examples/security-incident-correlation.pl) | Correlates security incidents across signals. | [`output/security-incident-correlation.pl`](../examples/output/security-incident-correlation.pl) |
463
+ | [`send-more-money.pl`](../examples/send-more-money.pl) | Solves the SEND + MORE = MONEY cryptarithm. | [`output/send-more-money.pl`](../examples/output/send-more-money.pl) |
464
+ | [`service-impact.pl`](../examples/service-impact.pl) | Analyzes service impact over cyclic dependencies. | [`output/service-impact.pl`](../examples/output/service-impact.pl) |
465
+ | [`shoelace-polygon-area.pl`](../examples/shoelace-polygon-area.pl) | Computes polygon area with a recursive shoelace calculation. | [`output/shoelace-polygon-area.pl`](../examples/output/shoelace-polygon-area.pl) |
466
+ | [`sieve.pl`](../examples/sieve.pl) | Enumerates primes with a sieve-style program. | [`output/sieve.pl`](../examples/output/sieve.pl) |
467
+ | [`skolem-functions.pl`](../examples/skolem-functions.pl) | Generates deterministic functional terms. | [`output/skolem-functions.pl`](../examples/output/skolem-functions.pl) |
468
+ | [`socket-age.pl`](../examples/socket-age.pl) | Shows socket-declared age reasoning inputs and plugs. | [`output/socket-age.pl`](../examples/output/socket-age.pl) |
469
+ | [`socket-family.pl`](../examples/socket-family.pl) | Shows socket-declared family-source inputs and ancestry rules. | [`output/socket-family.pl`](../examples/output/socket-family.pl) |
470
+ | [`socrates.pl`](../examples/socrates.pl) | Derives that Socrates is mortal. | [`output/socrates.pl`](../examples/output/socrates.pl) |
471
+ | [`stable-marriage.pl`](../examples/stable-marriage.pl) | Finds stable matchings by excluding blocking pairs. | [`output/stable-marriage.pl`](../examples/output/stable-marriage.pl) |
472
+ | [`statistics-summary.pl`](../examples/statistics-summary.pl) | Computes population statistics for a sample. | [`output/statistics-summary.pl`](../examples/output/statistics-summary.pl) |
473
+ | [`stirling-bell-numbers.pl`](../examples/stirling-bell-numbers.pl) | Computes Stirling numbers and Bell numbers. | [`output/stirling-bell-numbers.pl`](../examples/output/stirling-bell-numbers.pl) |
474
+ | [`sudoku-4x4.pl`](../examples/sudoku-4x4.pl) | Solves a compact 4x4 Sudoku by finite constraint search. | [`output/sudoku-4x4.pl`](../examples/output/sudoku-4x4.pl) |
475
+ | [`superdense-coding.pl`](../examples/superdense-coding.pl) | Models superdense-coding bit transmission. | [`output/superdense-coding.pl`](../examples/output/superdense-coding.pl) |
476
+ | [`symbolic-derivative.pl`](../examples/symbolic-derivative.pl) | Symbolically differentiates explicit expression terms, including products and logs. | [`output/symbolic-derivative.pl`](../examples/output/symbolic-derivative.pl) |
477
+ | [`term-tools.pl`](../examples/term-tools.pl) | Inspects, builds, renders, and validates terms with reusable term/control builtins. | [`output/term-tools.pl`](../examples/output/term-tools.pl) |
478
+ | [`totient-summatory.pl`](../examples/totient-summatory.pl) | Computes Euler totients and their summatory function. | [`output/totient-summatory.pl`](../examples/output/totient-summatory.pl) |
479
+ | [`trust-flow-provenance-threshold.pl`](../examples/trust-flow-provenance-threshold.pl) | Classifies message trust from provenance confidence scores. | [`output/trust-flow-provenance-threshold.pl`](../examples/output/trust-flow-provenance-threshold.pl) |
480
+ | [`truth-maintenance-system.pl`](../examples/truth-maintenance-system.pl) | Tracks assumptions, justifications, supported beliefs, and inconsistent environments in a tiny TMS. | [`output/truth-maintenance-system.pl`](../examples/output/truth-maintenance-system.pl) |
481
+ | [`type-inference.pl`](../examples/type-inference.pl) | Infers/checks types for a tiny lambda language using logic unification over expression syntax trees. | [`output/type-inference.pl`](../examples/output/type-inference.pl) |
482
+ | [`turing.pl`](../examples/turing.pl) | Simulates a binary-increment Turing machine. | [`output/turing.pl`](../examples/output/turing.pl) |
483
+ | [`vector-similarity.pl`](../examples/vector-similarity.pl) | Computes dot product, norm, and cosine similarity. | [`output/vector-similarity.pl`](../examples/output/vector-similarity.pl) |
484
+ | [`vulnerability-impact.pl`](../examples/vulnerability-impact.pl) | Analyzes vulnerable transitive dependencies and urgent patch impact. | [`output/vulnerability-impact.pl`](../examples/output/vulnerability-impact.pl) |
485
+ | [`web-names.pl`](../examples/web-names.pl) | Uses quoted IRI-shaped atoms as first-class web names and joins them across a tiny graph. | [`output/web-names.pl`](../examples/output/web-names.pl) |
486
+ | [`weighted-interval-scheduling.pl`](../examples/weighted-interval-scheduling.pl) | Selects the best non-overlapping weighted intervals with automatic tabling. | [`output/weighted-interval-scheduling.pl`](../examples/output/weighted-interval-scheduling.pl) |
487
+ | [`witch.pl`](../examples/witch.pl) | Derives the classic “burn the witch” rule chain. | [`output/witch.pl`](../examples/output/witch.pl) |
488
+ | [`wolf-goat-cabbage.pl`](../examples/wolf-goat-cabbage.pl) | Solves the wolf-goat-cabbage river crossing. | [`output/wolf-goat-cabbage.pl`](../examples/output/wolf-goat-cabbage.pl) |
489
+ | [`workplace-compliance.pl`](../examples/workplace-compliance.pl) | Classifies workplace compliance from explicit action facts. | [`output/workplace-compliance.pl`](../examples/output/workplace-compliance.pl) |
490
+ | [`zebra.pl`](../examples/zebra.pl) | Solves the zebra logic puzzle. | [`output/zebra.pl`](../examples/output/zebra.pl) |
491
+
492
+ ## Golden outputs, tests, and conformance
493
+
494
+ Golden answer outputs live in [`examples/output`](../examples/output). `npm run test:deriva` covers the deriva integration check, conformance cases, regression checks, runnable examples, and proof-output examples. A curated proof-output suite for `.pl` examples lives in [`examples/proof`](../examples/proof). Example tests pin `local_time/1` to `2026-05-30` so date-dependent examples stay deterministic. Regenerate them after an intentional output or explanation change:
495
+
496
+ ```sh
497
+ for f in examples/*.pl; do
498
+ [ -e "$f" ] || continue
499
+ b=$(basename "$f")
500
+ DERIVA_LOCAL_TIME=2026-05-30 deriva "$f" > "examples/output/$b"
501
+ done
502
+
503
+ for f in examples/proof/*.pl; do
504
+ b=$(basename "$f")
505
+ DERIVA_LOCAL_TIME=2026-05-30 deriva --proof "examples/$b" > "examples/proof/$b"
506
+ done
507
+ ```
508
+
509
+ Run the full deriva suite:
510
+
511
+ ```sh
512
+ npm run test:deriva
513
+ ```
514
+
515
+ The deriva corpus runner runs in this order: Conformance, Regression/API/White-box, Examples. Each section prints its own subtotal, followed by a suite-specific grand total. The suite checks the conformance cases derived from the language reference, supplemental regression/API/white-box checks, and every runnable example against its golden output.
516
+
517
+ Run only one internal suite when you are iterating:
518
+
519
+ ```sh
520
+ node test/run-conformance.mjs
521
+ node test/run-regression.mjs
522
+ node test/run-examples.mjs
523
+ ```
524
+
525
+ Summarize the conformance corpus by category:
526
+
527
+ ```sh
528
+ node test/run-conformance-report.mjs
529
+ ```
530
+
531
+ Release preparation runs the same report and writes [`conformance-report.md`](../conformance-report.md), so each published package carries a current conformance summary.
532
+
533
+ The conformance suite lives in [`test/conformance/`](../test/conformance/) as a file-based deriva corpus. Positive cases pair `cases/<name>.pl` with exact expected stdout under `expected/<name>.pl`; negative cases pair `errors/<name>.pl` with exact expected error text under `expected-errors/<name>.txt`; warning cases pair `warnings/<name>.pl` with exact `--warnings` stdout and stderr files under `expected-warnings/`; proof cases pair `proofs/<name>.pl` with exact `--proof` output under `expected-proofs/`. Cases may be grouped in category directories such as `arithmetic/`, `strings/`, `lists/`, `terms/`, `atoms/`, `variables/`, `negation/`, and `syntax/`, so another implementation can reuse the same corpus as an executable language contract. The suite covers the standard language surface from the language reference, including reusable built-ins, standard errors, standard warnings, and the machine-readable `why/2` proof-output contract. The regression suite lives in [`test/run-regression.mjs`](../test/run-regression.mjs) and covers CLI regressions, the public JavaScript API, and white-box invariants for parser, unification, and indexing behavior.
534
+
535
+ ## Development and release
536
+
537
+ Common commands:
538
+
539
+ ```sh
540
+ npm run test:deriva # alias for npm test
541
+ npm test # full conformance, regression/API/white-box, examples, and proof examples
542
+ node test/run-conformance-report.mjs # conformance coverage summary by category
543
+ node test/run-conformance.mjs
544
+ node test/run-regression.mjs
545
+ node test/run-examples.mjs
546
+ deriva --help
547
+ ```
548
+
549
+ Useful profiling smoke test:
550
+
551
+ ```sh
552
+ deriva -s examples/observability-log-correlation.pl > /dev/null
553
+ ```
554
+
555
+ For a release:
556
+
557
+ 1. update `VERSION`;
558
+ 2. update `README.md` and the language reference;
559
+ 3. regenerate golden outputs if behavior changed;
560
+ 4. run `npm run test:deriva`;
561
+ 5. run `node test/run-conformance-report.mjs conformance-report.md`;
562
+ 6. publish the repository with the browser playground assets if publishing the playground. The playground includes controls equivalent to CLI `--stats` and `--proof`.
563
+
564
+ ## Relationship to Eyeling
565
+
566
+ [Eyeling](https://github.com/eyereasoner/eyeling) and deriva share the same goal of small, inspectable rule-based reasoning in JavaScript, but they make different language and implementation trade-offs.
567
+
568
+ Eyeling is the RDF/Notation3 member of the family. It reads N3-style triples, quoted formulas, forward rules written with `=>`, backward rules written with `<=`, RDF terms, RDF-JS data, and RDF-oriented streams. That makes it the better fit when data interchange with RDF/N3 tools is the main requirement.
569
+
570
+ Deriva is the compact Prolog-style member of the family. It uses ordinary predicate syntax such as `parent(alice, bob).` and `ancestor(X, Z) :- parent(X, Y), ancestor(Y, Z).` The core remains close to the Prolog tradition while deliberately staying smaller and more explicit than ISO Prolog. It is a good fit when the problem is naturally relational, goal-directed, finite, and does not need RDF graph interchange.
571
+
572
+ A useful rule of thumb:
573
+
574
+ | Use case | Prefer | Why |
575
+ | --- | --- | --- |
576
+ | RDF/N3 data, triples, prefixes, graph terms, RDF-JS, RDF message streams | Eyeling | The surface language and APIs are RDF/Notation3-native. |
577
+ | Compact relational rules over ordinary terms, lists, arithmetic, and finite search | deriva | The syntax is shorter for non-RDF relation programs and output is ordinary facts. |
578
+ | Human-auditable derivations | Either | Both can emit proof explanations when requested. |
579
+ | Large generated Horn-clause workloads | deriva | The engine specializes in predicate/arity indexing, scalar argument indexes, fast fact paths, and materialized output goals. |
580
+
581
+ On local smoke benchmarks, deriva is substantially faster on large generated Horn-clause and recursion-heavy workloads. These numbers are 5-run medians with stdout redirected to `/dev/null`, using Node.js `v22.16.0`, deriva from this checkout, and Eyeling package version `1.34.6` with its default output mode. The ratio is `Eyeling median / deriva median`, so larger numbers mea deriva was faster.
582
+
583
+ | Example | deriva median | Eyeling median | Ratio |
584
+ | --- | ---: | ---: | ---: |
585
+ | `fundamental-theorem-arithmetic` | `0.16 sec` | `2.00 sec` | `12.66x` |
586
+ | `deep-taxonomy-100000` | `1.69 sec` | `4.72 sec` | `2.79x` |
587
+ | `path-discovery` | `0.53 sec` | `1.62 sec` | `3.07x` |
588
+ | `fibonacci` | `0.15 sec` | `5.76 sec` | `38.40x` |
589
+ | `collatz-1000` | `0.71 sec` | `6.99 sec` | `9.85x` |
590
+
591
+ Treat these as smoke comparisons rather than a formal benchmark: hardware, Node.js version, package version, CLI startup, and output mode all matter.
592
+
593
+ The projects are therefore complementary rather than replacements for each other: Eyeling optimizes for Semantic Web interoperability and N3 expressiveness; deriva optimizes for a small standard-looking relational rule language and fast finite goal-directed execution.
594
+
595
+ ## Performance notes
596
+
597
+ Use `-s` or `--stats` for a quick sanity check while optimizing solver changes. It prints counters such as `solve_goals_calls`, `unify_calls`, `deterministic_rule_expansions`, `candidate_lists_selected`, `clause_candidates_considered`, `clauses_tried`, `max_depth`, and `max_solver_call_depth` to stderr, leaving normal output stable for golden-file tests. The `max_solver_call_depth` counter is especially useful for browser regressions, where the VM call stack can be tighter than a command-line run. Use `-w` or `--warnings` separately when you want portability diagnostics without enabling stricter parsing.
598
+
599
+ deriva hashes predicate groups by name and arity, then indexes clauses by scalar argument values. It also builds two-argument composite indexes for scalar pairs and probes those composite indexes without per-lookup heap allocation. This helps both large generated programs with many predicates and selective queries such as:
600
+
601
+ ```deriva
602
+ edge(g1, a, X).
603
+ path(a, Y).
604
+ status(Case, accepted).
605
+ ```
606
+
607
+ Ground facts use a fast path that avoids freshening and copying a rule body. Recursive-predicate detection uses an explicit work stack, which keeps large predicate chains safer in the browser. deriva automatically tables positive recursive groups, including dependencies reached through supported meta-goals and directly materialized relations. Cyclic calls iterate to an answer fixed point before replay. Recursive components containing a negative dependency retain guarded ordinary resolution because positive fixed-point tabling is not a semantics for unstratified negation. The engine also infers common structurally decreasing input positions; calls with an unbound structural input and fully open calls retain ordinary resolution rather than trying to materialize a potentially infinite relation. Authors do not need a search-control declaration.
608
+
609
+ Predicates can also carry advisory mode and determinism declarations for documentation and host tooling:
610
+
611
+ ```deriva
612
+ mode(path, 2, [in, out]).
613
+ semidet(edge, 2).
614
+ ```
615
+
616
+ For large programs, keep helper predicates selective, bind arguments early, document intended calling patterns with `mode/3` when helpful, and declare focused output predicates with `materialize/2` when default output would otherwise solve broad helper goals.
617
+
618
+ When using `not/1` over user-defined predicates, keep the dependency graph stratified: negative dependencies should not participate in recursion. The CLI option `-w` / `--warnings` prints non-fatal stratification warnings to stderr. The JavaScript API exposes `program.stratifiedNegation`, `program.negationStratificationErrors`, and `program.assertStratifiedNegation()` so host tools can warn or reject programs that rely on unstratified negation. The diagnostic is lazy by default; use `{ analyzeNegation: true }` to compute it during parsing or `{ strictNegation: true }` to compute and reject unstratified programs.
619
+
620
+ ## Implementation limits
621
+
622
+ Deriva is intentionally smaller than ISO Prolog. It has no operators, zero-arity compound syntax, cut, modules, dynamic database updates, DCGs, or complete ISO library. Arity-zero data is always written and read back as an atom, such as `nil`, never `nil()`. Negation is negation-as-failure through `not/1`. Search is goal-directed and expected to be finite for the selected output goals. Output explanations are non-normative proof printouts and do not change answer semantics.