eyelang 1.2.2 → 1.3.1

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 (922) hide show
  1. package/README.md +4 -4
  2. package/docs/guide.md +230 -229
  3. package/docs/language-reference.md +169 -157
  4. package/examples/access-control-policy.eye +52 -0
  5. package/examples/ackermann.eye +47 -0
  6. package/examples/age.eye +26 -0
  7. package/examples/aliases-and-namespaces.eye +20 -0
  8. package/examples/alignment-demo.eye +44 -0
  9. package/examples/allen-interval-calculus.eye +64 -0
  10. package/examples/ancestor.eye +22 -0
  11. package/examples/animal.eye +21 -0
  12. package/examples/annotation.eye +34 -0
  13. package/examples/auroracare.eye +309 -0
  14. package/examples/backward.eye +11 -0
  15. package/examples/basic-monadic.eye +10032 -0
  16. package/examples/bayes-diagnosis.eye +108 -0
  17. package/examples/bayes-therapy.eye +189 -0
  18. package/examples/beam-deflection.eye +48 -0
  19. package/examples/binomial-vandermonde.eye +49 -0
  20. package/examples/blocks-world-planning.eye +77 -0
  21. package/examples/bmi.eye +232 -0
  22. package/examples/braking-safety-worlds.eye +69 -0
  23. package/examples/buck-converter-design.eye +83 -0
  24. package/examples/cache-performance.eye +56 -0
  25. package/examples/canary-release.eye +51 -0
  26. package/examples/cat-koko.eye +24 -0
  27. package/examples/catalan-convolution.eye +37 -0
  28. package/examples/chart-parser.eye +65 -0
  29. package/examples/clinical-trial-screening.eye +97 -0
  30. package/examples/collatz-1000.eye +45 -0
  31. package/examples/combinatorics-findall-sort.eye +38 -0
  32. package/examples/competitive-enzyme-kinetics.eye +78 -0
  33. package/examples/complex.eye +133 -0
  34. package/examples/composition-of-injective-functions-is-injective.eye +50 -0
  35. package/examples/context-association.eye +53 -0
  36. package/examples/context-schema-audit.eye +46 -0
  37. package/examples/continued-fraction-sqrt2.eye +36 -0
  38. package/examples/control-system.eye +76 -0
  39. package/examples/critical-path-schedule.eye +82 -0
  40. package/examples/cyclic-path.eye +18 -0
  41. package/examples/d3-group.eye +99 -0
  42. package/examples/dairy-energy-balance.eye +66 -0
  43. package/examples/data-negotiation.eye +38 -0
  44. package/examples/deep-taxonomy-10.eye +115 -0
  45. package/examples/deep-taxonomy-100.eye +385 -0
  46. package/examples/deep-taxonomy-1000.eye +3085 -0
  47. package/examples/deep-taxonomy-10000.eye +30094 -0
  48. package/examples/deep-taxonomy-100000.eye +300184 -0
  49. package/examples/delfour.eye +281 -0
  50. package/examples/deontic-logic.eye +52 -0
  51. package/examples/derived-backward-rule.eye +30 -0
  52. package/examples/derived-rule.eye +27 -0
  53. package/examples/diamond-property.eye +38 -0
  54. package/examples/dijkstra-findall-sort.eye +43 -0
  55. package/examples/dijkstra-risk-path.eye +87 -0
  56. package/examples/dijkstra.eye +50 -0
  57. package/examples/dining-philosophers.eye +147 -0
  58. package/examples/dog.eye +25 -0
  59. package/examples/dpv-odrl-purpose-mapping.eye +48 -0
  60. package/examples/drone-corridor-planner.eye +48 -0
  61. package/examples/easter-computus.eye +88 -0
  62. package/examples/electrical-rc-filter.eye +37 -0
  63. package/examples/epidemic-policy.eye +66 -0
  64. package/examples/equivalence-classes-overlap-implies-same-class.eye +27 -0
  65. package/examples/eulerian-path.eye +87 -0
  66. package/examples/ev-range-worlds.eye +87 -0
  67. package/examples/existential-rule.eye +21 -0
  68. package/examples/exoplanet-validation-worlds.eye +94 -0
  69. package/examples/expression-eval.eye +45 -0
  70. package/examples/family-cousins.eye +67 -0
  71. package/examples/fastpow.eye +61 -0
  72. package/examples/fft8-numeric.eye +85 -0
  73. package/examples/fibonacci.eye +60 -0
  74. package/examples/field-nitrogen-balance.eye +73 -0
  75. package/examples/flandor.eye +296 -0
  76. package/examples/floating-point.eye +28 -0
  77. package/examples/four-color-map.eye +133 -0
  78. package/examples/fundamental-theorem-arithmetic.eye +119 -0
  79. package/examples/gd-step-certified.eye +162 -0
  80. package/examples/gdpr-compliance.eye +69 -0
  81. package/examples/good-cobbler.eye +16 -0
  82. package/examples/gps.eye +146 -0
  83. package/examples/graph-reachability.eye +33 -0
  84. package/examples/graph.eye +35 -0
  85. package/examples/gray-code-counter.eye +47 -0
  86. package/examples/greatest-lower-bound-uniqueness.eye +30 -0
  87. package/examples/group-inverse-uniqueness.eye +36 -0
  88. package/examples/hamiltonian-path.eye +51 -0
  89. package/examples/hamming-code.eye +109 -0
  90. package/examples/hanoi.eye +19 -0
  91. package/examples/heat-loss.eye +56 -0
  92. package/examples/heron-theorem.eye +42 -0
  93. package/examples/ideal-gas-law.eye +39 -0
  94. package/examples/illegitimate-reasoning.eye +88 -0
  95. package/examples/integer-partitions.eye +35 -0
  96. package/examples/intuitionistic-logic-kripke.eye +69 -0
  97. package/examples/job-shop-scheduling.eye +48 -0
  98. package/examples/knapsack-optimization.eye +46 -0
  99. package/examples/knowledge-engineering-alignment-flow.eye +46 -0
  100. package/examples/law-of-cosines.eye +37 -0
  101. package/examples/least-squares-regression.eye +85 -0
  102. package/examples/linear-logic-resources.eye +51 -0
  103. package/examples/list-collection.eye +35 -0
  104. package/examples/lldm.eye +80 -0
  105. package/examples/manufacturing-quality-control.eye +73 -0
  106. package/examples/matrix-chain-order.eye +79 -0
  107. package/examples/microgrid-dispatch.eye +89 -0
  108. package/examples/missionaries-cannibals.eye +53 -0
  109. package/examples/modal-logic-kripke.eye +45 -0
  110. package/examples/modular-exponentiation.eye +35 -0
  111. package/examples/monkey-bananas.eye +45 -0
  112. package/examples/n-queens-8.eye +35 -0
  113. package/examples/network-sla.eye +48 -0
  114. package/examples/newton-raphson.eye +48 -0
  115. package/examples/nixon-diamond.eye +37 -0
  116. package/examples/observability-log-correlation.eye +40 -0
  117. package/examples/odrl-dpv-fpv-trust-flow.eye +51 -0
  118. package/examples/odrl-dpv-healthcare-risk-ranked.eye +270 -0
  119. package/examples/odrl-dpv-risk-ranked.eye +320 -0
  120. package/examples/orbital-transfer-design.eye +116 -0
  121. package/examples/path-discovery.eye +45013 -0
  122. package/examples/peano-arithmetic.eye +33 -0
  123. package/examples/peasant.eye +29 -0
  124. package/examples/pell-equation.eye +34 -0
  125. package/examples/pendulum-period.eye +50 -0
  126. package/examples/polynomial.eye +124 -0
  127. package/examples/proof/access-control-policy.eye +158 -0
  128. package/examples/proof/age.eye +71 -0
  129. package/examples/proof/aliases-and-namespaces.eye +78 -0
  130. package/examples/proof/ancestor.eye +140 -0
  131. package/examples/proof/animal.eye +68 -0
  132. package/examples/proof/annotation.eye +80 -0
  133. package/examples/proof/backward.eye +22 -0
  134. package/examples/proof/bayes-diagnosis.eye +208 -0
  135. package/examples/proof/beam-deflection.eye +227 -0
  136. package/examples/proof/cache-performance.eye +310 -0
  137. package/examples/proof/canary-release.eye +172 -0
  138. package/examples/proof/cat-koko.eye +86 -0
  139. package/examples/proof/chart-parser.eye +474 -0
  140. package/examples/proof/clinical-trial-screening.eye +389 -0
  141. package/examples/proof/composition-of-injective-functions-is-injective.eye +258 -0
  142. package/examples/proof/context-association.eye +78 -0
  143. package/examples/proof/data-negotiation.eye +76 -0
  144. package/examples/proof/deontic-logic.eye +109 -0
  145. package/examples/proof/derived-backward-rule.eye +74 -0
  146. package/examples/proof/derived-rule.eye +43 -0
  147. package/examples/proof/diamond-property.eye +307 -0
  148. package/examples/proof/dog.eye +31 -0
  149. package/examples/proof/dpv-odrl-purpose-mapping.eye +348 -0
  150. package/examples/proof/electrical-rc-filter.eye +105 -0
  151. package/examples/proof/epidemic-policy.eye +774 -0
  152. package/examples/proof/equivalence-classes-overlap-implies-same-class.eye +1098 -0
  153. package/examples/proof/existential-rule.eye +40 -0
  154. package/examples/proof/expression-eval.eye +105 -0
  155. package/examples/proof/floating-point.eye +160 -0
  156. package/examples/proof/gdpr-compliance.eye +199 -0
  157. package/examples/proof/good-cobbler.eye +16 -0
  158. package/examples/proof/graph-reachability.eye +151 -0
  159. package/examples/proof/greatest-lower-bound-uniqueness.eye +150 -0
  160. package/examples/proof/group-inverse-uniqueness.eye +84 -0
  161. package/examples/proof/hanoi.eye +185 -0
  162. package/examples/proof/heat-loss.eye +228 -0
  163. package/examples/proof/ideal-gas-law.eye +151 -0
  164. package/examples/proof/intuitionistic-logic-kripke.eye +133 -0
  165. package/examples/proof/linear-logic-resources.eye +205 -0
  166. package/examples/proof/list-collection.eye +52 -0
  167. package/examples/proof/modal-logic-kripke.eye +125 -0
  168. package/examples/proof/nixon-diamond.eye +181 -0
  169. package/examples/proof/proof-contrapositive.eye +78 -0
  170. package/examples/proof/reusable-builtins.eye +124 -0
  171. package/examples/proof/security-incident-correlation.eye +270 -0
  172. package/examples/proof/socket-age.eye +32 -0
  173. package/examples/proof/socket-family.eye +59 -0
  174. package/examples/proof/socrates.eye +38 -0
  175. package/examples/proof/term-tools.eye +95 -0
  176. package/examples/proof/witch.eye +216 -0
  177. package/examples/proof-contrapositive.eye +27 -0
  178. package/examples/quadratic-formula.eye +56 -0
  179. package/examples/radioactive-decay.eye +58 -0
  180. package/examples/reusable-builtins.eye +36 -0
  181. package/examples/riemann-hypothesis.eye +110 -0
  182. package/examples/security-incident-correlation.eye +69 -0
  183. package/examples/send-more-money.eye +71 -0
  184. package/examples/service-impact.eye +41 -0
  185. package/examples/sieve.eye +20 -0
  186. package/examples/skolem-functions.eye +52 -0
  187. package/examples/socket-age.eye +39 -0
  188. package/examples/socket-family.eye +28 -0
  189. package/examples/socrates.eye +19 -0
  190. package/examples/stable-marriage.eye +92 -0
  191. package/examples/statistics-summary.eye +56 -0
  192. package/examples/stirling-bell-numbers.eye +32 -0
  193. package/examples/sudoku-4x4.eye +54 -0
  194. package/examples/superdense-coding.eye +84 -0
  195. package/examples/term-tools.eye +32 -0
  196. package/examples/totient-summatory.eye +33 -0
  197. package/examples/trust-flow-provenance-threshold.eye +47 -0
  198. package/examples/turing.eye +69 -0
  199. package/examples/vector-similarity.eye +60 -0
  200. package/examples/vulnerability-impact.eye +69 -0
  201. package/examples/web-names.eye +83 -0
  202. package/examples/weighted-interval-scheduling.eye +81 -0
  203. package/examples/witch.eye +38 -0
  204. package/examples/wolf-goat-cabbage.eye +56 -0
  205. package/examples/zebra.eye +45 -0
  206. package/index.d.ts +1 -1
  207. package/package.json +2 -2
  208. package/playground.html +10 -10
  209. package/src/cli.js +2 -2
  210. package/src/explain.js +1 -1
  211. package/src/parser.js +37 -7
  212. package/src/program.js +3 -3
  213. package/src/solver.js +2 -2
  214. package/src/term.js +9 -0
  215. package/test/conformance/README.md +2 -2
  216. package/test/conformance/cases/001_fact_output.eye +4 -0
  217. package/test/conformance/cases/002_rule_recursion.eye +7 -0
  218. package/test/conformance/cases/002_rule_recursion.query +1 -1
  219. package/test/conformance/cases/003_terms_and_readback.eye +16 -0
  220. package/test/conformance/cases/003_terms_and_readback.query +1 -1
  221. package/test/conformance/cases/004_conjunction_and_parentheses.eye +5 -0
  222. package/test/conformance/cases/004_conjunction_and_parentheses.query +1 -1
  223. package/test/conformance/cases/005_list_deconstruction.eye +6 -0
  224. package/test/conformance/cases/005_list_deconstruction.query +1 -1
  225. package/test/conformance/cases/006_comma_formula_data.eye +4 -0
  226. package/test/conformance/cases/006_comma_formula_data.query +1 -1
  227. package/test/conformance/cases/007_anonymous_variables.eye +5 -0
  228. package/test/conformance/cases/007_anonymous_variables.query +1 -1
  229. package/test/conformance/cases/008_graphic_atoms.eye +6 -0
  230. package/test/conformance/cases/008_graphic_atoms.query +1 -1
  231. package/test/conformance/cases/009_comments_and_whitespace.eye +5 -0
  232. package/test/conformance/cases/009_comments_and_whitespace.query +1 -1
  233. package/test/conformance/cases/010_variable_scope_and_reuse.eye +8 -0
  234. package/test/conformance/cases/010_variable_scope_and_reuse.query +1 -1
  235. package/test/conformance/cases/011_predicate_arity.eye +6 -0
  236. package/test/conformance/cases/011_predicate_arity.query +1 -1
  237. package/test/conformance/cases/012_nested_compound_unification.eye +5 -0
  238. package/test/conformance/cases/012_nested_compound_unification.query +1 -1
  239. package/test/conformance/cases/013_multiple_clauses_order.eye +6 -0
  240. package/test/conformance/cases/013_multiple_clauses_order.query +1 -1
  241. package/test/conformance/cases/014_failure_filters_answers.eye +7 -0
  242. package/test/conformance/cases/014_failure_filters_answers.query +1 -1
  243. package/test/conformance/cases/015_improper_list_unification.eye +6 -0
  244. package/test/conformance/cases/015_improper_list_unification.query +1 -1
  245. package/test/conformance/cases/016_arity_zero_atom.eye +4 -0
  246. package/test/conformance/cases/017_three_step_recursion.eye +8 -0
  247. package/test/conformance/cases/017_three_step_recursion.query +1 -1
  248. package/test/conformance/cases/018_quoted_atom_readback.eye +6 -0
  249. package/test/conformance/cases/018_quoted_atom_readback.query +1 -1
  250. package/test/conformance/cases/019_parenthesized_three_conjuncts.eye +7 -0
  251. package/test/conformance/cases/019_parenthesized_three_conjuncts.query +1 -1
  252. package/test/conformance/cases/020_nested_list_terms.eye +5 -0
  253. package/test/conformance/cases/020_nested_list_terms.query +1 -1
  254. package/test/conformance/cases/021_repeated_variable_head.eye +7 -0
  255. package/test/conformance/cases/022_rule_head_structure.eye +5 -0
  256. package/test/conformance/cases/023_quoted_escapes_readback.eye +5 -0
  257. package/test/conformance/cases/024_numeric_literal_readback.eye +6 -0
  258. package/test/conformance/cases/025_body_parentheses_with_formula_data.eye +5 -0
  259. package/test/conformance/cases/026_question_underscore_named_variable_reuse.eye +5 -0
  260. package/test/conformance/cases/027_default_derived_output.eye +5 -0
  261. package/test/conformance/cases/028_materialize_focus.eye +5 -0
  262. package/test/conformance/cases/029_arithmetic_and_comparison.eye +11 -0
  263. package/test/conformance/cases/029_arithmetic_and_comparison.query +1 -1
  264. package/test/conformance/cases/030_strings_and_atoms.eye +4 -0
  265. package/test/conformance/cases/030_strings_and_atoms.query +1 -1
  266. package/test/conformance/cases/031_lists_aggregation_ordering.eye +10 -0
  267. package/test/conformance/cases/031_lists_aggregation_ordering.query +1 -1
  268. package/test/conformance/cases/032_holds_parts.eye +4 -0
  269. package/test/conformance/cases/033_negation_once_generators.eye +7 -0
  270. package/test/conformance/cases/033_negation_once_generators.query +1 -1
  271. package/test/conformance/cases/034_equality_and_inequality.eye +6 -0
  272. package/test/conformance/cases/034_equality_and_inequality.query +1 -1
  273. package/test/conformance/cases/035_list_relations.eye +5 -0
  274. package/test/conformance/cases/035_list_relations.query +1 -1
  275. package/test/conformance/cases/036_append_splits.eye +3 -0
  276. package/test/conformance/cases/036_append_splits.query +1 -1
  277. package/test/conformance/cases/037_matching_and_comparison.query +1 -1
  278. package/test/conformance/cases/038_table_declaration.eye +8 -0
  279. package/test/conformance/cases/038_table_declaration.query +1 -0
  280. package/test/conformance/cases/039_numeric_functions.eye +9 -0
  281. package/test/conformance/cases/039_numeric_functions.query +1 -1
  282. package/test/conformance/cases/040_between_enumeration.eye +3 -0
  283. package/test/conformance/cases/040_between_enumeration.query +1 -1
  284. package/test/conformance/cases/041_smallest_divisor.eye +3 -0
  285. package/test/conformance/cases/041_smallest_divisor.query +1 -1
  286. package/test/conformance/cases/042_negation_filter.eye +7 -0
  287. package/test/conformance/cases/042_negation_filter.query +1 -1
  288. package/test/conformance/cases/043_once_user_predicate.eye +5 -0
  289. package/test/conformance/cases/043_once_user_predicate.query +1 -1
  290. package/test/conformance/cases/044_findall_user_goal.eye +6 -0
  291. package/test/conformance/cases/044_findall_user_goal.query +1 -1
  292. package/test/conformance/cases/045_sort_deduplicates_atoms.eye +3 -0
  293. package/test/conformance/cases/045_sort_deduplicates_atoms.query +1 -1
  294. package/test/conformance/cases/046_append_bound_prefix_suffix.eye +4 -0
  295. package/test/conformance/cases/046_append_bound_prefix_suffix.query +1 -1
  296. package/test/conformance/cases/047_nth0_index_generation.eye +3 -0
  297. package/test/conformance/cases/047_nth0_index_generation.query +1 -1
  298. package/test/conformance/cases/048_set_nth0_edges.eye +4 -0
  299. package/test/conformance/cases/048_set_nth0_edges.query +1 -1
  300. package/test/conformance/cases/049_select_duplicate_occurrences.eye +3 -0
  301. package/test/conformance/cases/049_select_duplicate_occurrences.query +1 -1
  302. package/test/conformance/cases/050_not_member_filter.eye +6 -0
  303. package/test/conformance/cases/050_not_member_filter.query +1 -1
  304. package/test/conformance/cases/051_nested_holds_parts.eye +4 -0
  305. package/test/conformance/cases/052_holds_member.eye +3 -0
  306. package/test/conformance/cases/053_materialize_excludes_source_fact.eye +6 -0
  307. package/test/conformance/cases/054_numeric_and_lexical_comparison.query +1 -1
  308. package/test/conformance/cases/055_string_matching_filters.eye +6 -0
  309. package/test/conformance/cases/055_string_matching_filters.query +1 -1
  310. package/test/conformance/cases/056_string_and_atom_concat.eye +3 -0
  311. package/test/conformance/cases/056_string_and_atom_concat.query +1 -1
  312. package/test/conformance/cases/057_countall_empty_and_nonempty.eye +4 -0
  313. package/test/conformance/cases/057_countall_empty_and_nonempty.query +1 -1
  314. package/test/conformance/cases/058_sumall_numeric_template.eye +5 -0
  315. package/test/conformance/cases/058_sumall_numeric_template.query +1 -1
  316. package/test/conformance/cases/059_aggregate_min_template.eye +5 -0
  317. package/test/conformance/cases/059_aggregate_min_template.query +1 -1
  318. package/test/conformance/cases/060_aggregate_max_compound_key.eye +5 -0
  319. package/test/conformance/cases/060_aggregate_max_compound_key.query +1 -1
  320. package/test/conformance/cases/061_date_difference.eye +4 -0
  321. package/test/conformance/cases/062_reusable_numeric_builtins.eye +10 -0
  322. package/test/conformance/cases/063_reusable_list_builtins.eye +11 -0
  323. package/test/conformance/cases/064_reusable_string_builtins.eye +12 -0
  324. package/test/conformance/cases/065_reusable_term_control_builtins.eye +11 -0
  325. package/test/conformance/cases/066_numeric_edges.eye +14 -0
  326. package/test/conformance/cases/067_list_edges.eye +10 -0
  327. package/test/conformance/cases/068_list_generation_order.eye +7 -0
  328. package/test/conformance/cases/069_list_summaries_and_sets.eye +9 -0
  329. package/test/conformance/cases/070_matches_named_captures.eye +13 -0
  330. package/test/conformance/cases/071_string_edges.eye +10 -0
  331. package/test/conformance/cases/072_string_conversions.eye +10 -0
  332. package/test/conformance/cases/073_term_introspection_edges.eye +10 -0
  333. package/test/conformance/cases/074_forall_edges.eye +10 -0
  334. package/test/conformance/cases/075_aggregation_edges.eye +12 -0
  335. package/test/conformance/cases/076_composed_reusable_builtins.eye +8 -0
  336. package/test/conformance/cases/077_recursive_path_with_lists.eye +10 -0
  337. package/test/conformance/cases/078_mutual_recursion_with_arithmetic.eye +7 -0
  338. package/test/conformance/cases/079_big_integer_arithmetic.eye +8 -0
  339. package/test/conformance/cases/080_rounding_modes.eye +10 -0
  340. package/test/conformance/cases/081_zero_safe_numeric_functions.eye +9 -0
  341. package/test/conformance/cases/083_between_modes_and_empty_ranges.eye +8 -0
  342. package/test/conformance/cases/084_append_and_select_composition.eye +7 -0
  343. package/test/conformance/cases/085_nth_and_update_edges.eye +8 -0
  344. package/test/conformance/cases/086_slicing_pipeline.eye +10 -0
  345. package/test/conformance/cases/087_sort_reverse_length.eye +8 -0
  346. package/test/conformance/cases/088_list_summaries_failures.eye +8 -0
  347. package/test/conformance/cases/089_string_split_join_pipeline.eye +7 -0
  348. package/test/conformance/cases/090_string_substring_replace_edges.eye +9 -0
  349. package/test/conformance/cases/091_string_case_and_trim.eye +7 -0
  350. package/test/conformance/cases/092_scalar_string_conversions.eye +9 -0
  351. package/test/conformance/cases/093_regex_named_captures_context.eye +8 -0
  352. package/test/conformance/cases/094_context_holds_enumeration.eye +7 -0
  353. package/test/conformance/cases/095_term_introspection_roundtrip.eye +8 -0
  354. package/test/conformance/cases/096_functor_scalar_edges.eye +8 -0
  355. package/test/conformance/cases/097_control_negation_once_forall.eye +13 -0
  356. package/test/conformance/cases/098_aggregation_nested_templates.eye +11 -0
  357. package/test/conformance/cases/099_materialize_multiple_arities.eye +8 -0
  358. package/test/conformance/cases/100_reusable_builtin_workflow.eye +10 -0
  359. package/test/conformance/cases/101_question_mark_variables.eye +7 -0
  360. package/test/conformance/cases/102_table_declaration.eye +11 -0
  361. package/test/conformance/cases/103_angle_iri_atoms.eye +7 -0
  362. package/test/conformance/expected/101_question_mark_variables.eye +3 -0
  363. package/test/conformance/expected/102_table_declaration.eye +6 -0
  364. package/test/conformance/expected/103_angle_iri_atoms.eye +3 -0
  365. package/test/run-conformance.mjs +4 -4
  366. package/test/run-examples.mjs +51 -51
  367. package/test/run-regression.mjs +178 -74
  368. package/examples/access-control-policy.pl +0 -52
  369. package/examples/ackermann.pl +0 -47
  370. package/examples/age.pl +0 -26
  371. package/examples/aliases-and-namespaces.pl +0 -20
  372. package/examples/alignment-demo.pl +0 -44
  373. package/examples/allen-interval-calculus.pl +0 -64
  374. package/examples/ancestor.pl +0 -22
  375. package/examples/animal.pl +0 -21
  376. package/examples/annotation.pl +0 -34
  377. package/examples/auroracare.pl +0 -309
  378. package/examples/backward.pl +0 -11
  379. package/examples/basic-monadic.pl +0 -10032
  380. package/examples/bayes-diagnosis.pl +0 -108
  381. package/examples/bayes-therapy.pl +0 -189
  382. package/examples/beam-deflection.pl +0 -48
  383. package/examples/binomial-vandermonde.pl +0 -49
  384. package/examples/blocks-world-planning.pl +0 -77
  385. package/examples/bmi.pl +0 -232
  386. package/examples/braking-safety-worlds.pl +0 -69
  387. package/examples/buck-converter-design.pl +0 -83
  388. package/examples/cache-performance.pl +0 -56
  389. package/examples/canary-release.pl +0 -51
  390. package/examples/cat-koko.pl +0 -24
  391. package/examples/catalan-convolution.pl +0 -37
  392. package/examples/chart-parser.pl +0 -65
  393. package/examples/clinical-trial-screening.pl +0 -97
  394. package/examples/collatz-1000.pl +0 -45
  395. package/examples/combinatorics-findall-sort.pl +0 -38
  396. package/examples/competitive-enzyme-kinetics.pl +0 -78
  397. package/examples/complex.pl +0 -133
  398. package/examples/composition-of-injective-functions-is-injective.pl +0 -50
  399. package/examples/context-association.pl +0 -53
  400. package/examples/context-schema-audit.pl +0 -46
  401. package/examples/continued-fraction-sqrt2.pl +0 -36
  402. package/examples/control-system.pl +0 -76
  403. package/examples/critical-path-schedule.pl +0 -82
  404. package/examples/cyclic-path.pl +0 -18
  405. package/examples/d3-group.pl +0 -99
  406. package/examples/dairy-energy-balance.pl +0 -66
  407. package/examples/data-negotiation.pl +0 -38
  408. package/examples/deep-taxonomy-10.pl +0 -115
  409. package/examples/deep-taxonomy-100.pl +0 -385
  410. package/examples/deep-taxonomy-1000.pl +0 -3085
  411. package/examples/deep-taxonomy-10000.pl +0 -30094
  412. package/examples/deep-taxonomy-100000.pl +0 -300184
  413. package/examples/delfour.pl +0 -281
  414. package/examples/deontic-logic.pl +0 -52
  415. package/examples/derived-backward-rule.pl +0 -30
  416. package/examples/derived-rule.pl +0 -27
  417. package/examples/diamond-property.pl +0 -38
  418. package/examples/dijkstra-findall-sort.pl +0 -43
  419. package/examples/dijkstra-risk-path.pl +0 -87
  420. package/examples/dijkstra.pl +0 -50
  421. package/examples/dining-philosophers.pl +0 -147
  422. package/examples/dog.pl +0 -25
  423. package/examples/dpv-odrl-purpose-mapping.pl +0 -48
  424. package/examples/drone-corridor-planner.pl +0 -48
  425. package/examples/easter-computus.pl +0 -88
  426. package/examples/electrical-rc-filter.pl +0 -37
  427. package/examples/epidemic-policy.pl +0 -66
  428. package/examples/equivalence-classes-overlap-implies-same-class.pl +0 -27
  429. package/examples/eulerian-path.pl +0 -87
  430. package/examples/ev-range-worlds.pl +0 -87
  431. package/examples/existential-rule.pl +0 -21
  432. package/examples/exoplanet-validation-worlds.pl +0 -94
  433. package/examples/expression-eval.pl +0 -45
  434. package/examples/family-cousins.pl +0 -67
  435. package/examples/fastpow.pl +0 -61
  436. package/examples/fft8-numeric.pl +0 -85
  437. package/examples/fibonacci.pl +0 -60
  438. package/examples/field-nitrogen-balance.pl +0 -73
  439. package/examples/flandor.pl +0 -296
  440. package/examples/floating-point.pl +0 -28
  441. package/examples/four-color-map.pl +0 -133
  442. package/examples/fundamental-theorem-arithmetic.pl +0 -119
  443. package/examples/gd-step-certified.pl +0 -162
  444. package/examples/gdpr-compliance.pl +0 -69
  445. package/examples/good-cobbler.pl +0 -16
  446. package/examples/gps.pl +0 -146
  447. package/examples/graph-reachability.pl +0 -33
  448. package/examples/graph.pl +0 -35
  449. package/examples/gray-code-counter.pl +0 -47
  450. package/examples/greatest-lower-bound-uniqueness.pl +0 -30
  451. package/examples/group-inverse-uniqueness.pl +0 -36
  452. package/examples/hamiltonian-path.pl +0 -51
  453. package/examples/hamming-code.pl +0 -109
  454. package/examples/hanoi.pl +0 -19
  455. package/examples/heat-loss.pl +0 -56
  456. package/examples/heron-theorem.pl +0 -42
  457. package/examples/ideal-gas-law.pl +0 -39
  458. package/examples/illegitimate-reasoning.pl +0 -88
  459. package/examples/integer-partitions.pl +0 -35
  460. package/examples/intuitionistic-logic-kripke.pl +0 -69
  461. package/examples/job-shop-scheduling.pl +0 -48
  462. package/examples/knapsack-optimization.pl +0 -46
  463. package/examples/knowledge-engineering-alignment-flow.pl +0 -46
  464. package/examples/law-of-cosines.pl +0 -37
  465. package/examples/least-squares-regression.pl +0 -85
  466. package/examples/linear-logic-resources.pl +0 -51
  467. package/examples/list-collection.pl +0 -35
  468. package/examples/lldm.pl +0 -80
  469. package/examples/manufacturing-quality-control.pl +0 -73
  470. package/examples/matrix-chain-order.pl +0 -79
  471. package/examples/microgrid-dispatch.pl +0 -89
  472. package/examples/missionaries-cannibals.pl +0 -53
  473. package/examples/modal-logic-kripke.pl +0 -45
  474. package/examples/modular-exponentiation.pl +0 -35
  475. package/examples/monkey-bananas.pl +0 -45
  476. package/examples/n-queens-8.pl +0 -35
  477. package/examples/network-sla.pl +0 -48
  478. package/examples/newton-raphson.pl +0 -48
  479. package/examples/nixon-diamond.pl +0 -37
  480. package/examples/observability-log-correlation.pl +0 -40
  481. package/examples/odrl-dpv-fpv-trust-flow.pl +0 -51
  482. package/examples/odrl-dpv-healthcare-risk-ranked.pl +0 -270
  483. package/examples/odrl-dpv-risk-ranked.pl +0 -320
  484. package/examples/orbital-transfer-design.pl +0 -116
  485. package/examples/path-discovery.pl +0 -45013
  486. package/examples/peano-arithmetic.pl +0 -33
  487. package/examples/peasant.pl +0 -29
  488. package/examples/pell-equation.pl +0 -34
  489. package/examples/pendulum-period.pl +0 -50
  490. package/examples/polynomial.pl +0 -124
  491. package/examples/proof/access-control-policy.pl +0 -158
  492. package/examples/proof/age.pl +0 -71
  493. package/examples/proof/aliases-and-namespaces.pl +0 -78
  494. package/examples/proof/ancestor.pl +0 -140
  495. package/examples/proof/animal.pl +0 -68
  496. package/examples/proof/annotation.pl +0 -80
  497. package/examples/proof/backward.pl +0 -22
  498. package/examples/proof/bayes-diagnosis.pl +0 -208
  499. package/examples/proof/beam-deflection.pl +0 -227
  500. package/examples/proof/cache-performance.pl +0 -310
  501. package/examples/proof/canary-release.pl +0 -172
  502. package/examples/proof/cat-koko.pl +0 -86
  503. package/examples/proof/chart-parser.pl +0 -474
  504. package/examples/proof/clinical-trial-screening.pl +0 -389
  505. package/examples/proof/composition-of-injective-functions-is-injective.pl +0 -258
  506. package/examples/proof/context-association.pl +0 -78
  507. package/examples/proof/data-negotiation.pl +0 -76
  508. package/examples/proof/deontic-logic.pl +0 -109
  509. package/examples/proof/derived-backward-rule.pl +0 -74
  510. package/examples/proof/derived-rule.pl +0 -43
  511. package/examples/proof/diamond-property.pl +0 -307
  512. package/examples/proof/dog.pl +0 -31
  513. package/examples/proof/dpv-odrl-purpose-mapping.pl +0 -348
  514. package/examples/proof/electrical-rc-filter.pl +0 -105
  515. package/examples/proof/epidemic-policy.pl +0 -774
  516. package/examples/proof/equivalence-classes-overlap-implies-same-class.pl +0 -1098
  517. package/examples/proof/existential-rule.pl +0 -40
  518. package/examples/proof/expression-eval.pl +0 -105
  519. package/examples/proof/floating-point.pl +0 -160
  520. package/examples/proof/gdpr-compliance.pl +0 -199
  521. package/examples/proof/good-cobbler.pl +0 -16
  522. package/examples/proof/graph-reachability.pl +0 -151
  523. package/examples/proof/greatest-lower-bound-uniqueness.pl +0 -150
  524. package/examples/proof/group-inverse-uniqueness.pl +0 -84
  525. package/examples/proof/hanoi.pl +0 -185
  526. package/examples/proof/heat-loss.pl +0 -228
  527. package/examples/proof/ideal-gas-law.pl +0 -151
  528. package/examples/proof/intuitionistic-logic-kripke.pl +0 -133
  529. package/examples/proof/linear-logic-resources.pl +0 -205
  530. package/examples/proof/list-collection.pl +0 -52
  531. package/examples/proof/modal-logic-kripke.pl +0 -125
  532. package/examples/proof/nixon-diamond.pl +0 -181
  533. package/examples/proof/proof-contrapositive.pl +0 -78
  534. package/examples/proof/reusable-builtins.pl +0 -124
  535. package/examples/proof/security-incident-correlation.pl +0 -270
  536. package/examples/proof/socket-age.pl +0 -32
  537. package/examples/proof/socket-family.pl +0 -59
  538. package/examples/proof/socrates.pl +0 -38
  539. package/examples/proof/term-tools.pl +0 -95
  540. package/examples/proof/witch.pl +0 -216
  541. package/examples/proof-contrapositive.pl +0 -27
  542. package/examples/quadratic-formula.pl +0 -56
  543. package/examples/radioactive-decay.pl +0 -58
  544. package/examples/reusable-builtins.pl +0 -36
  545. package/examples/riemann-hypothesis.pl +0 -110
  546. package/examples/security-incident-correlation.pl +0 -69
  547. package/examples/send-more-money.pl +0 -71
  548. package/examples/service-impact.pl +0 -41
  549. package/examples/sieve.pl +0 -20
  550. package/examples/skolem-functions.pl +0 -52
  551. package/examples/socket-age.pl +0 -39
  552. package/examples/socket-family.pl +0 -28
  553. package/examples/socrates.pl +0 -19
  554. package/examples/stable-marriage.pl +0 -92
  555. package/examples/statistics-summary.pl +0 -56
  556. package/examples/stirling-bell-numbers.pl +0 -32
  557. package/examples/sudoku-4x4.pl +0 -54
  558. package/examples/superdense-coding.pl +0 -84
  559. package/examples/term-tools.pl +0 -32
  560. package/examples/totient-summatory.pl +0 -33
  561. package/examples/trust-flow-provenance-threshold.pl +0 -47
  562. package/examples/turing.pl +0 -69
  563. package/examples/vector-similarity.pl +0 -60
  564. package/examples/vulnerability-impact.pl +0 -69
  565. package/examples/web-names.pl +0 -83
  566. package/examples/weighted-interval-scheduling.pl +0 -81
  567. package/examples/witch.pl +0 -38
  568. package/examples/wolf-goat-cabbage.pl +0 -56
  569. package/examples/zebra.pl +0 -45
  570. package/test/conformance/cases/001_fact_output.pl +0 -4
  571. package/test/conformance/cases/002_rule_recursion.pl +0 -7
  572. package/test/conformance/cases/003_terms_and_readback.pl +0 -16
  573. package/test/conformance/cases/004_conjunction_and_parentheses.pl +0 -5
  574. package/test/conformance/cases/005_list_deconstruction.pl +0 -6
  575. package/test/conformance/cases/006_comma_formula_data.pl +0 -4
  576. package/test/conformance/cases/007_anonymous_variables.pl +0 -5
  577. package/test/conformance/cases/008_graphic_atoms.pl +0 -6
  578. package/test/conformance/cases/009_comments_and_whitespace.pl +0 -5
  579. package/test/conformance/cases/010_variable_scope_and_reuse.pl +0 -8
  580. package/test/conformance/cases/011_predicate_arity.pl +0 -6
  581. package/test/conformance/cases/012_nested_compound_unification.pl +0 -5
  582. package/test/conformance/cases/013_multiple_clauses_order.pl +0 -6
  583. package/test/conformance/cases/014_failure_filters_answers.pl +0 -7
  584. package/test/conformance/cases/015_improper_list_unification.pl +0 -6
  585. package/test/conformance/cases/016_arity_zero_atom.pl +0 -4
  586. package/test/conformance/cases/017_three_step_recursion.pl +0 -8
  587. package/test/conformance/cases/018_quoted_atom_readback.pl +0 -6
  588. package/test/conformance/cases/019_parenthesized_three_conjuncts.pl +0 -7
  589. package/test/conformance/cases/020_nested_list_terms.pl +0 -5
  590. package/test/conformance/cases/021_repeated_variable_head.pl +0 -7
  591. package/test/conformance/cases/022_rule_head_structure.pl +0 -5
  592. package/test/conformance/cases/023_quoted_escapes_readback.pl +0 -5
  593. package/test/conformance/cases/024_numeric_literal_readback.pl +0 -6
  594. package/test/conformance/cases/025_body_parentheses_with_formula_data.pl +0 -5
  595. package/test/conformance/cases/026_underscore_named_variable_reuse.pl +0 -5
  596. package/test/conformance/cases/027_default_derived_output.pl +0 -5
  597. package/test/conformance/cases/028_materialize_focus.pl +0 -5
  598. package/test/conformance/cases/029_arithmetic_and_comparison.pl +0 -11
  599. package/test/conformance/cases/030_strings_and_atoms.pl +0 -4
  600. package/test/conformance/cases/031_lists_aggregation_ordering.pl +0 -10
  601. package/test/conformance/cases/032_holds_parts.pl +0 -4
  602. package/test/conformance/cases/033_negation_once_generators.pl +0 -7
  603. package/test/conformance/cases/034_equality_and_inequality.pl +0 -6
  604. package/test/conformance/cases/035_list_relations.pl +0 -5
  605. package/test/conformance/cases/036_append_splits.pl +0 -3
  606. package/test/conformance/cases/038_memoize_declaration.pl +0 -8
  607. package/test/conformance/cases/038_memoize_declaration.query +0 -1
  608. package/test/conformance/cases/039_numeric_functions.pl +0 -9
  609. package/test/conformance/cases/040_between_enumeration.pl +0 -3
  610. package/test/conformance/cases/041_smallest_divisor.pl +0 -3
  611. package/test/conformance/cases/042_negation_filter.pl +0 -7
  612. package/test/conformance/cases/043_once_user_predicate.pl +0 -5
  613. package/test/conformance/cases/044_findall_user_goal.pl +0 -6
  614. package/test/conformance/cases/045_sort_deduplicates_atoms.pl +0 -3
  615. package/test/conformance/cases/046_append_bound_prefix_suffix.pl +0 -4
  616. package/test/conformance/cases/047_nth0_index_generation.pl +0 -3
  617. package/test/conformance/cases/048_set_nth0_edges.pl +0 -4
  618. package/test/conformance/cases/049_select_duplicate_occurrences.pl +0 -3
  619. package/test/conformance/cases/050_not_member_filter.pl +0 -6
  620. package/test/conformance/cases/051_nested_holds_parts.pl +0 -4
  621. package/test/conformance/cases/052_holds_member.pl +0 -3
  622. package/test/conformance/cases/053_materialize_excludes_source_fact.pl +0 -6
  623. package/test/conformance/cases/055_string_matching_filters.pl +0 -6
  624. package/test/conformance/cases/056_string_and_atom_concat.pl +0 -3
  625. package/test/conformance/cases/057_countall_empty_and_nonempty.pl +0 -4
  626. package/test/conformance/cases/058_sumall_numeric_template.pl +0 -5
  627. package/test/conformance/cases/059_aggregate_min_template.pl +0 -5
  628. package/test/conformance/cases/060_aggregate_max_compound_key.pl +0 -5
  629. package/test/conformance/cases/061_date_difference.pl +0 -4
  630. package/test/conformance/cases/062_reusable_numeric_builtins.pl +0 -10
  631. package/test/conformance/cases/063_reusable_list_builtins.pl +0 -11
  632. package/test/conformance/cases/064_reusable_string_builtins.pl +0 -12
  633. package/test/conformance/cases/065_reusable_term_control_builtins.pl +0 -11
  634. package/test/conformance/cases/066_numeric_edges.pl +0 -14
  635. package/test/conformance/cases/067_list_edges.pl +0 -10
  636. package/test/conformance/cases/068_list_generation_order.pl +0 -7
  637. package/test/conformance/cases/069_list_summaries_and_sets.pl +0 -9
  638. package/test/conformance/cases/070_matches_named_captures.pl +0 -13
  639. package/test/conformance/cases/071_string_edges.pl +0 -10
  640. package/test/conformance/cases/072_string_conversions.pl +0 -10
  641. package/test/conformance/cases/073_term_introspection_edges.pl +0 -10
  642. package/test/conformance/cases/074_forall_edges.pl +0 -10
  643. package/test/conformance/cases/075_aggregation_edges.pl +0 -12
  644. package/test/conformance/cases/076_composed_reusable_builtins.pl +0 -8
  645. package/test/conformance/cases/077_recursive_path_with_lists.pl +0 -10
  646. package/test/conformance/cases/078_mutual_recursion_with_arithmetic.pl +0 -7
  647. package/test/conformance/cases/079_big_integer_arithmetic.pl +0 -8
  648. package/test/conformance/cases/080_rounding_modes.pl +0 -10
  649. package/test/conformance/cases/081_zero_safe_numeric_functions.pl +0 -9
  650. package/test/conformance/cases/083_between_modes_and_empty_ranges.pl +0 -8
  651. package/test/conformance/cases/084_append_and_select_composition.pl +0 -7
  652. package/test/conformance/cases/085_nth_and_update_edges.pl +0 -8
  653. package/test/conformance/cases/086_slicing_pipeline.pl +0 -10
  654. package/test/conformance/cases/087_sort_reverse_length.pl +0 -8
  655. package/test/conformance/cases/088_list_summaries_failures.pl +0 -8
  656. package/test/conformance/cases/089_string_split_join_pipeline.pl +0 -7
  657. package/test/conformance/cases/090_string_substring_replace_edges.pl +0 -9
  658. package/test/conformance/cases/091_string_case_and_trim.pl +0 -7
  659. package/test/conformance/cases/092_scalar_string_conversions.pl +0 -9
  660. package/test/conformance/cases/093_regex_named_captures_context.pl +0 -8
  661. package/test/conformance/cases/094_context_holds_enumeration.pl +0 -7
  662. package/test/conformance/cases/095_term_introspection_roundtrip.pl +0 -8
  663. package/test/conformance/cases/096_functor_scalar_edges.pl +0 -8
  664. package/test/conformance/cases/097_control_negation_once_forall.pl +0 -13
  665. package/test/conformance/cases/098_aggregation_nested_templates.pl +0 -11
  666. package/test/conformance/cases/099_materialize_multiple_arities.pl +0 -8
  667. package/test/conformance/cases/100_reusable_builtin_workflow.pl +0 -10
  668. /package/examples/output/{access-control-policy.pl → access-control-policy.eye} +0 -0
  669. /package/examples/output/{ackermann.pl → ackermann.eye} +0 -0
  670. /package/examples/output/{age.pl → age.eye} +0 -0
  671. /package/examples/output/{aliases-and-namespaces.pl → aliases-and-namespaces.eye} +0 -0
  672. /package/examples/output/{alignment-demo.pl → alignment-demo.eye} +0 -0
  673. /package/examples/output/{allen-interval-calculus.pl → allen-interval-calculus.eye} +0 -0
  674. /package/examples/output/{ancestor.pl → ancestor.eye} +0 -0
  675. /package/examples/output/{animal.pl → animal.eye} +0 -0
  676. /package/examples/output/{annotation.pl → annotation.eye} +0 -0
  677. /package/examples/output/{auroracare.pl → auroracare.eye} +0 -0
  678. /package/examples/output/{backward.pl → backward.eye} +0 -0
  679. /package/examples/output/{basic-monadic.pl → basic-monadic.eye} +0 -0
  680. /package/examples/output/{bayes-diagnosis.pl → bayes-diagnosis.eye} +0 -0
  681. /package/examples/output/{bayes-therapy.pl → bayes-therapy.eye} +0 -0
  682. /package/examples/output/{beam-deflection.pl → beam-deflection.eye} +0 -0
  683. /package/examples/output/{binomial-vandermonde.pl → binomial-vandermonde.eye} +0 -0
  684. /package/examples/output/{blocks-world-planning.pl → blocks-world-planning.eye} +0 -0
  685. /package/examples/output/{bmi.pl → bmi.eye} +0 -0
  686. /package/examples/output/{braking-safety-worlds.pl → braking-safety-worlds.eye} +0 -0
  687. /package/examples/output/{buck-converter-design.pl → buck-converter-design.eye} +0 -0
  688. /package/examples/output/{cache-performance.pl → cache-performance.eye} +0 -0
  689. /package/examples/output/{canary-release.pl → canary-release.eye} +0 -0
  690. /package/examples/output/{cat-koko.pl → cat-koko.eye} +0 -0
  691. /package/examples/output/{catalan-convolution.pl → catalan-convolution.eye} +0 -0
  692. /package/examples/output/{chart-parser.pl → chart-parser.eye} +0 -0
  693. /package/examples/output/{clinical-trial-screening.pl → clinical-trial-screening.eye} +0 -0
  694. /package/examples/output/{collatz-1000.pl → collatz-1000.eye} +0 -0
  695. /package/examples/output/{combinatorics-findall-sort.pl → combinatorics-findall-sort.eye} +0 -0
  696. /package/examples/output/{competitive-enzyme-kinetics.pl → competitive-enzyme-kinetics.eye} +0 -0
  697. /package/examples/output/{complex.pl → complex.eye} +0 -0
  698. /package/examples/output/{composition-of-injective-functions-is-injective.pl → composition-of-injective-functions-is-injective.eye} +0 -0
  699. /package/examples/output/{context-association.pl → context-association.eye} +0 -0
  700. /package/examples/output/{context-schema-audit.pl → context-schema-audit.eye} +0 -0
  701. /package/examples/output/{continued-fraction-sqrt2.pl → continued-fraction-sqrt2.eye} +0 -0
  702. /package/examples/output/{control-system.pl → control-system.eye} +0 -0
  703. /package/examples/output/{critical-path-schedule.pl → critical-path-schedule.eye} +0 -0
  704. /package/examples/output/{cyclic-path.pl → cyclic-path.eye} +0 -0
  705. /package/examples/output/{d3-group.pl → d3-group.eye} +0 -0
  706. /package/examples/output/{dairy-energy-balance.pl → dairy-energy-balance.eye} +0 -0
  707. /package/examples/output/{data-negotiation.pl → data-negotiation.eye} +0 -0
  708. /package/examples/output/{deep-taxonomy-10.pl → deep-taxonomy-10.eye} +0 -0
  709. /package/examples/output/{deep-taxonomy-100.pl → deep-taxonomy-100.eye} +0 -0
  710. /package/examples/output/{deep-taxonomy-1000.pl → deep-taxonomy-1000.eye} +0 -0
  711. /package/examples/output/{deep-taxonomy-10000.pl → deep-taxonomy-10000.eye} +0 -0
  712. /package/examples/output/{deep-taxonomy-100000.pl → deep-taxonomy-100000.eye} +0 -0
  713. /package/examples/output/{delfour.pl → delfour.eye} +0 -0
  714. /package/examples/output/{deontic-logic.pl → deontic-logic.eye} +0 -0
  715. /package/examples/output/{derived-backward-rule.pl → derived-backward-rule.eye} +0 -0
  716. /package/examples/output/{derived-rule.pl → derived-rule.eye} +0 -0
  717. /package/examples/output/{diamond-property.pl → diamond-property.eye} +0 -0
  718. /package/examples/output/{dijkstra-findall-sort.pl → dijkstra-findall-sort.eye} +0 -0
  719. /package/examples/output/{dijkstra-risk-path.pl → dijkstra-risk-path.eye} +0 -0
  720. /package/examples/output/{dijkstra.pl → dijkstra.eye} +0 -0
  721. /package/examples/output/{dining-philosophers.pl → dining-philosophers.eye} +0 -0
  722. /package/examples/output/{dog.pl → dog.eye} +0 -0
  723. /package/examples/output/{dpv-odrl-purpose-mapping.pl → dpv-odrl-purpose-mapping.eye} +0 -0
  724. /package/examples/output/{drone-corridor-planner.pl → drone-corridor-planner.eye} +0 -0
  725. /package/examples/output/{easter-computus.pl → easter-computus.eye} +0 -0
  726. /package/examples/output/{electrical-rc-filter.pl → electrical-rc-filter.eye} +0 -0
  727. /package/examples/output/{epidemic-policy.pl → epidemic-policy.eye} +0 -0
  728. /package/examples/output/{equivalence-classes-overlap-implies-same-class.pl → equivalence-classes-overlap-implies-same-class.eye} +0 -0
  729. /package/examples/output/{eulerian-path.pl → eulerian-path.eye} +0 -0
  730. /package/examples/output/{ev-range-worlds.pl → ev-range-worlds.eye} +0 -0
  731. /package/examples/output/{existential-rule.pl → existential-rule.eye} +0 -0
  732. /package/examples/output/{exoplanet-validation-worlds.pl → exoplanet-validation-worlds.eye} +0 -0
  733. /package/examples/output/{expression-eval.pl → expression-eval.eye} +0 -0
  734. /package/examples/output/{family-cousins.pl → family-cousins.eye} +0 -0
  735. /package/examples/output/{fastpow.pl → fastpow.eye} +0 -0
  736. /package/examples/output/{fft8-numeric.pl → fft8-numeric.eye} +0 -0
  737. /package/examples/output/{fibonacci.pl → fibonacci.eye} +0 -0
  738. /package/examples/output/{field-nitrogen-balance.pl → field-nitrogen-balance.eye} +0 -0
  739. /package/examples/output/{flandor.pl → flandor.eye} +0 -0
  740. /package/examples/output/{floating-point.pl → floating-point.eye} +0 -0
  741. /package/examples/output/{four-color-map.pl → four-color-map.eye} +0 -0
  742. /package/examples/output/{fundamental-theorem-arithmetic.pl → fundamental-theorem-arithmetic.eye} +0 -0
  743. /package/examples/output/{gd-step-certified.pl → gd-step-certified.eye} +0 -0
  744. /package/examples/output/{gdpr-compliance.pl → gdpr-compliance.eye} +0 -0
  745. /package/examples/output/{good-cobbler.pl → good-cobbler.eye} +0 -0
  746. /package/examples/output/{gps.pl → gps.eye} +0 -0
  747. /package/examples/output/{graph-reachability.pl → graph-reachability.eye} +0 -0
  748. /package/examples/output/{graph.pl → graph.eye} +0 -0
  749. /package/examples/output/{gray-code-counter.pl → gray-code-counter.eye} +0 -0
  750. /package/examples/output/{greatest-lower-bound-uniqueness.pl → greatest-lower-bound-uniqueness.eye} +0 -0
  751. /package/examples/output/{group-inverse-uniqueness.pl → group-inverse-uniqueness.eye} +0 -0
  752. /package/examples/output/{hamiltonian-path.pl → hamiltonian-path.eye} +0 -0
  753. /package/examples/output/{hamming-code.pl → hamming-code.eye} +0 -0
  754. /package/examples/output/{hanoi.pl → hanoi.eye} +0 -0
  755. /package/examples/output/{heat-loss.pl → heat-loss.eye} +0 -0
  756. /package/examples/output/{heron-theorem.pl → heron-theorem.eye} +0 -0
  757. /package/examples/output/{ideal-gas-law.pl → ideal-gas-law.eye} +0 -0
  758. /package/examples/output/{illegitimate-reasoning.pl → illegitimate-reasoning.eye} +0 -0
  759. /package/examples/output/{integer-partitions.pl → integer-partitions.eye} +0 -0
  760. /package/examples/output/{intuitionistic-logic-kripke.pl → intuitionistic-logic-kripke.eye} +0 -0
  761. /package/examples/output/{job-shop-scheduling.pl → job-shop-scheduling.eye} +0 -0
  762. /package/examples/output/{knapsack-optimization.pl → knapsack-optimization.eye} +0 -0
  763. /package/examples/output/{knowledge-engineering-alignment-flow.pl → knowledge-engineering-alignment-flow.eye} +0 -0
  764. /package/examples/output/{law-of-cosines.pl → law-of-cosines.eye} +0 -0
  765. /package/examples/output/{least-squares-regression.pl → least-squares-regression.eye} +0 -0
  766. /package/examples/output/{linear-logic-resources.pl → linear-logic-resources.eye} +0 -0
  767. /package/examples/output/{list-collection.pl → list-collection.eye} +0 -0
  768. /package/examples/output/{lldm.pl → lldm.eye} +0 -0
  769. /package/examples/output/{manufacturing-quality-control.pl → manufacturing-quality-control.eye} +0 -0
  770. /package/examples/output/{matrix-chain-order.pl → matrix-chain-order.eye} +0 -0
  771. /package/examples/output/{microgrid-dispatch.pl → microgrid-dispatch.eye} +0 -0
  772. /package/examples/output/{missionaries-cannibals.pl → missionaries-cannibals.eye} +0 -0
  773. /package/examples/output/{modal-logic-kripke.pl → modal-logic-kripke.eye} +0 -0
  774. /package/examples/output/{modular-exponentiation.pl → modular-exponentiation.eye} +0 -0
  775. /package/examples/output/{monkey-bananas.pl → monkey-bananas.eye} +0 -0
  776. /package/examples/output/{n-queens-8.pl → n-queens-8.eye} +0 -0
  777. /package/examples/output/{network-sla.pl → network-sla.eye} +0 -0
  778. /package/examples/output/{newton-raphson.pl → newton-raphson.eye} +0 -0
  779. /package/examples/output/{nixon-diamond.pl → nixon-diamond.eye} +0 -0
  780. /package/examples/output/{observability-log-correlation.pl → observability-log-correlation.eye} +0 -0
  781. /package/examples/output/{odrl-dpv-fpv-trust-flow.pl → odrl-dpv-fpv-trust-flow.eye} +0 -0
  782. /package/examples/output/{odrl-dpv-healthcare-risk-ranked.pl → odrl-dpv-healthcare-risk-ranked.eye} +0 -0
  783. /package/examples/output/{odrl-dpv-risk-ranked.pl → odrl-dpv-risk-ranked.eye} +0 -0
  784. /package/examples/output/{orbital-transfer-design.pl → orbital-transfer-design.eye} +0 -0
  785. /package/examples/output/{path-discovery.pl → path-discovery.eye} +0 -0
  786. /package/examples/output/{peano-arithmetic.pl → peano-arithmetic.eye} +0 -0
  787. /package/examples/output/{peasant.pl → peasant.eye} +0 -0
  788. /package/examples/output/{pell-equation.pl → pell-equation.eye} +0 -0
  789. /package/examples/output/{pendulum-period.pl → pendulum-period.eye} +0 -0
  790. /package/examples/output/{polynomial.pl → polynomial.eye} +0 -0
  791. /package/examples/output/{proof-contrapositive.pl → proof-contrapositive.eye} +0 -0
  792. /package/examples/output/{quadratic-formula.pl → quadratic-formula.eye} +0 -0
  793. /package/examples/output/{radioactive-decay.pl → radioactive-decay.eye} +0 -0
  794. /package/examples/output/{reusable-builtins.pl → reusable-builtins.eye} +0 -0
  795. /package/examples/output/{riemann-hypothesis.pl → riemann-hypothesis.eye} +0 -0
  796. /package/examples/output/{security-incident-correlation.pl → security-incident-correlation.eye} +0 -0
  797. /package/examples/output/{send-more-money.pl → send-more-money.eye} +0 -0
  798. /package/examples/output/{service-impact.pl → service-impact.eye} +0 -0
  799. /package/examples/output/{sieve.pl → sieve.eye} +0 -0
  800. /package/examples/output/{skolem-functions.pl → skolem-functions.eye} +0 -0
  801. /package/examples/output/{socket-age.pl → socket-age.eye} +0 -0
  802. /package/examples/output/{socket-family.pl → socket-family.eye} +0 -0
  803. /package/examples/output/{socrates.pl → socrates.eye} +0 -0
  804. /package/examples/output/{stable-marriage.pl → stable-marriage.eye} +0 -0
  805. /package/examples/output/{statistics-summary.pl → statistics-summary.eye} +0 -0
  806. /package/examples/output/{stirling-bell-numbers.pl → stirling-bell-numbers.eye} +0 -0
  807. /package/examples/output/{sudoku-4x4.pl → sudoku-4x4.eye} +0 -0
  808. /package/examples/output/{superdense-coding.pl → superdense-coding.eye} +0 -0
  809. /package/examples/output/{term-tools.pl → term-tools.eye} +0 -0
  810. /package/examples/output/{totient-summatory.pl → totient-summatory.eye} +0 -0
  811. /package/examples/output/{trust-flow-provenance-threshold.pl → trust-flow-provenance-threshold.eye} +0 -0
  812. /package/examples/output/{turing.pl → turing.eye} +0 -0
  813. /package/examples/output/{vector-similarity.pl → vector-similarity.eye} +0 -0
  814. /package/examples/output/{vulnerability-impact.pl → vulnerability-impact.eye} +0 -0
  815. /package/examples/output/{web-names.pl → web-names.eye} +0 -0
  816. /package/examples/output/{weighted-interval-scheduling.pl → weighted-interval-scheduling.eye} +0 -0
  817. /package/examples/output/{witch.pl → witch.eye} +0 -0
  818. /package/examples/output/{wolf-goat-cabbage.pl → wolf-goat-cabbage.eye} +0 -0
  819. /package/examples/output/{zebra.pl → zebra.eye} +0 -0
  820. /package/test/conformance/cases/{037_matching_and_comparison.pl → 037_matching_and_comparison.eye} +0 -0
  821. /package/test/conformance/cases/{054_numeric_and_lexical_comparison.pl → 054_numeric_and_lexical_comparison.eye} +0 -0
  822. /package/test/conformance/cases/{082_comparison_semantics.pl → 082_comparison_semantics.eye} +0 -0
  823. /package/test/conformance/expected/{001_fact_output.pl → 001_fact_output.eye} +0 -0
  824. /package/test/conformance/expected/{002_rule_recursion.pl → 002_rule_recursion.eye} +0 -0
  825. /package/test/conformance/expected/{003_terms_and_readback.pl → 003_terms_and_readback.eye} +0 -0
  826. /package/test/conformance/expected/{004_conjunction_and_parentheses.pl → 004_conjunction_and_parentheses.eye} +0 -0
  827. /package/test/conformance/expected/{005_list_deconstruction.pl → 005_list_deconstruction.eye} +0 -0
  828. /package/test/conformance/expected/{006_comma_formula_data.pl → 006_comma_formula_data.eye} +0 -0
  829. /package/test/conformance/expected/{007_anonymous_variables.pl → 007_anonymous_variables.eye} +0 -0
  830. /package/test/conformance/expected/{008_graphic_atoms.pl → 008_graphic_atoms.eye} +0 -0
  831. /package/test/conformance/expected/{009_comments_and_whitespace.pl → 009_comments_and_whitespace.eye} +0 -0
  832. /package/test/conformance/expected/{010_variable_scope_and_reuse.pl → 010_variable_scope_and_reuse.eye} +0 -0
  833. /package/test/conformance/expected/{011_predicate_arity.pl → 011_predicate_arity.eye} +0 -0
  834. /package/test/conformance/expected/{012_nested_compound_unification.pl → 012_nested_compound_unification.eye} +0 -0
  835. /package/test/conformance/expected/{013_multiple_clauses_order.pl → 013_multiple_clauses_order.eye} +0 -0
  836. /package/test/conformance/expected/{014_failure_filters_answers.pl → 014_failure_filters_answers.eye} +0 -0
  837. /package/test/conformance/expected/{015_improper_list_unification.pl → 015_improper_list_unification.eye} +0 -0
  838. /package/test/conformance/expected/{016_arity_zero_atom.pl → 016_arity_zero_atom.eye} +0 -0
  839. /package/test/conformance/expected/{017_three_step_recursion.pl → 017_three_step_recursion.eye} +0 -0
  840. /package/test/conformance/expected/{018_quoted_atom_readback.pl → 018_quoted_atom_readback.eye} +0 -0
  841. /package/test/conformance/expected/{019_parenthesized_three_conjuncts.pl → 019_parenthesized_three_conjuncts.eye} +0 -0
  842. /package/test/conformance/expected/{020_nested_list_terms.pl → 020_nested_list_terms.eye} +0 -0
  843. /package/test/conformance/expected/{021_repeated_variable_head.pl → 021_repeated_variable_head.eye} +0 -0
  844. /package/test/conformance/expected/{022_rule_head_structure.pl → 022_rule_head_structure.eye} +0 -0
  845. /package/test/conformance/expected/{023_quoted_escapes_readback.pl → 023_quoted_escapes_readback.eye} +0 -0
  846. /package/test/conformance/expected/{024_numeric_literal_readback.pl → 024_numeric_literal_readback.eye} +0 -0
  847. /package/test/conformance/expected/{025_body_parentheses_with_formula_data.pl → 025_body_parentheses_with_formula_data.eye} +0 -0
  848. /package/test/conformance/expected/{026_underscore_named_variable_reuse.pl → 026_question_underscore_named_variable_reuse.eye} +0 -0
  849. /package/test/conformance/expected/{027_default_derived_output.pl → 027_default_derived_output.eye} +0 -0
  850. /package/test/conformance/expected/{028_materialize_focus.pl → 028_materialize_focus.eye} +0 -0
  851. /package/test/conformance/expected/{029_arithmetic_and_comparison.pl → 029_arithmetic_and_comparison.eye} +0 -0
  852. /package/test/conformance/expected/{030_strings_and_atoms.pl → 030_strings_and_atoms.eye} +0 -0
  853. /package/test/conformance/expected/{031_lists_aggregation_ordering.pl → 031_lists_aggregation_ordering.eye} +0 -0
  854. /package/test/conformance/expected/{032_holds_parts.pl → 032_holds_parts.eye} +0 -0
  855. /package/test/conformance/expected/{033_negation_once_generators.pl → 033_negation_once_generators.eye} +0 -0
  856. /package/test/conformance/expected/{034_equality_and_inequality.pl → 034_equality_and_inequality.eye} +0 -0
  857. /package/test/conformance/expected/{035_list_relations.pl → 035_list_relations.eye} +0 -0
  858. /package/test/conformance/expected/{036_append_splits.pl → 036_append_splits.eye} +0 -0
  859. /package/test/conformance/expected/{037_matching_and_comparison.pl → 037_matching_and_comparison.eye} +0 -0
  860. /package/test/conformance/expected/{038_memoize_declaration.pl → 038_table_declaration.eye} +0 -0
  861. /package/test/conformance/expected/{039_numeric_functions.pl → 039_numeric_functions.eye} +0 -0
  862. /package/test/conformance/expected/{040_between_enumeration.pl → 040_between_enumeration.eye} +0 -0
  863. /package/test/conformance/expected/{041_smallest_divisor.pl → 041_smallest_divisor.eye} +0 -0
  864. /package/test/conformance/expected/{042_negation_filter.pl → 042_negation_filter.eye} +0 -0
  865. /package/test/conformance/expected/{043_once_user_predicate.pl → 043_once_user_predicate.eye} +0 -0
  866. /package/test/conformance/expected/{044_findall_user_goal.pl → 044_findall_user_goal.eye} +0 -0
  867. /package/test/conformance/expected/{045_sort_deduplicates_atoms.pl → 045_sort_deduplicates_atoms.eye} +0 -0
  868. /package/test/conformance/expected/{046_append_bound_prefix_suffix.pl → 046_append_bound_prefix_suffix.eye} +0 -0
  869. /package/test/conformance/expected/{047_nth0_index_generation.pl → 047_nth0_index_generation.eye} +0 -0
  870. /package/test/conformance/expected/{048_set_nth0_edges.pl → 048_set_nth0_edges.eye} +0 -0
  871. /package/test/conformance/expected/{049_select_duplicate_occurrences.pl → 049_select_duplicate_occurrences.eye} +0 -0
  872. /package/test/conformance/expected/{050_not_member_filter.pl → 050_not_member_filter.eye} +0 -0
  873. /package/test/conformance/expected/{051_nested_holds_parts.pl → 051_nested_holds_parts.eye} +0 -0
  874. /package/test/conformance/expected/{052_holds_member.pl → 052_holds_member.eye} +0 -0
  875. /package/test/conformance/expected/{053_materialize_excludes_source_fact.pl → 053_materialize_excludes_source_fact.eye} +0 -0
  876. /package/test/conformance/expected/{054_numeric_and_lexical_comparison.pl → 054_numeric_and_lexical_comparison.eye} +0 -0
  877. /package/test/conformance/expected/{055_string_matching_filters.pl → 055_string_matching_filters.eye} +0 -0
  878. /package/test/conformance/expected/{056_string_and_atom_concat.pl → 056_string_and_atom_concat.eye} +0 -0
  879. /package/test/conformance/expected/{057_countall_empty_and_nonempty.pl → 057_countall_empty_and_nonempty.eye} +0 -0
  880. /package/test/conformance/expected/{058_sumall_numeric_template.pl → 058_sumall_numeric_template.eye} +0 -0
  881. /package/test/conformance/expected/{059_aggregate_min_template.pl → 059_aggregate_min_template.eye} +0 -0
  882. /package/test/conformance/expected/{060_aggregate_max_compound_key.pl → 060_aggregate_max_compound_key.eye} +0 -0
  883. /package/test/conformance/expected/{061_date_difference.pl → 061_date_difference.eye} +0 -0
  884. /package/test/conformance/expected/{062_reusable_numeric_builtins.pl → 062_reusable_numeric_builtins.eye} +0 -0
  885. /package/test/conformance/expected/{063_reusable_list_builtins.pl → 063_reusable_list_builtins.eye} +0 -0
  886. /package/test/conformance/expected/{064_reusable_string_builtins.pl → 064_reusable_string_builtins.eye} +0 -0
  887. /package/test/conformance/expected/{065_reusable_term_control_builtins.pl → 065_reusable_term_control_builtins.eye} +0 -0
  888. /package/test/conformance/expected/{066_numeric_edges.pl → 066_numeric_edges.eye} +0 -0
  889. /package/test/conformance/expected/{067_list_edges.pl → 067_list_edges.eye} +0 -0
  890. /package/test/conformance/expected/{068_list_generation_order.pl → 068_list_generation_order.eye} +0 -0
  891. /package/test/conformance/expected/{069_list_summaries_and_sets.pl → 069_list_summaries_and_sets.eye} +0 -0
  892. /package/test/conformance/expected/{070_matches_named_captures.pl → 070_matches_named_captures.eye} +0 -0
  893. /package/test/conformance/expected/{071_string_edges.pl → 071_string_edges.eye} +0 -0
  894. /package/test/conformance/expected/{072_string_conversions.pl → 072_string_conversions.eye} +0 -0
  895. /package/test/conformance/expected/{073_term_introspection_edges.pl → 073_term_introspection_edges.eye} +0 -0
  896. /package/test/conformance/expected/{074_forall_edges.pl → 074_forall_edges.eye} +0 -0
  897. /package/test/conformance/expected/{075_aggregation_edges.pl → 075_aggregation_edges.eye} +0 -0
  898. /package/test/conformance/expected/{076_composed_reusable_builtins.pl → 076_composed_reusable_builtins.eye} +0 -0
  899. /package/test/conformance/expected/{077_recursive_path_with_lists.pl → 077_recursive_path_with_lists.eye} +0 -0
  900. /package/test/conformance/expected/{078_mutual_recursion_with_arithmetic.pl → 078_mutual_recursion_with_arithmetic.eye} +0 -0
  901. /package/test/conformance/expected/{079_big_integer_arithmetic.pl → 079_big_integer_arithmetic.eye} +0 -0
  902. /package/test/conformance/expected/{080_rounding_modes.pl → 080_rounding_modes.eye} +0 -0
  903. /package/test/conformance/expected/{081_zero_safe_numeric_functions.pl → 081_zero_safe_numeric_functions.eye} +0 -0
  904. /package/test/conformance/expected/{082_comparison_semantics.pl → 082_comparison_semantics.eye} +0 -0
  905. /package/test/conformance/expected/{083_between_modes_and_empty_ranges.pl → 083_between_modes_and_empty_ranges.eye} +0 -0
  906. /package/test/conformance/expected/{084_append_and_select_composition.pl → 084_append_and_select_composition.eye} +0 -0
  907. /package/test/conformance/expected/{085_nth_and_update_edges.pl → 085_nth_and_update_edges.eye} +0 -0
  908. /package/test/conformance/expected/{086_slicing_pipeline.pl → 086_slicing_pipeline.eye} +0 -0
  909. /package/test/conformance/expected/{087_sort_reverse_length.pl → 087_sort_reverse_length.eye} +0 -0
  910. /package/test/conformance/expected/{088_list_summaries_failures.pl → 088_list_summaries_failures.eye} +0 -0
  911. /package/test/conformance/expected/{089_string_split_join_pipeline.pl → 089_string_split_join_pipeline.eye} +0 -0
  912. /package/test/conformance/expected/{090_string_substring_replace_edges.pl → 090_string_substring_replace_edges.eye} +0 -0
  913. /package/test/conformance/expected/{091_string_case_and_trim.pl → 091_string_case_and_trim.eye} +0 -0
  914. /package/test/conformance/expected/{092_scalar_string_conversions.pl → 092_scalar_string_conversions.eye} +0 -0
  915. /package/test/conformance/expected/{093_regex_named_captures_context.pl → 093_regex_named_captures_context.eye} +0 -0
  916. /package/test/conformance/expected/{094_context_holds_enumeration.pl → 094_context_holds_enumeration.eye} +0 -0
  917. /package/test/conformance/expected/{095_term_introspection_roundtrip.pl → 095_term_introspection_roundtrip.eye} +0 -0
  918. /package/test/conformance/expected/{096_functor_scalar_edges.pl → 096_functor_scalar_edges.eye} +0 -0
  919. /package/test/conformance/expected/{097_control_negation_once_forall.pl → 097_control_negation_once_forall.eye} +0 -0
  920. /package/test/conformance/expected/{098_aggregation_nested_templates.pl → 098_aggregation_nested_templates.eye} +0 -0
  921. /package/test/conformance/expected/{099_materialize_multiple_arities.pl → 099_materialize_multiple_arities.eye} +0 -0
  922. /package/test/conformance/expected/{100_reusable_builtin_workflow.pl → 100_reusable_builtin_workflow.eye} +0 -0
@@ -65,7 +65,7 @@ function regressionCases() {
65
65
  {
66
66
  name: '--proof rule fact explanation output',
67
67
  run: () => runWhy({
68
- program: 'type(socrates, man).\ntype(X, mortal) :- type(X, man).\n',
68
+ program: 'type(socrates, man).\ntype(?x, mortal) :- type(?x, man).\n',
69
69
  goalText: 'type(socrates, mortal)',
70
70
  expected: `type(socrates, mortal).
71
71
  why(
@@ -73,7 +73,7 @@ why(
73
73
  proof(
74
74
  goal(type(socrates, mortal)),
75
75
  by(rule("__FILE__", clause(2))),
76
- bindings([binding("X", socrates)]),
76
+ bindings([binding("?x", socrates)]),
77
77
  uses([
78
78
  proof(
79
79
  goal(type(socrates, man)),
@@ -89,7 +89,7 @@ why(
89
89
  {
90
90
  name: '--proof numeric builtin explanation output',
91
91
  run: () => runWhy({
92
- program: 'p(X) :- between(536, 536, X).\n',
92
+ program: 'p(?x) :- between(536, 536, ?x).\n',
93
93
  goalText: 'p(536)',
94
94
  expected: `p(536).
95
95
  why(
@@ -97,7 +97,7 @@ why(
97
97
  proof(
98
98
  goal(p(536)),
99
99
  by(rule("__FILE__", clause(1))),
100
- bindings([binding("X", 536)]),
100
+ bindings([binding("?x", 536)]),
101
101
  uses([
102
102
  proof(
103
103
  goal(between(536, 536, 536)),
@@ -113,7 +113,7 @@ why(
113
113
  {
114
114
  name: '--proof list builtin explanation output',
115
115
  run: () => runWhy({
116
- program: 'p(X) :- member(X, [a]).\n',
116
+ program: 'p(?x) :- member(?x, [a]).\n',
117
117
  goalText: 'p(a)',
118
118
  expected: `p(a).
119
119
  why(
@@ -121,7 +121,7 @@ why(
121
121
  proof(
122
122
  goal(p(a)),
123
123
  by(rule("__FILE__", clause(1))),
124
- bindings([binding("X", a)]),
124
+ bindings([binding("?x", a)]),
125
125
  uses([
126
126
  proof(
127
127
  goal(member(a, [a])),
@@ -138,7 +138,7 @@ why(
138
138
  name: 'explanation backtracks across earlier subgoal alternatives',
139
139
  run: () => {
140
140
  const result = runWhyLoose({
141
- program: 'p(ok) :- q(X), r(X).\nq(a).\nq(b).\nr(b).\n',
141
+ program: 'p(ok) :- q(?x), r(?x).\nq(a).\nq(b).\nr(b).\n',
142
142
  goalText: 'p(ok)',
143
143
  });
144
144
  assertIncludes(result.stdout, 'goal(q(b)),\n by(fact("', 'stdout');
@@ -162,7 +162,7 @@ why(
162
162
  name: 'EYELANG_LOCAL_TIME fixes local_time builtin',
163
163
  run: () => {
164
164
  const result = runCli(['-'], {
165
- input: 'materialize(local_time_answer, 1).\nlocal_time_answer(D) :- local_time(D).\n',
165
+ input: 'materialize(local_time_answer, 1).\nlocal_time_answer(?d) :- local_time(?d).\n',
166
166
  env: { EYELANG_LOCAL_TIME: '2024-01-02' },
167
167
  });
168
168
  assertEqual(result.status, 0, 'exit status');
@@ -175,7 +175,7 @@ why(
175
175
  run: () => {
176
176
  const result = runCli([]);
177
177
  assertEqual(result.status, 0, 'exit status');
178
- assertIncludes(result.stdout, 'Usage:\n eyelang [options] [file-or-url.pl|- ...]', 'stdout');
178
+ assertIncludes(result.stdout, 'Usage:\n eyelang [options] [file-or-url.eye|- ...]', 'stdout');
179
179
  assertIncludes(result.stdout, '-p, --proof', 'stdout');
180
180
  assertIncludes(result.stdout, '-s, --stats', 'stdout');
181
181
  assertEqual(result.stderr, '', 'stderr');
@@ -206,7 +206,7 @@ why(
206
206
  {
207
207
  name: 'stdin input is accepted',
208
208
  run: () => {
209
- const result = runCli(['-'], { input: 'p(a, b).\nq(X, Y) :- p(X, Y).\n' });
209
+ const result = runCli(['-'], { input: 'p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n' });
210
210
  assertEqual(result.status, 0, 'exit status');
211
211
  assertEqual(result.stdout, 'q(a, b).\n', 'stdout');
212
212
  assertEqual(result.stderr, '', 'stderr');
@@ -216,7 +216,7 @@ why(
216
216
  {
217
217
  name: '--proof enables materialization explanations',
218
218
  run: () => {
219
- const result = runCli(['--proof', '-'], { input: 'p(a, b).\nq(X, Y) :- p(X, Y).\n' });
219
+ const result = runCli(['--proof', '-'], { input: 'p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n' });
220
220
  assertEqual(result.status, 0, 'exit status');
221
221
  assertIncludes(result.stdout, 'q(a, b).\nwhy(', 'stdout');
222
222
  assertEqual(result.stderr, '', 'stderr');
@@ -225,7 +225,7 @@ why(
225
225
  {
226
226
  name: '-p enables materialization explanations',
227
227
  run: () => {
228
- const result = runCli(['-p', '-'], { input: 'p(a, b).\nq(X, Y) :- p(X, Y).\n' });
228
+ const result = runCli(['-p', '-'], { input: 'p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n' });
229
229
  assertEqual(result.status, 0, 'exit status');
230
230
  assertIncludes(result.stdout, 'q(a, b).\nwhy(', 'stdout');
231
231
  assertEqual(result.stderr, '', 'stderr');
@@ -236,7 +236,7 @@ why(
236
236
  {
237
237
  name: '--stats prints solver statistics to stderr',
238
238
  run: () => {
239
- const result = runCli(['--stats', '-'], { input: 'p(a, b).\nq(X, Y) :- p(X, Y).\n' });
239
+ const result = runCli(['--stats', '-'], { input: 'p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n' });
240
240
  assertEqual(result.status, 0, 'exit status');
241
241
  assertEqual(result.stdout, 'q(a, b).\n', 'stdout');
242
242
  assertIncludes(result.stderr, 'eyelang stats:\n', 'stderr');
@@ -246,7 +246,7 @@ why(
246
246
  {
247
247
  name: '-s prints solver statistics to stderr',
248
248
  run: () => {
249
- const result = runCli(['-s', '-'], { input: 'p(a, b).\nq(X, Y) :- p(X, Y).\n' });
249
+ const result = runCli(['-s', '-'], { input: 'p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n' });
250
250
  assertEqual(result.status, 0, 'exit status');
251
251
  assertEqual(result.stdout, 'q(a, b).\n', 'stdout');
252
252
  assertIncludes(result.stderr, 'eyelang stats:\n', 'stderr');
@@ -259,7 +259,7 @@ why(
259
259
  name: 'double dash permits option-shaped file names',
260
260
  run: () => {
261
261
  const file = path.join(tmp, '-h');
262
- fs.writeFileSync(file, 'p(a, b).\nq(X, Y) :- p(X, Y).\n');
262
+ fs.writeFileSync(file, 'p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n');
263
263
  const result = runCli(['--', file]);
264
264
  assertEqual(result.status, 0, 'exit status');
265
265
  assertEqual(result.stdout, 'q(a, b).\n', 'stdout');
@@ -302,6 +302,10 @@ function documentationSyncCases() {
302
302
  name: 'documentation local links and anchors resolve',
303
303
  run: () => assertArrayEqual(findBrokenDocLinks(), [], 'broken documentation links'),
304
304
  },
305
+ {
306
+ name: 'documentation uses eyelang source style',
307
+ run: () => assertArrayEqual(documentationSourceStyleIssues(), [], 'documentation source style'),
308
+ },
305
309
  {
306
310
  name: 'documented npm scripts exist in package.json',
307
311
  run: () => assertArrayEqual(missingDocumentedPackageScripts(), [], 'missing documented npm scripts'),
@@ -328,7 +332,7 @@ function apiCases() {
328
332
  {
329
333
  name: 'run materialization through public API without proof by default',
330
334
  run: () => {
331
- const result = run('p(a, b).\nq(X, Y) :- p(X, Y).\n');
335
+ const result = run('p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n');
332
336
  assertEqual(result.stdout, 'q(a, b).\n', 'stdout');
333
337
  },
334
338
  },
@@ -347,7 +351,7 @@ function apiCases() {
347
351
  {
348
352
  name: 'run materialization can enable proof explanations',
349
353
  run: () => {
350
- const result = run('p(a, b).\nq(X, Y) :- p(X, Y).\n', { proof: true });
354
+ const result = run('p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n', { proof: true });
351
355
  assertIncludes(result.stdout, 'q(a, b).\nwhy(', 'stdout');
352
356
  },
353
357
  },
@@ -355,7 +359,7 @@ function apiCases() {
355
359
  {
356
360
  name: 'run accepts Program instances',
357
361
  run: () => {
358
- const program = Program.parse('p(a, b).\nq(X, Y) :- p(X, Y).\n');
362
+ const program = Program.parse('p(a, b).\nq(?x, ?y) :- p(?x, ?y).\n');
359
363
  const result = run(program);
360
364
  assertEqual(result.stdout, 'q(a, b).\n', 'stdout');
361
365
  },
@@ -363,8 +367,8 @@ function apiCases() {
363
367
  {
364
368
  name: 'run keeps recursive materializations independent in one solver',
365
369
  run: () => {
366
- const text = fs.readFileSync(path.join(packageRoot, 'examples', 'alignment-demo.pl'), 'utf8');
367
- const program = Program.parseSources([{ text, filename: 'alignment-demo.pl' }]);
370
+ const text = fs.readFileSync(path.join(packageRoot, 'examples', 'alignment-demo.eye'), 'utf8');
371
+ const program = Program.parseSources([{ text, filename: 'alignment-demo.eye' }]);
368
372
  const result = run(program);
369
373
  assertIncludes(result.stdout, 'broaderTransitive(anpr_passenger_car, ref_car).\n', 'stdout');
370
374
  assertIncludes(result.stdout, 'narrowerOrEqualOf(anpr_passenger_car, ref_car).\n', 'stdout');
@@ -373,7 +377,7 @@ function apiCases() {
373
377
  {
374
378
  name: 'makeProgram creates indexed programs',
375
379
  run: () => {
376
- const program = makeProgram('edge(a, b).\npath(X, Y) :- edge(X, Y).\n');
380
+ const program = makeProgram('edge(a, b).\npath(?x, ?y) :- edge(?x, ?y).\n');
377
381
  const group = program.findGroup('path', 2);
378
382
  assertEqual(Boolean(group), true, 'path/2 group exists');
379
383
  assertEqual(group.groupName ?? group.name, 'path', 'group name');
@@ -385,7 +389,7 @@ function apiCases() {
385
389
  run: () => {
386
390
  const program = Program.parse('p(a).\np(b).\n');
387
391
  const solver = new Solver(program);
388
- const goal = parseGoalText('p(X)');
392
+ const goal = parseGoalText('p(?x)');
389
393
  const answers = [...solver.solve([goal], new Env(), 0)].map((env) => termToString(goal, env, true));
390
394
  assertEqual(answers.join('\n'), 'p(a)\np(b)', 'answers');
391
395
  },
@@ -395,7 +399,7 @@ function apiCases() {
395
399
  run: () => {
396
400
  const program = Program.parse('p(a).\np(b).\np(c).\n');
397
401
  const solver = new Solver(program, { solutionLimit: 2 });
398
- const goal = parseGoalText('p(X)');
402
+ const goal = parseGoalText('p(?x)');
399
403
  const answers = [...solver.solve([goal], new Env(), 0)].map((env) => termToString(goal, env, true));
400
404
  assertEqual(answers.join('\n'), 'p(a)\np(b)', 'answers');
401
405
  },
@@ -408,9 +412,9 @@ function apiCases() {
408
412
  const next = env.clone();
409
413
  if (unify(goal.args[0], atom('world'), next)) yield next;
410
414
  });
411
- const program = Program.parse('answer(X) :- hello(X).\n');
415
+ const program = Program.parse('answer(?x) :- hello(?x).\n');
412
416
  const solver = new Solver(program, { registry });
413
- const goal = parseGoalText('answer(X)');
417
+ const goal = parseGoalText('answer(?x)');
414
418
  const answers = [...solver.solve([goal], new Env(), 0)].map((env) => termToString(goal, env, true));
415
419
  assertEqual(answers.join('\n'), 'answer(world)', 'answers');
416
420
  },
@@ -436,17 +440,17 @@ function whiteBoxCases() {
436
440
  name: 'unification binds variables in Env',
437
441
  run: () => {
438
442
  const env = new Env();
439
- assertEqual(unify(variable('X'), atom('socrates'), env), true, 'unify result');
440
- assertEqual(termToString(variable('X'), env, true), 'socrates', 'binding');
443
+ assertEqual(unify(variable('?x'), atom('socrates'), env), true, 'unify result');
444
+ assertEqual(termToString(variable('?x'), env, true), 'socrates', 'binding');
441
445
  },
442
446
  },
443
447
  {
444
448
  name: 'copyResolved and termIsGround follow bindings',
445
449
  run: () => {
446
450
  const env = new Env();
447
- const term = compound('p', [variable('X'), atom('b')]);
451
+ const term = compound('p', [variable('?x'), atom('b')]);
448
452
  assertEqual(termIsGround(term, env), false, 'not ground before binding');
449
- assertEqual(unify(variable('X'), atom('a'), env), true, 'bind X');
453
+ assertEqual(unify(variable('?x'), atom('a'), env), true, 'bind ?x');
450
454
  const resolved = copyResolved(term, env);
451
455
  assertEqual(termToString(resolved, new Env(), true), 'p(a, b)', 'resolved term');
452
456
  assertEqual(termIsGround(resolved), true, 'ground after copy');
@@ -472,8 +476,42 @@ function whiteBoxCases() {
472
476
  {
473
477
  name: 'parser preserves list syntax readback',
474
478
  run: () => {
475
- const goal = parseGoalText('member(X, [a, b])');
476
- assertEqual(termToString(goal, new Env(), true), 'member(X, [a, b])', 'goal');
479
+ const goal = parseGoalText('member(?x, [a, b])');
480
+ assertEqual(termToString(goal, new Env(), true), 'member(?x, [a, b])', 'goal');
481
+ },
482
+ },
483
+ {
484
+ name: 'parser accepts question-mark variables',
485
+ run: () => {
486
+ const goal = parseGoalText('member(?x, [a, b])');
487
+ assertEqual(termToString(goal, new Env(), true), 'member(?x, [a, b])', 'goal');
488
+ },
489
+ },
490
+ {
491
+ name: 'parser treats question-mark underscore as anonymous',
492
+ run: () => {
493
+ const clauses = parseProgramText('p(?_, ?_).\n');
494
+ const left = clauses[0].head.args[0].name;
495
+ const right = clauses[0].head.args[1].name;
496
+ assertEqual(left.startsWith('__anon'), true, 'left anonymous');
497
+ assertEqual(right.startsWith('__anon'), true, 'right anonymous');
498
+ assertEqual(left === right, false, 'fresh anonymous variables');
499
+ },
500
+ },
501
+ {
502
+ name: 'parser rejects old uppercase variable spelling',
503
+ run: () => {
504
+ let threw = false;
505
+ try { parseProgramText('p(X).\n'); } catch (_) { threw = true; }
506
+ assertEqual(threw, true, 'uppercase variable syntax rejected');
507
+ },
508
+ },
509
+ {
510
+ name: 'parser rejects bare underscore variable spelling',
511
+ run: () => {
512
+ let threw = false;
513
+ try { parseProgramText('p(_).\n'); } catch (_) { threw = true; }
514
+ assertEqual(threw, true, 'bare underscore syntax rejected');
477
515
  },
478
516
  },
479
517
  {
@@ -491,6 +529,27 @@ function whiteBoxCases() {
491
529
  assertEqual(termToString(clauses[0].head, new Env(), true), "p(web('be.ugent', josd), 'org.schema')", 'head');
492
530
  },
493
531
  },
532
+ {
533
+ name: 'parser accepts angle-bracket absolute IRI atoms',
534
+ run: () => {
535
+ const clauses = parseProgramText('p(<https://example.org/alice>, <urn:example:bob>).\n');
536
+ assertEqual(termToString(clauses[0].head, new Env(), true), 'p(<https://example.org/alice>, <urn:example:bob>)', 'head');
537
+ },
538
+ },
539
+ {
540
+ name: 'readback prints absolute IRI atoms with angle brackets',
541
+ run: () => {
542
+ const clauses = parseProgramText("p('https://example.org/alice').\n");
543
+ assertEqual(termToString(clauses[0].head, new Env(), true), 'p(<https://example.org/alice>)', 'head');
544
+ },
545
+ },
546
+ {
547
+ name: 'angle IRI syntax does not steal graphic atom syntax',
548
+ run: () => {
549
+ const clauses = parseProgramText('p(<=>).\n');
550
+ assertEqual(termToString(clauses[0].head, new Env(), true), 'p(<=>)', 'head');
551
+ },
552
+ },
494
553
  {
495
554
  name: 'list construction round-trips through properListItems',
496
555
  run: () => {
@@ -503,9 +562,9 @@ function whiteBoxCases() {
503
562
  {
504
563
  name: 'variantTerms recognizes alpha-equivalent goals',
505
564
  run: () => {
506
- const left = parseGoalText('edge(X, Y)');
507
- const right = parseGoalText('edge(A, B)');
508
- const nonVariant = parseGoalText('edge(A, A)');
565
+ const left = parseGoalText('edge(?x, ?y)');
566
+ const right = parseGoalText('edge(?a, ?b)');
567
+ const nonVariant = parseGoalText('edge(?a, ?a)');
509
568
  assertEqual(variantTerms(left, new Env(), right, new Env()), true, 'variant');
510
569
  assertEqual(variantTerms(left, new Env(), nonVariant, new Env()), false, 'non-variant');
511
570
  },
@@ -521,18 +580,18 @@ function whiteBoxCases() {
521
580
  {
522
581
  name: 'parseProgramText returns clause objects',
523
582
  run: () => {
524
- const clauses = parseProgramText('p(a).\nq(X) :- p(X).\n');
583
+ const clauses = parseProgramText('p(a).\nq(?x) :- p(?x).\n');
525
584
  assertEqual(clauses.length, 2, 'clause count');
526
- assertEqual(termToString(clauses[1].head, new Env(), true), 'q(X)', 'rule head');
585
+ assertEqual(termToString(clauses[1].head, new Env(), true), 'q(?x)', 'rule head');
527
586
  assertEqual(clauses[1].body.length, 1, 'body length');
528
587
  },
529
588
  },
530
589
  {
531
590
  name: 'clause candidate selection uses scalar indexes with fallback',
532
591
  run: () => {
533
- const program = Program.parse('edge(a, b).\nedge(c, d).\nedge(X, z).\n');
592
+ const program = Program.parse('edge(a, b).\nedge(c, d).\nedge(?x, z).\n');
534
593
  const group = program.findGroup('edge', 2);
535
- const goal = parseGoalText('edge(a, Y)');
594
+ const goal = parseGoalText('edge(a, ?y)');
536
595
  const candidates = selectClauseCandidates(group, goal, new Env());
537
596
  assertEqual(candidates.primary.length, 1, 'primary bucket length');
538
597
  assertEqual(candidates.fallback.length, 1, 'fallback length');
@@ -540,53 +599,71 @@ function whiteBoxCases() {
540
599
  },
541
600
  },
542
601
  {
543
- name: 'challenging examples keep dynamic-programming predicates memoized',
602
+ name: 'table declaration marks predicate group tabled',
603
+ run: () => {
604
+ const program = Program.parse('table(path, 2).\nedge(a, b).\npath(?x, ?y) :- edge(?x, ?y).\n');
605
+ const group = program.findGroup('path', 2);
606
+ assertEqual(Boolean(group), true, 'path/2 group exists');
607
+ assertEqual(group.tabled, true, 'path/2 tabled through table/2');
608
+ },
609
+ },
610
+ {
611
+ name: 'memoize fact does not table predicates',
612
+ run: () => {
613
+ const program = Program.parse('memoize(path, 2).\nedge(a, b).\npath(?x, ?y) :- edge(?x, ?y).\n');
614
+ const group = program.findGroup('path', 2);
615
+ assertEqual(Boolean(group), true, 'path/2 group exists');
616
+ assertEqual(group.tabled, false, 'memoize/2 is not a table declaration');
617
+ },
618
+ },
619
+ {
620
+ name: 'challenging examples keep dynamic-programming predicates tabled',
544
621
  run: () => {
545
622
  const checks = [
546
- ['binomial-vandermonde.pl', 'choose_step', 5, true],
547
- ['catalan-convolution.pl', 'catalan', 2, false],
548
- ['chart-parser.pl', 'span', 4, true],
549
- ['continued-fraction-sqrt2.pl', 'conv', 3, true],
550
- ['critical-path-schedule.pl', 'earliest_start', 2, false],
551
- ['critical-path-schedule.pl', 'finish_time', 2, false],
552
- ['integer-partitions.pl', 'partitions', 3, true],
553
- ['matrix-chain-order.pl', 'cost', 3, false],
554
- ['modular-exponentiation.pl', 'pow_mod', 4, true],
555
- ['pell-equation.pl', 'pell', 3, true],
556
- ['stirling-bell-numbers.pl', 'stirling2', 3, true],
557
- ['totient-summatory.pl', 'gcd', 3, true],
558
- ['totient-summatory.pl', 'totient', 2, false],
559
- ['weighted-interval-scheduling.pl', 'best_from', 2, true],
623
+ ['binomial-vandermonde.eye', 'choose_step', 5, true],
624
+ ['catalan-convolution.eye', 'catalan', 2, false],
625
+ ['chart-parser.eye', 'span', 4, true],
626
+ ['continued-fraction-sqrt2.eye', 'conv', 3, true],
627
+ ['critical-path-schedule.eye', 'earliest_start', 2, false],
628
+ ['critical-path-schedule.eye', 'finish_time', 2, false],
629
+ ['integer-partitions.eye', 'partitions', 3, true],
630
+ ['matrix-chain-order.eye', 'cost', 3, false],
631
+ ['modular-exponentiation.eye', 'pow_mod', 4, true],
632
+ ['pell-equation.eye', 'pell', 3, true],
633
+ ['stirling-bell-numbers.eye', 'stirling2', 3, true],
634
+ ['totient-summatory.eye', 'gcd', 3, true],
635
+ ['totient-summatory.eye', 'totient', 2, false],
636
+ ['weighted-interval-scheduling.eye', 'best_from', 2, true],
560
637
  ];
561
638
  for (const [filename, name, arity, recursive] of checks) {
562
639
  const text = fs.readFileSync(path.join(packageRoot, 'examples', filename), 'utf8');
563
640
  const program = Program.parseSources([{ text, filename }]);
564
641
  const group = program.findGroup(name, arity);
565
642
  assertEqual(Boolean(group), true, `${filename} ${name}/${arity} group exists`);
566
- assertEqual(group.memoized, true, `${filename} ${name}/${arity} memoized`);
643
+ assertEqual(group.tabled, true, `${filename} ${name}/${arity} tabled`);
567
644
  assertEqual(group.recursive, recursive, `${filename} ${name}/${arity} recursive`);
568
645
  }
569
646
  },
570
647
  },
571
648
  {
572
- name: 'n-queens example keeps diagonal checks memoized',
649
+ name: 'n-queens example keeps diagonal checks tabled',
573
650
  run: () => {
574
- const text = fs.readFileSync(path.join(packageRoot, 'examples', 'n-queens-8.pl'), 'utf8');
575
- const program = Program.parseSources([{ text, filename: 'n-queens-8.pl' }]);
651
+ const text = fs.readFileSync(path.join(packageRoot, 'examples', 'n-queens-8.eye'), 'utf8');
652
+ const program = Program.parseSources([{ text, filename: 'n-queens-8.eye' }]);
576
653
  const group = program.findGroup('no_diagonal_attack', 3);
577
654
  assertEqual(Boolean(group), true, 'no_diagonal_attack/3 group exists');
578
- assertEqual(group.memoized, true, 'no_diagonal_attack/3 memoized');
655
+ assertEqual(group.tabled, true, 'no_diagonal_attack/3 tabled');
579
656
  assertEqual(group.recursive, true, 'no_diagonal_attack/3 recursive');
580
657
  },
581
658
  },
582
659
  {
583
- name: 'collatz example keeps recursive trajectory predicate memoized',
660
+ name: 'collatz example keeps recursive trajectory predicate tabled',
584
661
  run: () => {
585
- const text = fs.readFileSync(path.join(packageRoot, 'examples', 'collatz-1000.pl'), 'utf8');
586
- const program = Program.parseSources([{ text, filename: 'collatz-1000.pl' }]);
662
+ const text = fs.readFileSync(path.join(packageRoot, 'examples', 'collatz-1000.eye'), 'utf8');
663
+ const program = Program.parseSources([{ text, filename: 'collatz-1000.eye' }]);
587
664
  const group = program.findGroup('collatz', 2);
588
665
  assertEqual(Boolean(group), true, 'collatz/2 group exists');
589
- assertEqual(group.memoized, true, 'collatz/2 memoized');
666
+ assertEqual(group.tabled, true, 'collatz/2 tabled');
590
667
  assertEqual(group.recursive, true, 'collatz/2 recursive');
591
668
  },
592
669
  },
@@ -594,7 +671,7 @@ function whiteBoxCases() {
594
671
  name: 'collatz example remains stack-safe for browser-sized stacks',
595
672
  run: () => {
596
673
  // Use a deliberately tiny stack to catch browser-worker recursion regressions.
597
- const result = spawnSync(process.execPath, ['--stack-size=100', bin, 'examples/collatz-1000.pl'], {
674
+ const result = spawnSync(process.execPath, ['--stack-size=100', bin, 'examples/collatz-1000.eye'], {
598
675
  cwd: packageRoot,
599
676
  encoding: 'utf8',
600
677
  });
@@ -621,7 +698,7 @@ function sectionLabel(name) {
621
698
  }
622
699
 
623
700
  function runWhy({ program, goalText, expected }) {
624
- const programFile = path.join(tmp, `${++tmpCounter}.pl`);
701
+ const programFile = path.join(tmp, `${++tmpCounter}.eye`);
625
702
  fs.writeFileSync(programFile, program);
626
703
  const goal = parseGoalText(goalText);
627
704
  fs.appendFileSync(programFile, `\nmaterialize(${goal.name}, ${goal.arity}).\n`);
@@ -640,7 +717,7 @@ function runWhy({ program, goalText, expected }) {
640
717
  }
641
718
 
642
719
  function runWhyLoose({ program, goalText }) {
643
- const programFile = path.join(tmp, `${++tmpCounter}.pl`);
720
+ const programFile = path.join(tmp, `${++tmpCounter}.eye`);
644
721
  fs.writeFileSync(programFile, program);
645
722
  const goal = parseGoalText(goalText);
646
723
  fs.appendFileSync(programFile, `\nmaterialize(${goal.name}, ${goal.arity}).\n`);
@@ -654,8 +731,8 @@ function runWhyLoose({ program, goalText }) {
654
731
 
655
732
  function listExampleNames() {
656
733
  return fs.readdirSync(path.join(packageRoot, 'examples'))
657
- .filter((name) => name.endsWith('.pl'))
658
- .map((name) => name.slice(0, -3))
734
+ .filter((name) => name.endsWith('.eye'))
735
+ .map((name) => name.slice(0, -4))
659
736
  .sort();
660
737
  }
661
738
 
@@ -664,17 +741,17 @@ function guideExampleCatalogIssues() {
664
741
  const expected = listExampleNames();
665
742
  const guide = fs.readFileSync(path.join(packageRoot, 'docs', 'guide.md'), 'utf8');
666
743
  const section = between(guide, '## Example catalog', '## Golden outputs, tests, and conformance');
667
- const rows = [...section.matchAll(/^\| \[`([A-Za-z0-9_-]+)\.pl`\]\(\.\.\/examples\/\1\.pl\) \|[^|]+\| \[`output\/\1\.pl`\]\(\.\.\/examples\/output\/\1\.pl\) \|$/gm)]
744
+ const rows = [...section.matchAll(/^\| \[`([A-Za-z0-9_-]+)\.eye`\]\(\.\.\/examples\/\1\.eye\) \|[^|]+\| \[`output\/\1\.eye`\]\(\.\.\/examples\/output\/\1\.eye\) \|$/gm)]
668
745
  .map((match) => match[1]);
669
- const sourceNames = [...section.matchAll(/\.\.\/examples\/([A-Za-z0-9_-]+)\.pl/g)].map((match) => match[1]).sort();
670
- const outputNames = [...section.matchAll(/\.\.\/examples\/output\/([A-Za-z0-9_-]+)\.pl/g)].map((match) => match[1]).sort();
746
+ const sourceNames = [...section.matchAll(/\.\.\/examples\/([A-Za-z0-9_-]+)\.eye/g)].map((match) => match[1]).sort();
747
+ const outputNames = [...section.matchAll(/\.\.\/examples\/output\/([A-Za-z0-9_-]+)\.eye/g)].map((match) => match[1]).sort();
671
748
  if (rows.length !== expected.length) issues.push(`expected ${expected.length} complete example rows, found ${rows.length}`);
672
749
  issues.push(...arrayDiffMessages(rows.sort(), expected, 'complete example rows'));
673
750
  issues.push(...arrayDiffMessages(sourceNames, expected, 'source links'));
674
751
  issues.push(...arrayDiffMessages(outputNames, expected, 'output links'));
675
752
  for (const name of expected) {
676
- const outputPath = path.join(packageRoot, 'examples', 'output', `${name}.pl`);
677
- if (!fs.existsSync(outputPath)) issues.push(`missing examples/output/${name}.pl`);
753
+ const outputPath = path.join(packageRoot, 'examples', 'output', `${name}.eye`);
754
+ if (!fs.existsSync(outputPath)) issues.push(`missing examples/output/${name}.eye`);
678
755
  }
679
756
  return issues.sort();
680
757
  }
@@ -687,8 +764,8 @@ function playgroundExampleIssues() {
687
764
  if (match == null) return ['playground EXAMPLES array not found'];
688
765
  const examples = JSON.parse(match[1]).sort();
689
766
  issues.push(...arrayDiffMessages(examples, expected, 'playground EXAMPLES'));
690
- if (!html.includes('new URL(`./examples/${name}.pl`, location.href)')) {
691
- issues.push('playground must load selected examples from relative ./examples/*.pl URLs');
767
+ if (!html.includes('new URL(`./examples/${name}.eye`, location.href)')) {
768
+ issues.push('playground must load selected examples from relative ./examples/*.eye URLs');
692
769
  }
693
770
  if (!html.includes("fetch(exampleUrl, { cache: 'no-store' })")) {
694
771
  issues.push('playground must fetch selected example source from its relative URL');
@@ -851,6 +928,33 @@ function misleadingDependencyInstallDocs() {
851
928
  return [...new Set(misleading)].sort();
852
929
  }
853
930
 
931
+ function documentationSourceStyleIssues() {
932
+ const issues = [];
933
+ const docsRoot = path.join(packageRoot, 'docs');
934
+ const docs = [
935
+ path.join(docsRoot, 'guide.md'),
936
+ path.join(docsRoot, 'language-reference.md'),
937
+ ];
938
+ for (const file of docs) {
939
+ const text = fs.readFileSync(file, 'utf8');
940
+ if (text.includes('```prolog')) {
941
+ issues.push(`${path.relative(packageRoot, file)}: use eyelang code fences instead of prolog fences`);
942
+ }
943
+ }
944
+
945
+ const reference = fs.readFileSync(path.join(docsRoot, 'language-reference.md'), 'utf8');
946
+ const builtins = between(reference, '## 9. Standard built-in predicates', '## 10. Implementation-specific built-ins');
947
+ const staleMetaVariables = /`[^`]*(?<!\?)(?:\b(?:A|B|C|D|N|T|Low|High|Start|Needle|Context|Search|Generator|Test|Goal)\b)[^`]*`/;
948
+ for (const [index, line] of builtins.split('\n').entries()) {
949
+ if (!line.trim().startsWith('|')) continue;
950
+ if (line.includes('EYELANG_LOCAL_TIME=')) continue;
951
+ if (staleMetaVariables.test(line)) {
952
+ issues.push(`docs/language-reference.md section 9 line ${index + 1}: stale Prolog-style metavariable in built-in description: ${line.trim()}`);
953
+ }
954
+ }
955
+ return issues.sort();
956
+ }
957
+
854
958
  function findBrokenDocLinks() {
855
959
  const broken = [];
856
960
  const anchorsByFile = new Map();
@@ -1,52 +0,0 @@
1
- % Access control policy example adapted from Eyelet input/access-control-policy.pl.
2
- %
3
- % This version avoids findall/3 by expressing allOf/anyOf/noneOf checks as
4
- % finite logical conditions. The universal allOf/noneOf checks use negation
5
- % as failure over bound policy facts.
6
-
7
- % Output declarations: materialize/2 selects the relations written to this example's golden output.
8
- materialize(policy, 2).
9
- materialize(status, 2).
10
- materialize(reason, 2).
11
-
12
- % Program structure: facts set up the scenario, and rules derive the materialized conclusions.
13
- policy_request(test1, policy_x).
14
- has(test1, claim_a).
15
- has(test1, claim_b).
16
- has(test1, claim_c).
17
-
18
- policy(policy_x).
19
- allOf(policy_x, claim_a).
20
- allOf(policy_x, claim_b).
21
- anyOf(policy_x, claim_c).
22
- noneOf(policy_x, claim_d).
23
-
24
- % Derivation rules: each rule below contributes one logical step toward the displayed results.
25
- passes_all_of(Request, Policy) :-
26
- policy_request(Request, Policy),
27
- policy(Policy),
28
- not((allOf(Policy, Claim), not(has(Request, Claim)))).
29
-
30
- passes_any_of(Request, Policy) :-
31
- policy_request(Request, Policy),
32
- policy(Policy),
33
- anyOf(Policy, Claim),
34
- has(Request, Claim).
35
-
36
- passes_none_of(Request, Policy) :-
37
- policy_request(Request, Policy),
38
- policy(Policy),
39
- not((noneOf(Policy, Claim), has(Request, Claim))).
40
-
41
- passes_policy(Request, Policy) :-
42
- passes_all_of(Request, Policy),
43
- passes_any_of(Request, Policy),
44
- passes_none_of(Request, Policy).
45
-
46
- policy(test1, policy_x).
47
-
48
- status(test1, policy_passed) :-
49
- passes_policy(test1, policy_x).
50
-
51
- reason(test1, "all required claims are present, one allowed claim is present, and no forbidden claim is present") :-
52
- passes_policy(test1, policy_x).
@@ -1,47 +0,0 @@
1
- % Ackermann-style hyperoperation benchmark adapted from Eyeling ackermann.n3.
2
- % The public ackermann/2 answers are small, but the helper relation exercises
3
- % deeply nested arithmetic recursion: hyper/4 encodes successor, addition,
4
- % multiplication, exponentiation, and then the Ackermann-style offset
5
- % ackermann(X, Y) = hyper(X, Y + 3, 2) - 3.
6
- % Keeping the selected inputs explicit avoids unbounded generation while still
7
- % testing the solver's recursive numeric workload.
8
-
9
- materialize(ackermann, 2).
10
-
11
- ackermann(X, Y, A) :-
12
- add(Y, 3, B),
13
- hyper(X, B, 2, C),
14
- sub(C, 3, A).
15
-
16
- % Successor, addition, multiplication, and exponentiation levels.
17
- hyper(0, Y, _Z, A) :- add(Y, 1, A).
18
- hyper(1, Y, Z, A) :- add(Y, Z, A).
19
- hyper(2, Y, Z, A) :- mul(Y, Z, A).
20
- hyper(3, Y, Z, A) :- pow(Z, Y, A).
21
-
22
- % Higher levels recurse over the previous hyperoperation.
23
- hyper(X, 0, _Z, 1) :- gt(X, 3).
24
- hyper(X, Y, Z, A) :-
25
- gt(X, 3),
26
- neq(Y, 0),
27
- sub(Y, 1, B),
28
- hyper(X, B, Z, C),
29
- sub(X, 1, D),
30
- hyper(D, C, Z, A).
31
-
32
- ack_case(0, 0).
33
- ack_case(0, 6).
34
- ack_case(1, 2).
35
- ack_case(1, 7).
36
- ack_case(2, 2).
37
- ack_case(2, 9).
38
- ack_case(3, 4).
39
- ack_case(3, 1000).
40
- ack_case(4, 0).
41
- ack_case(4, 1).
42
- ack_case(4, 2).
43
- ack_case(5, 0).
44
-
45
- ackermann([X, Y], A) :-
46
- ack_case(X, Y),
47
- ackermann(X, Y, A).