eyelang 0.5.0 → 0.5.2

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 (299) hide show
  1. package/README.md +7 -7
  2. package/book-assets/cli-observation-loop.svg +1 -1
  3. package/book-assets/example-landscape.svg +1 -1
  4. package/book-assets/laboratory-progression.svg +1 -1
  5. package/book-assets/part-4-craft.svg +1 -1
  6. package/book-assets/rdf-adapter-pipeline.svg +3 -3
  7. package/book-assets/reference-navigation.svg +1 -1
  8. package/book-assets/review-lenses.svg +1 -1
  9. package/book-assets/title-page.svg +2 -2
  10. package/conformance-report.md +1 -1
  11. package/examples/book/README.md +4 -4
  12. package/examples/book/chapter-01/01-parent.pl +1 -1
  13. package/examples/book/chapter-01/02-child.pl +1 -1
  14. package/examples/book/chapter-02/01-measurement.pl +1 -1
  15. package/examples/book/chapter-02/02-label.pl +1 -1
  16. package/examples/book/chapter-03/01-eligible.pl +1 -1
  17. package/examples/book/chapter-03/02-adult.pl +1 -1
  18. package/examples/book/chapter-03/03-can_enter.pl +1 -1
  19. package/examples/book/chapter-03/04-high_score.pl +1 -1
  20. package/examples/book/chapter-03/05-parent.pl +1 -1
  21. package/examples/book/chapter-03/06-ancestor.pl +1 -1
  22. package/examples/book/chapter-03/07-different.pl +1 -1
  23. package/examples/book/chapter-03/08-has_parent.pl +1 -1
  24. package/examples/book/chapter-03/09-program.pl +1 -1
  25. package/examples/book/chapter-03/10-closed.pl +1 -1
  26. package/examples/book/chapter-03/11-p.pl +1 -1
  27. package/examples/book/chapter-04/01-path.pl +1 -1
  28. package/examples/book/chapter-05/01-first.pl +1 -1
  29. package/examples/book/chapter-05/02-reverse_acc.pl +1 -1
  30. package/examples/book/chapter-06/01-next.pl +1 -1
  31. package/examples/book/chapter-06/02-safe_reading.pl +1 -1
  32. package/examples/book/chapter-06/03-square.pl +1 -1
  33. package/examples/book/chapter-06/04-factorial.pl +1 -1
  34. package/examples/book/chapter-07/01-allowed.pl +1 -1
  35. package/examples/book/chapter-07/02-all_tests_pass.pl +1 -1
  36. package/examples/book/chapter-08/01-findall.pl +1 -1
  37. package/examples/book/chapter-08/02-outgoing_costs.pl +1 -1
  38. package/examples/book/chapter-08/03-best_route.pl +1 -1
  39. package/examples/book/chapter-09/01-functor.pl +1 -1
  40. package/examples/book/chapter-09/02-normalized.pl +1 -1
  41. package/examples/book/chapter-09/03-message.pl +1 -1
  42. package/examples/book/chapter-10/01-plan.pl +1 -1
  43. package/examples/book/chapter-11/01-why.pl +1 -1
  44. package/examples/book/chapter-12/01-invalid_probability.pl +1 -1
  45. package/examples/book/chapter-12/02-invalid_assignment.pl +1 -1
  46. package/examples/book/chapter-14/01-heating.pl +1 -1
  47. package/examples/book/chapter-15/01-rdf.pl +1 -1
  48. package/examples/book/chapter-16/01-socket.pl +1 -1
  49. package/examples/book/chapter-16/02-socket-2.pl +1 -1
  50. package/examples/book/chapter-17/01-path.pl +1 -1
  51. package/examples/book/chapter-17/02-adult.pl +1 -1
  52. package/examples/book/chapter-17/03-bad_member.pl +1 -1
  53. package/examples/book/chapter-17/04-item.pl +1 -1
  54. package/examples/book/chapter-18/01-routeable.pl +1 -1
  55. package/examples/book/chapter-18/02-routeable-2.pl +1 -1
  56. package/examples/book/chapter-18/03-prefix.pl +1 -1
  57. package/examples/book/chapter-18/04-candidate_pair.pl +1 -1
  58. package/examples/book/chapter-18/05-compatible_pair.pl +1 -1
  59. package/examples/book/chapter-19/01-factorial.pl +1 -1
  60. package/examples/book/chapter-19/02-invalid_limits.pl +1 -1
  61. package/examples/book/chapter-20/01-connected.pl +1 -1
  62. package/examples/book/chapter-20/02-within_thermal_limits.pl +1 -1
  63. package/examples/book/chapter-20/03-search.pl +1 -1
  64. package/examples/book/chapter-21/01-grandparent.pl +1 -1
  65. package/examples/book/chapter-21/02-loop_edge.pl +1 -1
  66. package/examples/book/chapter-21/03-eligible.pl +1 -1
  67. package/examples/book/chapter-21/04-grows.pl +1 -1
  68. package/examples/book/chapter-22/01-tree.pl +1 -1
  69. package/examples/book/chapter-22/02-tree_member.pl +1 -1
  70. package/examples/book/chapter-22/03-mirror.pl +1 -1
  71. package/examples/book/chapter-22/04-evaluate.pl +1 -1
  72. package/examples/book/chapter-22/05-lookup.pl +1 -1
  73. package/examples/book/chapter-22/06-simplify.pl +1 -1
  74. package/examples/book/chapter-23/01-adult.pl +1 -1
  75. package/examples/book/chapter-23/02-adult-2.pl +1 -1
  76. package/examples/book/chapter-23/03-can_board.pl +1 -1
  77. package/examples/book/chapter-23/04-traveler_in_good_standing.pl +1 -1
  78. package/examples/book/chapter-23/05-connection.pl +1 -1
  79. package/examples/book/chapter-23/06-rail_connection.pl +1 -1
  80. package/examples/book/chapter-23/07-sum_numbers.pl +1 -1
  81. package/examples/book/chapter-23/08-sum_numbers_acc.pl +1 -1
  82. package/examples/book/chapter-24/01-simple_path.pl +1 -1
  83. package/examples/book/chapter-24/02-reachable.pl +1 -1
  84. package/examples/book/chapter-24/03-best_plan.pl +1 -1
  85. package/examples/book/chapter-25/01-person.pl +1 -1
  86. package/examples/book/chapter-25/02-active_badge.pl +1 -1
  87. package/examples/book/chapter-25/03-in_good_standing.pl +1 -1
  88. package/examples/book/chapter-25/04-incompatible_status.pl +1 -1
  89. package/examples/book/chapter-26/01-mortal.pl +1 -1
  90. package/examples/book/chapter-26/02-triple.pl +1 -1
  91. package/examples/book/chapter-26/03-edge.pl +1 -1
  92. package/examples/book/chapter-27/01-natural.pl +1 -1
  93. package/examples/book/chapter-27/02-list_length.pl +1 -1
  94. package/examples/book/chapter-27/03-reverse_acc.pl +1 -1
  95. package/examples/book/chapter-28/01-program.pl +1 -1
  96. package/examples/book/chapter-28/02-triangle.pl +1 -1
  97. package/examples/book/chapter-28/03-rectangle.pl +1 -1
  98. package/examples/book/chapter-28/04-preserves_combine.pl +1 -1
  99. package/examples/book/chapter-29/01-noncommuting_pair.pl +1 -1
  100. package/examples/book/chapter-32/01-eligible.pl +1 -1
  101. package/examples/book/chapter-32/02-eligible-2.pl +1 -1
  102. package/examples/book/chapter-33/01-assigned_badge.pl +1 -1
  103. package/examples/book/chapter-33/02-source_role.pl +1 -1
  104. package/examples/book/chapter-33/03-chosen_pair.pl +1 -1
  105. package/examples/book/chapter-33/04-path.pl +1 -1
  106. package/examples/book/chapter-33/05-unregistered.pl +1 -1
  107. package/examples/book/chapter-33/06-step.pl +1 -1
  108. package/examples/book/chapter-33/07-depends.pl +1 -1
  109. package/examples/book/chapter-33/08-within_limit.pl +1 -1
  110. package/examples/book/chapter-33/09-invalid_badge_assignment.pl +1 -1
  111. package/examples/book/chapter-33/10-theory_version.pl +1 -1
  112. package/examples/book/chapter-34/01-travel_status.pl +1 -1
  113. package/examples/book/chapter-34/02-require_route.pl +1 -1
  114. package/examples/book/chapter-34/03-regional_total.pl +1 -1
  115. package/examples/book/chapter-35/01-term_shape.pl +1 -1
  116. package/examples/book/chapter-36/01-program.pl +1 -1
  117. package/examples/book/chapter-36/02-program-2.pl +1 -1
  118. package/examples/book/chapter-36/03-program-3.pl +1 -1
  119. package/examples/book/chapter-37/01-write_event.pl +1 -1
  120. package/examples/book/chapter-38/01-city.pl +1 -1
  121. package/examples/cdcl-sat-solver.pl +2 -2
  122. package/examples/collatz-1000.pl +1 -1
  123. package/examples/equality-saturation.pl +1 -1
  124. package/examples/existential-rule.pl +1 -1
  125. package/examples/herbrand-semantics.pl +1 -1
  126. package/examples/herbrand-witnesses.pl +1 -1
  127. package/examples/iso-integer-arithmetic.pl +1 -1
  128. package/examples/knowledge-engineering-alignment-flow.pl +1 -1
  129. package/examples/language.pl +2 -2
  130. package/examples/law-of-cosines.pl +1 -1
  131. package/examples/linear-logic-resources.pl +1 -1
  132. package/examples/markov-logic-network.pl +1 -1
  133. package/examples/matrix-noncommutativity.pl +1 -1
  134. package/examples/partial-evaluator.pl +1 -1
  135. package/examples/peano-calculus.pl +1 -1
  136. package/examples/prime-range.pl +1 -1
  137. package/examples/register-allocation.pl +1 -1
  138. package/examples/route-planning.pl +1 -1
  139. package/examples/sat-solver-dpll.pl +1 -1
  140. package/examples/symbolic-derivative.pl +1 -1
  141. package/examples/term-tools.pl +1 -1
  142. package/examples/trust-flow-provenance-threshold.pl +1 -1
  143. package/examples/vector-similarity.pl +1 -1
  144. package/examples/web-names.pl +1 -1
  145. package/examples/workplace-compliance.pl +1 -1
  146. package/eyelang-logo.png +0 -0
  147. package/index.d.ts +68 -68
  148. package/index.js +1 -1
  149. package/package.json +2 -2
  150. package/playground.html +10 -10
  151. package/src/cli.js +4 -4
  152. package/src/explain.js +4 -4
  153. package/src/index.js +4 -4
  154. package/src/iso.js +1 -1
  155. package/src/library.js +7 -7
  156. package/src/parser.js +1 -1
  157. package/src/playground-worker.js +2 -2
  158. package/src/solver.js +4 -4
  159. package/src/term.js +1 -1
  160. package/test/conformance/README.md +6 -6
  161. package/test/conformance/THIRD_PARTY.md +4 -4
  162. package/test/conformance/cases/iso/logtalk_abolish.pl +1 -1
  163. package/test/conformance/cases/iso/logtalk_arg_unification.pl +1 -1
  164. package/test/conformance/cases/iso/logtalk_assert_order.pl +1 -1
  165. package/test/conformance/cases/iso/logtalk_atom_chars.pl +1 -1
  166. package/test/conformance/cases/iso/logtalk_atom_codes.pl +1 -1
  167. package/test/conformance/cases/iso/logtalk_atom_concat.pl +1 -1
  168. package/test/conformance/cases/iso/logtalk_atom_length.pl +1 -1
  169. package/test/conformance/cases/iso/logtalk_bagof.pl +1 -1
  170. package/test/conformance/cases/iso/logtalk_char_code.pl +1 -1
  171. package/test/conformance/cases/iso/logtalk_clause.pl +1 -1
  172. package/test/conformance/cases/iso/logtalk_compare_standard_order.pl +1 -1
  173. package/test/conformance/cases/iso/logtalk_copy_term_semantics.pl +1 -1
  174. package/test/conformance/cases/iso/logtalk_current_predicate.pl +1 -1
  175. package/test/conformance/cases/iso/logtalk_current_streams.pl +1 -1
  176. package/test/conformance/cases/iso/logtalk_findall.pl +1 -1
  177. package/test/conformance/cases/iso/logtalk_number_chars.pl +1 -1
  178. package/test/conformance/cases/iso/logtalk_number_codes.pl +1 -1
  179. package/test/conformance/cases/iso/logtalk_occurs_check.pl +1 -1
  180. package/test/conformance/cases/iso/logtalk_once.pl +1 -1
  181. package/test/conformance/cases/iso/logtalk_operators.pl +1 -1
  182. package/test/conformance/cases/iso/logtalk_prolog_flags.pl +1 -1
  183. package/test/conformance/cases/iso/logtalk_repeat.pl +1 -1
  184. package/test/conformance/cases/iso/logtalk_retract.pl +1 -1
  185. package/test/conformance/cases/iso/logtalk_setof.pl +1 -1
  186. package/test/conformance/cases/iso/logtalk_sub_atom.pl +1 -1
  187. package/test/conformance/cases/iso/logtalk_term_comparison.pl +1 -1
  188. package/test/conformance/cases/iso/logtalk_term_variables.pl +1 -1
  189. package/test/conformance/cases/iso/logtalk_univ.pl +1 -1
  190. package/test/conformance/cases/strings/064_reusable_string_builtins.pl +3 -3
  191. package/test/conformance/cases/strings/071_string_edges.pl +1 -1
  192. package/test/conformance/errors/iso/logtalk_abolish_arity_type.pl +1 -1
  193. package/test/conformance/errors/iso/logtalk_abolish_bad_indicator.pl +1 -1
  194. package/test/conformance/errors/iso/logtalk_abolish_name_type.pl +1 -1
  195. package/test/conformance/errors/iso/logtalk_abolish_negative_arity.pl +1 -1
  196. package/test/conformance/errors/iso/logtalk_abolish_unbound.pl +1 -1
  197. package/test/conformance/errors/iso/logtalk_abolish_unbound_arity.pl +1 -1
  198. package/test/conformance/errors/iso/logtalk_arg_index_type.pl +1 -1
  199. package/test/conformance/errors/iso/logtalk_arg_number.pl +1 -1
  200. package/test/conformance/errors/iso/logtalk_asserta_bad_body.pl +1 -1
  201. package/test/conformance/errors/iso/logtalk_asserta_noncallable.pl +1 -1
  202. package/test/conformance/errors/iso/logtalk_assertz_noncallable.pl +1 -1
  203. package/test/conformance/errors/iso/logtalk_atom_chars_atom_type.pl +1 -1
  204. package/test/conformance/errors/iso/logtalk_atom_chars_character_type.pl +1 -1
  205. package/test/conformance/errors/iso/logtalk_atom_chars_improper.pl +1 -1
  206. package/test/conformance/errors/iso/logtalk_atom_chars_list_type.pl +1 -1
  207. package/test/conformance/errors/iso/logtalk_atom_chars_unbound.pl +1 -1
  208. package/test/conformance/errors/iso/logtalk_atom_codes_atom_type.pl +1 -1
  209. package/test/conformance/errors/iso/logtalk_atom_codes_bad_code.pl +1 -1
  210. package/test/conformance/errors/iso/logtalk_atom_codes_integer_type.pl +1 -1
  211. package/test/conformance/errors/iso/logtalk_atom_codes_list_type.pl +1 -1
  212. package/test/conformance/errors/iso/logtalk_atom_codes_unbound.pl +1 -1
  213. package/test/conformance/errors/iso/logtalk_atom_concat_left_type.pl +1 -1
  214. package/test/conformance/errors/iso/logtalk_atom_concat_right_type.pl +1 -1
  215. package/test/conformance/errors/iso/logtalk_atom_concat_unbound.pl +1 -1
  216. package/test/conformance/errors/iso/logtalk_atom_concat_whole_type.pl +1 -1
  217. package/test/conformance/errors/iso/logtalk_atom_length_atom_type.pl +1 -1
  218. package/test/conformance/errors/iso/logtalk_atom_length_integer_type.pl +1 -1
  219. package/test/conformance/errors/iso/logtalk_atom_length_negative.pl +1 -1
  220. package/test/conformance/errors/iso/logtalk_atom_length_unbound.pl +1 -1
  221. package/test/conformance/errors/iso/logtalk_bagof_improper.pl +1 -1
  222. package/test/conformance/errors/iso/logtalk_bagof_nonlist.pl +1 -1
  223. package/test/conformance/errors/iso/logtalk_char_code_character_type.pl +1 -1
  224. package/test/conformance/errors/iso/logtalk_char_code_integer_type.pl +1 -1
  225. package/test/conformance/errors/iso/logtalk_char_code_negative.pl +1 -1
  226. package/test/conformance/errors/iso/logtalk_char_code_number_character.pl +1 -1
  227. package/test/conformance/errors/iso/logtalk_char_code_unbound.pl +1 -1
  228. package/test/conformance/errors/iso/logtalk_clause_noncallable_body.pl +1 -1
  229. package/test/conformance/errors/iso/logtalk_clause_noncallable_head.pl +1 -1
  230. package/test/conformance/errors/iso/logtalk_compare_order_domain.pl +1 -1
  231. package/test/conformance/errors/iso/logtalk_compare_order_type.pl +1 -1
  232. package/test/conformance/errors/iso/logtalk_current_flag_compound.pl +1 -1
  233. package/test/conformance/errors/iso/logtalk_current_flag_name_type.pl +1 -1
  234. package/test/conformance/errors/iso/logtalk_current_flag_unknown.pl +1 -1
  235. package/test/conformance/errors/iso/logtalk_current_input_bad_stream.pl +1 -1
  236. package/test/conformance/errors/iso/logtalk_current_op_bad_specifier.pl +1 -1
  237. package/test/conformance/errors/iso/logtalk_current_op_high_priority.pl +1 -1
  238. package/test/conformance/errors/iso/logtalk_current_output_bad_stream.pl +1 -1
  239. package/test/conformance/errors/iso/logtalk_current_predicate_bad_name.pl +1 -1
  240. package/test/conformance/errors/iso/logtalk_current_predicate_negative_arity.pl +1 -1
  241. package/test/conformance/errors/iso/logtalk_current_predicate_scalar.pl +1 -1
  242. package/test/conformance/errors/iso/logtalk_findall_improper.pl +1 -1
  243. package/test/conformance/errors/iso/logtalk_findall_nonlist.pl +1 -1
  244. package/test/conformance/errors/iso/logtalk_functor_arity_type.pl +1 -1
  245. package/test/conformance/errors/iso/logtalk_functor_compound_name.pl +1 -1
  246. package/test/conformance/errors/iso/logtalk_functor_float_name.pl +1 -1
  247. package/test/conformance/errors/iso/logtalk_number_chars_character_type.pl +1 -1
  248. package/test/conformance/errors/iso/logtalk_number_chars_list_type.pl +1 -1
  249. package/test/conformance/errors/iso/logtalk_number_chars_number_type.pl +1 -1
  250. package/test/conformance/errors/iso/logtalk_number_chars_partial.pl +1 -1
  251. package/test/conformance/errors/iso/logtalk_number_chars_syntax.pl +1 -1
  252. package/test/conformance/errors/iso/logtalk_number_chars_unbound.pl +1 -1
  253. package/test/conformance/errors/iso/logtalk_number_codes_bad_code.pl +1 -1
  254. package/test/conformance/errors/iso/logtalk_number_codes_list_type.pl +1 -1
  255. package/test/conformance/errors/iso/logtalk_number_codes_number_type.pl +1 -1
  256. package/test/conformance/errors/iso/logtalk_number_codes_partial.pl +1 -1
  257. package/test/conformance/errors/iso/logtalk_number_codes_syntax.pl +1 -1
  258. package/test/conformance/errors/iso/logtalk_number_codes_unbound.pl +1 -1
  259. package/test/conformance/errors/iso/logtalk_once_noncallable.pl +1 -1
  260. package/test/conformance/errors/iso/logtalk_once_unbound.pl +1 -1
  261. package/test/conformance/errors/iso/logtalk_op_bad_specifier.pl +1 -1
  262. package/test/conformance/errors/iso/logtalk_op_high_priority.pl +1 -1
  263. package/test/conformance/errors/iso/logtalk_op_negative_priority.pl +1 -1
  264. package/test/conformance/errors/iso/logtalk_op_priority_type.pl +1 -1
  265. package/test/conformance/errors/iso/logtalk_op_unbound_name.pl +1 -1
  266. package/test/conformance/errors/iso/logtalk_op_unbound_priority.pl +1 -1
  267. package/test/conformance/errors/iso/logtalk_op_unbound_specifier.pl +1 -1
  268. package/test/conformance/errors/iso/logtalk_retract_unbound.pl +1 -1
  269. package/test/conformance/errors/iso/logtalk_retract_unbound_head.pl +1 -1
  270. package/test/conformance/errors/iso/logtalk_set_flag_name_type.pl +1 -1
  271. package/test/conformance/errors/iso/logtalk_set_flag_unbound_name.pl +1 -1
  272. package/test/conformance/errors/iso/logtalk_set_flag_unbound_value.pl +1 -1
  273. package/test/conformance/errors/iso/logtalk_set_flag_unknown.pl +1 -1
  274. package/test/conformance/errors/iso/logtalk_set_flag_value.pl +1 -1
  275. package/test/conformance/errors/iso/logtalk_setof_nonlist.pl +1 -1
  276. package/test/conformance/errors/iso/logtalk_sub_atom_before_type.pl +1 -1
  277. package/test/conformance/errors/iso/logtalk_sub_atom_negative.pl +1 -1
  278. package/test/conformance/errors/iso/logtalk_sub_atom_result_type.pl +1 -1
  279. package/test/conformance/errors/iso/logtalk_sub_atom_source_type.pl +1 -1
  280. package/test/conformance/errors/iso/logtalk_sub_atom_unbound.pl +1 -1
  281. package/test/conformance/errors/iso/logtalk_term_variables_improper.pl +1 -1
  282. package/test/conformance/errors/iso/logtalk_term_variables_nonlist.pl +1 -1
  283. package/test/conformance/errors/iso/logtalk_univ_head_compound.pl +1 -1
  284. package/test/conformance/errors/iso/logtalk_univ_head_float.pl +1 -1
  285. package/test/conformance/errors/iso/logtalk_univ_head_integer.pl +1 -1
  286. package/test/conformance/errors/iso/logtalk_univ_single_compound.pl +1 -1
  287. package/test/conformance/expected/strings/064_reusable_string_builtins.pl +1 -1
  288. package/test/run-conformance-report.mjs +4 -4
  289. package/test/run-conformance.mjs +3 -3
  290. package/test/run-playground.mjs +3 -3
  291. package/test/run-rdf-tools.mjs +15 -15
  292. package/test/run-regression.mjs +35 -35
  293. package/the-art-of-eyelang.md +136 -136
  294. package/tools/README.md +2 -2
  295. package/tools/extract-book-examples.mjs +4 -4
  296. package/tools/pl-to-rdf.mjs +2 -2
  297. package/tools/rdf-codec.mjs +8 -8
  298. package/tools/rdf-to-pl.mjs +9 -9
  299. package/why-eyelang.md +47 -47
package/tools/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # RDF round-trip tools
2
2
 
3
- These tools translate RDF files into ordinary EyeLang and queried `rdf/4`
3
+ These tools translate RDF files into ordinary Eyelang and queried `rdf/4`
4
4
  facts back into RDF 1.2 N-Quads. Input formats are selected automatically from
5
5
  the file extension. Supported inputs include RDF 1.2 Turtle, TriG, N-Triples,
6
6
  N-Quads and RDF/XML, plus JSON-LD, RDFa, Microdata, Notation3 and SHACL Compact
7
- Syntax. EyeLang remains RDF-agnostic.
7
+ Syntax. Eyelang remains RDF-agnostic.
8
8
 
9
9
  ```bash
10
10
  node tools/rdf-to-pl.mjs --rules rules.pl data.nq -o program.pl
@@ -48,11 +48,11 @@ for (const match of book.matchAll(/^(## \d+\. ([^\n]+)|# ([^\n]+)|```eyelang\n([
48
48
 
49
49
  const files = new Map();
50
50
  const readme = [
51
- '# The Art of EyeLang — inline examples',
51
+ '# The Art of Eyelang — inline examples',
52
52
  '',
53
53
  'These files are generated from the complete `eyelang` code blocks in',
54
- '[The Art of EyeLang](../../the-art-of-eyelang.md). They are grouped by chapter and',
55
- 'retain the source text from the book. Goal fragments and non-EyeLang blocks are',
54
+ '[The Art of Eyelang](../../the-art-of-eyelang.md). They are grouped by chapter and',
55
+ 'retain the source text from the book. Goal fragments and non-Eyelang blocks are',
56
56
  'not extracted.',
57
57
  '',
58
58
  'Regenerate them from the repository root with:',
@@ -79,7 +79,7 @@ for (const item of chapters) {
79
79
  const heading = example.section ? ` — ${example.section}` : '';
80
80
  files.set(
81
81
  relative,
82
- `% From The Art of EyeLang, Chapter ${item.number}${heading}.\n${example.source}\n`,
82
+ `% From The Art of Eyelang, Chapter ${item.number}${heading}.\n${example.source}\n`,
83
83
  );
84
84
  readme.push(`- [${filename}](${relative})${heading}`);
85
85
  total += 1;
@@ -6,7 +6,7 @@ import { fileURLToPath } from 'node:url';
6
6
  import { Program } from '../src/program.js';
7
7
  import { eyeLangQuadToNQuad } from './rdf-codec.mjs';
8
8
 
9
- export function extractEyeLangRdf(source) {
9
+ export function extractEyelangRdf(source) {
10
10
  const program = Program.parse(String(source), { sourceMetadata: false });
11
11
  const lines = []; const seen = new Set();
12
12
  for (const c of program.clauses) {
@@ -20,7 +20,7 @@ async function main(argv) {
20
20
  let input = '-'; let output = '-';
21
21
  for (let i = 0; i < argv.length; i++) { const a = argv[i]; if (a === '-h' || a === '--help') return usage(); if (a === '-o' || a === '--output') output = required(argv, ++i, a); else if (a.startsWith('-') && a !== '-') throw new Error(`unknown option: ${a}`); else if (input === '-') input = a; else throw new Error(`unexpected argument: ${a}`); }
22
22
  const source = input === '-' ? await stdin() : await fs.readFile(input, 'utf8');
23
- const result = extractEyeLangRdf(source);
23
+ const result = extractEyelangRdf(source);
24
24
  if (output === '-') process.stdout.write(result); else await fs.writeFile(output, result);
25
25
  }
26
26
  function usage() { process.stdout.write('Usage: node tools/pl-to-rdf.mjs [options] [input.pl|-]\n\n -o, --output FILE Write N-Quads to FILE\n'); }
@@ -1,4 +1,4 @@
1
- // Lossless RDF 1.2 <-> ordinary EyeLang term encoding.
1
+ // Lossless RDF 1.2 <-> ordinary Eyelang term encoding.
2
2
  export const XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';
3
3
  export const RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString';
4
4
  export const RDF_DIR_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString';
@@ -170,15 +170,15 @@ export function fromRdfJs(term, scope = 'input') {
170
170
  throw new Error(`unsupported RDF/JS term type: ${term.termType}`);
171
171
  }
172
172
 
173
- export function quadToEyeLang(q, predicate = 'rdf') {
174
- return `${predicate}(${toEyeLang(q.subject)}, ${toEyeLang(q.predicate)}, ${toEyeLang(q.object)}, ${toEyeLang(q.graph)}).`;
173
+ export function quadToEyelang(q, predicate = 'rdf') {
174
+ return `${predicate}(${toEyelang(q.subject)}, ${toEyelang(q.predicate)}, ${toEyelang(q.object)}, ${toEyelang(q.graph)}).`;
175
175
  }
176
176
 
177
- export function toEyeLang(t) {
177
+ export function toEyelang(t) {
178
178
  if (t.kind === 'namedNode') return `iri(${quote(t.value)})`;
179
179
  if (t.kind === 'blankNode') return `bnode(${quote(t.scope)}, ${quote(t.value)})`;
180
180
  if (t.kind === 'defaultGraph') return 'default_graph';
181
- if (t.kind === 'triple') return `triple(${toEyeLang(t.subject)}, ${toEyeLang(t.predicate)}, ${toEyeLang(t.object)})`;
181
+ if (t.kind === 'triple') return `triple(${toEyelang(t.subject)}, ${toEyelang(t.predicate)}, ${toEyelang(t.object)})`;
182
182
  if (t.kind === 'literal') {
183
183
  const annotation = t.language
184
184
  ? (t.direction ? `lang(${quote(t.language)}, ${t.direction})` : `lang(${quote(t.language)})`)
@@ -190,18 +190,18 @@ export function toEyeLang(t) {
190
190
 
191
191
  export function eyeLangQuadToNQuad(term) {
192
192
  if (term?.type !== 'compound' || term.name !== 'rdf' || term.args.length !== 4) throw new Error('expected rdf/4 fact');
193
- const [subject, predicate, object, graph] = term.args.map(fromEyeLang);
193
+ const [subject, predicate, object, graph] = term.args.map(fromEyelang);
194
194
  assertTriple(subject, predicate, object);
195
195
  if (!['namedNode', 'blankNode', 'defaultGraph'].includes(graph.kind)) throw new Error('invalid RDF graph');
196
196
  return `${toNQ(subject)} ${toNQ(predicate)} ${toNQ(object)}${graph.kind === 'defaultGraph' ? '' : ` ${toNQ(graph)}`} .`;
197
197
  }
198
198
 
199
- export function fromEyeLang(t) {
199
+ export function fromEyelang(t) {
200
200
  if (t?.type === 'atom' && t.name === 'default_graph') return { kind: 'defaultGraph' };
201
201
  if (compound(t, 'iri', 1)) return { kind: 'namedNode', value: scalar(t.args[0], 'IRI') };
202
202
  if (compound(t, 'bnode', 2)) return { kind: 'blankNode', scope: scalar(t.args[0], 'blank-node scope'), value: scalar(t.args[1], 'blank-node label') };
203
203
  if (compound(t, 'triple', 3)) {
204
- const [subject, predicate, object] = t.args.map(fromEyeLang);
204
+ const [subject, predicate, object] = t.args.map(fromEyelang);
205
205
  assertTriple(subject, predicate, object);
206
206
  return { kind: 'triple', subject, predicate, object };
207
207
  }
@@ -3,19 +3,19 @@ import fs from 'node:fs/promises';
3
3
  import process from 'node:process';
4
4
  import path from 'node:path';
5
5
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
- import { parseNQuads, quadToEyeLang } from './rdf-codec.mjs';
6
+ import { parseNQuads, quadToEyelang } from './rdf-codec.mjs';
7
7
  import { parseRdf } from './rdf-input.mjs';
8
8
 
9
- export function compileRdfToEyeLang(rdf, { scope = 'input', rules = '', includeSource = false } = {}) {
10
- return compileQuadsToEyeLang(parseNQuads(rdf, { scope }), { rules, includeSource });
9
+ export function compileRdfToEyelang(rdf, { scope = 'input', rules = '', includeSource = false } = {}) {
10
+ return compileQuadsToEyelang(parseNQuads(rdf, { scope }), { rules, includeSource });
11
11
  }
12
- export async function compileRdfDocumentToEyeLang(rdf, { scope = 'input', rules = '', includeSource = false, inputPath, contentType, baseIRI } = {}) {
12
+ export async function compileRdfDocumentToEyelang(rdf, { scope = 'input', rules = '', includeSource = false, inputPath, contentType, baseIRI } = {}) {
13
13
  const quads = await parseRdf(rdf, { scope, path: inputPath, contentType, baseIRI });
14
- return compileQuadsToEyeLang(quads, { rules, includeSource });
14
+ return compileQuadsToEyelang(quads, { rules, includeSource });
15
15
  }
16
- export function compileQuadsToEyeLang(quads, { rules = '', includeSource = false } = {}) {
16
+ export function compileQuadsToEyelang(quads, { rules = '', includeSource = false } = {}) {
17
17
  const predicate = includeSource ? 'source_rdf' : 'rdf';
18
- const facts = quads.map((q) => quadToEyeLang(q, predicate));
18
+ const facts = quads.map((q) => quadToEyelang(q, predicate));
19
19
  const parts = ['% Generated by tools/rdf-to-pl.mjs.', "% Run with: eyelang --goal 'rdf(S, P, O, G)' program.pl."];
20
20
  if (includeSource) parts.push('rdf(S, P, O, G) :- source_rdf(S, P, O, G).');
21
21
  if (facts.length) parts.push(facts.join('\n'));
@@ -39,7 +39,7 @@ async function main(argv) {
39
39
  }
40
40
  const rdf = await read(input);
41
41
  const rules = rulesFile ? await fs.readFile(rulesFile, 'utf8') : '';
42
- const result = await compileRdfDocumentToEyeLang(rdf, {
42
+ const result = await compileRdfDocumentToEyelang(rdf, {
43
43
  scope: scope ?? (input === '-' ? 'stdin' : path.basename(input)), rules, includeSource,
44
44
  inputPath: input === '-' ? undefined : input,
45
45
  contentType: format,
@@ -47,7 +47,7 @@ async function main(argv) {
47
47
  });
48
48
  if (output === '-') process.stdout.write(result); else await fs.writeFile(output, result);
49
49
  }
50
- function usage() { process.stdout.write('Usage: node tools/rdf-to-pl.mjs [options] [input|-]\n\n --format TYPE RDF media type or extension (required for stdin)\n --base IRI Base IRI for relative references\n --rules FILE Append EyeLang rules using rdf/4\n --include-source Emit source and derived quads\n --scope NAME Set blank-node scope\n -o, --output FILE Write program to FILE\n'); }
50
+ function usage() { process.stdout.write('Usage: node tools/rdf-to-pl.mjs [options] [input|-]\n\n --format TYPE RDF media type or extension (required for stdin)\n --base IRI Base IRI for relative references\n --rules FILE Append Eyelang rules using rdf/4\n --include-source Emit source and derived quads\n --scope NAME Set blank-node scope\n -o, --output FILE Write program to FILE\n'); }
51
51
  function required(a, i, o) { if (a[i] == null) throw new Error(`${o} requires a value`); return a[i]; }
52
52
  function read(f) { if (f !== '-') return fs.readFile(f, 'utf8'); return new Promise((resolve, reject) => { let s = ''; process.stdin.setEncoding('utf8'); process.stdin.on('data', (c) => { s += c; }); process.stdin.on('end', () => resolve(s)); process.stdin.on('error', reject); }); }
53
53
  if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) main(process.argv.slice(2)).catch((e) => { process.stderr.write(`rdf-to-pl: ${e.message}\n`); process.exitCode = 1; });
package/why-eyelang.md CHANGED
@@ -1,14 +1,14 @@
1
- # Why EyeLang?
1
+ # Why Eyelang?
2
2
 
3
- EyeLang combines ISO Prolog and W3C RDF 1.2 to turn portable rules and linked data into answers with inspectable proofs.
3
+ Eyelang combines ISO Prolog and W3C RDF 1.2 to turn portable rules and linked data into answers with inspectable proofs.
4
4
 
5
5
  The name reflects this dual standards foundation: ISO Prolog provides the executable rule language, while RDF provides the interoperable linked-data model.
6
6
 
7
7
  Its central design choice is **composition rather than invention**: use an established international standard for the rule language, use the Web's standard graph data model, and define the smallest practical bridge between them.
8
8
 
9
- > **EyeLang arguably provides one of the strongest standards-based foundations for Web rules because it combines ISO Prolog as the rule language with the W3C RDF 1.2 data model and defines the missing operational bridge between them—including RDF term mappings, named graphs, triple terms, serialization, querying, and proofs.**
9
+ > **Eyelang arguably provides one of the strongest standards-based foundations for Web rules because it combines ISO Prolog as the rule language with the W3C RDF 1.2 data model and defines the missing operational bridge between them—including RDF term mappings, named graphs, triple terms, serialization, querying, and proofs.**
10
10
 
11
- This is a strong architectural claim, not a claim that the complete EyeLang system is itself an ISO or W3C standard.
11
+ This is a strong architectural claim, not a claim that the complete Eyelang system is itself an ISO or W3C standard.
12
12
 
13
13
  ## A standards-based foundation for Web rules
14
14
 
@@ -16,19 +16,19 @@ A Web rule system needs both a rule language and a data model.
16
16
 
17
17
  [ISO/IEC 13211-1](https://www.iso.org/standard/21413.html) standardizes the Prolog general core, including its syntax, semantic rules, data representation, input and output, and processor behavior. The standard is intended to promote the portability of Prolog programs and data across processors.
18
18
 
19
- [RDF 1.2](https://www.w3.org/TR/rdf12-concepts/) defines the graph data model used by EyeLang for linked data. It includes IRIs, blank nodes, literals, datasets, named graphs, and triple terms. RDF 1.2 is currently a W3C Candidate Recommendation, while RDF 1.1 remains the latest completed Recommendation.
19
+ [RDF 1.2](https://www.w3.org/TR/rdf12-concepts/) defines the graph data model used by Eyelang for linked data. It includes IRIs, blank nodes, literals, datasets, named graphs, and triple terms. RDF 1.2 is currently a W3C Candidate Recommendation, while RDF 1.1 remains the latest completed Recommendation.
20
20
 
21
- EyeLang brings these foundations together:
21
+ Eyelang brings these foundations together:
22
22
 
23
23
  - ISO Prolog supplies predicates, clauses, variables, unification, recursion, arithmetic, control, and standard errors.
24
24
  - RDF 1.2 supplies globally identified resources and an interoperable graph data model.
25
- - EyeLang defines lossless mappings between RDF values and Prolog terms.
25
+ - Eyelang defines lossless mappings between RDF values and Prolog terms.
26
26
  - RDF files can be converted to ordinary `rdf/4` facts, queried with rules, and serialized back to RDF datasets.
27
27
  - Named graphs, the default graph, scoped blank nodes, literals, directional language strings, and nested triple terms remain distinguishable.
28
28
  - Derived answers can carry inspectable proofs.
29
29
  - The same parser, solver, term model, and proof machinery run from the command line, JavaScript, and the browser.
30
30
 
31
- The exact status wording matters. EyeLang is grounded in a current ISO International Standard and the W3C RDF 1.2 standards track. It should not imply that RDF 1.2 has already completed the W3C Recommendation process.
31
+ The exact status wording matters. Eyelang is grounded in a current ISO International Standard and the W3C RDF 1.2 standards track. It should not imply that RDF 1.2 has already completed the W3C Recommendation process.
32
32
 
33
33
  ## The missing bridge
34
34
 
@@ -52,31 +52,31 @@ RDF does not specify:
52
52
  - operational query execution; or
53
53
  - proof construction for arbitrary rule derivations.
54
54
 
55
- EyeLang fills that gap with an explicit Prolog–RDF integration profile. The profile belongs to EyeLang's documented and tested behavior; it is not itself an ISO or W3C standard.
55
+ Eyelang fills that gap with an explicit Prolog–RDF integration profile. The profile belongs to Eyelang's documented and tested behavior; it is not itself an ISO or W3C standard.
56
56
 
57
57
  That limitation should be stated plainly:
58
58
 
59
- > **EyeLang is standards-based, but its Prolog–RDF integration profile has not itself been standardized by ISO or W3C.**
59
+ > **Eyelang is standards-based, but its Prolog–RDF integration profile has not itself been standardized by ISO or W3C.**
60
60
 
61
61
  ## Why composition matters
62
62
 
63
63
  A new rule language must establish its own syntax, semantics, implementation model, tooling, teaching material, and interoperability story. It can also become isolated if its original implementation or community disappears.
64
64
 
65
- EyeLang instead composes standards that remain useful independently:
65
+ Eyelang instead composes standards that remain useful independently:
66
66
 
67
67
  - Prolog programs retain a recognizable logic-programming model.
68
68
  - RDF data remains usable by existing RDF processors and Web tooling.
69
69
  - Standard constructs keep their standard meanings.
70
- - EyeLang-specific behavior can be identified, documented, tested, and changed without redefining the language core.
70
+ - Eyelang-specific behavior can be identified, documented, tested, and changed without redefining the language core.
71
71
  - The integration boundary is small enough to audit.
72
72
 
73
- This is why removing hidden extensions strengthens EyeLang.
73
+ This is why removing hidden extensions strengthens Eyelang.
74
74
 
75
- For example, `false/0` is the ISO built-in predicate that always fails. EyeLang does not overload clauses headed by `false` as automatically executed inference fuses. Integrity checks are ordinary predicates that the host invokes explicitly. The standardized construct keeps its standardized meaning, and application policy remains visible.
75
+ For example, `false/0` is the ISO built-in predicate that always fails. Eyelang does not overload clauses headed by `false` as automatically executed inference fuses. Integrity checks are ordinary predicates that the host invokes explicitly. The standardized construct keeps its standardized meaning, and application policy remains visible.
76
76
 
77
77
  The governing design rule is:
78
78
 
79
- > **Standards define the core. EyeLang extensions must be explicit, minimal, documented, and testable.**
79
+ > **Standards define the core. Eyelang extensions must be explicit, minimal, documented, and testable.**
80
80
 
81
81
  ## Compared with alternatives
82
82
 
@@ -95,9 +95,9 @@ That design gives N3 distinctive strengths:
95
95
 
96
96
  N3 is therefore not merely an RDF serialization with rule syntax added. It offers an integrated model in which data, rules, and quoted graphs belong to the same language.
97
97
 
98
- Its standards position differs from EyeLang's. The W3C N3 Community Group develops language, built-in, and semantics specifications, but Community Group reports are not W3C Standards and are not currently on the W3C Standards Track. N3 also defines a complete logic notation beyond RDF, so interoperability depends on processors agreeing on that additional syntax, semantics, and built-in vocabulary.
98
+ Its standards position differs from Eyelang's. The W3C N3 Community Group develops language, built-in, and semantics specifications, but Community Group reports are not W3C Standards and are not currently on the W3C Standards Track. N3 also defines a complete logic notation beyond RDF, so interoperability depends on processors agreeing on that additional syntax, semantics, and built-in vocabulary.
99
99
 
100
- EyeLang explores a complementary standards architecture:
100
+ Eyelang explores a complementary standards architecture:
101
101
 
102
102
  - ISO Prolog is the rule language;
103
103
  - RDF 1.2 is the external graph data model;
@@ -107,13 +107,13 @@ EyeLang explores a complementary standards architecture:
107
107
 
108
108
  The trade-off is clear.
109
109
 
110
- N3 is stronger when rules should themselves be Web data, or when quoted formulae and graph-level metareasoning are central. EyeLang is stronger when users want conventional Prolog syntax and semantics, an ISO-defined language core, direct term-level programming, or a sharply separated interface between executable logic and RDF data.
110
+ N3 is stronger when rules should themselves be Web data, or when quoted formulae and graph-level metareasoning are central. Eyelang is stronger when users want conventional Prolog syntax and semantics, an ISO-defined language core, direct term-level programming, or a sharply separated interface between executable logic and RDF data.
111
111
 
112
- The two approaches can interoperate at the language and data-model level. N3 can serve as a Web-native exchange and publication form, while compatible rules or data are translated into EyeLang for ISO-Prolog execution. EyeLang conclusions and proofs can in turn be serialized as RDF or N3.
112
+ The two approaches can interoperate at the language and data-model level. N3 can serve as a Web-native exchange and publication form, while compatible rules or data are translated into Eyelang for ISO-Prolog execution. Eyelang conclusions and proofs can in turn be serialized as RDF or N3.
113
113
 
114
114
  In brief:
115
115
 
116
- > **Notation3 provides an integrated, Web-native language for data and rules; EyeLang separates an ISO-standard rule language from the RDF data model and makes the bridge explicit.**
116
+ > **Notation3 provides an integrated, Web-native language for data and rules; Eyelang separates an ISO-standard rule language from the RDF data model and makes the bridge explicit.**
117
117
 
118
118
  ### RIF
119
119
 
@@ -126,13 +126,13 @@ RIF therefore has the stronger claim when the requirement is:
126
126
  - a normative interchange syntax and semantics; or
127
127
  - compatibility defined within one integrated W3C specification family.
128
128
 
129
- EyeLang takes a different architectural approach. It reuses ISO Prolog as the executable rule language and RDF as the data model instead of defining another complete family of rule dialects.
129
+ Eyelang takes a different architectural approach. It reuses ISO Prolog as the executable rule language and RDF as the data model instead of defining another complete family of rule dialects.
130
130
 
131
- That may be more durable for executable Web rules because both foundations are mature and independently useful. The trade-off is that EyeLang's bridge between them is an implementation profile rather than a formally standardized interchange specification.
131
+ That may be more durable for executable Web rules because both foundations are mature and independently useful. The trade-off is that Eyelang's bridge between them is an implementation profile rather than a formally standardized interchange specification.
132
132
 
133
133
  In brief:
134
134
 
135
- > **RIF is stronger as a standardized interchange framework; EyeLang may be stronger as a small executable architecture built by composing existing standards.**
135
+ > **RIF is stronger as a standardized interchange framework; Eyelang may be stronger as a small executable architecture built by composing existing standards.**
136
136
 
137
137
  ### SHACL 1.2 Rules
138
138
 
@@ -155,26 +155,26 @@ SHACL 1.2 Rules has important advantages:
155
155
  - Stratification gives a well-defined outcome for supported rule sets.
156
156
  - It is being developed on the W3C Recommendation track.
157
157
 
158
- Its present limitations relative to EyeLang are different rather than absolute:
158
+ Its present limitations relative to Eyelang are different rather than absolute:
159
159
 
160
160
  - As of August 2026, SHACL 1.2 Rules is a W3C Working Draft, not yet a Recommendation.
161
161
  - Its primary abstraction is RDF graph inference, not a general ISO Prolog programming environment.
162
162
  - Its rule language and evaluation model are deliberately constrained around RDF triple production.
163
- - The current specification standardizes inference and query results, but not an EyeLang-style derivation-proof artifact.
164
- - Applications needing arbitrary Prolog terms, reusable procedural abstractions, standard Prolog control, or direct JavaScript predicate integration may find EyeLang more natural.
163
+ - The current specification standardizes inference and query results, but not an Eyelang-style derivation-proof artifact.
164
+ - Applications needing arbitrary Prolog terms, reusable procedural abstractions, standard Prolog control, or direct JavaScript predicate integration may find Eyelang more natural.
165
165
 
166
166
  SHACL 1.2 Rules is therefore not merely a competitor. It is also a potential interoperability target.
167
167
 
168
- EyeLang could eventually:
168
+ Eyelang could eventually:
169
169
 
170
170
  - import a useful SHACL 1.2 Rules profile;
171
171
  - export compatible RDF-producing rules where semantics align;
172
172
  - execute SHACL-derived rule sets through its RDF mapping; or
173
- - attach EyeLang proofs to triples inferred from compatible SHACL rules.
173
+ - attach Eyelang proofs to triples inferred from compatible SHACL rules.
174
174
 
175
175
  The positioning should remain balanced:
176
176
 
177
- > **SHACL 1.2 Rules is stronger as an RDF-native rules specification on the W3C Recommendation track. EyeLang is stronger where applications need an established general-purpose logic language, direct Prolog execution, richer term-level computation, and inspectable derivations.**
177
+ > **SHACL 1.2 Rules is stronger as an RDF-native rules specification on the W3C Recommendation track. Eyelang is stronger where applications need an established general-purpose logic language, direct Prolog execution, richer term-level computation, and inspectable derivations.**
178
178
 
179
179
  ### SPARQL
180
180
 
@@ -182,7 +182,7 @@ The positioning should remain balanced:
182
182
 
183
183
  SPARQL should be preferred when the task is fundamentally an interoperable RDF query or update.
184
184
 
185
- EyeLang is preferable when the task depends on:
185
+ Eyelang is preferable when the task depends on:
186
186
 
187
187
  - recursive rules beyond property-path navigation;
188
188
  - reusable predicates;
@@ -191,7 +191,7 @@ EyeLang is preferable when the task depends on:
191
191
  - rule-level composition; or
192
192
  - proof-producing derivations.
193
193
 
194
- The two approaches are complementary. RDF data queried by SPARQL can also be reasoned over by EyeLang, and EyeLang results can be serialized back into RDF.
194
+ The two approaches are complementary. RDF data queried by SPARQL can also be reasoned over by Eyelang, and Eyelang results can be serialized back into RDF.
195
195
 
196
196
  ### Full Prolog systems
197
197
 
@@ -205,7 +205,7 @@ They are preferable when an application needs:
205
205
  - mature debugging and development tools; or
206
206
  - a complete general-purpose Prolog platform.
207
207
 
208
- EyeLang does not need to compete on feature count. Its distinction is the deliberately small and visible combination of:
208
+ Eyelang does not need to compete on feature count. Its distinction is the deliberately small and visible combination of:
209
209
 
210
210
  - a tested ISO Prolog core profile;
211
211
  - lossless RDF 1.2 term and dataset handling;
@@ -213,7 +213,7 @@ EyeLang does not need to compete on feature count. Its distinction is the delibe
213
213
  - JavaScript and browser embedding; and
214
214
  - one implementation path across command-line, server, and browser use.
215
215
 
216
- A general Prolog system can provide RDF through libraries. EyeLang makes the Prolog–RDF boundary part of its central language and interoperability story.
216
+ A general Prolog system can provide RDF through libraries. Eyelang makes the Prolog–RDF boundary part of its central language and interoperability story.
217
217
 
218
218
  ### Custom RDF rule engines
219
219
 
@@ -221,33 +221,33 @@ Custom engines can optimize aggressively for one domain, data model, or deployme
221
221
 
222
222
  Their cost is often a proprietary semantic model.
223
223
 
224
- EyeLang avoids requiring users to adopt an isolated rule language. Its programs begin with recognizable Prolog, and its data begins with recognizable RDF. EyeLang-specific behavior remains concentrated in the bridge between them.
224
+ Eyelang avoids requiring users to adopt an isolated rule language. Its programs begin with recognizable Prolog, and its data begins with recognizable RDF. Eyelang-specific behavior remains concentrated in the bridge between them.
225
225
 
226
- ## What EyeLang should claim
226
+ ## What Eyelang should claim
227
227
 
228
228
  A concise positioning statement is:
229
229
 
230
- > **EyeLang combines a conformance-tested ISO Prolog profile with W3C RDF 1.2 linked data, explicit extensions, and inspectable proofs in a lightweight JavaScript implementation.**
230
+ > **Eyelang combines a conformance-tested ISO Prolog profile with W3C RDF 1.2 linked data, explicit extensions, and inspectable proofs in a lightweight JavaScript implementation.**
231
231
 
232
232
  A stronger comparative statement is:
233
233
 
234
- > **EyeLang arguably provides one of the strongest standards-based foundations for executable Web rules because it composes ISO Prolog and RDF 1.2 instead of introducing another complete rule language.**
234
+ > **Eyelang arguably provides one of the strongest standards-based foundations for executable Web rules because it composes ISO Prolog and RDF 1.2 instead of introducing another complete rule language.**
235
235
 
236
236
  Both claims require qualifications:
237
237
 
238
- - EyeLang implements a tested ISO compatibility profile; it is not formally certified by ISO.
238
+ - Eyelang implements a tested ISO compatibility profile; it is not formally certified by ISO.
239
239
  - RDF 1.2 is currently a W3C Candidate Recommendation.
240
240
  - SHACL 1.2 Rules is currently a W3C Working Draft.
241
- - EyeLang's Prolog–RDF integration profile is not itself an ISO or W3C standard.
242
- - Proof production is an EyeLang capability, not a feature inherited from ISO Prolog or RDF.
241
+ - Eyelang's Prolog–RDF integration profile is not itself an ISO or W3C standard.
242
+ - Proof production is an Eyelang capability, not a feature inherited from ISO Prolog or RDF.
243
243
 
244
244
  These qualifications make the standards argument more credible, not less.
245
245
 
246
- ## What EyeLang should not become
246
+ ## What Eyelang should not become
247
247
 
248
248
  The standards-based position creates a useful filter for future features.
249
249
 
250
- EyeLang should resist:
250
+ Eyelang should resist:
251
251
 
252
252
  - silently changing the meaning of ISO predicates;
253
253
  - adding advisory syntax that the runtime does not use;
@@ -266,7 +266,7 @@ Syntax or semantics outside those categories should need a strong justification.
266
266
 
267
267
  ## The durable idea
268
268
 
269
- EyeLang's most important contribution is not a novel rule syntax.
269
+ Eyelang's most important contribution is not a novel rule syntax.
270
270
 
271
271
  It is the proposition that Web rules can be built by joining two established foundations:
272
272
 
@@ -275,9 +275,9 @@ It is the proposition that Web rules can be built by joining two established fou
275
275
 
276
276
  RIF demonstrates the value of formal rule interchange. SHACL 1.2 Rules demonstrates renewed demand for standardized RDF-native inference. SPARQL demonstrates the value of a shared graph-query language.
277
277
 
278
- EyeLang occupies a complementary position: a small executable system in which standard Prolog rules operate directly over faithfully represented RDF data and produce answers that can be explained.
278
+ Eyelang occupies a complementary position: a small executable system in which standard Prolog rules operate directly over faithfully represented RDF data and produce answers that can be explained.
279
279
 
280
- That is a focused and defensible reason for EyeLang to exist.
280
+ That is a focused and defensible reason for Eyelang to exist.
281
281
 
282
282
  ## References
283
283
 
@@ -289,5 +289,5 @@ That is a focused and defensible reason for EyeLang to exist.
289
289
  - [SHACL 1.2 Core](https://www.w3.org/TR/shacl12-core/)
290
290
  - [Rule Interchange Format overview](https://www.w3.org/TR/rif-overview/)
291
291
  - [SPARQL 1.1 Query Language](https://www.w3.org/TR/sparql11-query/)
292
- - [The Art of EyeLang](the-art-of-eyelang.md)
293
- - [EyeLang README](README.md)
292
+ - [The Art of Eyelang](the-art-of-eyelang.md)
293
+ - [Eyelang README](README.md)