eyeling 1.32.0 → 1.33.0

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 (630) hide show
  1. package/README.md +123 -18
  2. package/bin/eyeling.cjs +56 -4
  3. package/browser.d.ts +63 -0
  4. package/dist/browser/eyeling.browser.js +298 -14
  5. package/examples/eyelang/INTEGRATION.md +13 -0
  6. package/examples/eyelang/README.md +628 -0
  7. package/examples/eyelang/SPEC.md +684 -0
  8. package/examples/eyelang/access-control-policy.pl +52 -0
  9. package/examples/eyelang/ackermann.pl +46 -0
  10. package/examples/eyelang/age.pl +28 -0
  11. package/examples/eyelang/aliases-and-namespaces.pl +22 -0
  12. package/examples/eyelang/alignment-demo.pl +44 -0
  13. package/examples/eyelang/allen-interval-calculus.pl +64 -0
  14. package/examples/eyelang/ancestor.pl +21 -0
  15. package/examples/eyelang/animal.pl +21 -0
  16. package/examples/eyelang/annotation-rdf12.ttl +12 -0
  17. package/examples/eyelang/annotation.pl +34 -0
  18. package/examples/eyelang/auroracare.pl +309 -0
  19. package/examples/eyelang/backward.pl +12 -0
  20. package/examples/eyelang/basic-monadic.pl +10018 -0
  21. package/examples/eyelang/bayes-diagnosis.pl +108 -0
  22. package/examples/eyelang/bayes-therapy.pl +182 -0
  23. package/examples/eyelang/beam-deflection.pl +50 -0
  24. package/examples/eyelang/blocks-world-planning.pl +75 -0
  25. package/examples/eyelang/bmi.pl +232 -0
  26. package/examples/eyelang/braking-safety-worlds.pl +69 -0
  27. package/examples/eyelang/buck-converter-design.pl +78 -0
  28. package/examples/eyelang/cache-performance.pl +54 -0
  29. package/examples/eyelang/canary-release.pl +49 -0
  30. package/examples/eyelang/cat-koko.pl +24 -0
  31. package/examples/eyelang/clinical-trial-screening.pl +92 -0
  32. package/examples/eyelang/collatz-1000.pl +14 -0
  33. package/examples/eyelang/combinatorics-findall-sort.pl +37 -0
  34. package/examples/eyelang/competitive-enzyme-kinetics.pl +78 -0
  35. package/examples/eyelang/complex-matrix-stability.pl +45 -0
  36. package/examples/eyelang/complex.pl +121 -0
  37. package/examples/eyelang/composition-of-injective-functions-is-injective.pl +50 -0
  38. package/examples/eyelang/context-association.pl +53 -0
  39. package/examples/eyelang/control-system.pl +72 -0
  40. package/examples/eyelang/cryptarithmetic-send-more-money.pl +49 -0
  41. package/examples/eyelang/cyclic-path.pl +16 -0
  42. package/examples/eyelang/d3-group.pl +100 -0
  43. package/examples/eyelang/dairy-energy-balance.pl +65 -0
  44. package/examples/eyelang/data-negotiation.pl +39 -0
  45. package/examples/eyelang/deep-taxonomy-10.pl +115 -0
  46. package/examples/eyelang/deep-taxonomy-100.pl +385 -0
  47. package/examples/eyelang/deep-taxonomy-1000.pl +3085 -0
  48. package/examples/eyelang/deep-taxonomy-10000.pl +30094 -0
  49. package/examples/eyelang/deep-taxonomy-100000.pl +300184 -0
  50. package/examples/eyelang/delfour.pl +281 -0
  51. package/examples/eyelang/dense-hamiltonian-cycle.pl +92 -0
  52. package/examples/eyelang/deontic-logic.pl +52 -0
  53. package/examples/eyelang/derived-backward-rule.pl +30 -0
  54. package/examples/eyelang/derived-rule.pl +27 -0
  55. package/examples/eyelang/diamond-property.pl +38 -0
  56. package/examples/eyelang/dijkstra-findall-sort.pl +44 -0
  57. package/examples/eyelang/dijkstra-risk-path.pl +86 -0
  58. package/examples/eyelang/dijkstra.pl +46 -0
  59. package/examples/eyelang/dining-philosophers.pl +140 -0
  60. package/examples/eyelang/directional-language.ttl +9 -0
  61. package/examples/eyelang/dog.pl +25 -0
  62. package/examples/eyelang/drone-corridor-planner.pl +51 -0
  63. package/examples/eyelang/easter-computus.pl +89 -0
  64. package/examples/eyelang/electrical-rc-filter.pl +36 -0
  65. package/examples/eyelang/epidemic-policy.pl +67 -0
  66. package/examples/eyelang/equivalence-classes-overlap-implies-same-class.pl +27 -0
  67. package/examples/eyelang/eulerian-path.pl +85 -0
  68. package/examples/eyelang/ev-range-worlds.pl +82 -0
  69. package/examples/eyelang/exact-cover-sudoku.pl +113 -0
  70. package/examples/eyelang/existential-rule.pl +18 -0
  71. package/examples/eyelang/exoplanet-validation-worlds.pl +88 -0
  72. package/examples/eyelang/expression-eval.pl +43 -0
  73. package/examples/eyelang/eyeling-ackermann.n3 +41 -0
  74. package/examples/eyelang/eyeling-age-threshold.n3 +12 -0
  75. package/examples/eyelang/eyeling-alignment-demo.n3 +11 -0
  76. package/examples/eyelang/eyeling-allen-interval-calculus-small.n3 +13 -0
  77. package/examples/eyelang/eyeling-backward-recursion.n3 +11 -0
  78. package/examples/eyelang/eyeling-backward.n3 +10 -0
  79. package/examples/eyelang/eyeling-basic-monadic-small.n3 +11 -0
  80. package/examples/eyelang/eyeling-bmi.n3 +10 -0
  81. package/examples/eyelang/eyeling-cat-koko.n3 +15 -0
  82. package/examples/eyelang/eyeling-collatz-small.n3 +11 -0
  83. package/examples/eyelang/eyeling-collection.n3 +11 -0
  84. package/examples/eyelang/eyeling-complex-arithmetic.n3 +10 -0
  85. package/examples/eyelang/eyeling-context-association.n3 +11 -0
  86. package/examples/eyelang/eyeling-control-system-small.n3 +11 -0
  87. package/examples/eyelang/eyeling-crypto-builtins-extra.n3 +10 -0
  88. package/examples/eyelang/eyeling-crypto-builtins.n3 +8 -0
  89. package/examples/eyelang/eyeling-deep-taxonomy-10.n3 +18 -0
  90. package/examples/eyelang/eyeling-derived-backward-rule-flat.n3 +10 -0
  91. package/examples/eyelang/eyeling-derived-rule-flat.n3 +9 -0
  92. package/examples/eyelang/eyeling-digital-product-passport-small.n3 +11 -0
  93. package/examples/eyelang/eyeling-dijkstra-tiny.n3 +14 -0
  94. package/examples/eyelang/eyeling-dog-license.n3 +13 -0
  95. package/examples/eyelang/eyeling-drone-corridor-planner-small.n3 +13 -0
  96. package/examples/eyelang/eyeling-equals.n3 +8 -0
  97. package/examples/eyelang/eyeling-equivalence-classes.n3 +11 -0
  98. package/examples/eyelang/eyeling-euler-identity.n3 +9 -0
  99. package/examples/eyelang/eyeling-existential-rule.n3 +9 -0
  100. package/examples/eyelang/eyeling-expression-eval.n3 +11 -0
  101. package/examples/eyelang/eyeling-family-cousins-extended.n3 +12 -0
  102. package/examples/eyelang/eyeling-fastpow.n3 +10 -0
  103. package/examples/eyelang/eyeling-fibonacci.n3 +44 -0
  104. package/examples/eyelang/eyeling-french-cities-reachability.n3 +22 -0
  105. package/examples/eyelang/eyeling-goldbach-small.n3 +22 -0
  106. package/examples/eyelang/eyeling-good-cobbler.n3 +9 -0
  107. package/examples/eyelang/eyeling-list-builtins.n3 +10 -0
  108. package/examples/eyelang/eyeling-list-collection-extra.n3 +9 -0
  109. package/examples/eyelang/eyeling-math-builtins.n3 +9 -0
  110. package/examples/eyelang/eyeling-string-builtins-extra.n3 +9 -0
  111. package/examples/eyelang/eyeling-string-builtins.n3 +10 -0
  112. package/examples/eyelang/eyeling-time-builtins.n3 +11 -0
  113. package/examples/eyelang/eyeling-time-components-extra.n3 +10 -0
  114. package/examples/eyelang/eyeling-witch.n3 +10 -0
  115. package/examples/eyelang/family-cousins.n3 +17 -0
  116. package/examples/eyelang/family-cousins.pl +65 -0
  117. package/examples/eyelang/fastpow.pl +53 -0
  118. package/examples/eyelang/fft8-numeric.pl +83 -0
  119. package/examples/eyelang/fibonacci.pl +53 -0
  120. package/examples/eyelang/field-nitrogen-balance.pl +70 -0
  121. package/examples/eyelang/flandor.pl +296 -0
  122. package/examples/eyelang/floating-point.pl +23 -0
  123. package/examples/eyelang/four-color-map.pl +127 -0
  124. package/examples/eyelang/fundamental-theorem-arithmetic.pl +113 -0
  125. package/examples/eyelang/gcd-bezout-identity.pl +48 -0
  126. package/examples/eyelang/gd-step-certified.pl +158 -0
  127. package/examples/eyelang/gdpr-compliance.pl +69 -0
  128. package/examples/eyelang/goldbach-1000.pl +185 -0
  129. package/examples/eyelang/good-cobbler.pl +14 -0
  130. package/examples/eyelang/gps.pl +152 -0
  131. package/examples/eyelang/graph-reachability.pl +36 -0
  132. package/examples/eyelang/gray-code-counter.pl +48 -0
  133. package/examples/eyelang/greatest-lower-bound-uniqueness.pl +28 -0
  134. package/examples/eyelang/group-inverse-uniqueness.pl +34 -0
  135. package/examples/eyelang/hamiltonian-cycle.pl +55 -0
  136. package/examples/eyelang/hamiltonian-path.pl +49 -0
  137. package/examples/eyelang/hamming-code.pl +105 -0
  138. package/examples/eyelang/hanoi.pl +20 -0
  139. package/examples/eyelang/heat-loss.pl +51 -0
  140. package/examples/eyelang/heron-theorem.pl +36 -0
  141. package/examples/eyelang/ideal-gas-law.pl +37 -0
  142. package/examples/eyelang/illegitimate-reasoning.pl +88 -0
  143. package/examples/eyelang/kaprekar.pl +32 -0
  144. package/examples/eyelang/law-of-cosines.pl +31 -0
  145. package/examples/eyelang/least-squares-regression.pl +81 -0
  146. package/examples/eyelang/list-collection.pl +33 -0
  147. package/examples/eyelang/lldm.pl +78 -0
  148. package/examples/eyelang/manufacturing-quality-control.pl +73 -0
  149. package/examples/eyelang/matrix.pl +296 -0
  150. package/examples/eyelang/microgrid-dispatch.pl +85 -0
  151. package/examples/eyelang/monkey-bananas.pl +45 -0
  152. package/examples/eyelang/n-queens.pl +23 -0
  153. package/examples/eyelang/n3-builtins.n3 +28 -0
  154. package/examples/eyelang/network-sla.pl +48 -0
  155. package/examples/eyelang/newton-raphson.pl +49 -0
  156. package/examples/eyelang/nixon-diamond.pl +37 -0
  157. package/examples/eyelang/odrl-dpv-healthcare-risk-ranked.pl +266 -0
  158. package/examples/eyelang/odrl-dpv-risk-ranked.pl +320 -0
  159. package/examples/eyelang/orbital-transfer-design.pl +113 -0
  160. package/examples/eyelang/output/access-control-policy.pl +2 -0
  161. package/examples/eyelang/output/ackermann.pl +12 -0
  162. package/examples/eyelang/output/age.pl +2 -0
  163. package/examples/eyelang/output/aliases-and-namespaces.pl +5 -0
  164. package/examples/eyelang/output/alignment-demo.pl +32 -0
  165. package/examples/eyelang/output/allen-interval-calculus.pl +154 -0
  166. package/examples/eyelang/output/ancestor.pl +6 -0
  167. package/examples/eyelang/output/animal.pl +4 -0
  168. package/examples/eyelang/output/annotation-rdf12.ttl +1 -0
  169. package/examples/eyelang/output/annotation.pl +4 -0
  170. package/examples/eyelang/output/auroracare.pl +117 -0
  171. package/examples/eyelang/output/backward.pl +1 -0
  172. package/examples/eyelang/output/basic-monadic.pl +1518 -0
  173. package/examples/eyelang/output/bayes-diagnosis.pl +13 -0
  174. package/examples/eyelang/output/bayes-therapy.pl +23 -0
  175. package/examples/eyelang/output/beam-deflection.pl +5 -0
  176. package/examples/eyelang/output/blocks-world-planning.pl +4 -0
  177. package/examples/eyelang/output/bmi.pl +32 -0
  178. package/examples/eyelang/output/braking-safety-worlds.pl +18 -0
  179. package/examples/eyelang/output/buck-converter-design.pl +6 -0
  180. package/examples/eyelang/output/cache-performance.pl +4 -0
  181. package/examples/eyelang/output/canary-release.pl +5 -0
  182. package/examples/eyelang/output/cat-koko.pl +3 -0
  183. package/examples/eyelang/output/clinical-trial-screening.pl +9 -0
  184. package/examples/eyelang/output/collatz-1000.pl +1000 -0
  185. package/examples/eyelang/output/combinatorics-findall-sort.pl +2 -0
  186. package/examples/eyelang/output/competitive-enzyme-kinetics.pl +6 -0
  187. package/examples/eyelang/output/complex-matrix-stability.pl +5 -0
  188. package/examples/eyelang/output/complex.pl +1 -0
  189. package/examples/eyelang/output/composition-of-injective-functions-is-injective.pl +2 -0
  190. package/examples/eyelang/output/context-association.pl +3 -0
  191. package/examples/eyelang/output/control-system.pl +6 -0
  192. package/examples/eyelang/output/cryptarithmetic-send-more-money.pl +6 -0
  193. package/examples/eyelang/output/cyclic-path.pl +16 -0
  194. package/examples/eyelang/output/d3-group.pl +2 -0
  195. package/examples/eyelang/output/dairy-energy-balance.pl +13 -0
  196. package/examples/eyelang/output/data-negotiation.pl +1 -0
  197. package/examples/eyelang/output/deep-taxonomy-10.pl +16 -0
  198. package/examples/eyelang/output/deep-taxonomy-100.pl +16 -0
  199. package/examples/eyelang/output/deep-taxonomy-1000.pl +16 -0
  200. package/examples/eyelang/output/deep-taxonomy-10000.pl +16 -0
  201. package/examples/eyelang/output/deep-taxonomy-100000.pl +16 -0
  202. package/examples/eyelang/output/delfour.pl +31 -0
  203. package/examples/eyelang/output/dense-hamiltonian-cycle.pl +4 -0
  204. package/examples/eyelang/output/deontic-logic.pl +4 -0
  205. package/examples/eyelang/output/derived-backward-rule.pl +3 -0
  206. package/examples/eyelang/output/derived-rule.pl +2 -0
  207. package/examples/eyelang/output/diamond-property.pl +4 -0
  208. package/examples/eyelang/output/dijkstra-findall-sort.pl +2 -0
  209. package/examples/eyelang/output/dijkstra-risk-path.pl +29 -0
  210. package/examples/eyelang/output/dijkstra.pl +16 -0
  211. package/examples/eyelang/output/dining-philosophers.pl +350 -0
  212. package/examples/eyelang/output/directional-language.ttl +1 -0
  213. package/examples/eyelang/output/dog.pl +1 -0
  214. package/examples/eyelang/output/drone-corridor-planner.pl +17 -0
  215. package/examples/eyelang/output/easter-computus.pl +30 -0
  216. package/examples/eyelang/output/electrical-rc-filter.pl +3 -0
  217. package/examples/eyelang/output/epidemic-policy.pl +14 -0
  218. package/examples/eyelang/output/equivalence-classes-overlap-implies-same-class.pl +18 -0
  219. package/examples/eyelang/output/eulerian-path.pl +3 -0
  220. package/examples/eyelang/output/ev-range-worlds.pl +19 -0
  221. package/examples/eyelang/output/exact-cover-sudoku.pl +3 -0
  222. package/examples/eyelang/output/existential-rule.pl +2 -0
  223. package/examples/eyelang/output/exoplanet-validation-worlds.pl +22 -0
  224. package/examples/eyelang/output/expression-eval.pl +1 -0
  225. package/examples/eyelang/output/eyeling-ackermann.n3 +12 -0
  226. package/examples/eyelang/output/eyeling-age-threshold.n3 +4 -0
  227. package/examples/eyelang/output/eyeling-alignment-demo.n3 +1 -0
  228. package/examples/eyelang/output/eyeling-allen-interval-calculus-small.n3 +3 -0
  229. package/examples/eyelang/output/eyeling-backward-recursion.n3 +9 -0
  230. package/examples/eyelang/output/eyeling-backward.n3 +1 -0
  231. package/examples/eyelang/output/eyeling-basic-monadic-small.n3 +8 -0
  232. package/examples/eyelang/output/eyeling-bmi.n3 +2 -0
  233. package/examples/eyelang/output/eyeling-cat-koko.n3 +3 -0
  234. package/examples/eyelang/output/eyeling-collatz-small.n3 +3 -0
  235. package/examples/eyelang/output/eyeling-collection.n3 +1 -0
  236. package/examples/eyelang/output/eyeling-complex-arithmetic.n3 +5 -0
  237. package/examples/eyelang/output/eyeling-context-association.n3 +4 -0
  238. package/examples/eyelang/output/eyeling-control-system-small.n3 +4 -0
  239. package/examples/eyelang/output/eyeling-crypto-builtins-extra.n3 +3 -0
  240. package/examples/eyelang/output/eyeling-crypto-builtins.n3 +2 -0
  241. package/examples/eyelang/output/eyeling-deep-taxonomy-10.n3 +32 -0
  242. package/examples/eyelang/output/eyeling-derived-backward-rule-flat.n3 +4 -0
  243. package/examples/eyelang/output/eyeling-derived-rule-flat.n3 +2 -0
  244. package/examples/eyelang/output/eyeling-digital-product-passport-small.n3 +3 -0
  245. package/examples/eyelang/output/eyeling-dijkstra-tiny.n3 +9 -0
  246. package/examples/eyelang/output/eyeling-dog-license.n3 +1 -0
  247. package/examples/eyelang/output/eyeling-drone-corridor-planner-small.n3 +5 -0
  248. package/examples/eyelang/output/eyeling-equals.n3 +1 -0
  249. package/examples/eyelang/output/eyeling-equivalence-classes.n3 +2 -0
  250. package/examples/eyelang/output/eyeling-euler-identity.n3 +3 -0
  251. package/examples/eyelang/output/eyeling-existential-rule.n3 +4 -0
  252. package/examples/eyelang/output/eyeling-expression-eval.n3 +3 -0
  253. package/examples/eyelang/output/eyeling-family-cousins-extended.n3 +6 -0
  254. package/examples/eyelang/output/eyeling-fastpow.n3 +4 -0
  255. package/examples/eyelang/output/eyeling-fibonacci.n3 +6 -0
  256. package/examples/eyelang/output/eyeling-french-cities-reachability.n3 +25 -0
  257. package/examples/eyelang/output/eyeling-goldbach-small.n3 +2 -0
  258. package/examples/eyelang/output/eyeling-good-cobbler.n3 +2 -0
  259. package/examples/eyelang/output/eyeling-list-builtins.n3 +6 -0
  260. package/examples/eyelang/output/eyeling-list-collection-extra.n3 +5 -0
  261. package/examples/eyelang/output/eyeling-math-builtins.n3 +5 -0
  262. package/examples/eyelang/output/eyeling-string-builtins-extra.n3 +3 -0
  263. package/examples/eyelang/output/eyeling-string-builtins.n3 +4 -0
  264. package/examples/eyelang/output/eyeling-time-builtins.n3 +4 -0
  265. package/examples/eyelang/output/eyeling-time-components-extra.n3 +5 -0
  266. package/examples/eyelang/output/eyeling-witch.n3 +2 -0
  267. package/examples/eyelang/output/family-cousins.n3 +8 -0
  268. package/examples/eyelang/output/family-cousins.pl +28 -0
  269. package/examples/eyelang/output/fastpow.pl +6 -0
  270. package/examples/eyelang/output/fft8-numeric.pl +4 -0
  271. package/examples/eyelang/output/fibonacci.pl +6 -0
  272. package/examples/eyelang/output/field-nitrogen-balance.pl +21 -0
  273. package/examples/eyelang/output/flandor.pl +43 -0
  274. package/examples/eyelang/output/floating-point.pl +9 -0
  275. package/examples/eyelang/output/four-color-map.pl +3 -0
  276. package/examples/eyelang/output/fundamental-theorem-arithmetic.pl +9 -0
  277. package/examples/eyelang/output/gcd-bezout-identity.pl +36 -0
  278. package/examples/eyelang/output/gd-step-certified.pl +79 -0
  279. package/examples/eyelang/output/gdpr-compliance.pl +6 -0
  280. package/examples/eyelang/output/goldbach-1000.pl +667 -0
  281. package/examples/eyelang/output/good-cobbler.pl +1 -0
  282. package/examples/eyelang/output/gps.pl +21 -0
  283. package/examples/eyelang/output/graph-reachability.pl +3 -0
  284. package/examples/eyelang/output/gray-code-counter.pl +1 -0
  285. package/examples/eyelang/output/greatest-lower-bound-uniqueness.pl +2 -0
  286. package/examples/eyelang/output/group-inverse-uniqueness.pl +2 -0
  287. package/examples/eyelang/output/hamiltonian-cycle.pl +4 -0
  288. package/examples/eyelang/output/hamiltonian-path.pl +121 -0
  289. package/examples/eyelang/output/hamming-code.pl +6 -0
  290. package/examples/eyelang/output/hanoi.pl +1 -0
  291. package/examples/eyelang/output/heat-loss.pl +5 -0
  292. package/examples/eyelang/output/heron-theorem.pl +4 -0
  293. package/examples/eyelang/output/ideal-gas-law.pl +3 -0
  294. package/examples/eyelang/output/illegitimate-reasoning.pl +15 -0
  295. package/examples/eyelang/output/kaprekar.pl +8 -0
  296. package/examples/eyelang/output/law-of-cosines.pl +3 -0
  297. package/examples/eyelang/output/least-squares-regression.pl +5 -0
  298. package/examples/eyelang/output/list-collection.pl +3 -0
  299. package/examples/eyelang/output/lldm.pl +6 -0
  300. package/examples/eyelang/output/manufacturing-quality-control.pl +6 -0
  301. package/examples/eyelang/output/matrix.pl +10 -0
  302. package/examples/eyelang/output/microgrid-dispatch.pl +6 -0
  303. package/examples/eyelang/output/monkey-bananas.pl +5 -0
  304. package/examples/eyelang/output/n-queens.pl +93 -0
  305. package/examples/eyelang/output/n3-builtins.n3 +6 -0
  306. package/examples/eyelang/output/network-sla.pl +4 -0
  307. package/examples/eyelang/output/newton-raphson.pl +3 -0
  308. package/examples/eyelang/output/nixon-diamond.pl +5 -0
  309. package/examples/eyelang/output/odrl-dpv-healthcare-risk-ranked.pl +42 -0
  310. package/examples/eyelang/output/odrl-dpv-risk-ranked.pl +120 -0
  311. package/examples/eyelang/output/orbital-transfer-design.pl +7 -0
  312. package/examples/eyelang/output/path-discovery.pl +3 -0
  313. package/examples/eyelang/output/peano-arithmetic.pl +3 -0
  314. package/examples/eyelang/output/peasant.pl +10 -0
  315. package/examples/eyelang/output/pendulum-period.pl +4 -0
  316. package/examples/eyelang/output/polynomial.pl +14 -0
  317. package/examples/eyelang/output/project-portfolio-optimization.pl +6 -0
  318. package/examples/eyelang/output/proof-contrapositive.pl +3 -0
  319. package/examples/eyelang/output/quadratic-formula.pl +6 -0
  320. package/examples/eyelang/output/quine-mccluskey.pl +3 -0
  321. package/examples/eyelang/output/radioactive-decay.pl +5 -0
  322. package/examples/eyelang/output/resilient-city-orchestration.pl +67 -0
  323. package/examples/eyelang/output/riemann-hypothesis.pl +12 -0
  324. package/examples/eyelang/output/sat-dpll.pl +5 -0
  325. package/examples/eyelang/output/security-incident-correlation.pl +3 -0
  326. package/examples/eyelang/output/service-impact.pl +11 -0
  327. package/examples/eyelang/output/sieve.pl +1 -0
  328. package/examples/eyelang/output/skolem-functions.pl +16 -0
  329. package/examples/eyelang/output/socket-age.pl +1 -0
  330. package/examples/eyelang/output/socket-family.pl +3 -0
  331. package/examples/eyelang/output/socrates.n3 +1 -0
  332. package/examples/eyelang/output/socrates.pl +2 -0
  333. package/examples/eyelang/output/statistics-summary.pl +4 -0
  334. package/examples/eyelang/output/sudoku.pl +2 -0
  335. package/examples/eyelang/output/superdense-coding.pl +6 -0
  336. package/examples/eyelang/output/traveling-salesman.pl +1 -0
  337. package/examples/eyelang/output/triple-term.n3 +2 -0
  338. package/examples/eyelang/output/turing.pl +12 -0
  339. package/examples/eyelang/output/vector-similarity.pl +4 -0
  340. package/examples/eyelang/output/witch.pl +7 -0
  341. package/examples/eyelang/output/wolf-goat-cabbage.pl +3 -0
  342. package/examples/eyelang/output/zebra.pl +3 -0
  343. package/examples/eyelang/path-discovery.pl +44998 -0
  344. package/examples/eyelang/peano-arithmetic.pl +31 -0
  345. package/examples/eyelang/peasant.pl +30 -0
  346. package/examples/eyelang/pendulum-period.pl +50 -0
  347. package/examples/eyelang/polynomial.pl +124 -0
  348. package/examples/eyelang/project-portfolio-optimization.pl +101 -0
  349. package/examples/eyelang/proof/age.pl +71 -0
  350. package/examples/eyelang/proof/aliases-and-namespaces.pl +78 -0
  351. package/examples/eyelang/proof/ancestor.pl +140 -0
  352. package/examples/eyelang/proof/animal.pl +68 -0
  353. package/examples/eyelang/proof/annotation.pl +80 -0
  354. package/examples/eyelang/proof/backward.pl +22 -0
  355. package/examples/eyelang/proof/cat-koko.pl +86 -0
  356. package/examples/eyelang/proof/data-negotiation.pl +76 -0
  357. package/examples/eyelang/proof/derived-rule.pl +43 -0
  358. package/examples/eyelang/proof/dog.pl +31 -0
  359. package/examples/eyelang/proof/electrical-rc-filter.pl +105 -0
  360. package/examples/eyelang/proof/existential-rule.pl +40 -0
  361. package/examples/eyelang/proof/floating-point.pl +160 -0
  362. package/examples/eyelang/proof/good-cobbler.pl +16 -0
  363. package/examples/eyelang/proof/group-inverse-uniqueness.pl +84 -0
  364. package/examples/eyelang/proof/list-collection.pl +52 -0
  365. package/examples/eyelang/proof/proof-contrapositive.pl +78 -0
  366. package/examples/eyelang/proof/socket-age.pl +32 -0
  367. package/examples/eyelang/proof/socket-family.pl +59 -0
  368. package/examples/eyelang/proof/socrates.pl +38 -0
  369. package/examples/eyelang/proof-contrapositive.pl +27 -0
  370. package/examples/eyelang/quadratic-formula.pl +54 -0
  371. package/examples/eyelang/quine-mccluskey.pl +143 -0
  372. package/examples/eyelang/radioactive-decay.pl +56 -0
  373. package/examples/eyelang/resilient-city-orchestration.pl +303 -0
  374. package/examples/eyelang/riemann-hypothesis.pl +110 -0
  375. package/examples/eyelang/sat-dpll.pl +80 -0
  376. package/examples/eyelang/security-incident-correlation.pl +69 -0
  377. package/examples/eyelang/service-impact.pl +41 -0
  378. package/examples/eyelang/sieve.pl +20 -0
  379. package/examples/eyelang/skolem-functions.pl +52 -0
  380. package/examples/eyelang/socket-age.pl +39 -0
  381. package/examples/eyelang/socket-family.pl +28 -0
  382. package/examples/eyelang/socrates.n3 +11 -0
  383. package/examples/eyelang/socrates.pl +19 -0
  384. package/examples/eyelang/statistics-summary.pl +54 -0
  385. package/examples/eyelang/sudoku.pl +20 -0
  386. package/examples/eyelang/superdense-coding.pl +84 -0
  387. package/examples/eyelang/traveling-salesman.pl +64 -0
  388. package/examples/eyelang/triple-term.n3 +9 -0
  389. package/examples/eyelang/turing.pl +67 -0
  390. package/examples/eyelang/vector-similarity.pl +56 -0
  391. package/examples/eyelang/witch.pl +38 -0
  392. package/examples/eyelang/wolf-goat-cabbage.pl +56 -0
  393. package/examples/eyelang/zebra.pl +44 -0
  394. package/eyelang.d.ts +92 -0
  395. package/eyeling-builtins.ttl +3 -3
  396. package/eyeling.js +298 -14
  397. package/index.d.ts +290 -283
  398. package/index.js +95 -1
  399. package/lib/builtins.js +297 -14
  400. package/lib/cli.js +1 -0
  401. package/lib/eyelang/bin.js +7 -0
  402. package/lib/eyelang/builtins/aggregation.mjs +81 -0
  403. package/lib/eyelang/builtins/alphametic.mjs +144 -0
  404. package/lib/eyelang/builtins/arithmetic.mjs +197 -0
  405. package/lib/eyelang/builtins/control.mjs +22 -0
  406. package/lib/eyelang/builtins/core.mjs +78 -0
  407. package/lib/eyelang/builtins/formula.mjs +42 -0
  408. package/lib/eyelang/builtins/lists.mjs +149 -0
  409. package/lib/eyelang/builtins/matrix.mjs +226 -0
  410. package/lib/eyelang/builtins/n3.mjs +483 -0
  411. package/lib/eyelang/builtins/number-theory.mjs +114 -0
  412. package/lib/eyelang/builtins/portfolio.mjs +73 -0
  413. package/lib/eyelang/builtins/registry.mjs +54 -0
  414. package/lib/eyelang/builtins/search.mjs +579 -0
  415. package/lib/eyelang/builtins/strings.mjs +41 -0
  416. package/lib/eyelang/builtins/sudoku.mjs +141 -0
  417. package/lib/eyelang/cli.mjs +192 -0
  418. package/lib/eyelang/explain.mjs +324 -0
  419. package/lib/eyelang/hash.mjs +294 -0
  420. package/lib/eyelang/index.mjs +48 -0
  421. package/lib/eyelang/parser.mjs +428 -0
  422. package/lib/eyelang/program.mjs +244 -0
  423. package/lib/eyelang/rdf.mjs +747 -0
  424. package/lib/eyelang/solver.mjs +237 -0
  425. package/lib/eyelang/term.mjs +328 -0
  426. package/package.json +15 -5
  427. package/test/builtins.test.js +49 -1
  428. package/test/eyelang/conformance/README.md +45 -0
  429. package/test/eyelang/conformance/cases/core/001_fact_output.pl +4 -0
  430. package/test/eyelang/conformance/cases/core/001_fact_query.query +1 -0
  431. package/test/eyelang/conformance/cases/core/002_rule_recursion.pl +7 -0
  432. package/test/eyelang/conformance/cases/core/002_rule_recursion.query +1 -0
  433. package/test/eyelang/conformance/cases/core/003_terms_and_readback.pl +16 -0
  434. package/test/eyelang/conformance/cases/core/003_terms_and_readback.query +1 -0
  435. package/test/eyelang/conformance/cases/core/004_conjunction_and_parentheses.pl +5 -0
  436. package/test/eyelang/conformance/cases/core/004_conjunction_and_parentheses.query +1 -0
  437. package/test/eyelang/conformance/cases/core/005_list_deconstruction.pl +6 -0
  438. package/test/eyelang/conformance/cases/core/005_list_deconstruction.query +1 -0
  439. package/test/eyelang/conformance/cases/core/006_comma_formula_data.pl +4 -0
  440. package/test/eyelang/conformance/cases/core/006_comma_formula_data.query +1 -0
  441. package/test/eyelang/conformance/cases/core/007_anonymous_variables.pl +5 -0
  442. package/test/eyelang/conformance/cases/core/007_anonymous_variables.query +1 -0
  443. package/test/eyelang/conformance/cases/core/008_graphic_atoms.pl +6 -0
  444. package/test/eyelang/conformance/cases/core/008_graphic_atoms.query +1 -0
  445. package/test/eyelang/conformance/cases/core/009_comments_and_whitespace.pl +5 -0
  446. package/test/eyelang/conformance/cases/core/009_comments_and_whitespace.query +1 -0
  447. package/test/eyelang/conformance/cases/core/010_variable_scope_and_reuse.pl +8 -0
  448. package/test/eyelang/conformance/cases/core/010_variable_scope_and_reuse.query +1 -0
  449. package/test/eyelang/conformance/cases/core/011_predicate_arity.pl +6 -0
  450. package/test/eyelang/conformance/cases/core/011_predicate_arity.query +1 -0
  451. package/test/eyelang/conformance/cases/core/012_nested_compound_unification.pl +5 -0
  452. package/test/eyelang/conformance/cases/core/012_nested_compound_unification.query +1 -0
  453. package/test/eyelang/conformance/cases/core/013_multiple_clauses_order.pl +6 -0
  454. package/test/eyelang/conformance/cases/core/013_multiple_clauses_order.query +1 -0
  455. package/test/eyelang/conformance/cases/core/014_failure_filters_answers.pl +7 -0
  456. package/test/eyelang/conformance/cases/core/014_failure_filters_answers.query +1 -0
  457. package/test/eyelang/conformance/cases/core/015_improper_list_unification.pl +6 -0
  458. package/test/eyelang/conformance/cases/core/015_improper_list_unification.query +1 -0
  459. package/test/eyelang/conformance/cases/core/016_zero_arity_compound.pl +4 -0
  460. package/test/eyelang/conformance/cases/core/016_zero_arity_compound.query +1 -0
  461. package/test/eyelang/conformance/cases/core/017_three_step_recursion.pl +8 -0
  462. package/test/eyelang/conformance/cases/core/017_three_step_recursion.query +1 -0
  463. package/test/eyelang/conformance/cases/core/018_quoted_atom_readback.pl +6 -0
  464. package/test/eyelang/conformance/cases/core/018_quoted_atom_readback.query +1 -0
  465. package/test/eyelang/conformance/cases/core/019_parenthesized_three_conjuncts.pl +7 -0
  466. package/test/eyelang/conformance/cases/core/019_parenthesized_three_conjuncts.query +1 -0
  467. package/test/eyelang/conformance/cases/core/020_nested_list_terms.pl +5 -0
  468. package/test/eyelang/conformance/cases/core/020_nested_list_terms.query +1 -0
  469. package/test/eyelang/conformance/cases/core/021_repeated_variable_head.pl +7 -0
  470. package/test/eyelang/conformance/cases/core/022_rule_head_structure.pl +5 -0
  471. package/test/eyelang/conformance/cases/core/023_quoted_escapes_readback.pl +5 -0
  472. package/test/eyelang/conformance/cases/core/024_numeric_literal_readback.pl +6 -0
  473. package/test/eyelang/conformance/cases/core/025_body_parentheses_with_formula_data.pl +5 -0
  474. package/test/eyelang/conformance/cases/core/026_underscore_named_variable_reuse.pl +5 -0
  475. package/test/eyelang/conformance/cases/extension/001_default_derived_output.pl +5 -0
  476. package/test/eyelang/conformance/cases/extension/002_materialize_focus.pl +5 -0
  477. package/test/eyelang/conformance/cases/extension/003_arithmetic_and_comparison.pl +12 -0
  478. package/test/eyelang/conformance/cases/extension/003_arithmetic_and_comparison.query +1 -0
  479. package/test/eyelang/conformance/cases/extension/004_strings_and_atoms.pl +6 -0
  480. package/test/eyelang/conformance/cases/extension/004_strings_and_atoms.query +1 -0
  481. package/test/eyelang/conformance/cases/extension/005_lists_aggregation_ordering.pl +10 -0
  482. package/test/eyelang/conformance/cases/extension/005_lists_aggregation_ordering.query +1 -0
  483. package/test/eyelang/conformance/cases/extension/006_formula_terms.pl +5 -0
  484. package/test/eyelang/conformance/cases/extension/006_formula_terms.query +1 -0
  485. package/test/eyelang/conformance/cases/extension/007_negation_once_generators.pl +7 -0
  486. package/test/eyelang/conformance/cases/extension/007_negation_once_generators.query +1 -0
  487. package/test/eyelang/conformance/cases/extension/008_equality_and_inequality.pl +6 -0
  488. package/test/eyelang/conformance/cases/extension/008_equality_and_inequality.query +1 -0
  489. package/test/eyelang/conformance/cases/extension/009_list_relations.pl +6 -0
  490. package/test/eyelang/conformance/cases/extension/009_list_relations.query +1 -0
  491. package/test/eyelang/conformance/cases/extension/010_append_splits.pl +3 -0
  492. package/test/eyelang/conformance/cases/extension/010_append_splits.query +1 -0
  493. package/test/eyelang/conformance/cases/extension/011_matching_and_comparison.pl +7 -0
  494. package/test/eyelang/conformance/cases/extension/011_matching_and_comparison.query +1 -0
  495. package/test/eyelang/conformance/cases/extension/012_memoize_declaration.pl +8 -0
  496. package/test/eyelang/conformance/cases/extension/012_memoize_declaration.query +1 -0
  497. package/test/eyelang/conformance/cases/extension/013_numeric_functions.pl +9 -0
  498. package/test/eyelang/conformance/cases/extension/013_numeric_functions.query +1 -0
  499. package/test/eyelang/conformance/cases/extension/014_between_enumeration.pl +3 -0
  500. package/test/eyelang/conformance/cases/extension/014_between_enumeration.query +1 -0
  501. package/test/eyelang/conformance/cases/extension/015_smallest_divisor.pl +3 -0
  502. package/test/eyelang/conformance/cases/extension/015_smallest_divisor.query +1 -0
  503. package/test/eyelang/conformance/cases/extension/016_negation_filter.pl +7 -0
  504. package/test/eyelang/conformance/cases/extension/016_negation_filter.query +1 -0
  505. package/test/eyelang/conformance/cases/extension/017_once_user_predicate.pl +5 -0
  506. package/test/eyelang/conformance/cases/extension/017_once_user_predicate.query +1 -0
  507. package/test/eyelang/conformance/cases/extension/018_findall_user_goal.pl +6 -0
  508. package/test/eyelang/conformance/cases/extension/018_findall_user_goal.query +1 -0
  509. package/test/eyelang/conformance/cases/extension/019_sort_deduplicates_atoms.pl +3 -0
  510. package/test/eyelang/conformance/cases/extension/019_sort_deduplicates_atoms.query +1 -0
  511. package/test/eyelang/conformance/cases/extension/020_append_bound_prefix_suffix.pl +4 -0
  512. package/test/eyelang/conformance/cases/extension/020_append_bound_prefix_suffix.query +1 -0
  513. package/test/eyelang/conformance/cases/extension/021_nth0_index_generation.pl +3 -0
  514. package/test/eyelang/conformance/cases/extension/021_nth0_index_generation.query +1 -0
  515. package/test/eyelang/conformance/cases/extension/022_set_nth0_edges.pl +4 -0
  516. package/test/eyelang/conformance/cases/extension/022_set_nth0_edges.query +1 -0
  517. package/test/eyelang/conformance/cases/extension/023_select_duplicate_occurrences.pl +3 -0
  518. package/test/eyelang/conformance/cases/extension/023_select_duplicate_occurrences.query +1 -0
  519. package/test/eyelang/conformance/cases/extension/024_not_member_filter.pl +6 -0
  520. package/test/eyelang/conformance/cases/extension/024_not_member_filter.query +1 -0
  521. package/test/eyelang/conformance/cases/extension/025_is_list_filter.pl +5 -0
  522. package/test/eyelang/conformance/cases/extension/025_is_list_filter.query +1 -0
  523. package/test/eyelang/conformance/cases/extension/026_nested_formula_terms.pl +5 -0
  524. package/test/eyelang/conformance/cases/extension/026_nested_formula_terms.query +1 -0
  525. package/test/eyelang/conformance/cases/extension/027_materialize_excludes_source_fact.pl +6 -0
  526. package/test/eyelang/conformance/cases/extension/028_numeric_and_lexical_comparison.pl +5 -0
  527. package/test/eyelang/conformance/cases/extension/028_numeric_and_lexical_comparison.query +1 -0
  528. package/test/eyelang/conformance/cases/extension/029_string_matching_filters.pl +6 -0
  529. package/test/eyelang/conformance/cases/extension/029_string_matching_filters.query +1 -0
  530. package/test/eyelang/conformance/cases/extension/030_string_and_atom_concat.pl +4 -0
  531. package/test/eyelang/conformance/cases/extension/030_string_and_atom_concat.query +1 -0
  532. package/test/eyelang/conformance/cases/extension/031_countall_empty_and_nonempty.pl +4 -0
  533. package/test/eyelang/conformance/cases/extension/031_countall_empty_and_nonempty.query +1 -0
  534. package/test/eyelang/conformance/cases/extension/032_sumall_numeric_template.pl +5 -0
  535. package/test/eyelang/conformance/cases/extension/032_sumall_numeric_template.query +1 -0
  536. package/test/eyelang/conformance/cases/extension/033_aggregate_min_template.pl +5 -0
  537. package/test/eyelang/conformance/cases/extension/033_aggregate_min_template.query +1 -0
  538. package/test/eyelang/conformance/cases/extension/034_aggregate_max_compound_key.pl +5 -0
  539. package/test/eyelang/conformance/cases/extension/034_aggregate_max_compound_key.query +1 -0
  540. package/test/eyelang/conformance/cases/extension/035_date_difference.pl +4 -0
  541. package/test/eyelang/conformance/cases/extension/036_extended_gcd.pl +3 -0
  542. package/test/eyelang/conformance/cases/extension/037_collatz_trajectory.pl +3 -0
  543. package/test/eyelang/conformance/cases/extension/038_kaprekar_steps.pl +3 -0
  544. package/test/eyelang/conformance/cases/extension/039_goldbach_pair.pl +3 -0
  545. package/test/eyelang/conformance/cases/extension/040_matrix_operations.pl +5 -0
  546. package/test/eyelang/conformance/cases/extension/041_atom_range_generators.pl +5 -0
  547. package/test/eyelang/conformance/cases/extension/042_n_queens_small.pl +3 -0
  548. package/test/eyelang/conformance/cases/extension/043_cnf_model.pl +3 -0
  549. package/test/eyelang/conformance/cases/extension/044_cover9_filter.pl +6 -0
  550. package/test/eyelang/conformance/cases/extension/045_alphametic_sum_small.pl +3 -0
  551. package/test/eyelang/conformance/cases/extension/046_bounded_subset.pl +4 -0
  552. package/test/eyelang/conformance/expected/core/001_fact_output.out +1 -0
  553. package/test/eyelang/conformance/expected/core/002_rule_recursion.out +2 -0
  554. package/test/eyelang/conformance/expected/core/003_terms_and_readback.out +13 -0
  555. package/test/eyelang/conformance/expected/core/004_conjunction_and_parentheses.out +1 -0
  556. package/test/eyelang/conformance/expected/core/005_list_deconstruction.out +2 -0
  557. package/test/eyelang/conformance/expected/core/006_comma_formula_data.out +1 -0
  558. package/test/eyelang/conformance/expected/core/007_anonymous_variables.out +1 -0
  559. package/test/eyelang/conformance/expected/core/008_graphic_atoms.out +3 -0
  560. package/test/eyelang/conformance/expected/core/009_comments_and_whitespace.out +2 -0
  561. package/test/eyelang/conformance/expected/core/010_variable_scope_and_reuse.out +2 -0
  562. package/test/eyelang/conformance/expected/core/011_predicate_arity.out +2 -0
  563. package/test/eyelang/conformance/expected/core/012_nested_compound_unification.out +2 -0
  564. package/test/eyelang/conformance/expected/core/013_multiple_clauses_order.out +2 -0
  565. package/test/eyelang/conformance/expected/core/014_failure_filters_answers.out +1 -0
  566. package/test/eyelang/conformance/expected/core/015_improper_list_unification.out +3 -0
  567. package/test/eyelang/conformance/expected/core/016_zero_arity_compound.out +1 -0
  568. package/test/eyelang/conformance/expected/core/017_three_step_recursion.out +3 -0
  569. package/test/eyelang/conformance/expected/core/018_quoted_atom_readback.out +3 -0
  570. package/test/eyelang/conformance/expected/core/019_parenthesized_three_conjuncts.out +1 -0
  571. package/test/eyelang/conformance/expected/core/020_nested_list_terms.out +2 -0
  572. package/test/eyelang/conformance/expected/core/021_repeated_variable_head.out +2 -0
  573. package/test/eyelang/conformance/expected/core/022_rule_head_structure.out +2 -0
  574. package/test/eyelang/conformance/expected/core/023_quoted_escapes_readback.out +2 -0
  575. package/test/eyelang/conformance/expected/core/024_numeric_literal_readback.out +3 -0
  576. package/test/eyelang/conformance/expected/core/025_body_parentheses_with_formula_data.out +1 -0
  577. package/test/eyelang/conformance/expected/core/026_underscore_named_variable_reuse.out +1 -0
  578. package/test/eyelang/conformance/expected/extension/001_default_derived_output.out +3 -0
  579. package/test/eyelang/conformance/expected/extension/002_materialize_focus.out +1 -0
  580. package/test/eyelang/conformance/expected/extension/003_arithmetic_and_comparison.out +10 -0
  581. package/test/eyelang/conformance/expected/extension/004_strings_and_atoms.out +4 -0
  582. package/test/eyelang/conformance/expected/extension/005_lists_aggregation_ordering.out +9 -0
  583. package/test/eyelang/conformance/expected/extension/006_formula_terms.out +4 -0
  584. package/test/eyelang/conformance/expected/extension/007_negation_once_generators.out +2 -0
  585. package/test/eyelang/conformance/expected/extension/008_equality_and_inequality.out +4 -0
  586. package/test/eyelang/conformance/expected/extension/009_list_relations.out +5 -0
  587. package/test/eyelang/conformance/expected/extension/010_append_splits.out +3 -0
  588. package/test/eyelang/conformance/expected/extension/011_matching_and_comparison.out +5 -0
  589. package/test/eyelang/conformance/expected/extension/012_memoize_declaration.out +2 -0
  590. package/test/eyelang/conformance/expected/extension/013_numeric_functions.out +7 -0
  591. package/test/eyelang/conformance/expected/extension/014_between_enumeration.out +3 -0
  592. package/test/eyelang/conformance/expected/extension/015_smallest_divisor.out +1 -0
  593. package/test/eyelang/conformance/expected/extension/016_negation_filter.out +2 -0
  594. package/test/eyelang/conformance/expected/extension/017_once_user_predicate.out +1 -0
  595. package/test/eyelang/conformance/expected/extension/018_findall_user_goal.out +1 -0
  596. package/test/eyelang/conformance/expected/extension/019_sort_deduplicates_atoms.out +1 -0
  597. package/test/eyelang/conformance/expected/extension/020_append_bound_prefix_suffix.out +2 -0
  598. package/test/eyelang/conformance/expected/extension/021_nth0_index_generation.out +1 -0
  599. package/test/eyelang/conformance/expected/extension/022_set_nth0_edges.out +2 -0
  600. package/test/eyelang/conformance/expected/extension/023_select_duplicate_occurrences.out +2 -0
  601. package/test/eyelang/conformance/expected/extension/024_not_member_filter.out +1 -0
  602. package/test/eyelang/conformance/expected/extension/025_is_list_filter.out +1 -0
  603. package/test/eyelang/conformance/expected/extension/026_nested_formula_terms.out +6 -0
  604. package/test/eyelang/conformance/expected/extension/027_materialize_excludes_source_fact.out +1 -0
  605. package/test/eyelang/conformance/expected/extension/028_numeric_and_lexical_comparison.out +3 -0
  606. package/test/eyelang/conformance/expected/extension/029_string_matching_filters.out +2 -0
  607. package/test/eyelang/conformance/expected/extension/030_string_and_atom_concat.out +2 -0
  608. package/test/eyelang/conformance/expected/extension/031_countall_empty_and_nonempty.out +1 -0
  609. package/test/eyelang/conformance/expected/extension/032_sumall_numeric_template.out +1 -0
  610. package/test/eyelang/conformance/expected/extension/033_aggregate_min_template.out +1 -0
  611. package/test/eyelang/conformance/expected/extension/034_aggregate_max_compound_key.out +1 -0
  612. package/test/eyelang/conformance/expected/extension/035_date_difference.out +2 -0
  613. package/test/eyelang/conformance/expected/extension/036_extended_gcd.out +1 -0
  614. package/test/eyelang/conformance/expected/extension/037_collatz_trajectory.out +1 -0
  615. package/test/eyelang/conformance/expected/extension/038_kaprekar_steps.out +1 -0
  616. package/test/eyelang/conformance/expected/extension/039_goldbach_pair.out +2 -0
  617. package/test/eyelang/conformance/expected/extension/040_matrix_operations.out +3 -0
  618. package/test/eyelang/conformance/expected/extension/041_atom_range_generators.out +8 -0
  619. package/test/eyelang/conformance/expected/extension/042_n_queens_small.out +2 -0
  620. package/test/eyelang/conformance/expected/extension/043_cnf_model.out +1 -0
  621. package/test/eyelang/conformance/expected/extension/044_cover9_filter.out +2 -0
  622. package/test/eyelang/conformance/expected/extension/045_alphametic_sum_small.out +4 -0
  623. package/test/eyelang/conformance/expected/extension/046_bounded_subset.out +5 -0
  624. package/test/eyelang/run-all.mjs +20 -0
  625. package/test/eyelang/run-conformance.mjs +80 -0
  626. package/test/eyelang/run-examples.mjs +126 -0
  627. package/test/eyelang/run-regression.mjs +640 -0
  628. package/test/eyelang/test-style.mjs +91 -0
  629. package/test/eyelang.test.js +58 -0
  630. package/test/run.js +1 -0
package/README.md CHANGED
@@ -22,7 +22,8 @@ Eyeling is characterized by:
22
22
  - **Built-ins in rule bodies** — N3 programs can combine logical rules with computations such as math, string, datatype, list, time, and web-oriented predicates.
23
23
  - **Streaming RDF Messages** — supports RDF Messages streams, enabling Eyeling to fit into streaming RDF pipelines.
24
24
  - **Node.js, npm, and browser use** — run it from the command line, call it from JavaScript, or use the browser-oriented bundle.
25
- - **RDF-JS interoperability** — use N3 text, RDF-JS quads, datasets, or Eyeling’s own AST-level API.
25
+ - **RDF-JS interoperability** — use N3 text, RDF-JS quads, datasets, or Eyeling’s own AST-level API, with TypeScript declarations grounded in `@rdfjs/types`.
26
+ - **Experimental eyelang engine** — run compact Prolog-style Horn clause programs alongside the N3 engine, giving Eyeling a second reasoning engine without mixing the internals.
26
27
 
27
28
 
28
29
  This README is the primary guide to using, extending, and maintaining Eyeling.
@@ -53,20 +54,21 @@ Eyeling is designed for people who want a small, inspectable reasoner that can r
53
54
  4. [Command-line interface](#command-line-interface)
54
55
  5. [JavaScript API](#javascript-api)
55
56
  6. [RDF-JS integration](#rdf-js-integration)
56
- 7. [RDF compatibility mode and RDF 1.2](#rdf-compatibility-mode-and-rdf-12)
57
- 8. [RDF Message Logs](#rdf-message-logs)
58
- 9. [Built-ins](#built-ins)
59
- 10. [Custom built-ins](#custom-built-ins)
60
- 11. [Reasoning model](#reasoning-model)
61
- 12. [Architecture](#architecture)
62
- 13. [Repository layout](#repository-layout)
63
- 14. [Examples guide](#examples-guide)
64
- 15. [Testing and quality checks](#testing-and-quality-checks)
65
- 16. [Development workflow](#development-workflow)
66
- 17. [Publishing and release notes](#publishing-and-release-notes)
67
- 18. [Troubleshooting](#troubleshooting)
68
- 19. [Security and operational notes](#security-and-operational-notes)
69
- 20. [Glossary](#glossary)
57
+ 7. [Eyelang second engine](#eyelang-second-engine)
58
+ 8. [RDF compatibility mode and RDF 1.2](#rdf-compatibility-mode-and-rdf-12)
59
+ 9. [RDF Message Logs](#rdf-message-logs)
60
+ 10. [Built-ins](#built-ins)
61
+ 11. [Custom built-ins](#custom-built-ins)
62
+ 12. [Reasoning model](#reasoning-model)
63
+ 13. [Architecture](#architecture)
64
+ 14. [Repository layout](#repository-layout)
65
+ 15. [Examples guide](#examples-guide)
66
+ 16. [Testing and quality checks](#testing-and-quality-checks)
67
+ 17. [Development workflow](#development-workflow)
68
+ 18. [Publishing and release notes](#publishing-and-release-notes)
69
+ 19. [Troubleshooting](#troubleshooting)
70
+ 20. [Security and operational notes](#security-and-operational-notes)
71
+ 21. [Glossary](#glossary)
70
72
 
71
73
  ---
72
74
 
@@ -80,7 +82,8 @@ It accepts facts and rules written in N3-style syntax, computes the logical cons
80
82
  - a CommonJS API from Node.js through `require('eyeling')`;
81
83
  - a browser/worker API through `eyeling/browser`;
82
84
  - an RDF-JS adapter for applications that work with quads and data factories;
83
- - a streaming tool for RDF Message Logs.
85
+ - a streaming tool for RDF Message Logs;
86
+ - an experimental host for the `eyelang` Prolog-style Horn clause engine.
84
87
 
85
88
  Eyeling is intentionally small and dependency-light. The source tree is organized as a miniature compiler and inference engine: lexer, parser, term model, rule normalization, built-ins, forward chaining, backward proving, printing, RDF-JS adapters, and CLI wiring.
86
89
 
@@ -143,6 +146,26 @@ For proof output:
143
146
  node eyeling.js --proof examples/socrates.n3
144
147
  ```
145
148
 
149
+ Run an eyelang program through the second engine:
150
+
151
+ ```bash
152
+ eyeling --engine eyelang examples/eyelang/ancestor.pl
153
+ ```
154
+
155
+ Or from JavaScript:
156
+
157
+ ```js
158
+ const { reason } = require('eyeling');
159
+
160
+ const output = reason({ engine: 'eyelang' }, `
161
+ materialize(out, 1).
162
+ in(done).
163
+ out(X) :- in(X).
164
+ `);
165
+
166
+ console.log(output);
167
+ ```
168
+
146
169
  ---
147
170
 
148
171
  ## Core concepts
@@ -533,7 +556,7 @@ The browser entry loads `dist/browser/eyeling.browser.js` and exposes the API th
533
556
 
534
557
  ## RDF-JS integration
535
558
 
536
- Eyeling includes a lightweight RDF-JS DataFactory and adapters for supported RDF-JS terms and quads.
559
+ Eyeling includes a lightweight RDF-JS DataFactory and adapters for supported RDF-JS terms and quads. Its TypeScript declarations reuse the official `@rdfjs/types` interfaces, so Eyeling quads, terms, and data factories can be passed to other RDF-JS libraries without local type casts.
537
560
 
538
561
  ```js
539
562
  const { reasonStream, rdfjs } = require('eyeling');
@@ -558,12 +581,91 @@ const result = reasonStream(input, { rdfjs: true });
558
581
  console.log(result.closureQuads);
559
582
  ```
560
583
 
584
+ TypeScript users can use Eyeling directly with `@rdfjs/types`:
585
+
586
+ ```ts
587
+ import type { DataFactory, Quad } from '@rdfjs/types';
588
+ import { rdfjs, reasonRdfJs } from 'eyeling';
589
+
590
+ const ex = 'http://example.org/';
591
+ const factory: DataFactory<Quad> = rdfjs;
592
+
593
+ const facts: Quad[] = [
594
+ factory.quad(
595
+ factory.namedNode(`${ex}Socrates`),
596
+ factory.namedNode(`${ex}type`),
597
+ factory.namedNode(`${ex}Man`),
598
+ ),
599
+ ];
600
+
601
+ for await (const quad of reasonRdfJs({
602
+ quads: facts,
603
+ n3: `
604
+ @prefix : <http://example.org/> .
605
+ { ?x :type :Man } => { ?x :type :Mortal } .
606
+ `,
607
+ })) {
608
+ const derived: Quad = quad;
609
+ console.log(derived.subject.value, derived.predicate.value, derived.object.value);
610
+ }
611
+ ```
612
+
613
+ The built-in `rdfjs` factory implements the standard RDF-JS constructors for named nodes, blank nodes, literals, default graph terms, variables, and quads, plus `fromTerm()` and `fromQuad()` clone helpers. `@rdfjs/types` is installed with Eyeling because the public declarations import it.
614
+
561
615
  Supported RDF-JS input terms include named nodes, blank nodes, literals, variables, default graph terms, and default-graph quads. Named-graph input quads are rejected clearly unless handled through N3/TriG compatibility mode.
562
616
 
563
617
  Use RDF-JS when you want Eyeling to sit inside a JavaScript RDF pipeline. Use raw N3 input when you need N3-only features such as quoted formulas or N3 rules represented directly in source text.
564
618
 
565
619
  ---
566
620
 
621
+ ## Eyelang second engine
622
+
623
+ Eyeling can also host the experimental `eyelang` engine. This is deliberately a second engine, not a rewrite of the N3 engine. The package therefore has two eyes:
624
+
625
+ - the default **N3 engine** for RDF/Notation3 reasoning;
626
+ - the **eyelang engine** for compact Prolog-style Horn clause programs.
627
+
628
+ Use the CLI option when running `.pl` programs:
629
+
630
+ ```bash
631
+ eyeling --engine eyelang examples/eyelang/ancestor.pl
632
+ ```
633
+
634
+ Use the CommonJS convenience API when the rest of your application already imports `eyeling`:
635
+
636
+ ```js
637
+ const { reason, reasonEyelang } = require('eyeling');
638
+
639
+ const program = `
640
+ materialize(out, 1).
641
+ in(done).
642
+ out(X) :- in(X).
643
+ `;
644
+
645
+ console.log(reason({ engine: 'eyelang' }, program));
646
+ console.log(await reasonEyelang(program));
647
+ ```
648
+
649
+ Use the subpath export for the full eyelang module API:
650
+
651
+ ```js
652
+ import { run, Program, Solver } from 'eyeling/eyelang';
653
+
654
+ const result = run(program);
655
+ console.log(result.stdout);
656
+ ```
657
+
658
+ The two engines intentionally keep separate parsers, term models, solvers, and built-ins. Shared package entry points, examples, documentation, and CLI routing make them convenient to use together while keeping their execution models inspectable.
659
+
660
+ Eyelang examples and language notes live under `examples/eyelang/`. The embedded engine runtime stays under `lib/eyelang/`, while the conformance corpus and test runners live under `test/eyelang/` so runtime code and test assets stay separate:
661
+
662
+ ```bash
663
+ npm run test:eyelang # integration check plus eyelang corpus
664
+ npm run test:eyelang:corpus # eyelang corpus only
665
+ ```
666
+
667
+ ---
668
+
567
669
  ## RDF compatibility mode and RDF 1.2
568
670
 
569
671
  RDF compatibility mode is enabled with `--rdf` on the CLI or `{ rdf: true }` in the API.
@@ -694,17 +796,20 @@ Supported operations include:
694
796
  - `dt:sameValueAs` and `dt:differentValueFrom` for value-space equality and inequality;
695
797
  - `dt:canonicalLiteral` for canonical literal production.
696
798
 
697
- The built-ins use strict datatype lexical validation for these checks, including exact dateTime rollover/canonicalization such as `24:00:00` normalizing to the following day. They cover RDF language strings and the OWL 2 RL-relevant XSD set: `xsd:string`, `xsd:normalizedString`, `xsd:token`, `xsd:language`, `xsd:Name`, `xsd:NCName`, `xsd:NMTOKEN`, `xsd:boolean`, `xsd:decimal`, `xsd:integer` and its bounded integer subtypes, `xsd:float`, `xsd:double`, `xsd:hexBinary`, `xsd:base64Binary`, `xsd:anyURI`, `xsd:dateTime`, and `xsd:dateTimeStamp`.
799
+ The built-ins use strict datatype lexical validation for these checks, including exact dateTime rollover/canonicalization such as `24:00:00` normalizing to the following day. They cover RDF language strings, `rdf:PlainLiteral`, `rdf:XMLLiteral`, `rdfs:Literal`, and the OWL 2 RL-relevant XSD set: `xsd:string`, `xsd:normalizedString`, `xsd:token`, `xsd:language`, `xsd:Name`, `xsd:NCName`, `xsd:NMTOKEN`, `xsd:boolean`, `xsd:decimal`, `xsd:integer` and its bounded integer subtypes, `xsd:float`, `xsd:double`, `xsd:hexBinary`, `xsd:base64Binary`, `xsd:anyURI`, `xsd:dateTime`, and `xsd:dateTimeStamp`. Lexical validation is intentionally strict for conformance: string-derived datatypes with whitespace-collapse facets must already be written in canonical collapsed lexical form, `xsd:float` and `xsd:double` enforce finite value ranges, `xsd:anyURI` rejects spaces, unsafe delimiters, and malformed percent escapes, and XML literals must be well-formed XML fragments.
698
800
 
699
801
  Example:
700
802
 
701
803
  ```n3
702
804
  @prefix : <http://example.org/> .
703
805
  @prefix dt: <https://eyereasoner.github.io/eyeling/datatype#> .
806
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
704
807
  @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
705
808
 
706
809
  {
707
810
  "01"^^xsd:integer dt:sameValueAs "1.0"^^xsd:decimal .
811
+ "hello@EN"^^rdf:PlainLiteral dt:sameValueAs "hello@en"^^rdf:PlainLiteral .
812
+ "<a/>"^^rdf:XMLLiteral dt:validForDatatype rdf:XMLLiteral .
708
813
  "2026-06-10T12:00:00Z"^^xsd:dateTime
709
814
  dt:sameValueAs "2026-06-10T14:00:00+02:00"^^xsd:dateTime .
710
815
  ("abc"^^xsd:integer xsd:integer) dt:validForDatatype false .
package/bin/eyeling.cjs CHANGED
@@ -1,10 +1,62 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- const bundle = require('../eyeling.js');
4
+ const path = require('node:path');
5
+ const { pathToFileURL } = require('node:url');
5
6
 
6
- if (!bundle || typeof bundle.main !== 'function') {
7
- throw new Error('Eyeling CLI bundle did not expose main()');
7
+ function extractEngineArg(argv) {
8
+ const filtered = [];
9
+ let engine = null;
10
+ let endOptions = false;
11
+
12
+ for (let i = 0; i < argv.length; i++) {
13
+ const arg = argv[i];
14
+
15
+ if (!endOptions && arg === '--') {
16
+ endOptions = true;
17
+ filtered.push(arg);
18
+ } else if (!endOptions && arg === '--engine') {
19
+ engine = argv[++i];
20
+ if (!engine) throw new Error('--engine needs a value');
21
+ } else if (!endOptions && arg.startsWith('--engine=')) {
22
+ engine = arg.slice('--engine='.length);
23
+ } else {
24
+ filtered.push(arg);
25
+ }
26
+ }
27
+
28
+ return { engine, argv: filtered };
8
29
  }
9
30
 
10
- bundle.main();
31
+ function normalizeEngineName(value) {
32
+ if (value == null || value === '') return 'n3';
33
+ const name = String(value).toLowerCase();
34
+ if (name === 'n3' || name === 'eyeling') return 'n3';
35
+ if (name === 'eyelang' || name === 'prolog' || name === 'horn') return 'eyelang';
36
+ throw new Error(`unknown Eyeling engine: ${value}`);
37
+ }
38
+
39
+ async function runEyelangCli(argv) {
40
+ const cliUrl = pathToFileURL(path.join(__dirname, '..', 'lib', 'eyelang', 'cli.mjs')).href;
41
+ const cli = await import(cliUrl);
42
+ await cli.main(argv);
43
+ }
44
+
45
+ const parsed = extractEngineArg(process.argv.slice(2));
46
+ const engine = normalizeEngineName(parsed.engine);
47
+
48
+ if (engine === 'eyelang') {
49
+ runEyelangCli(parsed.argv).catch((error) => {
50
+ console.error(`eyeling: ${error && error.message ? error.message : String(error)}`);
51
+ process.exit(1);
52
+ });
53
+ } else {
54
+ const bundle = require('../eyeling.js');
55
+
56
+ if (!bundle || typeof bundle.main !== 'function') {
57
+ throw new Error('Eyeling CLI bundle did not expose main()');
58
+ }
59
+
60
+ process.argv = [process.argv[0], process.argv[1], ...parsed.argv];
61
+ bundle.main();
62
+ }
package/browser.d.ts ADDED
@@ -0,0 +1,63 @@
1
+ export type EyelingPrefixEnv = import('eyeling').EyelingPrefixEnv;
2
+ export type EyelingIri = import('eyeling').EyelingIri;
3
+ export type EyelingLiteral = import('eyeling').EyelingLiteral;
4
+ export type EyelingVar = import('eyeling').EyelingVar;
5
+ export type EyelingBlank = import('eyeling').EyelingBlank;
6
+ export type EyelingListTerm = import('eyeling').EyelingListTerm;
7
+ export type EyelingOpenListTerm = import('eyeling').EyelingOpenListTerm;
8
+ export type EyelingGraphTerm = import('eyeling').EyelingGraphTerm;
9
+ export type EyelingTerm = import('eyeling').EyelingTerm;
10
+ export type EyelingTriple = import('eyeling').EyelingTriple;
11
+ export type EyelingRule = import('eyeling').EyelingRule;
12
+ export type EyelingAstBundle = import('eyeling').EyelingAstBundle;
13
+ export type N3Source = import('eyeling').N3Source;
14
+ export type N3SourceListInput = import('eyeling').N3SourceListInput;
15
+ export type RdfJsReasonInput = import('eyeling').RdfJsReasonInput;
16
+ export type StoreOptions = import('eyeling').StoreOptions;
17
+ export type BuiltinRegistrationContext = import('eyeling').BuiltinRegistrationContext;
18
+ export type BuiltinHandler = import('eyeling').BuiltinHandler;
19
+ export type ReasonStreamOptions = import('eyeling').ReasonStreamOptions;
20
+ export type ReasonStreamResult = import('eyeling').ReasonStreamResult;
21
+ export type FactStore = import('eyeling').FactStore;
22
+
23
+ export function runAsync(
24
+ input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput,
25
+ opts?: ReasonStreamOptions,
26
+ ): Promise<ReasonStreamResult & { store?: FactStore }>;
27
+ export function reasonStream(
28
+ input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput,
29
+ opts?: ReasonStreamOptions,
30
+ ): ReasonStreamResult;
31
+ export function reasonRdfJs(
32
+ input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput,
33
+ opts?: Omit<ReasonStreamOptions, 'rdfjs' | 'onDerived'>,
34
+ ): AsyncIterable<import('@rdfjs/types').Quad>;
35
+
36
+ export const INFERENCE_FUSE_EXIT_CODE: 65;
37
+ export const rdfjs: import('eyeling').EyelingModule['rdfjs'];
38
+ export function createFactStore(options?: string | StoreOptions | null): Promise<FactStore>;
39
+ export function registerBuiltin(iri: string, handler: BuiltinHandler): BuiltinHandler;
40
+ export function unregisterBuiltin(iri: string): boolean;
41
+ export function registerBuiltinModule(mod: unknown, origin?: string): boolean;
42
+ export function listBuiltinIris(): string[];
43
+ export function collectOutputStringsFromFacts(facts: EyelingTriple[], prefixes: EyelingPrefixEnv): string[];
44
+ export function prettyPrintQueryTriples(triples: EyelingTriple[], prefixes: EyelingPrefixEnv): string;
45
+
46
+ export interface EyelingBrowserModule {
47
+ readonly version: string;
48
+ runAsync: typeof runAsync;
49
+ reasonStream: typeof reasonStream;
50
+ reasonRdfJs: typeof reasonRdfJs;
51
+ readonly INFERENCE_FUSE_EXIT_CODE: typeof INFERENCE_FUSE_EXIT_CODE;
52
+ rdfjs: typeof rdfjs;
53
+ createFactStore: typeof createFactStore;
54
+ registerBuiltin: typeof registerBuiltin;
55
+ unregisterBuiltin: typeof unregisterBuiltin;
56
+ registerBuiltinModule: typeof registerBuiltinModule;
57
+ listBuiltinIris: typeof listBuiltinIris;
58
+ collectOutputStringsFromFacts: typeof collectOutputStringsFromFacts;
59
+ prettyPrintQueryTriples: typeof prettyPrintQueryTriples;
60
+ }
61
+
62
+ declare const eyeling: EyelingBrowserModule;
63
+ export default eyeling;