eyeling 1.34.4 → 1.34.6

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 (555) hide show
  1. package/README.md +3 -90
  2. package/bin/eyeling.cjs +4 -56
  3. package/dist/browser/eyeling.browser.js +0 -1
  4. package/examples/context-schema-audit.n3 +1 -1
  5. package/eyeling.js +0 -1
  6. package/index.d.ts +3 -37
  7. package/index.js +1 -90
  8. package/lib/cli.js +0 -1
  9. package/package.json +3 -12
  10. package/test/eyelang/conformance/README.md +9 -11
  11. package/test/eyelang/conformance/cases/001_fact_output.pl +4 -0
  12. package/test/eyelang/conformance/cases/002_rule_recursion.pl +7 -0
  13. package/test/eyelang/conformance/cases/002_rule_recursion.query +1 -0
  14. package/test/eyelang/conformance/cases/003_terms_and_readback.pl +16 -0
  15. package/test/eyelang/conformance/cases/003_terms_and_readback.query +1 -0
  16. package/test/eyelang/conformance/cases/004_conjunction_and_parentheses.pl +5 -0
  17. package/test/eyelang/conformance/cases/004_conjunction_and_parentheses.query +1 -0
  18. package/test/eyelang/conformance/cases/005_list_deconstruction.pl +6 -0
  19. package/test/eyelang/conformance/cases/005_list_deconstruction.query +1 -0
  20. package/test/eyelang/conformance/cases/006_comma_formula_data.pl +4 -0
  21. package/test/eyelang/conformance/cases/006_comma_formula_data.query +1 -0
  22. package/test/eyelang/conformance/cases/007_anonymous_variables.pl +5 -0
  23. package/test/eyelang/conformance/cases/007_anonymous_variables.query +1 -0
  24. package/test/eyelang/conformance/cases/008_graphic_atoms.pl +6 -0
  25. package/test/eyelang/conformance/cases/008_graphic_atoms.query +1 -0
  26. package/test/eyelang/conformance/cases/009_comments_and_whitespace.pl +5 -0
  27. package/test/eyelang/conformance/cases/009_comments_and_whitespace.query +1 -0
  28. package/test/eyelang/conformance/cases/010_variable_scope_and_reuse.pl +8 -0
  29. package/test/eyelang/conformance/cases/010_variable_scope_and_reuse.query +1 -0
  30. package/test/eyelang/conformance/cases/011_predicate_arity.pl +6 -0
  31. package/test/eyelang/conformance/cases/011_predicate_arity.query +1 -0
  32. package/test/eyelang/conformance/cases/012_nested_compound_unification.pl +5 -0
  33. package/test/eyelang/conformance/cases/012_nested_compound_unification.query +1 -0
  34. package/test/eyelang/conformance/cases/013_multiple_clauses_order.pl +6 -0
  35. package/test/eyelang/conformance/cases/013_multiple_clauses_order.query +1 -0
  36. package/test/eyelang/conformance/cases/014_failure_filters_answers.pl +7 -0
  37. package/test/eyelang/conformance/cases/014_failure_filters_answers.query +1 -0
  38. package/test/eyelang/conformance/cases/015_improper_list_unification.pl +6 -0
  39. package/test/eyelang/conformance/cases/015_improper_list_unification.query +1 -0
  40. package/test/eyelang/conformance/cases/016_zero_arity_compound.pl +4 -0
  41. package/test/eyelang/conformance/cases/016_zero_arity_compound.query +1 -0
  42. package/test/eyelang/conformance/cases/017_three_step_recursion.pl +8 -0
  43. package/test/eyelang/conformance/cases/017_three_step_recursion.query +1 -0
  44. package/test/eyelang/conformance/cases/018_quoted_atom_readback.pl +6 -0
  45. package/test/eyelang/conformance/cases/018_quoted_atom_readback.query +1 -0
  46. package/test/eyelang/conformance/cases/019_parenthesized_three_conjuncts.pl +7 -0
  47. package/test/eyelang/conformance/cases/019_parenthesized_three_conjuncts.query +1 -0
  48. package/test/eyelang/conformance/cases/020_nested_list_terms.pl +5 -0
  49. package/test/eyelang/conformance/cases/020_nested_list_terms.query +1 -0
  50. package/test/eyelang/conformance/cases/021_repeated_variable_head.pl +7 -0
  51. package/test/eyelang/conformance/cases/022_rule_head_structure.pl +5 -0
  52. package/test/eyelang/conformance/cases/023_quoted_escapes_readback.pl +5 -0
  53. package/test/eyelang/conformance/cases/024_numeric_literal_readback.pl +6 -0
  54. package/test/eyelang/conformance/cases/025_body_parentheses_with_formula_data.pl +5 -0
  55. package/test/eyelang/conformance/cases/026_underscore_named_variable_reuse.pl +5 -0
  56. package/test/eyelang/conformance/cases/027_default_derived_output.pl +5 -0
  57. package/test/eyelang/conformance/cases/028_materialize_focus.pl +5 -0
  58. package/test/eyelang/conformance/cases/029_arithmetic_and_comparison.pl +11 -0
  59. package/test/eyelang/conformance/cases/029_arithmetic_and_comparison.query +1 -0
  60. package/test/eyelang/conformance/cases/030_strings_and_atoms.pl +4 -0
  61. package/test/eyelang/conformance/cases/030_strings_and_atoms.query +1 -0
  62. package/test/eyelang/conformance/cases/031_lists_aggregation_ordering.pl +10 -0
  63. package/test/eyelang/conformance/cases/031_lists_aggregation_ordering.query +1 -0
  64. package/test/eyelang/conformance/cases/032_holds_parts.pl +4 -0
  65. package/test/eyelang/conformance/cases/033_negation_once_generators.pl +7 -0
  66. package/test/eyelang/conformance/cases/033_negation_once_generators.query +1 -0
  67. package/test/eyelang/conformance/cases/034_equality_and_inequality.pl +6 -0
  68. package/test/eyelang/conformance/cases/034_equality_and_inequality.query +1 -0
  69. package/test/eyelang/conformance/cases/035_list_relations.pl +5 -0
  70. package/test/eyelang/conformance/cases/035_list_relations.query +1 -0
  71. package/test/eyelang/conformance/cases/036_append_splits.pl +3 -0
  72. package/test/eyelang/conformance/cases/036_append_splits.query +1 -0
  73. package/test/eyelang/conformance/cases/037_matching_and_comparison.pl +7 -0
  74. package/test/eyelang/conformance/cases/037_matching_and_comparison.query +1 -0
  75. package/test/eyelang/conformance/cases/038_memoize_declaration.pl +8 -0
  76. package/test/eyelang/conformance/cases/038_memoize_declaration.query +1 -0
  77. package/test/eyelang/conformance/cases/039_numeric_functions.pl +9 -0
  78. package/test/eyelang/conformance/cases/039_numeric_functions.query +1 -0
  79. package/test/eyelang/conformance/cases/040_between_enumeration.pl +3 -0
  80. package/test/eyelang/conformance/cases/040_between_enumeration.query +1 -0
  81. package/test/eyelang/conformance/cases/041_smallest_divisor.pl +3 -0
  82. package/test/eyelang/conformance/cases/041_smallest_divisor.query +1 -0
  83. package/test/eyelang/conformance/cases/042_negation_filter.pl +7 -0
  84. package/test/eyelang/conformance/cases/042_negation_filter.query +1 -0
  85. package/test/eyelang/conformance/cases/043_once_user_predicate.pl +5 -0
  86. package/test/eyelang/conformance/cases/043_once_user_predicate.query +1 -0
  87. package/test/eyelang/conformance/cases/044_findall_user_goal.pl +6 -0
  88. package/test/eyelang/conformance/cases/044_findall_user_goal.query +1 -0
  89. package/test/eyelang/conformance/cases/045_sort_deduplicates_atoms.pl +3 -0
  90. package/test/eyelang/conformance/cases/045_sort_deduplicates_atoms.query +1 -0
  91. package/test/eyelang/conformance/cases/046_append_bound_prefix_suffix.pl +4 -0
  92. package/test/eyelang/conformance/cases/046_append_bound_prefix_suffix.query +1 -0
  93. package/test/eyelang/conformance/cases/047_nth0_index_generation.pl +3 -0
  94. package/test/eyelang/conformance/cases/047_nth0_index_generation.query +1 -0
  95. package/test/eyelang/conformance/cases/048_set_nth0_edges.pl +4 -0
  96. package/test/eyelang/conformance/cases/048_set_nth0_edges.query +1 -0
  97. package/test/eyelang/conformance/cases/049_select_duplicate_occurrences.pl +3 -0
  98. package/test/eyelang/conformance/cases/049_select_duplicate_occurrences.query +1 -0
  99. package/test/eyelang/conformance/cases/050_not_member_filter.pl +6 -0
  100. package/test/eyelang/conformance/cases/050_not_member_filter.query +1 -0
  101. package/test/eyelang/conformance/cases/051_nested_holds_parts.pl +4 -0
  102. package/test/eyelang/conformance/cases/052_holds_member.pl +3 -0
  103. package/test/eyelang/conformance/cases/053_materialize_excludes_source_fact.pl +6 -0
  104. package/test/eyelang/conformance/cases/054_numeric_and_lexical_comparison.pl +5 -0
  105. package/test/eyelang/conformance/cases/054_numeric_and_lexical_comparison.query +1 -0
  106. package/test/eyelang/conformance/cases/055_string_matching_filters.pl +6 -0
  107. package/test/eyelang/conformance/cases/055_string_matching_filters.query +1 -0
  108. package/test/eyelang/conformance/cases/056_string_and_atom_concat.pl +3 -0
  109. package/test/eyelang/conformance/cases/056_string_and_atom_concat.query +1 -0
  110. package/test/eyelang/conformance/cases/057_countall_empty_and_nonempty.pl +4 -0
  111. package/test/eyelang/conformance/cases/057_countall_empty_and_nonempty.query +1 -0
  112. package/test/eyelang/conformance/cases/058_sumall_numeric_template.pl +5 -0
  113. package/test/eyelang/conformance/cases/058_sumall_numeric_template.query +1 -0
  114. package/test/eyelang/conformance/cases/059_aggregate_min_template.pl +5 -0
  115. package/test/eyelang/conformance/cases/059_aggregate_min_template.query +1 -0
  116. package/test/eyelang/conformance/cases/060_aggregate_max_compound_key.pl +5 -0
  117. package/test/eyelang/conformance/cases/060_aggregate_max_compound_key.query +1 -0
  118. package/test/eyelang/conformance/cases/061_date_difference.pl +4 -0
  119. package/test/eyelang/conformance/cases/062_reusable_numeric_builtins.pl +10 -0
  120. package/test/eyelang/conformance/cases/063_reusable_list_builtins.pl +11 -0
  121. package/test/eyelang/conformance/cases/064_reusable_string_builtins.pl +12 -0
  122. package/test/eyelang/conformance/cases/065_reusable_term_control_builtins.pl +11 -0
  123. package/test/eyelang/conformance/cases/066_numeric_edges.pl +14 -0
  124. package/test/eyelang/conformance/cases/067_list_edges.pl +10 -0
  125. package/test/eyelang/conformance/cases/068_list_generation_order.pl +7 -0
  126. package/test/eyelang/conformance/cases/069_list_summaries_and_sets.pl +9 -0
  127. package/test/eyelang/conformance/cases/070_matches_named_captures.pl +13 -0
  128. package/test/eyelang/conformance/cases/071_string_edges.pl +10 -0
  129. package/test/eyelang/conformance/cases/072_string_conversions.pl +10 -0
  130. package/test/eyelang/conformance/cases/073_term_introspection_edges.pl +10 -0
  131. package/test/eyelang/conformance/cases/074_forall_edges.pl +10 -0
  132. package/test/eyelang/conformance/cases/075_aggregation_edges.pl +12 -0
  133. package/test/eyelang/conformance/cases/076_composed_reusable_builtins.pl +8 -0
  134. package/test/eyelang/conformance/cases/077_recursive_path_with_lists.pl +10 -0
  135. package/test/eyelang/conformance/cases/078_mutual_recursion_with_arithmetic.pl +7 -0
  136. package/test/eyelang/conformance/cases/079_big_integer_arithmetic.pl +8 -0
  137. package/test/eyelang/conformance/cases/080_rounding_modes.pl +10 -0
  138. package/test/eyelang/conformance/cases/081_zero_safe_numeric_functions.pl +9 -0
  139. package/test/eyelang/conformance/cases/082_comparison_semantics.pl +10 -0
  140. package/test/eyelang/conformance/cases/083_between_modes_and_empty_ranges.pl +8 -0
  141. package/test/eyelang/conformance/cases/084_append_and_select_composition.pl +7 -0
  142. package/test/eyelang/conformance/cases/085_nth_and_update_edges.pl +8 -0
  143. package/test/eyelang/conformance/cases/086_slicing_pipeline.pl +10 -0
  144. package/test/eyelang/conformance/cases/087_sort_reverse_length.pl +8 -0
  145. package/test/eyelang/conformance/cases/088_list_summaries_failures.pl +8 -0
  146. package/test/eyelang/conformance/cases/089_string_split_join_pipeline.pl +7 -0
  147. package/test/eyelang/conformance/cases/090_string_substring_replace_edges.pl +9 -0
  148. package/test/eyelang/conformance/cases/091_string_case_and_trim.pl +7 -0
  149. package/test/eyelang/conformance/cases/092_scalar_string_conversions.pl +9 -0
  150. package/test/eyelang/conformance/cases/093_regex_named_captures_context.pl +8 -0
  151. package/test/eyelang/conformance/cases/094_context_holds_enumeration.pl +7 -0
  152. package/test/eyelang/conformance/cases/095_term_introspection_roundtrip.pl +8 -0
  153. package/test/eyelang/conformance/cases/096_functor_scalar_edges.pl +8 -0
  154. package/test/eyelang/conformance/cases/097_control_negation_once_forall.pl +13 -0
  155. package/test/eyelang/conformance/cases/098_aggregation_nested_templates.pl +11 -0
  156. package/test/eyelang/conformance/cases/099_materialize_multiple_arities.pl +8 -0
  157. package/test/eyelang/conformance/cases/100_reusable_builtin_workflow.pl +10 -0
  158. package/test/eyelang/conformance/expected/001_fact_output.pl +1 -0
  159. package/test/eyelang/conformance/expected/002_rule_recursion.pl +2 -0
  160. package/test/eyelang/conformance/expected/003_terms_and_readback.pl +13 -0
  161. package/test/eyelang/conformance/expected/004_conjunction_and_parentheses.pl +1 -0
  162. package/test/eyelang/conformance/expected/005_list_deconstruction.pl +2 -0
  163. package/test/eyelang/conformance/expected/006_comma_formula_data.pl +1 -0
  164. package/test/eyelang/conformance/expected/007_anonymous_variables.pl +1 -0
  165. package/test/eyelang/conformance/expected/008_graphic_atoms.pl +3 -0
  166. package/test/eyelang/conformance/expected/009_comments_and_whitespace.pl +2 -0
  167. package/test/eyelang/conformance/expected/010_variable_scope_and_reuse.pl +2 -0
  168. package/test/eyelang/conformance/expected/011_predicate_arity.pl +2 -0
  169. package/test/eyelang/conformance/expected/012_nested_compound_unification.pl +2 -0
  170. package/test/eyelang/conformance/expected/013_multiple_clauses_order.pl +2 -0
  171. package/test/eyelang/conformance/expected/014_failure_filters_answers.pl +1 -0
  172. package/test/eyelang/conformance/expected/015_improper_list_unification.pl +3 -0
  173. package/test/eyelang/conformance/expected/016_zero_arity_compound.pl +1 -0
  174. package/test/eyelang/conformance/expected/017_three_step_recursion.pl +3 -0
  175. package/test/eyelang/conformance/expected/018_quoted_atom_readback.pl +3 -0
  176. package/test/eyelang/conformance/expected/019_parenthesized_three_conjuncts.pl +1 -0
  177. package/test/eyelang/conformance/expected/020_nested_list_terms.pl +2 -0
  178. package/test/eyelang/conformance/expected/021_repeated_variable_head.pl +2 -0
  179. package/test/eyelang/conformance/expected/022_rule_head_structure.pl +2 -0
  180. package/test/eyelang/conformance/expected/023_quoted_escapes_readback.pl +2 -0
  181. package/test/eyelang/conformance/expected/024_numeric_literal_readback.pl +3 -0
  182. package/test/eyelang/conformance/expected/025_body_parentheses_with_formula_data.pl +1 -0
  183. package/test/eyelang/conformance/expected/026_underscore_named_variable_reuse.pl +1 -0
  184. package/test/eyelang/conformance/expected/028_materialize_focus.pl +1 -0
  185. package/test/eyelang/conformance/expected/029_arithmetic_and_comparison.pl +9 -0
  186. package/test/eyelang/conformance/expected/030_strings_and_atoms.pl +2 -0
  187. package/test/eyelang/conformance/expected/031_lists_aggregation_ordering.pl +9 -0
  188. package/test/eyelang/conformance/expected/032_holds_parts.pl +3 -0
  189. package/test/eyelang/conformance/expected/033_negation_once_generators.pl +2 -0
  190. package/test/eyelang/conformance/expected/034_equality_and_inequality.pl +4 -0
  191. package/test/eyelang/conformance/expected/035_list_relations.pl +4 -0
  192. package/test/eyelang/conformance/expected/036_append_splits.pl +3 -0
  193. package/test/eyelang/conformance/expected/037_matching_and_comparison.pl +5 -0
  194. package/test/eyelang/conformance/expected/038_memoize_declaration.pl +2 -0
  195. package/test/eyelang/conformance/expected/039_numeric_functions.pl +7 -0
  196. package/test/eyelang/conformance/expected/040_between_enumeration.pl +3 -0
  197. package/test/eyelang/conformance/expected/041_smallest_divisor.pl +1 -0
  198. package/test/eyelang/conformance/expected/042_negation_filter.pl +2 -0
  199. package/test/eyelang/conformance/expected/043_once_user_predicate.pl +1 -0
  200. package/test/eyelang/conformance/expected/044_findall_user_goal.pl +1 -0
  201. package/test/eyelang/conformance/expected/045_sort_deduplicates_atoms.pl +1 -0
  202. package/test/eyelang/conformance/expected/046_append_bound_prefix_suffix.pl +2 -0
  203. package/test/eyelang/conformance/expected/047_nth0_index_generation.pl +1 -0
  204. package/test/eyelang/conformance/expected/048_set_nth0_edges.pl +2 -0
  205. package/test/eyelang/conformance/expected/049_select_duplicate_occurrences.pl +2 -0
  206. package/test/eyelang/conformance/expected/050_not_member_filter.pl +1 -0
  207. package/test/eyelang/conformance/expected/051_nested_holds_parts.pl +3 -0
  208. package/test/eyelang/conformance/expected/052_holds_member.pl +2 -0
  209. package/test/eyelang/conformance/expected/053_materialize_excludes_source_fact.pl +1 -0
  210. package/test/eyelang/conformance/expected/054_numeric_and_lexical_comparison.pl +3 -0
  211. package/test/eyelang/conformance/expected/055_string_matching_filters.pl +2 -0
  212. package/test/eyelang/conformance/expected/056_string_and_atom_concat.pl +1 -0
  213. package/test/eyelang/conformance/expected/057_countall_empty_and_nonempty.pl +1 -0
  214. package/test/eyelang/conformance/expected/058_sumall_numeric_template.pl +1 -0
  215. package/test/eyelang/conformance/expected/059_aggregate_min_template.pl +1 -0
  216. package/test/eyelang/conformance/expected/060_aggregate_max_compound_key.pl +1 -0
  217. package/test/eyelang/conformance/expected/061_date_difference.pl +2 -0
  218. package/test/eyelang/conformance/expected/062_reusable_numeric_builtins.pl +8 -0
  219. package/test/eyelang/conformance/expected/063_reusable_list_builtins.pl +9 -0
  220. package/test/eyelang/conformance/expected/064_reusable_string_builtins.pl +10 -0
  221. package/test/eyelang/conformance/expected/065_reusable_term_control_builtins.pl +6 -0
  222. package/test/eyelang/conformance/expected/066_numeric_edges.pl +12 -0
  223. package/test/eyelang/conformance/expected/067_list_edges.pl +8 -0
  224. package/test/eyelang/conformance/expected/068_list_generation_order.pl +10 -0
  225. package/test/eyelang/conformance/expected/069_list_summaries_and_sets.pl +7 -0
  226. package/test/eyelang/conformance/expected/070_matches_named_captures.pl +1 -0
  227. package/test/eyelang/conformance/expected/071_string_edges.pl +8 -0
  228. package/test/eyelang/conformance/expected/072_string_conversions.pl +8 -0
  229. package/test/eyelang/conformance/expected/073_term_introspection_edges.pl +8 -0
  230. package/test/eyelang/conformance/expected/074_forall_edges.pl +5 -0
  231. package/test/eyelang/conformance/expected/075_aggregation_edges.pl +7 -0
  232. package/test/eyelang/conformance/expected/076_composed_reusable_builtins.pl +5 -0
  233. package/test/eyelang/conformance/expected/077_recursive_path_with_lists.pl +3 -0
  234. package/test/eyelang/conformance/expected/078_mutual_recursion_with_arithmetic.pl +7 -0
  235. package/test/eyelang/conformance/expected/079_big_integer_arithmetic.pl +6 -0
  236. package/test/eyelang/conformance/expected/080_rounding_modes.pl +8 -0
  237. package/test/eyelang/conformance/expected/081_zero_safe_numeric_functions.pl +7 -0
  238. package/test/eyelang/conformance/expected/082_comparison_semantics.pl +8 -0
  239. package/test/eyelang/conformance/expected/083_between_modes_and_empty_ranges.pl +8 -0
  240. package/test/eyelang/conformance/expected/084_append_and_select_composition.pl +10 -0
  241. package/test/eyelang/conformance/expected/085_nth_and_update_edges.pl +8 -0
  242. package/test/eyelang/conformance/expected/086_slicing_pipeline.pl +7 -0
  243. package/test/eyelang/conformance/expected/087_sort_reverse_length.pl +6 -0
  244. package/test/eyelang/conformance/expected/088_list_summaries_failures.pl +6 -0
  245. package/test/eyelang/conformance/expected/089_string_split_join_pipeline.pl +4 -0
  246. package/test/eyelang/conformance/expected/090_string_substring_replace_edges.pl +7 -0
  247. package/test/eyelang/conformance/expected/091_string_case_and_trim.pl +5 -0
  248. package/test/eyelang/conformance/expected/092_scalar_string_conversions.pl +7 -0
  249. package/test/eyelang/conformance/expected/093_regex_named_captures_context.pl +5 -0
  250. package/test/eyelang/conformance/expected/094_context_holds_enumeration.pl +8 -0
  251. package/test/eyelang/conformance/expected/095_term_introspection_roundtrip.pl +6 -0
  252. package/test/eyelang/conformance/expected/096_functor_scalar_edges.pl +6 -0
  253. package/test/eyelang/conformance/expected/097_control_negation_once_forall.pl +5 -0
  254. package/test/eyelang/conformance/expected/098_aggregation_nested_templates.pl +5 -0
  255. package/test/eyelang/conformance/expected/099_materialize_multiple_arities.pl +4 -0
  256. package/test/eyelang/conformance/expected/100_reusable_builtin_workflow.pl +6 -0
  257. package/test/eyelang/run-conformance.mjs +20 -22
  258. package/test/packlist.test.js +0 -2
  259. package/test/run.js +0 -2
  260. package/docs/eyelang-guide.md +0 -535
  261. package/docs/eyelang-language-reference.md +0 -712
  262. package/examples/eyelang/access-control-policy.pl +0 -52
  263. package/examples/eyelang/ackermann.pl +0 -46
  264. package/examples/eyelang/age.pl +0 -28
  265. package/examples/eyelang/aliases-and-namespaces.pl +0 -22
  266. package/examples/eyelang/alignment-demo.pl +0 -44
  267. package/examples/eyelang/allen-interval-calculus.pl +0 -64
  268. package/examples/eyelang/ancestor.pl +0 -21
  269. package/examples/eyelang/animal.pl +0 -21
  270. package/examples/eyelang/annotation.pl +0 -34
  271. package/examples/eyelang/auroracare.pl +0 -309
  272. package/examples/eyelang/backward.pl +0 -12
  273. package/examples/eyelang/basic-monadic.pl +0 -10032
  274. package/examples/eyelang/bayes-diagnosis.pl +0 -108
  275. package/examples/eyelang/bayes-therapy.pl +0 -182
  276. package/examples/eyelang/beam-deflection.pl +0 -50
  277. package/examples/eyelang/blocks-world-planning.pl +0 -75
  278. package/examples/eyelang/bmi.pl +0 -232
  279. package/examples/eyelang/braking-safety-worlds.pl +0 -69
  280. package/examples/eyelang/buck-converter-design.pl +0 -78
  281. package/examples/eyelang/cache-performance.pl +0 -54
  282. package/examples/eyelang/canary-release.pl +0 -49
  283. package/examples/eyelang/cat-koko.pl +0 -24
  284. package/examples/eyelang/clinical-trial-screening.pl +0 -92
  285. package/examples/eyelang/combinatorics-findall-sort.pl +0 -37
  286. package/examples/eyelang/competitive-enzyme-kinetics.pl +0 -78
  287. package/examples/eyelang/complex.pl +0 -121
  288. package/examples/eyelang/composition-of-injective-functions-is-injective.pl +0 -50
  289. package/examples/eyelang/context-association.pl +0 -53
  290. package/examples/eyelang/context-schema-audit.pl +0 -46
  291. package/examples/eyelang/control-system.pl +0 -72
  292. package/examples/eyelang/cyclic-path.pl +0 -16
  293. package/examples/eyelang/d3-group.pl +0 -100
  294. package/examples/eyelang/dairy-energy-balance.pl +0 -65
  295. package/examples/eyelang/data-negotiation.pl +0 -39
  296. package/examples/eyelang/deep-taxonomy-10.pl +0 -115
  297. package/examples/eyelang/deep-taxonomy-100.pl +0 -385
  298. package/examples/eyelang/deep-taxonomy-1000.pl +0 -3085
  299. package/examples/eyelang/deep-taxonomy-10000.pl +0 -30094
  300. package/examples/eyelang/deep-taxonomy-100000.pl +0 -300184
  301. package/examples/eyelang/delfour.pl +0 -281
  302. package/examples/eyelang/deontic-logic.pl +0 -52
  303. package/examples/eyelang/derived-backward-rule.pl +0 -30
  304. package/examples/eyelang/derived-rule.pl +0 -27
  305. package/examples/eyelang/diamond-property.pl +0 -38
  306. package/examples/eyelang/dijkstra-findall-sort.pl +0 -44
  307. package/examples/eyelang/dijkstra-risk-path.pl +0 -86
  308. package/examples/eyelang/dijkstra.pl +0 -46
  309. package/examples/eyelang/dining-philosophers.pl +0 -140
  310. package/examples/eyelang/dog.pl +0 -25
  311. package/examples/eyelang/dpv-odrl-purpose-mapping.pl +0 -46
  312. package/examples/eyelang/drone-corridor-planner.pl +0 -51
  313. package/examples/eyelang/easter-computus.pl +0 -89
  314. package/examples/eyelang/electrical-rc-filter.pl +0 -36
  315. package/examples/eyelang/epidemic-policy.pl +0 -67
  316. package/examples/eyelang/equivalence-classes-overlap-implies-same-class.pl +0 -27
  317. package/examples/eyelang/eulerian-path.pl +0 -85
  318. package/examples/eyelang/ev-range-worlds.pl +0 -82
  319. package/examples/eyelang/existential-rule.pl +0 -18
  320. package/examples/eyelang/exoplanet-validation-worlds.pl +0 -88
  321. package/examples/eyelang/expression-eval.pl +0 -43
  322. package/examples/eyelang/family-cousins.pl +0 -65
  323. package/examples/eyelang/fastpow.pl +0 -53
  324. package/examples/eyelang/fft8-numeric.pl +0 -83
  325. package/examples/eyelang/fibonacci.pl +0 -53
  326. package/examples/eyelang/field-nitrogen-balance.pl +0 -70
  327. package/examples/eyelang/flandor.pl +0 -296
  328. package/examples/eyelang/floating-point.pl +0 -23
  329. package/examples/eyelang/four-color-map.pl +0 -127
  330. package/examples/eyelang/fundamental-theorem-arithmetic.pl +0 -113
  331. package/examples/eyelang/gd-step-certified.pl +0 -158
  332. package/examples/eyelang/gdpr-compliance.pl +0 -69
  333. package/examples/eyelang/good-cobbler.pl +0 -14
  334. package/examples/eyelang/gps.pl +0 -152
  335. package/examples/eyelang/graph-reachability.pl +0 -36
  336. package/examples/eyelang/gray-code-counter.pl +0 -48
  337. package/examples/eyelang/greatest-lower-bound-uniqueness.pl +0 -28
  338. package/examples/eyelang/group-inverse-uniqueness.pl +0 -34
  339. package/examples/eyelang/hamiltonian-path.pl +0 -49
  340. package/examples/eyelang/hamming-code.pl +0 -105
  341. package/examples/eyelang/hanoi.pl +0 -20
  342. package/examples/eyelang/heat-loss.pl +0 -51
  343. package/examples/eyelang/heron-theorem.pl +0 -36
  344. package/examples/eyelang/ideal-gas-law.pl +0 -37
  345. package/examples/eyelang/illegitimate-reasoning.pl +0 -88
  346. package/examples/eyelang/knowledge-engineering-alignment-flow.pl +0 -40
  347. package/examples/eyelang/law-of-cosines.pl +0 -31
  348. package/examples/eyelang/least-squares-regression.pl +0 -81
  349. package/examples/eyelang/list-collection.pl +0 -33
  350. package/examples/eyelang/lldm.pl +0 -78
  351. package/examples/eyelang/manufacturing-quality-control.pl +0 -73
  352. package/examples/eyelang/microgrid-dispatch.pl +0 -85
  353. package/examples/eyelang/monkey-bananas.pl +0 -45
  354. package/examples/eyelang/network-sla.pl +0 -48
  355. package/examples/eyelang/newton-raphson.pl +0 -49
  356. package/examples/eyelang/nixon-diamond.pl +0 -37
  357. package/examples/eyelang/observability-log-correlation.pl +0 -34
  358. package/examples/eyelang/odrl-dpv-fpv-trust-flow.pl +0 -43
  359. package/examples/eyelang/odrl-dpv-healthcare-risk-ranked.pl +0 -266
  360. package/examples/eyelang/odrl-dpv-risk-ranked.pl +0 -320
  361. package/examples/eyelang/orbital-transfer-design.pl +0 -113
  362. package/examples/eyelang/output/access-control-policy.pl +0 -2
  363. package/examples/eyelang/output/ackermann.pl +0 -12
  364. package/examples/eyelang/output/age.pl +0 -2
  365. package/examples/eyelang/output/aliases-and-namespaces.pl +0 -5
  366. package/examples/eyelang/output/alignment-demo.pl +0 -32
  367. package/examples/eyelang/output/allen-interval-calculus.pl +0 -154
  368. package/examples/eyelang/output/ancestor.pl +0 -6
  369. package/examples/eyelang/output/animal.pl +0 -4
  370. package/examples/eyelang/output/annotation.pl +0 -4
  371. package/examples/eyelang/output/auroracare.pl +0 -117
  372. package/examples/eyelang/output/backward.pl +0 -1
  373. package/examples/eyelang/output/basic-monadic.pl +0 -1518
  374. package/examples/eyelang/output/bayes-diagnosis.pl +0 -13
  375. package/examples/eyelang/output/bayes-therapy.pl +0 -23
  376. package/examples/eyelang/output/beam-deflection.pl +0 -5
  377. package/examples/eyelang/output/blocks-world-planning.pl +0 -4
  378. package/examples/eyelang/output/bmi.pl +0 -32
  379. package/examples/eyelang/output/braking-safety-worlds.pl +0 -18
  380. package/examples/eyelang/output/buck-converter-design.pl +0 -6
  381. package/examples/eyelang/output/cache-performance.pl +0 -4
  382. package/examples/eyelang/output/canary-release.pl +0 -5
  383. package/examples/eyelang/output/cat-koko.pl +0 -3
  384. package/examples/eyelang/output/clinical-trial-screening.pl +0 -9
  385. package/examples/eyelang/output/combinatorics-findall-sort.pl +0 -2
  386. package/examples/eyelang/output/competitive-enzyme-kinetics.pl +0 -6
  387. package/examples/eyelang/output/complex.pl +0 -1
  388. package/examples/eyelang/output/composition-of-injective-functions-is-injective.pl +0 -2
  389. package/examples/eyelang/output/context-association.pl +0 -3
  390. package/examples/eyelang/output/context-schema-audit.pl +0 -12
  391. package/examples/eyelang/output/control-system.pl +0 -6
  392. package/examples/eyelang/output/cyclic-path.pl +0 -16
  393. package/examples/eyelang/output/d3-group.pl +0 -2
  394. package/examples/eyelang/output/dairy-energy-balance.pl +0 -13
  395. package/examples/eyelang/output/data-negotiation.pl +0 -1
  396. package/examples/eyelang/output/deep-taxonomy-10.pl +0 -16
  397. package/examples/eyelang/output/deep-taxonomy-100.pl +0 -16
  398. package/examples/eyelang/output/deep-taxonomy-1000.pl +0 -16
  399. package/examples/eyelang/output/deep-taxonomy-10000.pl +0 -16
  400. package/examples/eyelang/output/deep-taxonomy-100000.pl +0 -16
  401. package/examples/eyelang/output/delfour.pl +0 -31
  402. package/examples/eyelang/output/deontic-logic.pl +0 -4
  403. package/examples/eyelang/output/derived-backward-rule.pl +0 -3
  404. package/examples/eyelang/output/derived-rule.pl +0 -2
  405. package/examples/eyelang/output/diamond-property.pl +0 -4
  406. package/examples/eyelang/output/dijkstra-findall-sort.pl +0 -2
  407. package/examples/eyelang/output/dijkstra-risk-path.pl +0 -29
  408. package/examples/eyelang/output/dijkstra.pl +0 -16
  409. package/examples/eyelang/output/dining-philosophers.pl +0 -350
  410. package/examples/eyelang/output/dog.pl +0 -1
  411. package/examples/eyelang/output/dpv-odrl-purpose-mapping.pl +0 -18
  412. package/examples/eyelang/output/drone-corridor-planner.pl +0 -17
  413. package/examples/eyelang/output/easter-computus.pl +0 -30
  414. package/examples/eyelang/output/electrical-rc-filter.pl +0 -3
  415. package/examples/eyelang/output/epidemic-policy.pl +0 -14
  416. package/examples/eyelang/output/equivalence-classes-overlap-implies-same-class.pl +0 -18
  417. package/examples/eyelang/output/eulerian-path.pl +0 -3
  418. package/examples/eyelang/output/ev-range-worlds.pl +0 -19
  419. package/examples/eyelang/output/existential-rule.pl +0 -2
  420. package/examples/eyelang/output/exoplanet-validation-worlds.pl +0 -22
  421. package/examples/eyelang/output/expression-eval.pl +0 -1
  422. package/examples/eyelang/output/family-cousins.pl +0 -28
  423. package/examples/eyelang/output/fastpow.pl +0 -6
  424. package/examples/eyelang/output/fft8-numeric.pl +0 -4
  425. package/examples/eyelang/output/fibonacci.pl +0 -6
  426. package/examples/eyelang/output/field-nitrogen-balance.pl +0 -21
  427. package/examples/eyelang/output/flandor.pl +0 -43
  428. package/examples/eyelang/output/floating-point.pl +0 -9
  429. package/examples/eyelang/output/four-color-map.pl +0 -3
  430. package/examples/eyelang/output/fundamental-theorem-arithmetic.pl +0 -9
  431. package/examples/eyelang/output/gd-step-certified.pl +0 -79
  432. package/examples/eyelang/output/gdpr-compliance.pl +0 -6
  433. package/examples/eyelang/output/good-cobbler.pl +0 -1
  434. package/examples/eyelang/output/gps.pl +0 -21
  435. package/examples/eyelang/output/graph-reachability.pl +0 -3
  436. package/examples/eyelang/output/gray-code-counter.pl +0 -1
  437. package/examples/eyelang/output/greatest-lower-bound-uniqueness.pl +0 -2
  438. package/examples/eyelang/output/group-inverse-uniqueness.pl +0 -2
  439. package/examples/eyelang/output/hamiltonian-path.pl +0 -121
  440. package/examples/eyelang/output/hamming-code.pl +0 -6
  441. package/examples/eyelang/output/hanoi.pl +0 -1
  442. package/examples/eyelang/output/heat-loss.pl +0 -5
  443. package/examples/eyelang/output/heron-theorem.pl +0 -4
  444. package/examples/eyelang/output/ideal-gas-law.pl +0 -3
  445. package/examples/eyelang/output/illegitimate-reasoning.pl +0 -15
  446. package/examples/eyelang/output/knowledge-engineering-alignment-flow.pl +0 -17
  447. package/examples/eyelang/output/law-of-cosines.pl +0 -3
  448. package/examples/eyelang/output/least-squares-regression.pl +0 -5
  449. package/examples/eyelang/output/list-collection.pl +0 -3
  450. package/examples/eyelang/output/lldm.pl +0 -6
  451. package/examples/eyelang/output/manufacturing-quality-control.pl +0 -6
  452. package/examples/eyelang/output/microgrid-dispatch.pl +0 -6
  453. package/examples/eyelang/output/monkey-bananas.pl +0 -5
  454. package/examples/eyelang/output/network-sla.pl +0 -4
  455. package/examples/eyelang/output/newton-raphson.pl +0 -3
  456. package/examples/eyelang/output/nixon-diamond.pl +0 -5
  457. package/examples/eyelang/output/observability-log-correlation.pl +0 -28
  458. package/examples/eyelang/output/odrl-dpv-fpv-trust-flow.pl +0 -9
  459. package/examples/eyelang/output/odrl-dpv-healthcare-risk-ranked.pl +0 -42
  460. package/examples/eyelang/output/odrl-dpv-risk-ranked.pl +0 -120
  461. package/examples/eyelang/output/orbital-transfer-design.pl +0 -7
  462. package/examples/eyelang/output/path-discovery.pl +0 -3
  463. package/examples/eyelang/output/peano-arithmetic.pl +0 -3
  464. package/examples/eyelang/output/peasant.pl +0 -10
  465. package/examples/eyelang/output/pendulum-period.pl +0 -4
  466. package/examples/eyelang/output/polynomial.pl +0 -14
  467. package/examples/eyelang/output/proof-contrapositive.pl +0 -3
  468. package/examples/eyelang/output/quadratic-formula.pl +0 -6
  469. package/examples/eyelang/output/radioactive-decay.pl +0 -5
  470. package/examples/eyelang/output/reusable-builtins.pl +0 -5
  471. package/examples/eyelang/output/riemann-hypothesis.pl +0 -12
  472. package/examples/eyelang/output/security-incident-correlation.pl +0 -3
  473. package/examples/eyelang/output/service-impact.pl +0 -11
  474. package/examples/eyelang/output/sieve.pl +0 -1
  475. package/examples/eyelang/output/skolem-functions.pl +0 -16
  476. package/examples/eyelang/output/socket-age.pl +0 -1
  477. package/examples/eyelang/output/socrates.pl +0 -2
  478. package/examples/eyelang/output/statistics-summary.pl +0 -4
  479. package/examples/eyelang/output/superdense-coding.pl +0 -6
  480. package/examples/eyelang/output/term-tools.pl +0 -6
  481. package/examples/eyelang/output/trust-flow-provenance-threshold.pl +0 -6
  482. package/examples/eyelang/output/turing.pl +0 -12
  483. package/examples/eyelang/output/vector-similarity.pl +0 -4
  484. package/examples/eyelang/output/vulnerability-impact.pl +0 -20
  485. package/examples/eyelang/output/witch.pl +0 -7
  486. package/examples/eyelang/output/wolf-goat-cabbage.pl +0 -3
  487. package/examples/eyelang/output/zebra.pl +0 -3
  488. package/examples/eyelang/path-discovery.pl +0 -45013
  489. package/examples/eyelang/peano-arithmetic.pl +0 -31
  490. package/examples/eyelang/peasant.pl +0 -30
  491. package/examples/eyelang/pendulum-period.pl +0 -50
  492. package/examples/eyelang/polynomial.pl +0 -124
  493. package/examples/eyelang/proof/age.pl +0 -71
  494. package/examples/eyelang/proof/aliases-and-namespaces.pl +0 -78
  495. package/examples/eyelang/proof/ancestor.pl +0 -140
  496. package/examples/eyelang/proof/animal.pl +0 -68
  497. package/examples/eyelang/proof/annotation.pl +0 -80
  498. package/examples/eyelang/proof/backward.pl +0 -22
  499. package/examples/eyelang/proof/cat-koko.pl +0 -86
  500. package/examples/eyelang/proof/data-negotiation.pl +0 -76
  501. package/examples/eyelang/proof/derived-rule.pl +0 -43
  502. package/examples/eyelang/proof/dog.pl +0 -31
  503. package/examples/eyelang/proof/electrical-rc-filter.pl +0 -105
  504. package/examples/eyelang/proof/existential-rule.pl +0 -40
  505. package/examples/eyelang/proof/floating-point.pl +0 -160
  506. package/examples/eyelang/proof/good-cobbler.pl +0 -16
  507. package/examples/eyelang/proof/group-inverse-uniqueness.pl +0 -84
  508. package/examples/eyelang/proof/list-collection.pl +0 -52
  509. package/examples/eyelang/proof/proof-contrapositive.pl +0 -78
  510. package/examples/eyelang/proof/socket-age.pl +0 -32
  511. package/examples/eyelang/proof/socket-family.pl +0 -59
  512. package/examples/eyelang/proof/socrates.pl +0 -38
  513. package/examples/eyelang/proof-contrapositive.pl +0 -27
  514. package/examples/eyelang/quadratic-formula.pl +0 -54
  515. package/examples/eyelang/radioactive-decay.pl +0 -56
  516. package/examples/eyelang/reusable-builtins.pl +0 -32
  517. package/examples/eyelang/riemann-hypothesis.pl +0 -110
  518. package/examples/eyelang/security-incident-correlation.pl +0 -69
  519. package/examples/eyelang/service-impact.pl +0 -41
  520. package/examples/eyelang/sieve.pl +0 -20
  521. package/examples/eyelang/skolem-functions.pl +0 -52
  522. package/examples/eyelang/socket-age.pl +0 -39
  523. package/examples/eyelang/socket-family.pl +0 -28
  524. package/examples/eyelang/socrates.pl +0 -19
  525. package/examples/eyelang/statistics-summary.pl +0 -54
  526. package/examples/eyelang/superdense-coding.pl +0 -84
  527. package/examples/eyelang/term-tools.pl +0 -23
  528. package/examples/eyelang/trust-flow-provenance-threshold.pl +0 -40
  529. package/examples/eyelang/turing.pl +0 -67
  530. package/examples/eyelang/vector-similarity.pl +0 -56
  531. package/examples/eyelang/vulnerability-impact.pl +0 -70
  532. package/examples/eyelang/witch.pl +0 -38
  533. package/examples/eyelang/wolf-goat-cabbage.pl +0 -56
  534. package/examples/eyelang/zebra.pl +0 -44
  535. package/eyelang.d.ts +0 -80
  536. package/lib/eyelang/bin.js +0 -7
  537. package/lib/eyelang/builtins/aggregation.js +0 -81
  538. package/lib/eyelang/builtins/arithmetic.js +0 -208
  539. package/lib/eyelang/builtins/context.js +0 -42
  540. package/lib/eyelang/builtins/control.js +0 -34
  541. package/lib/eyelang/builtins/core.js +0 -78
  542. package/lib/eyelang/builtins/lists.js +0 -283
  543. package/lib/eyelang/builtins/registry.js +0 -48
  544. package/lib/eyelang/builtins/strings.js +0 -234
  545. package/lib/eyelang/builtins/terms.js +0 -66
  546. package/lib/eyelang/cli.js +0 -180
  547. package/lib/eyelang/explain.js +0 -324
  548. package/lib/eyelang/hash.js +0 -294
  549. package/lib/eyelang/index.js +0 -47
  550. package/lib/eyelang/package.json +0 -3
  551. package/lib/eyelang/parser.js +0 -428
  552. package/lib/eyelang/program.js +0 -237
  553. package/lib/eyelang/solver.js +0 -237
  554. package/lib/eyelang/term.js +0 -328
  555. /package/{examples/eyelang/output/socket-family.pl → test/eyelang/conformance/expected/027_default_derived_output.pl} +0 -0
package/README.md CHANGED
@@ -23,7 +23,6 @@ Eyeling is characterized by:
23
23
  - **Streaming RDF Messages** — supports RDF Messages streams, enabling Eyeling to fit into streaming RDF pipelines.
24
24
  - **Node.js, npm, and browser use** — run it from the command line, call it from JavaScript, or use the browser-oriented bundle.
25
25
  - **RDF-JS interoperability** — use N3 text, RDF-JS quads, datasets, or Eyeling’s own AST-level API, with TypeScript declarations grounded in `@rdfjs/types`.
26
- - **Experimental eyelang engine** — run compact Prolog-style Horn clause programs alongside the N3 engine, giving Eyeling a second reasoning engine without mixing the internals.
27
26
 
28
27
 
29
28
  This README is the primary guide to using, extending, and maintaining Eyeling.
@@ -34,8 +33,6 @@ Eyeling is designed for people who want a small, inspectable reasoner that can r
34
33
 
35
34
  - [Playground](https://eyereasoner.github.io/eyeling/playground)
36
35
  - [Conformance report](https://codeberg.org/phochste/notation3tests/src/branch/main/reports/report.md)
37
- - [eyelang guide](docs/eyelang-guide.md)
38
- - [eyelang language reference](docs/eyelang-language-reference.md)
39
36
 
40
37
  ---
41
38
 
@@ -47,7 +44,6 @@ Eyeling is designed for people who want a small, inspectable reasoner that can r
47
44
  4. [Command-line interface](#command-line-interface)
48
45
  5. [JavaScript API](#javascript-api)
49
46
  6. [RDF-JS integration](#rdf-js-integration)
50
- 7. [Eyelang second engine](#eyelang-second-engine)
51
47
  8. [RDF compatibility mode and RDF 1.2](#rdf-compatibility-mode-and-rdf-12)
52
48
  9. [RDF Message Logs](#rdf-message-logs)
53
49
  10. [Built-ins](#built-ins)
@@ -76,7 +72,6 @@ It accepts facts and rules written in N3-style syntax, computes the logical cons
76
72
  - a browser/worker API through `eyeling/browser`;
77
73
  - an RDF-JS adapter for applications that work with quads and data factories;
78
74
  - a streaming tool for RDF Message Logs;
79
- - an experimental host for the `eyelang` Prolog-style Horn clause engine.
80
75
 
81
76
  Eyeling is intentionally small and dependency-light. The source tree is organized as a miniature compiler and inference engine: lexer, parser, term model, rule normalization, built-ins, forward chaining, backward proving, printing, RDF-JS adapters, and CLI wiring.
82
77
 
@@ -139,18 +134,12 @@ For proof output:
139
134
  node eyeling.js --proof examples/socrates.n3
140
135
  ```
141
136
 
142
- Run an eyelang program through the second engine:
143
-
144
- ```bash
145
- eyeling --engine eyelang examples/eyelang/ancestor.pl
146
- ```
147
137
 
148
138
  Or from JavaScript:
149
139
 
150
140
  ```js
151
141
  const { reason } = require('eyeling');
152
142
 
153
- const output = reason({ engine: 'eyelang' }, `
154
143
  materialize(out, 1).
155
144
  in(done).
156
145
  out(X) :- in(X).
@@ -297,11 +286,6 @@ Process an RDF Message Log one message at a time:
297
286
  eyeling --rdf --stream-messages rules.n3 messages.trig
298
287
  ```
299
288
 
300
- Run an eyelang program through the bundled second engine:
301
-
302
- ```bash
303
- eyeling --engine eyelang examples/eyelang/ancestor.pl
304
- ```
305
289
 
306
290
  ### CLI options
307
291
 
@@ -309,7 +293,6 @@ eyeling --engine eyelang examples/eyelang/ancestor.pl
309
293
  |---|---|
310
294
  | `-a`, `--ast` | Print the parsed AST as JSON and exit. |
311
295
  | `--builtin <module.js>` | Load a custom N3 built-in module. Repeatable. |
312
- | `--engine <n3\|eyelang>` | Select the default N3 engine or route the remaining arguments to the eyelang engine. |
313
296
  | `-d`, `--deterministic-skolem` | Make `log:skolem` stable across reasoning runs. |
314
297
  | `-e`, `--enforce-https` | Rewrite `http://` IRIs to `https://` for log dereferencing built-ins. |
315
298
  | `-h`, `--help` | Show help and exit. |
@@ -323,7 +306,6 @@ eyeling --engine eyelang examples/eyelang/ancestor.pl
323
306
  | `-t`, `--stream` | Stream derived triples as soon as they are derived. |
324
307
  | `-v`, `--version` | Print the package version and exit. |
325
308
 
326
- When `--engine eyelang` is selected, the remaining arguments are handled by the eyelang CLI. Its supported options are `--help`, `--proof`, `--stats`, `--version`, and `--` to stop option parsing. See the [eyelang guide](docs/eyelang-guide.md) for examples.
327
309
 
328
310
  ### Output behavior
329
311
 
@@ -623,60 +605,6 @@ Use RDF-JS when you want Eyeling to sit inside a JavaScript RDF pipeline. Use ra
623
605
 
624
606
  ---
625
607
 
626
- ## Eyelang second engine
627
-
628
- Eyeling can also host the experimental `eyelang` engine. This is deliberately a second engine, not a rewrite of the N3 engine. The package therefore has two eyes:
629
-
630
- - the default **N3 engine** for RDF/Notation3 reasoning;
631
- - the **eyelang engine** for compact Prolog-style Horn clause programs.
632
-
633
- Use the CLI option when running `.pl` programs:
634
-
635
- ```bash
636
- eyeling --engine eyelang examples/eyelang/ancestor.pl
637
- ```
638
-
639
- A paired example shows the same vulnerability-impact scenario in both engines:
640
-
641
- ```bash
642
- eyeling examples/vulnerability-impact.n3
643
- eyeling --engine eyelang examples/eyelang/vulnerability-impact.pl
644
- ```
645
-
646
- Use the CommonJS convenience API when the rest of your application already imports `eyeling`:
647
-
648
- ```js
649
- const { reason, reasonEyelang } = require('eyeling');
650
-
651
- const program = `
652
- materialize(out, 1).
653
- in(done).
654
- out(X) :- in(X).
655
- `;
656
-
657
- console.log(reason({ engine: 'eyelang' }, program));
658
- console.log(await reasonEyelang(program));
659
- ```
660
-
661
- Use the subpath export for the full eyelang module API:
662
-
663
- ```js
664
- import { run, Program, Solver } from 'eyeling/eyelang';
665
-
666
- const result = run(program);
667
- console.log(result.stdout);
668
- ```
669
-
670
- The two engines intentionally keep separate parsers, term models, solvers, and built-ins. Shared package entry points, examples, documentation, and CLI routing make them convenient to use together while keeping their execution models inspectable.
671
-
672
- The [eyelang guide](docs/eyelang-guide.md) introduces the CLI, output model, examples, and testing workflow. The [eyelang language reference](docs/eyelang-language-reference.md) defines syntax, terms, clauses, built-ins, declarations, output, and conformance boundaries. Runnable examples live under `examples/eyelang/`. The embedded engine runtime stays under `lib/eyelang/`, while the conformance corpus and test runners live under `test/eyelang/` so runtime code and test assets stay separate:
673
-
674
- ```bash
675
- npm run test:eyelang # integration check plus eyelang corpus
676
- npm run test:eyelang:corpus # eyelang corpus only
677
- ```
678
-
679
- ---
680
608
 
681
609
  ## RDF compatibility mode and RDF 1.2
682
610
 
@@ -817,20 +745,6 @@ Formula-aware built-ins make Eyeling useful for meta-reasoning. `log:includes`,
817
745
 
818
746
  `log:semantics`, `log:content`, and related built-ins may dereference sources. Use `--enforce-https` or `{ enforceHttps: true }` in environments where HTTP-to-HTTPS rewriting is required.
819
747
 
820
- ### eyelang built-ins
821
-
822
- The eyelang engine has its own built-in registry under `lib/eyelang/builtins/`. These are separate from the N3 namespaces above and are called as ordinary eyelang predicates. See the [eyelang language reference](docs/eyelang-language-reference.md#9-standard-built-in-predicates) for the portable profile. The bundled implementation currently registers 80 name/arity entries across 78 predicate names:
823
-
824
- | Family | Count | Built-ins |
825
- |---|---:|---|
826
- | Core and host | 4 | `eq/2`, `neq/2`, `local_time/1`, `difference/3` |
827
- | Arithmetic, comparison, and generators | 29 | `neg/2`, `abs/2`, `sin/2`, `cos/2`, `tan/2`, `asin/2`, `acos/2`, `sqrt/2`, `floor/2`, `ceiling/2`, `trunc/2`, `rounded/2`, `exp/2`, `log/2`, `add/3`, `sub/3`, `mul/3`, `div/3`, `mod/3`, `min/3`, `max/3`, `pow/3`, `atan2/3`, `lt/2`, `gt/2`, `le/2`, `ge/2`, `between/3`, `smallest_divisor_from/3` |
828
- | Strings and conversions | 15 | `str_concat/3`, `contains/2`, `matches/2`, `matches/3`, `not_matches/2`, `split/3`, `join/3`, `substring/4`, `replace/4`, `lowercase/2`, `uppercase/2`, `trim/2`, `number_string/2`, `atom_string/2`, `term_string/2` |
829
- | Lists | 19 | `append/3`, `nth0/3`, `set_nth0/4`, `head/2`, `rest/2`, `last/2`, `take/3`, `drop/3`, `slice/4`, `member/2`, `select/3`, `not_member/2`, `reverse/2`, `length/2`, `sum_list/2`, `min_list/2`, `max_list/2`, `list_to_set/2`, `sort/2` |
830
- | Aggregation | 5 | `findall/3`, `countall/2`, `sumall/3`, `aggregate_min/5`, `aggregate_max/5` |
831
- | Control | 3 | `not/1`, `once/1`, `forall/2` |
832
- | Context and terms | 5 | `holds/2`, `holds/3`, `functor/3`, `arg/3`, `compound_name_arguments/3` |
833
- | **Total** | **80** | |
834
748
 
835
749
  ## Custom built-ins
836
750
 
@@ -1096,8 +1010,8 @@ Everything else should be treated as internal unless explicitly documented.
1096
1010
  ├── bin/ CLI executable shim
1097
1011
  ├── lib/ Source modules
1098
1012
  ├── dist/browser/ Browser bundle and ESM wrapper
1099
- ├── docs/ Project documentation, including the eyelang guide and language reference
1100
- ├── examples/ N3 examples, eyelang examples, RDF message inputs, and generated decks
1013
+ ├── docs/ Project documentation
1014
+ ├── examples/ N3 examples, RDF message inputs, and generated decks
1101
1015
  ├── spec/ RDF 1.2 parser test adapter
1102
1016
  ├── test/ API, built-in, store, example, package, playground, and stream tests
1103
1017
  ├── tools/ Build tooling
@@ -1111,7 +1025,7 @@ The package publishes the source modules, tests, examples, bundled runtime, brow
1111
1025
 
1112
1026
  ## Examples guide
1113
1027
 
1114
- The repository contains more than two hundred N3 examples under `examples/`, eyelang `.pl` examples under `examples/eyelang/`, RDF Message input files under `examples/input/`, and presentation-oriented Markdown decks under `examples/deck/`. See the [eyelang guide](docs/eyelang-guide.md#example-catalog) for the eyelang example catalog.
1028
+ The repository contains more than two hundred N3 examples under `examples/`, RDF Message input files under `examples/input/`, and presentation-oriented Markdown decks under `examples/deck/`.
1115
1029
 
1116
1030
  ### Good first examples
1117
1031
 
@@ -1122,7 +1036,6 @@ The repository contains more than two hundred N3 examples under `examples/`, eye
1122
1036
  | `examples/age.n3` | Literal propagation. |
1123
1037
  | `examples/family-cousins.n3` | Multi-hop relational inference. |
1124
1038
  | `examples/dijkstra.n3` | Graph/path reasoning. |
1125
- | `examples/vulnerability-impact.n3` and `examples/eyelang/vulnerability-impact.pl` | Paired N3 and eyelang dependency-risk example. |
1126
1039
  | `examples/list-map.n3` | List processing. |
1127
1040
  | `examples/string-builtins-tests.n3` | String built-ins. |
1128
1041
  | `examples/math-builtins-tests.n3` | Numeric built-ins. |
package/bin/eyeling.cjs CHANGED
@@ -1,62 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- const path = require('node:path');
5
- const { pathToFileURL } = require('node:url');
4
+ const bundle = require('../eyeling.js');
6
5
 
7
- function extractEngineArg(argv) {
8
- const filtered = [];
9
- let engine = null;
10
- let endOptions = false;
11
-
12
- for (let i = 0; i < argv.length; i++) {
13
- const arg = argv[i];
14
-
15
- if (!endOptions && arg === '--') {
16
- endOptions = true;
17
- filtered.push(arg);
18
- } else if (!endOptions && arg === '--engine') {
19
- engine = argv[++i];
20
- if (!engine) throw new Error('--engine needs a value');
21
- } else if (!endOptions && arg.startsWith('--engine=')) {
22
- engine = arg.slice('--engine='.length);
23
- } else {
24
- filtered.push(arg);
25
- }
26
- }
27
-
28
- return { engine, argv: filtered };
6
+ if (!bundle || typeof bundle.main !== 'function') {
7
+ throw new Error('Eyeling CLI bundle did not expose main()');
29
8
  }
30
9
 
31
- function normalizeEngineName(value) {
32
- if (value == null || value === '') return 'n3';
33
- const name = String(value).toLowerCase();
34
- if (name === 'n3' || name === 'eyeling') return 'n3';
35
- if (name === 'eyelang' || name === 'prolog' || name === 'horn') return 'eyelang';
36
- throw new Error(`unknown Eyeling engine: ${value}`);
37
- }
38
-
39
- async function runEyelangCli(argv) {
40
- const cliUrl = pathToFileURL(path.join(__dirname, '..', 'lib', 'eyelang', 'cli.js')).href;
41
- const cli = await import(cliUrl);
42
- await cli.main(argv);
43
- }
44
-
45
- const parsed = extractEngineArg(process.argv.slice(2));
46
- const engine = normalizeEngineName(parsed.engine);
47
-
48
- if (engine === 'eyelang') {
49
- runEyelangCli(parsed.argv).catch((error) => {
50
- console.error(`eyeling: ${error && error.message ? error.message : String(error)}`);
51
- process.exit(1);
52
- });
53
- } else {
54
- const bundle = require('../eyeling.js');
55
-
56
- if (!bundle || typeof bundle.main !== 'function') {
57
- throw new Error('Eyeling CLI bundle did not expose main()');
58
- }
59
-
60
- process.argv = [process.argv[0], process.argv[1], ...parsed.argv];
61
- bundle.main();
62
- }
10
+ bundle.main();
@@ -6483,7 +6483,6 @@ async function main() {
6483
6483
  `Options:\n` +
6484
6484
  ` -a, --ast Print parsed AST as JSON and exit.\n` +
6485
6485
  ` --builtin <module.js> Load a custom builtin module (repeatable).\n` +
6486
- ` --engine <n3|eyelang> Select the N3 engine (default) or eyelang engine.\n` +
6487
6486
  ` -d, --deterministic-skolem Make log:skolem stable across reasoning runs.\n` +
6488
6487
  ` -e, --enforce-https Rewrite http:// IRIs to https:// for log dereferencing builtins.\n` +
6489
6488
  ` -h, --help Show this help and exit.\n` +
@@ -1,6 +1,6 @@
1
1
  # Context schema audit
2
2
  #
3
- # This is the N3 counterpart of the eyelang context-schema-audit example. Each
3
+ # This example shows a context-schema audit in ordinary RDF/N3. Each
4
4
  # message carries a quoted context graph whose members encode an event name as
5
5
  # the predicate and its arguments as an RDF list. A generic rule uses
6
6
  # log:includes to inspect those quoted contexts, list:length to compute arity,
package/eyeling.js CHANGED
@@ -6483,7 +6483,6 @@ async function main() {
6483
6483
  `Options:\n` +
6484
6484
  ` -a, --ast Print parsed AST as JSON and exit.\n` +
6485
6485
  ` --builtin <module.js> Load a custom builtin module (repeatable).\n` +
6486
- ` --engine <n3|eyelang> Select the N3 engine (default) or eyelang engine.\n` +
6487
6486
  ` -d, --deterministic-skolem Make log:skolem stable across reasoning runs.\n` +
6488
6487
  ` -e, --enforce-https Rewrite http:// IRIs to https:// for log dereferencing builtins.\n` +
6489
6488
  ` -h, --help Show this help and exit.\n` +
package/index.d.ts CHANGED
@@ -80,33 +80,7 @@ export interface N3SourceListInput {
80
80
  scopeBlankNodes?: boolean;
81
81
  }
82
82
 
83
- export type EngineName = 'n3' | 'eyeling' | 'eyelang' | 'prolog' | 'horn';
84
-
85
- export type EyelangSource = string | { eyelang?: string; prolog?: string; text?: string; label?: string };
86
-
87
- export interface EyelangSourceListInput {
88
- sources: EyelangSource[];
89
- }
90
-
91
- export interface EyelangStats {
92
- [key: string]: number;
93
- }
94
-
95
- export interface EyelangRunOptions {
96
- engine?: EngineName;
97
- proof?: boolean;
98
- why?: boolean;
99
- explain?: boolean;
100
- stats?: boolean;
101
- args?: string[];
102
- maxBuffer?: number;
103
- [key: string]: unknown;
104
- }
105
-
106
- export interface EyelangRunResult {
107
- stdout: string;
108
- stats: EyelangStats;
109
- }
83
+ export type EngineName = 'n3' | 'eyeling';
110
84
 
111
85
  export interface RdfJsReasonInput {
112
86
  n3?: string;
@@ -150,7 +124,7 @@ export interface ReasonOptions {
150
124
  rdf?: boolean;
151
125
  rdf12?: boolean;
152
126
  n3?: boolean;
153
- inputFormat?: 'auto' | 'eyelang' | 'rdf' | 'rdf12' | 'turtle' | 'ttl' | 'nt' | 'n3' | string;
127
+ inputFormat?: 'auto' | 'rdf' | 'rdf12' | 'turtle' | 'ttl' | 'nt' | 'n3' | string;
154
128
  args?: string[];
155
129
  maxBuffer?: number;
156
130
  builtinModules?: string | string[];
@@ -235,18 +209,12 @@ export class PersistentFactStore implements FactStore {
235
209
 
236
210
  export function reason(
237
211
  opts: ReasonOptions,
238
- input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput | EyelangSourceListInput,
212
+ input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput,
239
213
  ): string;
240
- export function runAsync(
241
- input: string,
242
- opts: ReasonStreamOptions & { engine: 'eyelang' | 'prolog' | 'horn' },
243
- ): Promise<EyelangRunResult>;
244
214
  export function runAsync(
245
215
  input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput,
246
216
  opts?: ReasonStreamOptions & { engine?: 'n3' | 'eyeling' },
247
217
  ): Promise<ReasonStreamResult & { store?: FactStore }>;
248
- export function runEyelang(input: string, opts?: EyelangRunOptions): Promise<EyelangRunResult>;
249
- export function reasonEyelang(input: string, opts?: EyelangRunOptions): Promise<string>;
250
218
  export function reasonStream(
251
219
  input: string | RdfJsReasonInput | EyelingAstBundle | N3SourceListInput,
252
220
  opts?: ReasonStreamOptions,
@@ -269,8 +237,6 @@ export interface EyelingModule {
269
237
  readonly version: string;
270
238
  reason: typeof reason;
271
239
  runAsync: typeof runAsync;
272
- runEyelang: typeof runEyelang;
273
- reasonEyelang: typeof reasonEyelang;
274
240
  reasonStream: typeof reasonStream;
275
241
  reasonRdfJs: typeof reasonRdfJs;
276
242
  readonly INFERENCE_FUSE_EXIT_CODE: typeof INFERENCE_FUSE_EXIT_CODE;
package/index.js CHANGED
@@ -4,7 +4,6 @@ const fs = require('node:fs');
4
4
  const os = require('node:os');
5
5
  const path = require('node:path');
6
6
  const cp = require('node:child_process');
7
- const { pathToFileURL } = require('node:url');
8
7
 
9
8
  const bundleApi = require('./eyeling.js');
10
9
  const { dataFactory, normalizeReasonerInputSync } = require('./lib/rdfjs');
@@ -12,88 +11,6 @@ const { isN3SourceListInput } = require('./lib/multisource');
12
11
  const engine = require('./lib/engine');
13
12
 
14
13
 
15
- function normalizeEngineName(value) {
16
- if (value == null || value === '') return 'n3';
17
- const name = String(value).toLowerCase();
18
- if (name === 'n3' || name === 'eyeling') return 'n3';
19
- if (name === 'eyelang' || name === 'prolog' || name === 'horn') return 'eyelang';
20
- throw new TypeError(`unknown Eyeling engine: ${value}`);
21
- }
22
-
23
- function normalizeEyelangSourceForTempFile(source) {
24
- if (typeof source === 'string') return source;
25
- if (source && typeof source === 'object' && !Array.isArray(source)) {
26
- const text =
27
- typeof source.eyelang === 'string' ? source.eyelang
28
- : typeof source.prolog === 'string' ? source.prolog
29
- : typeof source.text === 'string' ? source.text
30
- : null;
31
- if (text !== null) return text;
32
- }
33
- throw new TypeError('reason({ engine: "eyelang" }, input): each source must be a string or an object with an eyelang/prolog/text field');
34
- }
35
-
36
- function normalizeEyelangInput(input) {
37
- if (typeof input === 'string') return [input];
38
- if (input == null) return [''];
39
- if (input && typeof input === 'object' && !Array.isArray(input)) {
40
- if (Array.isArray(input.sources)) return input.sources.map(normalizeEyelangSourceForTempFile);
41
- return [normalizeEyelangSourceForTempFile(input)];
42
- }
43
- throw new TypeError('reason({ engine: "eyelang" }, input): input must be a string, source object, or { sources } list');
44
- }
45
-
46
- function reasonEyelangSync(opt = {}, input = '') {
47
- const args = [];
48
-
49
- if (opt.proof || opt.why || opt.explain) args.push('--proof');
50
- if (opt.stats) args.push('--stats');
51
- if (Array.isArray(opt.args)) args.push(...opt.args);
52
-
53
- const maxBuffer = Number.isFinite(opt.maxBuffer) ? opt.maxBuffer : 50 * 1024 * 1024;
54
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'eyeling-eyelang-'));
55
-
56
- try {
57
- const inputFiles = normalizeEyelangInput(input).map((text, index) => {
58
- const inputFile = path.join(dir, `input-${index + 1}.pl`);
59
- fs.writeFileSync(inputFile, text, 'utf8');
60
- return inputFile;
61
- });
62
-
63
- const eyelangCliPath = path.join(__dirname, 'lib', 'eyelang', 'bin.js');
64
- const res = cp.spawnSync(process.execPath, [eyelangCliPath, ...args, ...inputFiles], { encoding: 'utf8', maxBuffer });
65
-
66
- if (res.error) throw res.error;
67
- if (res.stderr) process.stderr.write(res.stderr);
68
-
69
- if (res.status !== 0) {
70
- const err = new Error(res.stderr || `eyelang exited with code ${res.status}`);
71
- err.code = res.status;
72
- err.stdout = res.stdout;
73
- err.stderr = res.stderr;
74
- throw err;
75
- }
76
-
77
- return res.stdout;
78
- } finally {
79
- fs.rmSync(dir, { recursive: true, force: true });
80
- }
81
- }
82
-
83
- async function loadEyelangModule() {
84
- return import(pathToFileURL(path.join(__dirname, 'lib', 'eyelang', 'index.js')).href);
85
- }
86
-
87
- async function runEyelang(input = '', opt = {}) {
88
- const eyelang = await loadEyelangModule();
89
- return eyelang.run(input, opt || {});
90
- }
91
-
92
- async function reasonEyelang(input = '', opt = {}) {
93
- const result = await runEyelang(input, opt || {});
94
- return result.stdout;
95
- }
96
-
97
14
  function reason(opt = {}, input = '') {
98
15
  if (input == null) input = '';
99
16
 
@@ -101,8 +18,6 @@ function reason(opt = {}, input = '') {
101
18
  if (Array.isArray(opt)) opt = { args: opt };
102
19
  if (opt == null || typeof opt !== 'object') opt = {};
103
20
 
104
- if (normalizeEngineName(opt.engine) === 'eyelang') return reasonEyelangSync(opt, input);
105
-
106
21
  const args = [];
107
22
 
108
23
  // default: proof output OFF for API output (machine-friendly)
@@ -202,16 +117,12 @@ function reason(opt = {}, input = '') {
202
117
  }
203
118
 
204
119
  async function runAsync(input = '', opt = {}) {
205
- const options = opt || {};
206
- if (normalizeEngineName(options.engine) === 'eyelang') return runEyelang(input, options);
207
- return engine.runAsync(input, options);
120
+ return engine.runAsync(input, opt || {});
208
121
  }
209
122
 
210
123
  module.exports = {
211
124
  reason,
212
125
  runAsync,
213
- runEyelang,
214
- reasonEyelang,
215
126
  reasonStream: bundleApi.reasonStream,
216
127
  reasonRdfJs: bundleApi.reasonRdfJs,
217
128
  rdfjs: dataFactory,
package/lib/cli.js CHANGED
@@ -805,7 +805,6 @@ async function main() {
805
805
  `Options:\n` +
806
806
  ` -a, --ast Print parsed AST as JSON and exit.\n` +
807
807
  ` --builtin <module.js> Load a custom builtin module (repeatable).\n` +
808
- ` --engine <n3|eyelang> Select the N3 engine (default) or eyelang engine.\n` +
809
808
  ` -d, --deterministic-skolem Make log:skolem stable across reasoning runs.\n` +
810
809
  ` -e, --enforce-https Rewrite http:// IRIs to https:// for log dereferencing builtins.\n` +
811
810
  ` -h, --help Show this help and exit.\n` +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyeling",
3
- "version": "1.34.4",
3
+ "version": "1.34.6",
4
4
  "description": "A minimal Notation3 (N3) reasoner in JavaScript.",
5
5
  "main": "./index.js",
6
6
  "keywords": [
@@ -26,7 +26,6 @@
26
26
  "index.js",
27
27
  "index.d.ts",
28
28
  "browser.d.ts",
29
- "eyelang.d.ts",
30
29
  "bin",
31
30
  "dist",
32
31
  "docs",
@@ -61,10 +60,7 @@
61
60
  "test:package": "node test/package.test.js",
62
61
  "test": "node test/run.js",
63
62
  "preversion": "npm test",
64
- "postversion": "git push origin HEAD --follow-tags",
65
- "test:eyelang": "node test/eyelang.test.js && node test/eyelang/run-all.mjs",
66
- "test:eyelang:integration": "node test/eyelang.test.js",
67
- "test:eyelang:corpus": "node test/eyelang/run-all.mjs"
63
+ "postversion": "git push origin HEAD --follow-tags"
68
64
  },
69
65
  "dependencies": {
70
66
  "@rdfjs/types": "^2.0.1"
@@ -85,12 +81,7 @@
85
81
  "default": "./dist/browser/index.mjs"
86
82
  },
87
83
  "./eyeling.js": "./eyeling.js",
88
- "./package.json": "./package.json",
89
- "./eyelang": {
90
- "types": "./eyelang.d.ts",
91
- "import": "./lib/eyelang/index.js",
92
- "default": "./lib/eyelang/index.js"
93
- }
84
+ "./package.json": "./package.json"
94
85
  },
95
86
  "typesVersions": {
96
87
  "*": {
@@ -4,8 +4,8 @@ This directory contains the executable conformance cases for the eyelang languag
4
4
 
5
5
  The suite is intentionally file-based so another implementation can run the same programs and compare exact standard output. A case consists of:
6
6
 
7
- - `conformance/cases/<profile>/<name>.pl` — input program;
8
- - `conformance/expected/<profile>/<name>.out` — exact expected standard output.
7
+ - `conformance/cases/<name>.pl` — input program;
8
+ - `conformance/expected/<name>.pl` — exact expected standard output, stored as eyelang-readable facts.
9
9
 
10
10
  The current runner compares standard output from normal execution. Proof explanations are opt-in in the CLI and are not part of these conformance goldens. Standard error, performance, and resource limits are outside this suite.
11
11
 
@@ -23,23 +23,21 @@ Run only the conformance suite:
23
23
  node test/eyelang/run-conformance.mjs
24
24
  ```
25
25
 
26
- Run a single conformance profile directly:
26
+ Run matching conformance cases by passing a filename fragment:
27
27
 
28
28
  ```sh
29
- node test/eyelang/run-conformance.mjs core
30
- node test/eyelang/run-conformance.mjs extension
29
+ node test/eyelang/run-conformance.mjs reusable
30
+ node test/eyelang/run-conformance.mjs 092_scalar_string_conversions
31
31
  ```
32
32
 
33
33
  The runner executes materialized programs in-process through the public JavaScript API so small conformance cases avoid measuring Node startup overhead.
34
34
 
35
- ## Profiles
35
+ ## Scope
36
36
 
37
- `core` covers the portable core language profile from the [eyelang language reference](../../../docs/eyelang-language-reference.md): lexical syntax, facts, definite clauses, first-order terms, lists, conjunction, structured unification through user predicates, left-to-right goal-directed proof search, materialized output, and read-back printing.
37
+ The conformance corpus is a single eyelang suite. It covers the standard language described by the language reference: lexical syntax, facts, definite clauses, first-order terms, lists, conjunction, structured unification, left-to-right goal-directed proof search, materialized output, read-back printing, standard built-ins, declarations, and standard host behavior.
38
38
 
39
- `extension` covers the standard built-in and host behavior exercised by the current reference implementation: arithmetic, comparison, strings, list relations, aggregation, context-term helpers, term-inspection helpers, search-control helpers, `memoize/2`, `materialize/2`, and default derived output.
40
-
41
- The profile name `extension` is a test-suite grouping name. It does not mean that these cases are outside the eyelang language reference; most of them correspond to the standard built-in profile and standard host profile in the [eyelang language reference](../../../docs/eyelang-language-reference.md).
39
+ The suite deliberately does not separate `core` and `extension` profiles. Reusable built-ins such as arithmetic, strings, lists, aggregation, context terms, term inspection, and search control are part of the standard eyelang conformance surface. Implementation-specific built-ins may still exist in downstream hosts, but they should have their own tests outside this corpus unless they are standardized.
42
40
 
43
41
  ## Updating expected output
44
42
 
45
- There is no committed auto-accept mode. To update an expected file, run the matching case with the conformance runner, inspect the result, and replace the corresponding file under `conformance/expected/<profile>/` deliberately.
43
+ There is no committed auto-accept mode. To update an expected file, run the matching case with the conformance runner, inspect the result, and replace the corresponding file under `conformance/expected/` deliberately.
@@ -0,0 +1,4 @@
1
+ % Reference 6, 7, 11: facts can be exposed through a materialized derived predicate.
2
+ materialize(parent, 2).
3
+ base_parent(pat, jan).
4
+ parent(X, Y) :- base_parent(X, Y).
@@ -0,0 +1,7 @@
1
+ % Reference 6, 7: definite clauses, conjunction, and recursive proof search.
2
+ materialize(ancestor, 2).
3
+ parent(pat, jan).
4
+ parent(jan, emma).
5
+ ancestor_any(X, Y) :- parent(X, Y).
6
+ ancestor_any(X, Z) :- parent(X, Y), ancestor_any(Y, Z).
7
+ ancestor(pat, Y) :- ancestor_any(pat, Y).
@@ -0,0 +1 @@
1
+ ancestor(pat, X)
@@ -0,0 +1,16 @@
1
+ % Reference 3, 5, 11: scalars, compounds, lists, and read-back printing.
2
+ materialize(value, 2).
3
+ raw_value(atom, pat).
4
+ raw_value(quoted_atom, 'atom with spaces').
5
+ raw_value(quoted_quote, 'needs''quote').
6
+ raw_value(empty_atom, '').
7
+ raw_value(string, "line\nquote: \"ok\"").
8
+ raw_value(integer, -42).
9
+ raw_value(decimal, 0.25).
10
+ raw_value(scientific, 1.25e-3).
11
+ raw_value(compound, pair(3, nested(atom, [x, y]))).
12
+ raw_value(zero_arity, nil()).
13
+ raw_value(empty_list, []).
14
+ raw_value(proper_list, [a, b, c]).
15
+ raw_value(improper_list, [a, b | tail]).
16
+ value(K, V) :- raw_value(K, V).
@@ -0,0 +1,5 @@
1
+ % Reference 5.5, 7: parenthesized comma terms are conjunctions in goal position.
2
+ p(a).
3
+ q(a).
4
+ ok(X, yes) :- (p(X), q(X)).
5
+ materialize(ok, 2).
@@ -0,0 +1,6 @@
1
+ % Reference 5.4, 12.1: list syntax and unification in rule heads.
2
+ first([X | _Rest], X).
3
+ tail([_Head | Tail], Tail).
4
+ answer(first, X) :- first([a, b, c], X).
5
+ answer(tail, Tail) :- tail([a, b, c], Tail).
6
+ materialize(answer, 2).
@@ -0,0 +1,4 @@
1
+ % Reference 5.5: comma terms remain data outside goal position.
2
+ record((name(alice, "Alice"), knows(alice, bob))).
3
+ answer(formula, F) :- record(F).
4
+ materialize(answer, 2).
@@ -0,0 +1,5 @@
1
+ % Reference 3.4, 5.1, 7.1: each anonymous variable occurrence is fresh.
2
+ pair(a, one).
3
+ pair(b, two).
4
+ answer(fresh, yes) :- pair(a, _), pair(b, _).
5
+ materialize(answer, 2).
@@ -0,0 +1,6 @@
1
+ % Reference 3.5, 5.2, 11: graphic atom constants are scalar terms.
2
+ materialize(value, 2).
3
+ raw_value(hash, #).
4
+ raw_value(arrow, =>).
5
+ raw_value(comparison, =<).
6
+ value(K, V) :- raw_value(K, V).