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