eyelang 1.2.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (921) hide show
  1. package/README.md +4 -4
  2. package/docs/guide.md +230 -229
  3. package/docs/language-reference.md +160 -159
  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/output/web-names.eye +10 -0
  122. package/examples/path-discovery.eye +45013 -0
  123. package/examples/peano-arithmetic.eye +33 -0
  124. package/examples/peasant.eye +29 -0
  125. package/examples/pell-equation.eye +34 -0
  126. package/examples/pendulum-period.eye +50 -0
  127. package/examples/polynomial.eye +124 -0
  128. package/examples/proof/access-control-policy.eye +158 -0
  129. package/examples/proof/age.eye +71 -0
  130. package/examples/proof/aliases-and-namespaces.eye +78 -0
  131. package/examples/proof/ancestor.eye +140 -0
  132. package/examples/proof/animal.eye +68 -0
  133. package/examples/proof/annotation.eye +80 -0
  134. package/examples/proof/backward.eye +22 -0
  135. package/examples/proof/bayes-diagnosis.eye +208 -0
  136. package/examples/proof/beam-deflection.eye +227 -0
  137. package/examples/proof/cache-performance.eye +310 -0
  138. package/examples/proof/canary-release.eye +172 -0
  139. package/examples/proof/cat-koko.eye +86 -0
  140. package/examples/proof/chart-parser.eye +474 -0
  141. package/examples/proof/clinical-trial-screening.eye +389 -0
  142. package/examples/proof/composition-of-injective-functions-is-injective.eye +258 -0
  143. package/examples/proof/context-association.eye +78 -0
  144. package/examples/proof/data-negotiation.eye +76 -0
  145. package/examples/proof/deontic-logic.eye +109 -0
  146. package/examples/proof/derived-backward-rule.eye +74 -0
  147. package/examples/proof/derived-rule.eye +43 -0
  148. package/examples/proof/diamond-property.eye +307 -0
  149. package/examples/proof/dog.eye +31 -0
  150. package/examples/proof/dpv-odrl-purpose-mapping.eye +348 -0
  151. package/examples/proof/electrical-rc-filter.eye +105 -0
  152. package/examples/proof/epidemic-policy.eye +774 -0
  153. package/examples/proof/equivalence-classes-overlap-implies-same-class.eye +1098 -0
  154. package/examples/proof/existential-rule.eye +40 -0
  155. package/examples/proof/expression-eval.eye +105 -0
  156. package/examples/proof/floating-point.eye +160 -0
  157. package/examples/proof/gdpr-compliance.eye +199 -0
  158. package/examples/proof/good-cobbler.eye +16 -0
  159. package/examples/proof/graph-reachability.eye +151 -0
  160. package/examples/proof/greatest-lower-bound-uniqueness.eye +150 -0
  161. package/examples/proof/group-inverse-uniqueness.eye +84 -0
  162. package/examples/proof/hanoi.eye +185 -0
  163. package/examples/proof/heat-loss.eye +228 -0
  164. package/examples/proof/ideal-gas-law.eye +151 -0
  165. package/examples/proof/intuitionistic-logic-kripke.eye +133 -0
  166. package/examples/proof/linear-logic-resources.eye +205 -0
  167. package/examples/proof/list-collection.eye +52 -0
  168. package/examples/proof/modal-logic-kripke.eye +125 -0
  169. package/examples/proof/nixon-diamond.eye +181 -0
  170. package/examples/proof/proof-contrapositive.eye +78 -0
  171. package/examples/proof/reusable-builtins.eye +124 -0
  172. package/examples/proof/security-incident-correlation.eye +270 -0
  173. package/examples/proof/socket-age.eye +32 -0
  174. package/examples/proof/socket-family.eye +59 -0
  175. package/examples/proof/socrates.eye +38 -0
  176. package/examples/proof/term-tools.eye +95 -0
  177. package/examples/proof/witch.eye +216 -0
  178. package/examples/proof-contrapositive.eye +27 -0
  179. package/examples/quadratic-formula.eye +56 -0
  180. package/examples/radioactive-decay.eye +58 -0
  181. package/examples/reusable-builtins.eye +36 -0
  182. package/examples/riemann-hypothesis.eye +110 -0
  183. package/examples/security-incident-correlation.eye +69 -0
  184. package/examples/send-more-money.eye +71 -0
  185. package/examples/service-impact.eye +41 -0
  186. package/examples/sieve.eye +20 -0
  187. package/examples/skolem-functions.eye +52 -0
  188. package/examples/socket-age.eye +39 -0
  189. package/examples/socket-family.eye +28 -0
  190. package/examples/socrates.eye +19 -0
  191. package/examples/stable-marriage.eye +92 -0
  192. package/examples/statistics-summary.eye +56 -0
  193. package/examples/stirling-bell-numbers.eye +32 -0
  194. package/examples/sudoku-4x4.eye +54 -0
  195. package/examples/superdense-coding.eye +84 -0
  196. package/examples/term-tools.eye +32 -0
  197. package/examples/totient-summatory.eye +33 -0
  198. package/examples/trust-flow-provenance-threshold.eye +47 -0
  199. package/examples/turing.eye +69 -0
  200. package/examples/vector-similarity.eye +60 -0
  201. package/examples/vulnerability-impact.eye +69 -0
  202. package/examples/web-names.eye +83 -0
  203. package/examples/weighted-interval-scheduling.eye +81 -0
  204. package/examples/witch.eye +38 -0
  205. package/examples/wolf-goat-cabbage.eye +56 -0
  206. package/examples/zebra.eye +45 -0
  207. package/index.d.ts +1 -1
  208. package/package.json +2 -2
  209. package/playground.html +10 -10
  210. package/src/cli.js +2 -2
  211. package/src/explain.js +1 -1
  212. package/src/parser.js +11 -23
  213. package/src/program.js +3 -3
  214. package/src/solver.js +2 -2
  215. package/src/term.js +1 -1
  216. package/test/conformance/README.md +2 -2
  217. package/test/conformance/cases/001_fact_output.eye +4 -0
  218. package/test/conformance/cases/002_rule_recursion.eye +7 -0
  219. package/test/conformance/cases/002_rule_recursion.query +1 -1
  220. package/test/conformance/cases/003_terms_and_readback.eye +16 -0
  221. package/test/conformance/cases/003_terms_and_readback.query +1 -1
  222. package/test/conformance/cases/004_conjunction_and_parentheses.eye +5 -0
  223. package/test/conformance/cases/004_conjunction_and_parentheses.query +1 -1
  224. package/test/conformance/cases/005_list_deconstruction.eye +6 -0
  225. package/test/conformance/cases/005_list_deconstruction.query +1 -1
  226. package/test/conformance/cases/006_comma_formula_data.eye +4 -0
  227. package/test/conformance/cases/006_comma_formula_data.query +1 -1
  228. package/test/conformance/cases/007_anonymous_variables.eye +5 -0
  229. package/test/conformance/cases/007_anonymous_variables.query +1 -1
  230. package/test/conformance/cases/008_graphic_atoms.eye +6 -0
  231. package/test/conformance/cases/008_graphic_atoms.query +1 -1
  232. package/test/conformance/cases/009_comments_and_whitespace.eye +5 -0
  233. package/test/conformance/cases/009_comments_and_whitespace.query +1 -1
  234. package/test/conformance/cases/010_variable_scope_and_reuse.eye +8 -0
  235. package/test/conformance/cases/010_variable_scope_and_reuse.query +1 -1
  236. package/test/conformance/cases/011_predicate_arity.eye +6 -0
  237. package/test/conformance/cases/011_predicate_arity.query +1 -1
  238. package/test/conformance/cases/012_nested_compound_unification.eye +5 -0
  239. package/test/conformance/cases/012_nested_compound_unification.query +1 -1
  240. package/test/conformance/cases/013_multiple_clauses_order.eye +6 -0
  241. package/test/conformance/cases/013_multiple_clauses_order.query +1 -1
  242. package/test/conformance/cases/014_failure_filters_answers.eye +7 -0
  243. package/test/conformance/cases/014_failure_filters_answers.query +1 -1
  244. package/test/conformance/cases/015_improper_list_unification.eye +6 -0
  245. package/test/conformance/cases/015_improper_list_unification.query +1 -1
  246. package/test/conformance/cases/016_arity_zero_atom.eye +4 -0
  247. package/test/conformance/cases/017_three_step_recursion.eye +8 -0
  248. package/test/conformance/cases/017_three_step_recursion.query +1 -1
  249. package/test/conformance/cases/018_quoted_atom_readback.eye +6 -0
  250. package/test/conformance/cases/018_quoted_atom_readback.query +1 -1
  251. package/test/conformance/cases/019_parenthesized_three_conjuncts.eye +7 -0
  252. package/test/conformance/cases/019_parenthesized_three_conjuncts.query +1 -1
  253. package/test/conformance/cases/020_nested_list_terms.eye +5 -0
  254. package/test/conformance/cases/020_nested_list_terms.query +1 -1
  255. package/test/conformance/cases/021_repeated_variable_head.eye +7 -0
  256. package/test/conformance/cases/022_rule_head_structure.eye +5 -0
  257. package/test/conformance/cases/023_quoted_escapes_readback.eye +5 -0
  258. package/test/conformance/cases/024_numeric_literal_readback.eye +6 -0
  259. package/test/conformance/cases/025_body_parentheses_with_formula_data.eye +5 -0
  260. package/test/conformance/cases/026_question_underscore_named_variable_reuse.eye +5 -0
  261. package/test/conformance/cases/027_default_derived_output.eye +5 -0
  262. package/test/conformance/cases/028_materialize_focus.eye +5 -0
  263. package/test/conformance/cases/029_arithmetic_and_comparison.eye +11 -0
  264. package/test/conformance/cases/029_arithmetic_and_comparison.query +1 -1
  265. package/test/conformance/cases/030_strings_and_atoms.eye +4 -0
  266. package/test/conformance/cases/030_strings_and_atoms.query +1 -1
  267. package/test/conformance/cases/031_lists_aggregation_ordering.eye +10 -0
  268. package/test/conformance/cases/031_lists_aggregation_ordering.query +1 -1
  269. package/test/conformance/cases/032_holds_parts.eye +4 -0
  270. package/test/conformance/cases/033_negation_once_generators.eye +7 -0
  271. package/test/conformance/cases/033_negation_once_generators.query +1 -1
  272. package/test/conformance/cases/034_equality_and_inequality.eye +6 -0
  273. package/test/conformance/cases/034_equality_and_inequality.query +1 -1
  274. package/test/conformance/cases/035_list_relations.eye +5 -0
  275. package/test/conformance/cases/035_list_relations.query +1 -1
  276. package/test/conformance/cases/036_append_splits.eye +3 -0
  277. package/test/conformance/cases/036_append_splits.query +1 -1
  278. package/test/conformance/cases/037_matching_and_comparison.query +1 -1
  279. package/test/conformance/cases/038_table_declaration.eye +8 -0
  280. package/test/conformance/cases/038_table_declaration.query +1 -0
  281. package/test/conformance/cases/039_numeric_functions.eye +9 -0
  282. package/test/conformance/cases/039_numeric_functions.query +1 -1
  283. package/test/conformance/cases/040_between_enumeration.eye +3 -0
  284. package/test/conformance/cases/040_between_enumeration.query +1 -1
  285. package/test/conformance/cases/041_smallest_divisor.eye +3 -0
  286. package/test/conformance/cases/041_smallest_divisor.query +1 -1
  287. package/test/conformance/cases/042_negation_filter.eye +7 -0
  288. package/test/conformance/cases/042_negation_filter.query +1 -1
  289. package/test/conformance/cases/043_once_user_predicate.eye +5 -0
  290. package/test/conformance/cases/043_once_user_predicate.query +1 -1
  291. package/test/conformance/cases/044_findall_user_goal.eye +6 -0
  292. package/test/conformance/cases/044_findall_user_goal.query +1 -1
  293. package/test/conformance/cases/045_sort_deduplicates_atoms.eye +3 -0
  294. package/test/conformance/cases/045_sort_deduplicates_atoms.query +1 -1
  295. package/test/conformance/cases/046_append_bound_prefix_suffix.eye +4 -0
  296. package/test/conformance/cases/046_append_bound_prefix_suffix.query +1 -1
  297. package/test/conformance/cases/047_nth0_index_generation.eye +3 -0
  298. package/test/conformance/cases/047_nth0_index_generation.query +1 -1
  299. package/test/conformance/cases/048_set_nth0_edges.eye +4 -0
  300. package/test/conformance/cases/048_set_nth0_edges.query +1 -1
  301. package/test/conformance/cases/049_select_duplicate_occurrences.eye +3 -0
  302. package/test/conformance/cases/049_select_duplicate_occurrences.query +1 -1
  303. package/test/conformance/cases/050_not_member_filter.eye +6 -0
  304. package/test/conformance/cases/050_not_member_filter.query +1 -1
  305. package/test/conformance/cases/051_nested_holds_parts.eye +4 -0
  306. package/test/conformance/cases/052_holds_member.eye +3 -0
  307. package/test/conformance/cases/053_materialize_excludes_source_fact.eye +6 -0
  308. package/test/conformance/cases/054_numeric_and_lexical_comparison.query +1 -1
  309. package/test/conformance/cases/055_string_matching_filters.eye +6 -0
  310. package/test/conformance/cases/055_string_matching_filters.query +1 -1
  311. package/test/conformance/cases/056_string_and_atom_concat.eye +3 -0
  312. package/test/conformance/cases/056_string_and_atom_concat.query +1 -1
  313. package/test/conformance/cases/057_countall_empty_and_nonempty.eye +4 -0
  314. package/test/conformance/cases/057_countall_empty_and_nonempty.query +1 -1
  315. package/test/conformance/cases/058_sumall_numeric_template.eye +5 -0
  316. package/test/conformance/cases/058_sumall_numeric_template.query +1 -1
  317. package/test/conformance/cases/059_aggregate_min_template.eye +5 -0
  318. package/test/conformance/cases/059_aggregate_min_template.query +1 -1
  319. package/test/conformance/cases/060_aggregate_max_compound_key.eye +5 -0
  320. package/test/conformance/cases/060_aggregate_max_compound_key.query +1 -1
  321. package/test/conformance/cases/061_date_difference.eye +4 -0
  322. package/test/conformance/cases/062_reusable_numeric_builtins.eye +10 -0
  323. package/test/conformance/cases/063_reusable_list_builtins.eye +11 -0
  324. package/test/conformance/cases/064_reusable_string_builtins.eye +12 -0
  325. package/test/conformance/cases/065_reusable_term_control_builtins.eye +11 -0
  326. package/test/conformance/cases/066_numeric_edges.eye +14 -0
  327. package/test/conformance/cases/067_list_edges.eye +10 -0
  328. package/test/conformance/cases/068_list_generation_order.eye +7 -0
  329. package/test/conformance/cases/069_list_summaries_and_sets.eye +9 -0
  330. package/test/conformance/cases/070_matches_named_captures.eye +13 -0
  331. package/test/conformance/cases/071_string_edges.eye +10 -0
  332. package/test/conformance/cases/072_string_conversions.eye +10 -0
  333. package/test/conformance/cases/073_term_introspection_edges.eye +10 -0
  334. package/test/conformance/cases/074_forall_edges.eye +10 -0
  335. package/test/conformance/cases/075_aggregation_edges.eye +12 -0
  336. package/test/conformance/cases/076_composed_reusable_builtins.eye +8 -0
  337. package/test/conformance/cases/077_recursive_path_with_lists.eye +10 -0
  338. package/test/conformance/cases/078_mutual_recursion_with_arithmetic.eye +7 -0
  339. package/test/conformance/cases/079_big_integer_arithmetic.eye +8 -0
  340. package/test/conformance/cases/080_rounding_modes.eye +10 -0
  341. package/test/conformance/cases/081_zero_safe_numeric_functions.eye +9 -0
  342. package/test/conformance/cases/083_between_modes_and_empty_ranges.eye +8 -0
  343. package/test/conformance/cases/084_append_and_select_composition.eye +7 -0
  344. package/test/conformance/cases/085_nth_and_update_edges.eye +8 -0
  345. package/test/conformance/cases/086_slicing_pipeline.eye +10 -0
  346. package/test/conformance/cases/087_sort_reverse_length.eye +8 -0
  347. package/test/conformance/cases/088_list_summaries_failures.eye +8 -0
  348. package/test/conformance/cases/089_string_split_join_pipeline.eye +7 -0
  349. package/test/conformance/cases/090_string_substring_replace_edges.eye +9 -0
  350. package/test/conformance/cases/091_string_case_and_trim.eye +7 -0
  351. package/test/conformance/cases/092_scalar_string_conversions.eye +9 -0
  352. package/test/conformance/cases/093_regex_named_captures_context.eye +8 -0
  353. package/test/conformance/cases/094_context_holds_enumeration.eye +7 -0
  354. package/test/conformance/cases/095_term_introspection_roundtrip.eye +8 -0
  355. package/test/conformance/cases/096_functor_scalar_edges.eye +8 -0
  356. package/test/conformance/cases/097_control_negation_once_forall.eye +13 -0
  357. package/test/conformance/cases/098_aggregation_nested_templates.eye +11 -0
  358. package/test/conformance/cases/099_materialize_multiple_arities.eye +8 -0
  359. package/test/conformance/cases/100_reusable_builtin_workflow.eye +10 -0
  360. package/test/conformance/cases/101_question_mark_variables.eye +7 -0
  361. package/test/conformance/cases/102_table_declaration.eye +11 -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/run-conformance.mjs +4 -4
  365. package/test/run-examples.mjs +51 -51
  366. package/test/run-regression.mjs +168 -77
  367. package/examples/access-control-policy.pl +0 -52
  368. package/examples/ackermann.pl +0 -47
  369. package/examples/age.pl +0 -26
  370. package/examples/aliases-and-namespaces.pl +0 -20
  371. package/examples/alignment-demo.pl +0 -44
  372. package/examples/allen-interval-calculus.pl +0 -64
  373. package/examples/ancestor.pl +0 -22
  374. package/examples/animal.pl +0 -21
  375. package/examples/annotation.pl +0 -34
  376. package/examples/auroracare.pl +0 -309
  377. package/examples/backward.pl +0 -11
  378. package/examples/basic-monadic.pl +0 -10032
  379. package/examples/bayes-diagnosis.pl +0 -108
  380. package/examples/bayes-therapy.pl +0 -189
  381. package/examples/beam-deflection.pl +0 -48
  382. package/examples/binomial-vandermonde.pl +0 -49
  383. package/examples/blocks-world-planning.pl +0 -77
  384. package/examples/bmi.pl +0 -232
  385. package/examples/braking-safety-worlds.pl +0 -69
  386. package/examples/buck-converter-design.pl +0 -83
  387. package/examples/cache-performance.pl +0 -56
  388. package/examples/canary-release.pl +0 -51
  389. package/examples/cat-koko.pl +0 -24
  390. package/examples/catalan-convolution.pl +0 -37
  391. package/examples/chart-parser.pl +0 -65
  392. package/examples/clinical-trial-screening.pl +0 -97
  393. package/examples/collatz-1000.pl +0 -45
  394. package/examples/combinatorics-findall-sort.pl +0 -38
  395. package/examples/competitive-enzyme-kinetics.pl +0 -78
  396. package/examples/complex.pl +0 -133
  397. package/examples/composition-of-injective-functions-is-injective.pl +0 -50
  398. package/examples/context-association.pl +0 -53
  399. package/examples/context-schema-audit.pl +0 -46
  400. package/examples/continued-fraction-sqrt2.pl +0 -36
  401. package/examples/control-system.pl +0 -76
  402. package/examples/critical-path-schedule.pl +0 -82
  403. package/examples/cyclic-path.pl +0 -18
  404. package/examples/d3-group.pl +0 -99
  405. package/examples/dairy-energy-balance.pl +0 -66
  406. package/examples/data-negotiation.pl +0 -38
  407. package/examples/deep-taxonomy-10.pl +0 -115
  408. package/examples/deep-taxonomy-100.pl +0 -385
  409. package/examples/deep-taxonomy-1000.pl +0 -3085
  410. package/examples/deep-taxonomy-10000.pl +0 -30094
  411. package/examples/deep-taxonomy-100000.pl +0 -300184
  412. package/examples/delfour.pl +0 -281
  413. package/examples/deontic-logic.pl +0 -52
  414. package/examples/derived-backward-rule.pl +0 -30
  415. package/examples/derived-rule.pl +0 -27
  416. package/examples/diamond-property.pl +0 -38
  417. package/examples/dijkstra-findall-sort.pl +0 -43
  418. package/examples/dijkstra-risk-path.pl +0 -87
  419. package/examples/dijkstra.pl +0 -50
  420. package/examples/dining-philosophers.pl +0 -147
  421. package/examples/dog.pl +0 -25
  422. package/examples/dpv-odrl-purpose-mapping.pl +0 -48
  423. package/examples/drone-corridor-planner.pl +0 -48
  424. package/examples/easter-computus.pl +0 -88
  425. package/examples/electrical-rc-filter.pl +0 -37
  426. package/examples/epidemic-policy.pl +0 -66
  427. package/examples/equivalence-classes-overlap-implies-same-class.pl +0 -27
  428. package/examples/eulerian-path.pl +0 -87
  429. package/examples/ev-range-worlds.pl +0 -87
  430. package/examples/existential-rule.pl +0 -21
  431. package/examples/exoplanet-validation-worlds.pl +0 -94
  432. package/examples/expression-eval.pl +0 -45
  433. package/examples/family-cousins.pl +0 -67
  434. package/examples/fastpow.pl +0 -61
  435. package/examples/fft8-numeric.pl +0 -85
  436. package/examples/fibonacci.pl +0 -60
  437. package/examples/field-nitrogen-balance.pl +0 -73
  438. package/examples/flandor.pl +0 -296
  439. package/examples/floating-point.pl +0 -28
  440. package/examples/four-color-map.pl +0 -133
  441. package/examples/fundamental-theorem-arithmetic.pl +0 -119
  442. package/examples/gd-step-certified.pl +0 -162
  443. package/examples/gdpr-compliance.pl +0 -69
  444. package/examples/good-cobbler.pl +0 -16
  445. package/examples/gps.pl +0 -146
  446. package/examples/graph-reachability.pl +0 -33
  447. package/examples/graph.pl +0 -35
  448. package/examples/gray-code-counter.pl +0 -47
  449. package/examples/greatest-lower-bound-uniqueness.pl +0 -30
  450. package/examples/group-inverse-uniqueness.pl +0 -36
  451. package/examples/hamiltonian-path.pl +0 -51
  452. package/examples/hamming-code.pl +0 -109
  453. package/examples/hanoi.pl +0 -19
  454. package/examples/heat-loss.pl +0 -56
  455. package/examples/heron-theorem.pl +0 -42
  456. package/examples/ideal-gas-law.pl +0 -39
  457. package/examples/illegitimate-reasoning.pl +0 -88
  458. package/examples/integer-partitions.pl +0 -35
  459. package/examples/intuitionistic-logic-kripke.pl +0 -69
  460. package/examples/job-shop-scheduling.pl +0 -48
  461. package/examples/knapsack-optimization.pl +0 -46
  462. package/examples/knowledge-engineering-alignment-flow.pl +0 -46
  463. package/examples/law-of-cosines.pl +0 -37
  464. package/examples/least-squares-regression.pl +0 -85
  465. package/examples/linear-logic-resources.pl +0 -51
  466. package/examples/list-collection.pl +0 -35
  467. package/examples/lldm.pl +0 -80
  468. package/examples/manufacturing-quality-control.pl +0 -73
  469. package/examples/matrix-chain-order.pl +0 -79
  470. package/examples/microgrid-dispatch.pl +0 -89
  471. package/examples/missionaries-cannibals.pl +0 -53
  472. package/examples/modal-logic-kripke.pl +0 -45
  473. package/examples/modular-exponentiation.pl +0 -35
  474. package/examples/monkey-bananas.pl +0 -45
  475. package/examples/n-queens-8.pl +0 -35
  476. package/examples/network-sla.pl +0 -48
  477. package/examples/newton-raphson.pl +0 -48
  478. package/examples/nixon-diamond.pl +0 -37
  479. package/examples/observability-log-correlation.pl +0 -40
  480. package/examples/odrl-dpv-fpv-trust-flow.pl +0 -51
  481. package/examples/odrl-dpv-healthcare-risk-ranked.pl +0 -270
  482. package/examples/odrl-dpv-risk-ranked.pl +0 -320
  483. package/examples/orbital-transfer-design.pl +0 -116
  484. package/examples/output/web-names.pl +0 -10
  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/{weighted-interval-scheduling.pl → weighted-interval-scheduling.eye} +0 -0
  816. /package/examples/output/{witch.pl → witch.eye} +0 -0
  817. /package/examples/output/{wolf-goat-cabbage.pl → wolf-goat-cabbage.eye} +0 -0
  818. /package/examples/output/{zebra.pl → zebra.eye} +0 -0
  819. /package/test/conformance/cases/{037_matching_and_comparison.pl → 037_matching_and_comparison.eye} +0 -0
  820. /package/test/conformance/cases/{054_numeric_and_lexical_comparison.pl → 054_numeric_and_lexical_comparison.eye} +0 -0
  821. /package/test/conformance/cases/{082_comparison_semantics.pl → 082_comparison_semantics.eye} +0 -0
  822. /package/test/conformance/expected/{001_fact_output.pl → 001_fact_output.eye} +0 -0
  823. /package/test/conformance/expected/{002_rule_recursion.pl → 002_rule_recursion.eye} +0 -0
  824. /package/test/conformance/expected/{003_terms_and_readback.pl → 003_terms_and_readback.eye} +0 -0
  825. /package/test/conformance/expected/{004_conjunction_and_parentheses.pl → 004_conjunction_and_parentheses.eye} +0 -0
  826. /package/test/conformance/expected/{005_list_deconstruction.pl → 005_list_deconstruction.eye} +0 -0
  827. /package/test/conformance/expected/{006_comma_formula_data.pl → 006_comma_formula_data.eye} +0 -0
  828. /package/test/conformance/expected/{007_anonymous_variables.pl → 007_anonymous_variables.eye} +0 -0
  829. /package/test/conformance/expected/{008_graphic_atoms.pl → 008_graphic_atoms.eye} +0 -0
  830. /package/test/conformance/expected/{009_comments_and_whitespace.pl → 009_comments_and_whitespace.eye} +0 -0
  831. /package/test/conformance/expected/{010_variable_scope_and_reuse.pl → 010_variable_scope_and_reuse.eye} +0 -0
  832. /package/test/conformance/expected/{011_predicate_arity.pl → 011_predicate_arity.eye} +0 -0
  833. /package/test/conformance/expected/{012_nested_compound_unification.pl → 012_nested_compound_unification.eye} +0 -0
  834. /package/test/conformance/expected/{013_multiple_clauses_order.pl → 013_multiple_clauses_order.eye} +0 -0
  835. /package/test/conformance/expected/{014_failure_filters_answers.pl → 014_failure_filters_answers.eye} +0 -0
  836. /package/test/conformance/expected/{015_improper_list_unification.pl → 015_improper_list_unification.eye} +0 -0
  837. /package/test/conformance/expected/{016_arity_zero_atom.pl → 016_arity_zero_atom.eye} +0 -0
  838. /package/test/conformance/expected/{017_three_step_recursion.pl → 017_three_step_recursion.eye} +0 -0
  839. /package/test/conformance/expected/{018_quoted_atom_readback.pl → 018_quoted_atom_readback.eye} +0 -0
  840. /package/test/conformance/expected/{019_parenthesized_three_conjuncts.pl → 019_parenthesized_three_conjuncts.eye} +0 -0
  841. /package/test/conformance/expected/{020_nested_list_terms.pl → 020_nested_list_terms.eye} +0 -0
  842. /package/test/conformance/expected/{021_repeated_variable_head.pl → 021_repeated_variable_head.eye} +0 -0
  843. /package/test/conformance/expected/{022_rule_head_structure.pl → 022_rule_head_structure.eye} +0 -0
  844. /package/test/conformance/expected/{023_quoted_escapes_readback.pl → 023_quoted_escapes_readback.eye} +0 -0
  845. /package/test/conformance/expected/{024_numeric_literal_readback.pl → 024_numeric_literal_readback.eye} +0 -0
  846. /package/test/conformance/expected/{025_body_parentheses_with_formula_data.pl → 025_body_parentheses_with_formula_data.eye} +0 -0
  847. /package/test/conformance/expected/{026_underscore_named_variable_reuse.pl → 026_question_underscore_named_variable_reuse.eye} +0 -0
  848. /package/test/conformance/expected/{027_default_derived_output.pl → 027_default_derived_output.eye} +0 -0
  849. /package/test/conformance/expected/{028_materialize_focus.pl → 028_materialize_focus.eye} +0 -0
  850. /package/test/conformance/expected/{029_arithmetic_and_comparison.pl → 029_arithmetic_and_comparison.eye} +0 -0
  851. /package/test/conformance/expected/{030_strings_and_atoms.pl → 030_strings_and_atoms.eye} +0 -0
  852. /package/test/conformance/expected/{031_lists_aggregation_ordering.pl → 031_lists_aggregation_ordering.eye} +0 -0
  853. /package/test/conformance/expected/{032_holds_parts.pl → 032_holds_parts.eye} +0 -0
  854. /package/test/conformance/expected/{033_negation_once_generators.pl → 033_negation_once_generators.eye} +0 -0
  855. /package/test/conformance/expected/{034_equality_and_inequality.pl → 034_equality_and_inequality.eye} +0 -0
  856. /package/test/conformance/expected/{035_list_relations.pl → 035_list_relations.eye} +0 -0
  857. /package/test/conformance/expected/{036_append_splits.pl → 036_append_splits.eye} +0 -0
  858. /package/test/conformance/expected/{037_matching_and_comparison.pl → 037_matching_and_comparison.eye} +0 -0
  859. /package/test/conformance/expected/{038_memoize_declaration.pl → 038_table_declaration.eye} +0 -0
  860. /package/test/conformance/expected/{039_numeric_functions.pl → 039_numeric_functions.eye} +0 -0
  861. /package/test/conformance/expected/{040_between_enumeration.pl → 040_between_enumeration.eye} +0 -0
  862. /package/test/conformance/expected/{041_smallest_divisor.pl → 041_smallest_divisor.eye} +0 -0
  863. /package/test/conformance/expected/{042_negation_filter.pl → 042_negation_filter.eye} +0 -0
  864. /package/test/conformance/expected/{043_once_user_predicate.pl → 043_once_user_predicate.eye} +0 -0
  865. /package/test/conformance/expected/{044_findall_user_goal.pl → 044_findall_user_goal.eye} +0 -0
  866. /package/test/conformance/expected/{045_sort_deduplicates_atoms.pl → 045_sort_deduplicates_atoms.eye} +0 -0
  867. /package/test/conformance/expected/{046_append_bound_prefix_suffix.pl → 046_append_bound_prefix_suffix.eye} +0 -0
  868. /package/test/conformance/expected/{047_nth0_index_generation.pl → 047_nth0_index_generation.eye} +0 -0
  869. /package/test/conformance/expected/{048_set_nth0_edges.pl → 048_set_nth0_edges.eye} +0 -0
  870. /package/test/conformance/expected/{049_select_duplicate_occurrences.pl → 049_select_duplicate_occurrences.eye} +0 -0
  871. /package/test/conformance/expected/{050_not_member_filter.pl → 050_not_member_filter.eye} +0 -0
  872. /package/test/conformance/expected/{051_nested_holds_parts.pl → 051_nested_holds_parts.eye} +0 -0
  873. /package/test/conformance/expected/{052_holds_member.pl → 052_holds_member.eye} +0 -0
  874. /package/test/conformance/expected/{053_materialize_excludes_source_fact.pl → 053_materialize_excludes_source_fact.eye} +0 -0
  875. /package/test/conformance/expected/{054_numeric_and_lexical_comparison.pl → 054_numeric_and_lexical_comparison.eye} +0 -0
  876. /package/test/conformance/expected/{055_string_matching_filters.pl → 055_string_matching_filters.eye} +0 -0
  877. /package/test/conformance/expected/{056_string_and_atom_concat.pl → 056_string_and_atom_concat.eye} +0 -0
  878. /package/test/conformance/expected/{057_countall_empty_and_nonempty.pl → 057_countall_empty_and_nonempty.eye} +0 -0
  879. /package/test/conformance/expected/{058_sumall_numeric_template.pl → 058_sumall_numeric_template.eye} +0 -0
  880. /package/test/conformance/expected/{059_aggregate_min_template.pl → 059_aggregate_min_template.eye} +0 -0
  881. /package/test/conformance/expected/{060_aggregate_max_compound_key.pl → 060_aggregate_max_compound_key.eye} +0 -0
  882. /package/test/conformance/expected/{061_date_difference.pl → 061_date_difference.eye} +0 -0
  883. /package/test/conformance/expected/{062_reusable_numeric_builtins.pl → 062_reusable_numeric_builtins.eye} +0 -0
  884. /package/test/conformance/expected/{063_reusable_list_builtins.pl → 063_reusable_list_builtins.eye} +0 -0
  885. /package/test/conformance/expected/{064_reusable_string_builtins.pl → 064_reusable_string_builtins.eye} +0 -0
  886. /package/test/conformance/expected/{065_reusable_term_control_builtins.pl → 065_reusable_term_control_builtins.eye} +0 -0
  887. /package/test/conformance/expected/{066_numeric_edges.pl → 066_numeric_edges.eye} +0 -0
  888. /package/test/conformance/expected/{067_list_edges.pl → 067_list_edges.eye} +0 -0
  889. /package/test/conformance/expected/{068_list_generation_order.pl → 068_list_generation_order.eye} +0 -0
  890. /package/test/conformance/expected/{069_list_summaries_and_sets.pl → 069_list_summaries_and_sets.eye} +0 -0
  891. /package/test/conformance/expected/{070_matches_named_captures.pl → 070_matches_named_captures.eye} +0 -0
  892. /package/test/conformance/expected/{071_string_edges.pl → 071_string_edges.eye} +0 -0
  893. /package/test/conformance/expected/{072_string_conversions.pl → 072_string_conversions.eye} +0 -0
  894. /package/test/conformance/expected/{073_term_introspection_edges.pl → 073_term_introspection_edges.eye} +0 -0
  895. /package/test/conformance/expected/{074_forall_edges.pl → 074_forall_edges.eye} +0 -0
  896. /package/test/conformance/expected/{075_aggregation_edges.pl → 075_aggregation_edges.eye} +0 -0
  897. /package/test/conformance/expected/{076_composed_reusable_builtins.pl → 076_composed_reusable_builtins.eye} +0 -0
  898. /package/test/conformance/expected/{077_recursive_path_with_lists.pl → 077_recursive_path_with_lists.eye} +0 -0
  899. /package/test/conformance/expected/{078_mutual_recursion_with_arithmetic.pl → 078_mutual_recursion_with_arithmetic.eye} +0 -0
  900. /package/test/conformance/expected/{079_big_integer_arithmetic.pl → 079_big_integer_arithmetic.eye} +0 -0
  901. /package/test/conformance/expected/{080_rounding_modes.pl → 080_rounding_modes.eye} +0 -0
  902. /package/test/conformance/expected/{081_zero_safe_numeric_functions.pl → 081_zero_safe_numeric_functions.eye} +0 -0
  903. /package/test/conformance/expected/{082_comparison_semantics.pl → 082_comparison_semantics.eye} +0 -0
  904. /package/test/conformance/expected/{083_between_modes_and_empty_ranges.pl → 083_between_modes_and_empty_ranges.eye} +0 -0
  905. /package/test/conformance/expected/{084_append_and_select_composition.pl → 084_append_and_select_composition.eye} +0 -0
  906. /package/test/conformance/expected/{085_nth_and_update_edges.pl → 085_nth_and_update_edges.eye} +0 -0
  907. /package/test/conformance/expected/{086_slicing_pipeline.pl → 086_slicing_pipeline.eye} +0 -0
  908. /package/test/conformance/expected/{087_sort_reverse_length.pl → 087_sort_reverse_length.eye} +0 -0
  909. /package/test/conformance/expected/{088_list_summaries_failures.pl → 088_list_summaries_failures.eye} +0 -0
  910. /package/test/conformance/expected/{089_string_split_join_pipeline.pl → 089_string_split_join_pipeline.eye} +0 -0
  911. /package/test/conformance/expected/{090_string_substring_replace_edges.pl → 090_string_substring_replace_edges.eye} +0 -0
  912. /package/test/conformance/expected/{091_string_case_and_trim.pl → 091_string_case_and_trim.eye} +0 -0
  913. /package/test/conformance/expected/{092_scalar_string_conversions.pl → 092_scalar_string_conversions.eye} +0 -0
  914. /package/test/conformance/expected/{093_regex_named_captures_context.pl → 093_regex_named_captures_context.eye} +0 -0
  915. /package/test/conformance/expected/{094_context_holds_enumeration.pl → 094_context_holds_enumeration.eye} +0 -0
  916. /package/test/conformance/expected/{095_term_introspection_roundtrip.pl → 095_term_introspection_roundtrip.eye} +0 -0
  917. /package/test/conformance/expected/{096_functor_scalar_edges.pl → 096_functor_scalar_edges.eye} +0 -0
  918. /package/test/conformance/expected/{097_control_negation_once_forall.pl → 097_control_negation_once_forall.eye} +0 -0
  919. /package/test/conformance/expected/{098_aggregation_nested_templates.pl → 098_aggregation_nested_templates.eye} +0 -0
  920. /package/test/conformance/expected/{099_materialize_multiple_arities.pl → 099_materialize_multiple_arities.eye} +0 -0
  921. /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,15 +476,57 @@ 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');
515
+ },
516
+ },
517
+ {
518
+ name: 'parser rejects unquoted dotted atoms to stay ISO-compatible',
519
+ run: () => {
520
+ let threw = false;
521
+ try { parseProgramText('p(web(be.ugent, josd)).\n'); } catch (_) { threw = true; }
522
+ assertEqual(threw, true, 'unquoted dotted atoms must be quoted');
477
523
  },
478
524
  },
479
525
  {
480
- name: 'parser preserves dotted atom constants for web-style terms',
526
+ name: 'parser preserves quoted dotted atoms for web-style terms',
481
527
  run: () => {
482
- const clauses = parseProgramText('p(web(be.ugent, josd), org.schema).\n');
483
- assertEqual(termToString(clauses[0].head, new Env(), true), 'p(web(be.ugent, josd), org.schema)', 'head');
528
+ const clauses = parseProgramText("p(web('be.ugent', josd), 'org.schema').\n");
529
+ assertEqual(termToString(clauses[0].head, new Env(), true), "p(web('be.ugent', josd), 'org.schema')", 'head');
484
530
  },
485
531
  },
486
532
  {
@@ -495,9 +541,9 @@ function whiteBoxCases() {
495
541
  {
496
542
  name: 'variantTerms recognizes alpha-equivalent goals',
497
543
  run: () => {
498
- const left = parseGoalText('edge(X, Y)');
499
- const right = parseGoalText('edge(A, B)');
500
- const nonVariant = parseGoalText('edge(A, A)');
544
+ const left = parseGoalText('edge(?x, ?y)');
545
+ const right = parseGoalText('edge(?a, ?b)');
546
+ const nonVariant = parseGoalText('edge(?a, ?a)');
501
547
  assertEqual(variantTerms(left, new Env(), right, new Env()), true, 'variant');
502
548
  assertEqual(variantTerms(left, new Env(), nonVariant, new Env()), false, 'non-variant');
503
549
  },
@@ -513,18 +559,18 @@ function whiteBoxCases() {
513
559
  {
514
560
  name: 'parseProgramText returns clause objects',
515
561
  run: () => {
516
- const clauses = parseProgramText('p(a).\nq(X) :- p(X).\n');
562
+ const clauses = parseProgramText('p(a).\nq(?x) :- p(?x).\n');
517
563
  assertEqual(clauses.length, 2, 'clause count');
518
- assertEqual(termToString(clauses[1].head, new Env(), true), 'q(X)', 'rule head');
564
+ assertEqual(termToString(clauses[1].head, new Env(), true), 'q(?x)', 'rule head');
519
565
  assertEqual(clauses[1].body.length, 1, 'body length');
520
566
  },
521
567
  },
522
568
  {
523
569
  name: 'clause candidate selection uses scalar indexes with fallback',
524
570
  run: () => {
525
- const program = Program.parse('edge(a, b).\nedge(c, d).\nedge(X, z).\n');
571
+ const program = Program.parse('edge(a, b).\nedge(c, d).\nedge(?x, z).\n');
526
572
  const group = program.findGroup('edge', 2);
527
- const goal = parseGoalText('edge(a, Y)');
573
+ const goal = parseGoalText('edge(a, ?y)');
528
574
  const candidates = selectClauseCandidates(group, goal, new Env());
529
575
  assertEqual(candidates.primary.length, 1, 'primary bucket length');
530
576
  assertEqual(candidates.fallback.length, 1, 'fallback length');
@@ -532,53 +578,71 @@ function whiteBoxCases() {
532
578
  },
533
579
  },
534
580
  {
535
- name: 'challenging examples keep dynamic-programming predicates memoized',
581
+ name: 'table declaration marks predicate group tabled',
582
+ run: () => {
583
+ const program = Program.parse('table(path, 2).\nedge(a, b).\npath(?x, ?y) :- edge(?x, ?y).\n');
584
+ const group = program.findGroup('path', 2);
585
+ assertEqual(Boolean(group), true, 'path/2 group exists');
586
+ assertEqual(group.tabled, true, 'path/2 tabled through table/2');
587
+ },
588
+ },
589
+ {
590
+ name: 'memoize fact does not table predicates',
591
+ run: () => {
592
+ const program = Program.parse('memoize(path, 2).\nedge(a, b).\npath(?x, ?y) :- edge(?x, ?y).\n');
593
+ const group = program.findGroup('path', 2);
594
+ assertEqual(Boolean(group), true, 'path/2 group exists');
595
+ assertEqual(group.tabled, false, 'memoize/2 is not a table declaration');
596
+ },
597
+ },
598
+ {
599
+ name: 'challenging examples keep dynamic-programming predicates tabled',
536
600
  run: () => {
537
601
  const checks = [
538
- ['binomial-vandermonde.pl', 'choose_step', 5, true],
539
- ['catalan-convolution.pl', 'catalan', 2, false],
540
- ['chart-parser.pl', 'span', 4, true],
541
- ['continued-fraction-sqrt2.pl', 'conv', 3, true],
542
- ['critical-path-schedule.pl', 'earliest_start', 2, false],
543
- ['critical-path-schedule.pl', 'finish_time', 2, false],
544
- ['integer-partitions.pl', 'partitions', 3, true],
545
- ['matrix-chain-order.pl', 'cost', 3, false],
546
- ['modular-exponentiation.pl', 'pow_mod', 4, true],
547
- ['pell-equation.pl', 'pell', 3, true],
548
- ['stirling-bell-numbers.pl', 'stirling2', 3, true],
549
- ['totient-summatory.pl', 'gcd', 3, true],
550
- ['totient-summatory.pl', 'totient', 2, false],
551
- ['weighted-interval-scheduling.pl', 'best_from', 2, true],
602
+ ['binomial-vandermonde.eye', 'choose_step', 5, true],
603
+ ['catalan-convolution.eye', 'catalan', 2, false],
604
+ ['chart-parser.eye', 'span', 4, true],
605
+ ['continued-fraction-sqrt2.eye', 'conv', 3, true],
606
+ ['critical-path-schedule.eye', 'earliest_start', 2, false],
607
+ ['critical-path-schedule.eye', 'finish_time', 2, false],
608
+ ['integer-partitions.eye', 'partitions', 3, true],
609
+ ['matrix-chain-order.eye', 'cost', 3, false],
610
+ ['modular-exponentiation.eye', 'pow_mod', 4, true],
611
+ ['pell-equation.eye', 'pell', 3, true],
612
+ ['stirling-bell-numbers.eye', 'stirling2', 3, true],
613
+ ['totient-summatory.eye', 'gcd', 3, true],
614
+ ['totient-summatory.eye', 'totient', 2, false],
615
+ ['weighted-interval-scheduling.eye', 'best_from', 2, true],
552
616
  ];
553
617
  for (const [filename, name, arity, recursive] of checks) {
554
618
  const text = fs.readFileSync(path.join(packageRoot, 'examples', filename), 'utf8');
555
619
  const program = Program.parseSources([{ text, filename }]);
556
620
  const group = program.findGroup(name, arity);
557
621
  assertEqual(Boolean(group), true, `${filename} ${name}/${arity} group exists`);
558
- assertEqual(group.memoized, true, `${filename} ${name}/${arity} memoized`);
622
+ assertEqual(group.tabled, true, `${filename} ${name}/${arity} tabled`);
559
623
  assertEqual(group.recursive, recursive, `${filename} ${name}/${arity} recursive`);
560
624
  }
561
625
  },
562
626
  },
563
627
  {
564
- name: 'n-queens example keeps diagonal checks memoized',
628
+ name: 'n-queens example keeps diagonal checks tabled',
565
629
  run: () => {
566
- const text = fs.readFileSync(path.join(packageRoot, 'examples', 'n-queens-8.pl'), 'utf8');
567
- const program = Program.parseSources([{ text, filename: 'n-queens-8.pl' }]);
630
+ const text = fs.readFileSync(path.join(packageRoot, 'examples', 'n-queens-8.eye'), 'utf8');
631
+ const program = Program.parseSources([{ text, filename: 'n-queens-8.eye' }]);
568
632
  const group = program.findGroup('no_diagonal_attack', 3);
569
633
  assertEqual(Boolean(group), true, 'no_diagonal_attack/3 group exists');
570
- assertEqual(group.memoized, true, 'no_diagonal_attack/3 memoized');
634
+ assertEqual(group.tabled, true, 'no_diagonal_attack/3 tabled');
571
635
  assertEqual(group.recursive, true, 'no_diagonal_attack/3 recursive');
572
636
  },
573
637
  },
574
638
  {
575
- name: 'collatz example keeps recursive trajectory predicate memoized',
639
+ name: 'collatz example keeps recursive trajectory predicate tabled',
576
640
  run: () => {
577
- const text = fs.readFileSync(path.join(packageRoot, 'examples', 'collatz-1000.pl'), 'utf8');
578
- const program = Program.parseSources([{ text, filename: 'collatz-1000.pl' }]);
641
+ const text = fs.readFileSync(path.join(packageRoot, 'examples', 'collatz-1000.eye'), 'utf8');
642
+ const program = Program.parseSources([{ text, filename: 'collatz-1000.eye' }]);
579
643
  const group = program.findGroup('collatz', 2);
580
644
  assertEqual(Boolean(group), true, 'collatz/2 group exists');
581
- assertEqual(group.memoized, true, 'collatz/2 memoized');
645
+ assertEqual(group.tabled, true, 'collatz/2 tabled');
582
646
  assertEqual(group.recursive, true, 'collatz/2 recursive');
583
647
  },
584
648
  },
@@ -586,7 +650,7 @@ function whiteBoxCases() {
586
650
  name: 'collatz example remains stack-safe for browser-sized stacks',
587
651
  run: () => {
588
652
  // Use a deliberately tiny stack to catch browser-worker recursion regressions.
589
- const result = spawnSync(process.execPath, ['--stack-size=100', bin, 'examples/collatz-1000.pl'], {
653
+ const result = spawnSync(process.execPath, ['--stack-size=100', bin, 'examples/collatz-1000.eye'], {
590
654
  cwd: packageRoot,
591
655
  encoding: 'utf8',
592
656
  });
@@ -613,7 +677,7 @@ function sectionLabel(name) {
613
677
  }
614
678
 
615
679
  function runWhy({ program, goalText, expected }) {
616
- const programFile = path.join(tmp, `${++tmpCounter}.pl`);
680
+ const programFile = path.join(tmp, `${++tmpCounter}.eye`);
617
681
  fs.writeFileSync(programFile, program);
618
682
  const goal = parseGoalText(goalText);
619
683
  fs.appendFileSync(programFile, `\nmaterialize(${goal.name}, ${goal.arity}).\n`);
@@ -632,7 +696,7 @@ function runWhy({ program, goalText, expected }) {
632
696
  }
633
697
 
634
698
  function runWhyLoose({ program, goalText }) {
635
- const programFile = path.join(tmp, `${++tmpCounter}.pl`);
699
+ const programFile = path.join(tmp, `${++tmpCounter}.eye`);
636
700
  fs.writeFileSync(programFile, program);
637
701
  const goal = parseGoalText(goalText);
638
702
  fs.appendFileSync(programFile, `\nmaterialize(${goal.name}, ${goal.arity}).\n`);
@@ -646,8 +710,8 @@ function runWhyLoose({ program, goalText }) {
646
710
 
647
711
  function listExampleNames() {
648
712
  return fs.readdirSync(path.join(packageRoot, 'examples'))
649
- .filter((name) => name.endsWith('.pl'))
650
- .map((name) => name.slice(0, -3))
713
+ .filter((name) => name.endsWith('.eye'))
714
+ .map((name) => name.slice(0, -4))
651
715
  .sort();
652
716
  }
653
717
 
@@ -656,17 +720,17 @@ function guideExampleCatalogIssues() {
656
720
  const expected = listExampleNames();
657
721
  const guide = fs.readFileSync(path.join(packageRoot, 'docs', 'guide.md'), 'utf8');
658
722
  const section = between(guide, '## Example catalog', '## Golden outputs, tests, and conformance');
659
- const rows = [...section.matchAll(/^\| \[`([A-Za-z0-9_-]+)\.pl`\]\(\.\.\/examples\/\1\.pl\) \|[^|]+\| \[`output\/\1\.pl`\]\(\.\.\/examples\/output\/\1\.pl\) \|$/gm)]
723
+ const rows = [...section.matchAll(/^\| \[`([A-Za-z0-9_-]+)\.eye`\]\(\.\.\/examples\/\1\.eye\) \|[^|]+\| \[`output\/\1\.eye`\]\(\.\.\/examples\/output\/\1\.eye\) \|$/gm)]
660
724
  .map((match) => match[1]);
661
- const sourceNames = [...section.matchAll(/\.\.\/examples\/([A-Za-z0-9_-]+)\.pl/g)].map((match) => match[1]).sort();
662
- const outputNames = [...section.matchAll(/\.\.\/examples\/output\/([A-Za-z0-9_-]+)\.pl/g)].map((match) => match[1]).sort();
725
+ const sourceNames = [...section.matchAll(/\.\.\/examples\/([A-Za-z0-9_-]+)\.eye/g)].map((match) => match[1]).sort();
726
+ const outputNames = [...section.matchAll(/\.\.\/examples\/output\/([A-Za-z0-9_-]+)\.eye/g)].map((match) => match[1]).sort();
663
727
  if (rows.length !== expected.length) issues.push(`expected ${expected.length} complete example rows, found ${rows.length}`);
664
728
  issues.push(...arrayDiffMessages(rows.sort(), expected, 'complete example rows'));
665
729
  issues.push(...arrayDiffMessages(sourceNames, expected, 'source links'));
666
730
  issues.push(...arrayDiffMessages(outputNames, expected, 'output links'));
667
731
  for (const name of expected) {
668
- const outputPath = path.join(packageRoot, 'examples', 'output', `${name}.pl`);
669
- if (!fs.existsSync(outputPath)) issues.push(`missing examples/output/${name}.pl`);
732
+ const outputPath = path.join(packageRoot, 'examples', 'output', `${name}.eye`);
733
+ if (!fs.existsSync(outputPath)) issues.push(`missing examples/output/${name}.eye`);
670
734
  }
671
735
  return issues.sort();
672
736
  }
@@ -679,8 +743,8 @@ function playgroundExampleIssues() {
679
743
  if (match == null) return ['playground EXAMPLES array not found'];
680
744
  const examples = JSON.parse(match[1]).sort();
681
745
  issues.push(...arrayDiffMessages(examples, expected, 'playground EXAMPLES'));
682
- if (!html.includes('new URL(`./examples/${name}.pl`, location.href)')) {
683
- issues.push('playground must load selected examples from relative ./examples/*.pl URLs');
746
+ if (!html.includes('new URL(`./examples/${name}.eye`, location.href)')) {
747
+ issues.push('playground must load selected examples from relative ./examples/*.eye URLs');
684
748
  }
685
749
  if (!html.includes("fetch(exampleUrl, { cache: 'no-store' })")) {
686
750
  issues.push('playground must fetch selected example source from its relative URL');
@@ -843,6 +907,33 @@ function misleadingDependencyInstallDocs() {
843
907
  return [...new Set(misleading)].sort();
844
908
  }
845
909
 
910
+ function documentationSourceStyleIssues() {
911
+ const issues = [];
912
+ const docsRoot = path.join(packageRoot, 'docs');
913
+ const docs = [
914
+ path.join(docsRoot, 'guide.md'),
915
+ path.join(docsRoot, 'language-reference.md'),
916
+ ];
917
+ for (const file of docs) {
918
+ const text = fs.readFileSync(file, 'utf8');
919
+ if (text.includes('```prolog')) {
920
+ issues.push(`${path.relative(packageRoot, file)}: use eyelang code fences instead of prolog fences`);
921
+ }
922
+ }
923
+
924
+ const reference = fs.readFileSync(path.join(docsRoot, 'language-reference.md'), 'utf8');
925
+ const builtins = between(reference, '## 9. Standard built-in predicates', '## 10. Implementation-specific built-ins');
926
+ const staleMetaVariables = /`[^`]*(?<!\?)(?:\b(?:A|B|C|D|N|T|Low|High|Start|Needle|Context|Search|Generator|Test|Goal)\b)[^`]*`/;
927
+ for (const [index, line] of builtins.split('\n').entries()) {
928
+ if (!line.trim().startsWith('|')) continue;
929
+ if (line.includes('EYELANG_LOCAL_TIME=')) continue;
930
+ if (staleMetaVariables.test(line)) {
931
+ issues.push(`docs/language-reference.md section 9 line ${index + 1}: stale Prolog-style metavariable in built-in description: ${line.trim()}`);
932
+ }
933
+ }
934
+ return issues.sort();
935
+ }
936
+
846
937
  function findBrokenDocLinks() {
847
938
  const broken = [];
848
939
  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).
package/examples/age.pl DELETED
@@ -1,26 +0,0 @@
1
- % Age checker adapted from Eyeling.
2
- % The example combines date literals, ISO-8601 duration values, local_time/1,
3
- % difference/3, and duration comparison. It deliberately uses the current
4
- % local date so the derived ageAbove/2 fact remains an executable temporal
5
- % check rather than a precomputed constant.
6
-
7
- materialize(birthDay, 2).
8
- materialize(duration, 2).
9
- materialize(ageAbove, 2).
10
- materialize(is, 2).
11
-
12
- birthDay(patH, "1944-08-21").
13
- duration(check, "P80Y").
14
-
15
- % A person is above a duration if the local date minus the birthday is greater
16
- % than that duration.
17
- ageAbove(S, A) :-
18
- birthDay(S, B),
19
- duration(check, A),
20
- local_time(D),
21
- difference(D, B, F),
22
- gt(F, A).
23
-
24
- % Test mirroring the Eyeling example.
25
- is(test, true) :-
26
- ageAbove(S, "P80Y").