eyelang 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/docs/guide.md +230 -229
- package/docs/language-reference.md +169 -157
- package/examples/access-control-policy.eye +52 -0
- package/examples/ackermann.eye +47 -0
- package/examples/age.eye +26 -0
- package/examples/aliases-and-namespaces.eye +20 -0
- package/examples/alignment-demo.eye +44 -0
- package/examples/allen-interval-calculus.eye +64 -0
- package/examples/ancestor.eye +22 -0
- package/examples/animal.eye +21 -0
- package/examples/annotation.eye +34 -0
- package/examples/auroracare.eye +309 -0
- package/examples/backward.eye +11 -0
- package/examples/basic-monadic.eye +10032 -0
- package/examples/bayes-diagnosis.eye +108 -0
- package/examples/bayes-therapy.eye +189 -0
- package/examples/beam-deflection.eye +48 -0
- package/examples/binomial-vandermonde.eye +49 -0
- package/examples/blocks-world-planning.eye +77 -0
- package/examples/bmi.eye +232 -0
- package/examples/braking-safety-worlds.eye +69 -0
- package/examples/buck-converter-design.eye +83 -0
- package/examples/cache-performance.eye +56 -0
- package/examples/canary-release.eye +51 -0
- package/examples/cat-koko.eye +24 -0
- package/examples/catalan-convolution.eye +37 -0
- package/examples/chart-parser.eye +65 -0
- package/examples/clinical-trial-screening.eye +97 -0
- package/examples/collatz-1000.eye +45 -0
- package/examples/combinatorics-findall-sort.eye +38 -0
- package/examples/competitive-enzyme-kinetics.eye +78 -0
- package/examples/complex.eye +133 -0
- package/examples/composition-of-injective-functions-is-injective.eye +50 -0
- package/examples/context-association.eye +53 -0
- package/examples/context-schema-audit.eye +46 -0
- package/examples/continued-fraction-sqrt2.eye +36 -0
- package/examples/control-system.eye +76 -0
- package/examples/critical-path-schedule.eye +82 -0
- package/examples/cyclic-path.eye +18 -0
- package/examples/d3-group.eye +99 -0
- package/examples/dairy-energy-balance.eye +66 -0
- package/examples/data-negotiation.eye +38 -0
- package/examples/deep-taxonomy-10.eye +115 -0
- package/examples/deep-taxonomy-100.eye +385 -0
- package/examples/deep-taxonomy-1000.eye +3085 -0
- package/examples/deep-taxonomy-10000.eye +30094 -0
- package/examples/deep-taxonomy-100000.eye +300184 -0
- package/examples/delfour.eye +281 -0
- package/examples/deontic-logic.eye +52 -0
- package/examples/derived-backward-rule.eye +30 -0
- package/examples/derived-rule.eye +27 -0
- package/examples/diamond-property.eye +38 -0
- package/examples/dijkstra-findall-sort.eye +43 -0
- package/examples/dijkstra-risk-path.eye +87 -0
- package/examples/dijkstra.eye +50 -0
- package/examples/dining-philosophers.eye +147 -0
- package/examples/dog.eye +25 -0
- package/examples/dpv-odrl-purpose-mapping.eye +48 -0
- package/examples/drone-corridor-planner.eye +48 -0
- package/examples/easter-computus.eye +88 -0
- package/examples/electrical-rc-filter.eye +37 -0
- package/examples/epidemic-policy.eye +66 -0
- package/examples/equivalence-classes-overlap-implies-same-class.eye +27 -0
- package/examples/eulerian-path.eye +87 -0
- package/examples/ev-range-worlds.eye +87 -0
- package/examples/existential-rule.eye +21 -0
- package/examples/exoplanet-validation-worlds.eye +94 -0
- package/examples/expression-eval.eye +45 -0
- package/examples/family-cousins.eye +67 -0
- package/examples/fastpow.eye +61 -0
- package/examples/fft8-numeric.eye +85 -0
- package/examples/fibonacci.eye +60 -0
- package/examples/field-nitrogen-balance.eye +73 -0
- package/examples/flandor.eye +296 -0
- package/examples/floating-point.eye +28 -0
- package/examples/four-color-map.eye +133 -0
- package/examples/fundamental-theorem-arithmetic.eye +119 -0
- package/examples/gd-step-certified.eye +162 -0
- package/examples/gdpr-compliance.eye +69 -0
- package/examples/good-cobbler.eye +16 -0
- package/examples/gps.eye +146 -0
- package/examples/graph-reachability.eye +33 -0
- package/examples/graph.eye +35 -0
- package/examples/gray-code-counter.eye +47 -0
- package/examples/greatest-lower-bound-uniqueness.eye +30 -0
- package/examples/group-inverse-uniqueness.eye +36 -0
- package/examples/hamiltonian-path.eye +51 -0
- package/examples/hamming-code.eye +109 -0
- package/examples/hanoi.eye +19 -0
- package/examples/heat-loss.eye +56 -0
- package/examples/heron-theorem.eye +42 -0
- package/examples/ideal-gas-law.eye +39 -0
- package/examples/illegitimate-reasoning.eye +88 -0
- package/examples/integer-partitions.eye +35 -0
- package/examples/intuitionistic-logic-kripke.eye +69 -0
- package/examples/job-shop-scheduling.eye +48 -0
- package/examples/knapsack-optimization.eye +46 -0
- package/examples/knowledge-engineering-alignment-flow.eye +46 -0
- package/examples/law-of-cosines.eye +37 -0
- package/examples/least-squares-regression.eye +85 -0
- package/examples/linear-logic-resources.eye +51 -0
- package/examples/list-collection.eye +35 -0
- package/examples/lldm.eye +80 -0
- package/examples/manufacturing-quality-control.eye +73 -0
- package/examples/matrix-chain-order.eye +79 -0
- package/examples/microgrid-dispatch.eye +89 -0
- package/examples/missionaries-cannibals.eye +53 -0
- package/examples/modal-logic-kripke.eye +45 -0
- package/examples/modular-exponentiation.eye +35 -0
- package/examples/monkey-bananas.eye +45 -0
- package/examples/n-queens-8.eye +35 -0
- package/examples/network-sla.eye +48 -0
- package/examples/newton-raphson.eye +48 -0
- package/examples/nixon-diamond.eye +37 -0
- package/examples/observability-log-correlation.eye +40 -0
- package/examples/odrl-dpv-fpv-trust-flow.eye +51 -0
- package/examples/odrl-dpv-healthcare-risk-ranked.eye +270 -0
- package/examples/odrl-dpv-risk-ranked.eye +320 -0
- package/examples/orbital-transfer-design.eye +116 -0
- package/examples/path-discovery.eye +45013 -0
- package/examples/peano-arithmetic.eye +33 -0
- package/examples/peasant.eye +29 -0
- package/examples/pell-equation.eye +34 -0
- package/examples/pendulum-period.eye +50 -0
- package/examples/polynomial.eye +124 -0
- package/examples/proof/access-control-policy.eye +158 -0
- package/examples/proof/age.eye +71 -0
- package/examples/proof/aliases-and-namespaces.eye +78 -0
- package/examples/proof/ancestor.eye +140 -0
- package/examples/proof/animal.eye +68 -0
- package/examples/proof/annotation.eye +80 -0
- package/examples/proof/backward.eye +22 -0
- package/examples/proof/bayes-diagnosis.eye +208 -0
- package/examples/proof/beam-deflection.eye +227 -0
- package/examples/proof/cache-performance.eye +310 -0
- package/examples/proof/canary-release.eye +172 -0
- package/examples/proof/cat-koko.eye +86 -0
- package/examples/proof/chart-parser.eye +474 -0
- package/examples/proof/clinical-trial-screening.eye +389 -0
- package/examples/proof/composition-of-injective-functions-is-injective.eye +258 -0
- package/examples/proof/context-association.eye +78 -0
- package/examples/proof/data-negotiation.eye +76 -0
- package/examples/proof/deontic-logic.eye +109 -0
- package/examples/proof/derived-backward-rule.eye +74 -0
- package/examples/proof/derived-rule.eye +43 -0
- package/examples/proof/diamond-property.eye +307 -0
- package/examples/proof/dog.eye +31 -0
- package/examples/proof/dpv-odrl-purpose-mapping.eye +348 -0
- package/examples/proof/electrical-rc-filter.eye +105 -0
- package/examples/proof/epidemic-policy.eye +774 -0
- package/examples/proof/equivalence-classes-overlap-implies-same-class.eye +1098 -0
- package/examples/proof/existential-rule.eye +40 -0
- package/examples/proof/expression-eval.eye +105 -0
- package/examples/proof/floating-point.eye +160 -0
- package/examples/proof/gdpr-compliance.eye +199 -0
- package/examples/proof/good-cobbler.eye +16 -0
- package/examples/proof/graph-reachability.eye +151 -0
- package/examples/proof/greatest-lower-bound-uniqueness.eye +150 -0
- package/examples/proof/group-inverse-uniqueness.eye +84 -0
- package/examples/proof/hanoi.eye +185 -0
- package/examples/proof/heat-loss.eye +228 -0
- package/examples/proof/ideal-gas-law.eye +151 -0
- package/examples/proof/intuitionistic-logic-kripke.eye +133 -0
- package/examples/proof/linear-logic-resources.eye +205 -0
- package/examples/proof/list-collection.eye +52 -0
- package/examples/proof/modal-logic-kripke.eye +125 -0
- package/examples/proof/nixon-diamond.eye +181 -0
- package/examples/proof/proof-contrapositive.eye +78 -0
- package/examples/proof/reusable-builtins.eye +124 -0
- package/examples/proof/security-incident-correlation.eye +270 -0
- package/examples/proof/socket-age.eye +32 -0
- package/examples/proof/socket-family.eye +59 -0
- package/examples/proof/socrates.eye +38 -0
- package/examples/proof/term-tools.eye +95 -0
- package/examples/proof/witch.eye +216 -0
- package/examples/proof-contrapositive.eye +27 -0
- package/examples/quadratic-formula.eye +56 -0
- package/examples/radioactive-decay.eye +58 -0
- package/examples/reusable-builtins.eye +36 -0
- package/examples/riemann-hypothesis.eye +110 -0
- package/examples/security-incident-correlation.eye +69 -0
- package/examples/send-more-money.eye +71 -0
- package/examples/service-impact.eye +41 -0
- package/examples/sieve.eye +20 -0
- package/examples/skolem-functions.eye +52 -0
- package/examples/socket-age.eye +39 -0
- package/examples/socket-family.eye +28 -0
- package/examples/socrates.eye +19 -0
- package/examples/stable-marriage.eye +92 -0
- package/examples/statistics-summary.eye +56 -0
- package/examples/stirling-bell-numbers.eye +32 -0
- package/examples/sudoku-4x4.eye +54 -0
- package/examples/superdense-coding.eye +84 -0
- package/examples/term-tools.eye +32 -0
- package/examples/totient-summatory.eye +33 -0
- package/examples/trust-flow-provenance-threshold.eye +47 -0
- package/examples/turing.eye +69 -0
- package/examples/vector-similarity.eye +60 -0
- package/examples/vulnerability-impact.eye +69 -0
- package/examples/web-names.eye +83 -0
- package/examples/weighted-interval-scheduling.eye +81 -0
- package/examples/witch.eye +38 -0
- package/examples/wolf-goat-cabbage.eye +56 -0
- package/examples/zebra.eye +45 -0
- package/index.d.ts +1 -1
- package/package.json +2 -2
- package/playground.html +10 -10
- package/src/cli.js +2 -2
- package/src/explain.js +1 -1
- package/src/parser.js +37 -7
- package/src/program.js +3 -3
- package/src/solver.js +2 -2
- package/src/term.js +9 -0
- package/test/conformance/README.md +2 -2
- package/test/conformance/cases/001_fact_output.eye +4 -0
- package/test/conformance/cases/002_rule_recursion.eye +7 -0
- package/test/conformance/cases/002_rule_recursion.query +1 -1
- package/test/conformance/cases/003_terms_and_readback.eye +16 -0
- package/test/conformance/cases/003_terms_and_readback.query +1 -1
- package/test/conformance/cases/004_conjunction_and_parentheses.eye +5 -0
- package/test/conformance/cases/004_conjunction_and_parentheses.query +1 -1
- package/test/conformance/cases/005_list_deconstruction.eye +6 -0
- package/test/conformance/cases/005_list_deconstruction.query +1 -1
- package/test/conformance/cases/006_comma_formula_data.eye +4 -0
- package/test/conformance/cases/006_comma_formula_data.query +1 -1
- package/test/conformance/cases/007_anonymous_variables.eye +5 -0
- package/test/conformance/cases/007_anonymous_variables.query +1 -1
- package/test/conformance/cases/008_graphic_atoms.eye +6 -0
- package/test/conformance/cases/008_graphic_atoms.query +1 -1
- package/test/conformance/cases/009_comments_and_whitespace.eye +5 -0
- package/test/conformance/cases/009_comments_and_whitespace.query +1 -1
- package/test/conformance/cases/010_variable_scope_and_reuse.eye +8 -0
- package/test/conformance/cases/010_variable_scope_and_reuse.query +1 -1
- package/test/conformance/cases/011_predicate_arity.eye +6 -0
- package/test/conformance/cases/011_predicate_arity.query +1 -1
- package/test/conformance/cases/012_nested_compound_unification.eye +5 -0
- package/test/conformance/cases/012_nested_compound_unification.query +1 -1
- package/test/conformance/cases/013_multiple_clauses_order.eye +6 -0
- package/test/conformance/cases/013_multiple_clauses_order.query +1 -1
- package/test/conformance/cases/014_failure_filters_answers.eye +7 -0
- package/test/conformance/cases/014_failure_filters_answers.query +1 -1
- package/test/conformance/cases/015_improper_list_unification.eye +6 -0
- package/test/conformance/cases/015_improper_list_unification.query +1 -1
- package/test/conformance/cases/016_arity_zero_atom.eye +4 -0
- package/test/conformance/cases/017_three_step_recursion.eye +8 -0
- package/test/conformance/cases/017_three_step_recursion.query +1 -1
- package/test/conformance/cases/018_quoted_atom_readback.eye +6 -0
- package/test/conformance/cases/018_quoted_atom_readback.query +1 -1
- package/test/conformance/cases/019_parenthesized_three_conjuncts.eye +7 -0
- package/test/conformance/cases/019_parenthesized_three_conjuncts.query +1 -1
- package/test/conformance/cases/020_nested_list_terms.eye +5 -0
- package/test/conformance/cases/020_nested_list_terms.query +1 -1
- package/test/conformance/cases/021_repeated_variable_head.eye +7 -0
- package/test/conformance/cases/022_rule_head_structure.eye +5 -0
- package/test/conformance/cases/023_quoted_escapes_readback.eye +5 -0
- package/test/conformance/cases/024_numeric_literal_readback.eye +6 -0
- package/test/conformance/cases/025_body_parentheses_with_formula_data.eye +5 -0
- package/test/conformance/cases/026_question_underscore_named_variable_reuse.eye +5 -0
- package/test/conformance/cases/027_default_derived_output.eye +5 -0
- package/test/conformance/cases/028_materialize_focus.eye +5 -0
- package/test/conformance/cases/029_arithmetic_and_comparison.eye +11 -0
- package/test/conformance/cases/029_arithmetic_and_comparison.query +1 -1
- package/test/conformance/cases/030_strings_and_atoms.eye +4 -0
- package/test/conformance/cases/030_strings_and_atoms.query +1 -1
- package/test/conformance/cases/031_lists_aggregation_ordering.eye +10 -0
- package/test/conformance/cases/031_lists_aggregation_ordering.query +1 -1
- package/test/conformance/cases/032_holds_parts.eye +4 -0
- package/test/conformance/cases/033_negation_once_generators.eye +7 -0
- package/test/conformance/cases/033_negation_once_generators.query +1 -1
- package/test/conformance/cases/034_equality_and_inequality.eye +6 -0
- package/test/conformance/cases/034_equality_and_inequality.query +1 -1
- package/test/conformance/cases/035_list_relations.eye +5 -0
- package/test/conformance/cases/035_list_relations.query +1 -1
- package/test/conformance/cases/036_append_splits.eye +3 -0
- package/test/conformance/cases/036_append_splits.query +1 -1
- package/test/conformance/cases/037_matching_and_comparison.query +1 -1
- package/test/conformance/cases/038_table_declaration.eye +8 -0
- package/test/conformance/cases/038_table_declaration.query +1 -0
- package/test/conformance/cases/039_numeric_functions.eye +9 -0
- package/test/conformance/cases/039_numeric_functions.query +1 -1
- package/test/conformance/cases/040_between_enumeration.eye +3 -0
- package/test/conformance/cases/040_between_enumeration.query +1 -1
- package/test/conformance/cases/041_smallest_divisor.eye +3 -0
- package/test/conformance/cases/041_smallest_divisor.query +1 -1
- package/test/conformance/cases/042_negation_filter.eye +7 -0
- package/test/conformance/cases/042_negation_filter.query +1 -1
- package/test/conformance/cases/043_once_user_predicate.eye +5 -0
- package/test/conformance/cases/043_once_user_predicate.query +1 -1
- package/test/conformance/cases/044_findall_user_goal.eye +6 -0
- package/test/conformance/cases/044_findall_user_goal.query +1 -1
- package/test/conformance/cases/045_sort_deduplicates_atoms.eye +3 -0
- package/test/conformance/cases/045_sort_deduplicates_atoms.query +1 -1
- package/test/conformance/cases/046_append_bound_prefix_suffix.eye +4 -0
- package/test/conformance/cases/046_append_bound_prefix_suffix.query +1 -1
- package/test/conformance/cases/047_nth0_index_generation.eye +3 -0
- package/test/conformance/cases/047_nth0_index_generation.query +1 -1
- package/test/conformance/cases/048_set_nth0_edges.eye +4 -0
- package/test/conformance/cases/048_set_nth0_edges.query +1 -1
- package/test/conformance/cases/049_select_duplicate_occurrences.eye +3 -0
- package/test/conformance/cases/049_select_duplicate_occurrences.query +1 -1
- package/test/conformance/cases/050_not_member_filter.eye +6 -0
- package/test/conformance/cases/050_not_member_filter.query +1 -1
- package/test/conformance/cases/051_nested_holds_parts.eye +4 -0
- package/test/conformance/cases/052_holds_member.eye +3 -0
- package/test/conformance/cases/053_materialize_excludes_source_fact.eye +6 -0
- package/test/conformance/cases/054_numeric_and_lexical_comparison.query +1 -1
- package/test/conformance/cases/055_string_matching_filters.eye +6 -0
- package/test/conformance/cases/055_string_matching_filters.query +1 -1
- package/test/conformance/cases/056_string_and_atom_concat.eye +3 -0
- package/test/conformance/cases/056_string_and_atom_concat.query +1 -1
- package/test/conformance/cases/057_countall_empty_and_nonempty.eye +4 -0
- package/test/conformance/cases/057_countall_empty_and_nonempty.query +1 -1
- package/test/conformance/cases/058_sumall_numeric_template.eye +5 -0
- package/test/conformance/cases/058_sumall_numeric_template.query +1 -1
- package/test/conformance/cases/059_aggregate_min_template.eye +5 -0
- package/test/conformance/cases/059_aggregate_min_template.query +1 -1
- package/test/conformance/cases/060_aggregate_max_compound_key.eye +5 -0
- package/test/conformance/cases/060_aggregate_max_compound_key.query +1 -1
- package/test/conformance/cases/061_date_difference.eye +4 -0
- package/test/conformance/cases/062_reusable_numeric_builtins.eye +10 -0
- package/test/conformance/cases/063_reusable_list_builtins.eye +11 -0
- package/test/conformance/cases/064_reusable_string_builtins.eye +12 -0
- package/test/conformance/cases/065_reusable_term_control_builtins.eye +11 -0
- package/test/conformance/cases/066_numeric_edges.eye +14 -0
- package/test/conformance/cases/067_list_edges.eye +10 -0
- package/test/conformance/cases/068_list_generation_order.eye +7 -0
- package/test/conformance/cases/069_list_summaries_and_sets.eye +9 -0
- package/test/conformance/cases/070_matches_named_captures.eye +13 -0
- package/test/conformance/cases/071_string_edges.eye +10 -0
- package/test/conformance/cases/072_string_conversions.eye +10 -0
- package/test/conformance/cases/073_term_introspection_edges.eye +10 -0
- package/test/conformance/cases/074_forall_edges.eye +10 -0
- package/test/conformance/cases/075_aggregation_edges.eye +12 -0
- package/test/conformance/cases/076_composed_reusable_builtins.eye +8 -0
- package/test/conformance/cases/077_recursive_path_with_lists.eye +10 -0
- package/test/conformance/cases/078_mutual_recursion_with_arithmetic.eye +7 -0
- package/test/conformance/cases/079_big_integer_arithmetic.eye +8 -0
- package/test/conformance/cases/080_rounding_modes.eye +10 -0
- package/test/conformance/cases/081_zero_safe_numeric_functions.eye +9 -0
- package/test/conformance/cases/083_between_modes_and_empty_ranges.eye +8 -0
- package/test/conformance/cases/084_append_and_select_composition.eye +7 -0
- package/test/conformance/cases/085_nth_and_update_edges.eye +8 -0
- package/test/conformance/cases/086_slicing_pipeline.eye +10 -0
- package/test/conformance/cases/087_sort_reverse_length.eye +8 -0
- package/test/conformance/cases/088_list_summaries_failures.eye +8 -0
- package/test/conformance/cases/089_string_split_join_pipeline.eye +7 -0
- package/test/conformance/cases/090_string_substring_replace_edges.eye +9 -0
- package/test/conformance/cases/091_string_case_and_trim.eye +7 -0
- package/test/conformance/cases/092_scalar_string_conversions.eye +9 -0
- package/test/conformance/cases/093_regex_named_captures_context.eye +8 -0
- package/test/conformance/cases/094_context_holds_enumeration.eye +7 -0
- package/test/conformance/cases/095_term_introspection_roundtrip.eye +8 -0
- package/test/conformance/cases/096_functor_scalar_edges.eye +8 -0
- package/test/conformance/cases/097_control_negation_once_forall.eye +13 -0
- package/test/conformance/cases/098_aggregation_nested_templates.eye +11 -0
- package/test/conformance/cases/099_materialize_multiple_arities.eye +8 -0
- package/test/conformance/cases/100_reusable_builtin_workflow.eye +10 -0
- package/test/conformance/cases/101_question_mark_variables.eye +7 -0
- package/test/conformance/cases/102_table_declaration.eye +11 -0
- package/test/conformance/cases/103_angle_iri_atoms.eye +7 -0
- package/test/conformance/expected/101_question_mark_variables.eye +3 -0
- package/test/conformance/expected/102_table_declaration.eye +6 -0
- package/test/conformance/expected/103_angle_iri_atoms.eye +3 -0
- package/test/run-conformance.mjs +4 -4
- package/test/run-examples.mjs +51 -51
- package/test/run-regression.mjs +178 -74
- package/examples/access-control-policy.pl +0 -52
- package/examples/ackermann.pl +0 -47
- package/examples/age.pl +0 -26
- package/examples/aliases-and-namespaces.pl +0 -20
- package/examples/alignment-demo.pl +0 -44
- package/examples/allen-interval-calculus.pl +0 -64
- package/examples/ancestor.pl +0 -22
- package/examples/animal.pl +0 -21
- package/examples/annotation.pl +0 -34
- package/examples/auroracare.pl +0 -309
- package/examples/backward.pl +0 -11
- package/examples/basic-monadic.pl +0 -10032
- package/examples/bayes-diagnosis.pl +0 -108
- package/examples/bayes-therapy.pl +0 -189
- package/examples/beam-deflection.pl +0 -48
- package/examples/binomial-vandermonde.pl +0 -49
- package/examples/blocks-world-planning.pl +0 -77
- package/examples/bmi.pl +0 -232
- package/examples/braking-safety-worlds.pl +0 -69
- package/examples/buck-converter-design.pl +0 -83
- package/examples/cache-performance.pl +0 -56
- package/examples/canary-release.pl +0 -51
- package/examples/cat-koko.pl +0 -24
- package/examples/catalan-convolution.pl +0 -37
- package/examples/chart-parser.pl +0 -65
- package/examples/clinical-trial-screening.pl +0 -97
- package/examples/collatz-1000.pl +0 -45
- package/examples/combinatorics-findall-sort.pl +0 -38
- package/examples/competitive-enzyme-kinetics.pl +0 -78
- package/examples/complex.pl +0 -133
- package/examples/composition-of-injective-functions-is-injective.pl +0 -50
- package/examples/context-association.pl +0 -53
- package/examples/context-schema-audit.pl +0 -46
- package/examples/continued-fraction-sqrt2.pl +0 -36
- package/examples/control-system.pl +0 -76
- package/examples/critical-path-schedule.pl +0 -82
- package/examples/cyclic-path.pl +0 -18
- package/examples/d3-group.pl +0 -99
- package/examples/dairy-energy-balance.pl +0 -66
- package/examples/data-negotiation.pl +0 -38
- package/examples/deep-taxonomy-10.pl +0 -115
- package/examples/deep-taxonomy-100.pl +0 -385
- package/examples/deep-taxonomy-1000.pl +0 -3085
- package/examples/deep-taxonomy-10000.pl +0 -30094
- package/examples/deep-taxonomy-100000.pl +0 -300184
- package/examples/delfour.pl +0 -281
- package/examples/deontic-logic.pl +0 -52
- package/examples/derived-backward-rule.pl +0 -30
- package/examples/derived-rule.pl +0 -27
- package/examples/diamond-property.pl +0 -38
- package/examples/dijkstra-findall-sort.pl +0 -43
- package/examples/dijkstra-risk-path.pl +0 -87
- package/examples/dijkstra.pl +0 -50
- package/examples/dining-philosophers.pl +0 -147
- package/examples/dog.pl +0 -25
- package/examples/dpv-odrl-purpose-mapping.pl +0 -48
- package/examples/drone-corridor-planner.pl +0 -48
- package/examples/easter-computus.pl +0 -88
- package/examples/electrical-rc-filter.pl +0 -37
- package/examples/epidemic-policy.pl +0 -66
- package/examples/equivalence-classes-overlap-implies-same-class.pl +0 -27
- package/examples/eulerian-path.pl +0 -87
- package/examples/ev-range-worlds.pl +0 -87
- package/examples/existential-rule.pl +0 -21
- package/examples/exoplanet-validation-worlds.pl +0 -94
- package/examples/expression-eval.pl +0 -45
- package/examples/family-cousins.pl +0 -67
- package/examples/fastpow.pl +0 -61
- package/examples/fft8-numeric.pl +0 -85
- package/examples/fibonacci.pl +0 -60
- package/examples/field-nitrogen-balance.pl +0 -73
- package/examples/flandor.pl +0 -296
- package/examples/floating-point.pl +0 -28
- package/examples/four-color-map.pl +0 -133
- package/examples/fundamental-theorem-arithmetic.pl +0 -119
- package/examples/gd-step-certified.pl +0 -162
- package/examples/gdpr-compliance.pl +0 -69
- package/examples/good-cobbler.pl +0 -16
- package/examples/gps.pl +0 -146
- package/examples/graph-reachability.pl +0 -33
- package/examples/graph.pl +0 -35
- package/examples/gray-code-counter.pl +0 -47
- package/examples/greatest-lower-bound-uniqueness.pl +0 -30
- package/examples/group-inverse-uniqueness.pl +0 -36
- package/examples/hamiltonian-path.pl +0 -51
- package/examples/hamming-code.pl +0 -109
- package/examples/hanoi.pl +0 -19
- package/examples/heat-loss.pl +0 -56
- package/examples/heron-theorem.pl +0 -42
- package/examples/ideal-gas-law.pl +0 -39
- package/examples/illegitimate-reasoning.pl +0 -88
- package/examples/integer-partitions.pl +0 -35
- package/examples/intuitionistic-logic-kripke.pl +0 -69
- package/examples/job-shop-scheduling.pl +0 -48
- package/examples/knapsack-optimization.pl +0 -46
- package/examples/knowledge-engineering-alignment-flow.pl +0 -46
- package/examples/law-of-cosines.pl +0 -37
- package/examples/least-squares-regression.pl +0 -85
- package/examples/linear-logic-resources.pl +0 -51
- package/examples/list-collection.pl +0 -35
- package/examples/lldm.pl +0 -80
- package/examples/manufacturing-quality-control.pl +0 -73
- package/examples/matrix-chain-order.pl +0 -79
- package/examples/microgrid-dispatch.pl +0 -89
- package/examples/missionaries-cannibals.pl +0 -53
- package/examples/modal-logic-kripke.pl +0 -45
- package/examples/modular-exponentiation.pl +0 -35
- package/examples/monkey-bananas.pl +0 -45
- package/examples/n-queens-8.pl +0 -35
- package/examples/network-sla.pl +0 -48
- package/examples/newton-raphson.pl +0 -48
- package/examples/nixon-diamond.pl +0 -37
- package/examples/observability-log-correlation.pl +0 -40
- package/examples/odrl-dpv-fpv-trust-flow.pl +0 -51
- package/examples/odrl-dpv-healthcare-risk-ranked.pl +0 -270
- package/examples/odrl-dpv-risk-ranked.pl +0 -320
- package/examples/orbital-transfer-design.pl +0 -116
- package/examples/path-discovery.pl +0 -45013
- package/examples/peano-arithmetic.pl +0 -33
- package/examples/peasant.pl +0 -29
- package/examples/pell-equation.pl +0 -34
- package/examples/pendulum-period.pl +0 -50
- package/examples/polynomial.pl +0 -124
- package/examples/proof/access-control-policy.pl +0 -158
- package/examples/proof/age.pl +0 -71
- package/examples/proof/aliases-and-namespaces.pl +0 -78
- package/examples/proof/ancestor.pl +0 -140
- package/examples/proof/animal.pl +0 -68
- package/examples/proof/annotation.pl +0 -80
- package/examples/proof/backward.pl +0 -22
- package/examples/proof/bayes-diagnosis.pl +0 -208
- package/examples/proof/beam-deflection.pl +0 -227
- package/examples/proof/cache-performance.pl +0 -310
- package/examples/proof/canary-release.pl +0 -172
- package/examples/proof/cat-koko.pl +0 -86
- package/examples/proof/chart-parser.pl +0 -474
- package/examples/proof/clinical-trial-screening.pl +0 -389
- package/examples/proof/composition-of-injective-functions-is-injective.pl +0 -258
- package/examples/proof/context-association.pl +0 -78
- package/examples/proof/data-negotiation.pl +0 -76
- package/examples/proof/deontic-logic.pl +0 -109
- package/examples/proof/derived-backward-rule.pl +0 -74
- package/examples/proof/derived-rule.pl +0 -43
- package/examples/proof/diamond-property.pl +0 -307
- package/examples/proof/dog.pl +0 -31
- package/examples/proof/dpv-odrl-purpose-mapping.pl +0 -348
- package/examples/proof/electrical-rc-filter.pl +0 -105
- package/examples/proof/epidemic-policy.pl +0 -774
- package/examples/proof/equivalence-classes-overlap-implies-same-class.pl +0 -1098
- package/examples/proof/existential-rule.pl +0 -40
- package/examples/proof/expression-eval.pl +0 -105
- package/examples/proof/floating-point.pl +0 -160
- package/examples/proof/gdpr-compliance.pl +0 -199
- package/examples/proof/good-cobbler.pl +0 -16
- package/examples/proof/graph-reachability.pl +0 -151
- package/examples/proof/greatest-lower-bound-uniqueness.pl +0 -150
- package/examples/proof/group-inverse-uniqueness.pl +0 -84
- package/examples/proof/hanoi.pl +0 -185
- package/examples/proof/heat-loss.pl +0 -228
- package/examples/proof/ideal-gas-law.pl +0 -151
- package/examples/proof/intuitionistic-logic-kripke.pl +0 -133
- package/examples/proof/linear-logic-resources.pl +0 -205
- package/examples/proof/list-collection.pl +0 -52
- package/examples/proof/modal-logic-kripke.pl +0 -125
- package/examples/proof/nixon-diamond.pl +0 -181
- package/examples/proof/proof-contrapositive.pl +0 -78
- package/examples/proof/reusable-builtins.pl +0 -124
- package/examples/proof/security-incident-correlation.pl +0 -270
- package/examples/proof/socket-age.pl +0 -32
- package/examples/proof/socket-family.pl +0 -59
- package/examples/proof/socrates.pl +0 -38
- package/examples/proof/term-tools.pl +0 -95
- package/examples/proof/witch.pl +0 -216
- package/examples/proof-contrapositive.pl +0 -27
- package/examples/quadratic-formula.pl +0 -56
- package/examples/radioactive-decay.pl +0 -58
- package/examples/reusable-builtins.pl +0 -36
- package/examples/riemann-hypothesis.pl +0 -110
- package/examples/security-incident-correlation.pl +0 -69
- package/examples/send-more-money.pl +0 -71
- package/examples/service-impact.pl +0 -41
- package/examples/sieve.pl +0 -20
- package/examples/skolem-functions.pl +0 -52
- package/examples/socket-age.pl +0 -39
- package/examples/socket-family.pl +0 -28
- package/examples/socrates.pl +0 -19
- package/examples/stable-marriage.pl +0 -92
- package/examples/statistics-summary.pl +0 -56
- package/examples/stirling-bell-numbers.pl +0 -32
- package/examples/sudoku-4x4.pl +0 -54
- package/examples/superdense-coding.pl +0 -84
- package/examples/term-tools.pl +0 -32
- package/examples/totient-summatory.pl +0 -33
- package/examples/trust-flow-provenance-threshold.pl +0 -47
- package/examples/turing.pl +0 -69
- package/examples/vector-similarity.pl +0 -60
- package/examples/vulnerability-impact.pl +0 -69
- package/examples/web-names.pl +0 -83
- package/examples/weighted-interval-scheduling.pl +0 -81
- package/examples/witch.pl +0 -38
- package/examples/wolf-goat-cabbage.pl +0 -56
- package/examples/zebra.pl +0 -45
- package/test/conformance/cases/001_fact_output.pl +0 -4
- package/test/conformance/cases/002_rule_recursion.pl +0 -7
- package/test/conformance/cases/003_terms_and_readback.pl +0 -16
- package/test/conformance/cases/004_conjunction_and_parentheses.pl +0 -5
- package/test/conformance/cases/005_list_deconstruction.pl +0 -6
- package/test/conformance/cases/006_comma_formula_data.pl +0 -4
- package/test/conformance/cases/007_anonymous_variables.pl +0 -5
- package/test/conformance/cases/008_graphic_atoms.pl +0 -6
- package/test/conformance/cases/009_comments_and_whitespace.pl +0 -5
- package/test/conformance/cases/010_variable_scope_and_reuse.pl +0 -8
- package/test/conformance/cases/011_predicate_arity.pl +0 -6
- package/test/conformance/cases/012_nested_compound_unification.pl +0 -5
- package/test/conformance/cases/013_multiple_clauses_order.pl +0 -6
- package/test/conformance/cases/014_failure_filters_answers.pl +0 -7
- package/test/conformance/cases/015_improper_list_unification.pl +0 -6
- package/test/conformance/cases/016_arity_zero_atom.pl +0 -4
- package/test/conformance/cases/017_three_step_recursion.pl +0 -8
- package/test/conformance/cases/018_quoted_atom_readback.pl +0 -6
- package/test/conformance/cases/019_parenthesized_three_conjuncts.pl +0 -7
- package/test/conformance/cases/020_nested_list_terms.pl +0 -5
- package/test/conformance/cases/021_repeated_variable_head.pl +0 -7
- package/test/conformance/cases/022_rule_head_structure.pl +0 -5
- package/test/conformance/cases/023_quoted_escapes_readback.pl +0 -5
- package/test/conformance/cases/024_numeric_literal_readback.pl +0 -6
- package/test/conformance/cases/025_body_parentheses_with_formula_data.pl +0 -5
- package/test/conformance/cases/026_underscore_named_variable_reuse.pl +0 -5
- package/test/conformance/cases/027_default_derived_output.pl +0 -5
- package/test/conformance/cases/028_materialize_focus.pl +0 -5
- package/test/conformance/cases/029_arithmetic_and_comparison.pl +0 -11
- package/test/conformance/cases/030_strings_and_atoms.pl +0 -4
- package/test/conformance/cases/031_lists_aggregation_ordering.pl +0 -10
- package/test/conformance/cases/032_holds_parts.pl +0 -4
- package/test/conformance/cases/033_negation_once_generators.pl +0 -7
- package/test/conformance/cases/034_equality_and_inequality.pl +0 -6
- package/test/conformance/cases/035_list_relations.pl +0 -5
- package/test/conformance/cases/036_append_splits.pl +0 -3
- package/test/conformance/cases/038_memoize_declaration.pl +0 -8
- package/test/conformance/cases/038_memoize_declaration.query +0 -1
- package/test/conformance/cases/039_numeric_functions.pl +0 -9
- package/test/conformance/cases/040_between_enumeration.pl +0 -3
- package/test/conformance/cases/041_smallest_divisor.pl +0 -3
- package/test/conformance/cases/042_negation_filter.pl +0 -7
- package/test/conformance/cases/043_once_user_predicate.pl +0 -5
- package/test/conformance/cases/044_findall_user_goal.pl +0 -6
- package/test/conformance/cases/045_sort_deduplicates_atoms.pl +0 -3
- package/test/conformance/cases/046_append_bound_prefix_suffix.pl +0 -4
- package/test/conformance/cases/047_nth0_index_generation.pl +0 -3
- package/test/conformance/cases/048_set_nth0_edges.pl +0 -4
- package/test/conformance/cases/049_select_duplicate_occurrences.pl +0 -3
- package/test/conformance/cases/050_not_member_filter.pl +0 -6
- package/test/conformance/cases/051_nested_holds_parts.pl +0 -4
- package/test/conformance/cases/052_holds_member.pl +0 -3
- package/test/conformance/cases/053_materialize_excludes_source_fact.pl +0 -6
- package/test/conformance/cases/055_string_matching_filters.pl +0 -6
- package/test/conformance/cases/056_string_and_atom_concat.pl +0 -3
- package/test/conformance/cases/057_countall_empty_and_nonempty.pl +0 -4
- package/test/conformance/cases/058_sumall_numeric_template.pl +0 -5
- package/test/conformance/cases/059_aggregate_min_template.pl +0 -5
- package/test/conformance/cases/060_aggregate_max_compound_key.pl +0 -5
- package/test/conformance/cases/061_date_difference.pl +0 -4
- package/test/conformance/cases/062_reusable_numeric_builtins.pl +0 -10
- package/test/conformance/cases/063_reusable_list_builtins.pl +0 -11
- package/test/conformance/cases/064_reusable_string_builtins.pl +0 -12
- package/test/conformance/cases/065_reusable_term_control_builtins.pl +0 -11
- package/test/conformance/cases/066_numeric_edges.pl +0 -14
- package/test/conformance/cases/067_list_edges.pl +0 -10
- package/test/conformance/cases/068_list_generation_order.pl +0 -7
- package/test/conformance/cases/069_list_summaries_and_sets.pl +0 -9
- package/test/conformance/cases/070_matches_named_captures.pl +0 -13
- package/test/conformance/cases/071_string_edges.pl +0 -10
- package/test/conformance/cases/072_string_conversions.pl +0 -10
- package/test/conformance/cases/073_term_introspection_edges.pl +0 -10
- package/test/conformance/cases/074_forall_edges.pl +0 -10
- package/test/conformance/cases/075_aggregation_edges.pl +0 -12
- package/test/conformance/cases/076_composed_reusable_builtins.pl +0 -8
- package/test/conformance/cases/077_recursive_path_with_lists.pl +0 -10
- package/test/conformance/cases/078_mutual_recursion_with_arithmetic.pl +0 -7
- package/test/conformance/cases/079_big_integer_arithmetic.pl +0 -8
- package/test/conformance/cases/080_rounding_modes.pl +0 -10
- package/test/conformance/cases/081_zero_safe_numeric_functions.pl +0 -9
- package/test/conformance/cases/083_between_modes_and_empty_ranges.pl +0 -8
- package/test/conformance/cases/084_append_and_select_composition.pl +0 -7
- package/test/conformance/cases/085_nth_and_update_edges.pl +0 -8
- package/test/conformance/cases/086_slicing_pipeline.pl +0 -10
- package/test/conformance/cases/087_sort_reverse_length.pl +0 -8
- package/test/conformance/cases/088_list_summaries_failures.pl +0 -8
- package/test/conformance/cases/089_string_split_join_pipeline.pl +0 -7
- package/test/conformance/cases/090_string_substring_replace_edges.pl +0 -9
- package/test/conformance/cases/091_string_case_and_trim.pl +0 -7
- package/test/conformance/cases/092_scalar_string_conversions.pl +0 -9
- package/test/conformance/cases/093_regex_named_captures_context.pl +0 -8
- package/test/conformance/cases/094_context_holds_enumeration.pl +0 -7
- package/test/conformance/cases/095_term_introspection_roundtrip.pl +0 -8
- package/test/conformance/cases/096_functor_scalar_edges.pl +0 -8
- package/test/conformance/cases/097_control_negation_once_forall.pl +0 -13
- package/test/conformance/cases/098_aggregation_nested_templates.pl +0 -11
- package/test/conformance/cases/099_materialize_multiple_arities.pl +0 -8
- package/test/conformance/cases/100_reusable_builtin_workflow.pl +0 -10
- /package/examples/output/{access-control-policy.pl → access-control-policy.eye} +0 -0
- /package/examples/output/{ackermann.pl → ackermann.eye} +0 -0
- /package/examples/output/{age.pl → age.eye} +0 -0
- /package/examples/output/{aliases-and-namespaces.pl → aliases-and-namespaces.eye} +0 -0
- /package/examples/output/{alignment-demo.pl → alignment-demo.eye} +0 -0
- /package/examples/output/{allen-interval-calculus.pl → allen-interval-calculus.eye} +0 -0
- /package/examples/output/{ancestor.pl → ancestor.eye} +0 -0
- /package/examples/output/{animal.pl → animal.eye} +0 -0
- /package/examples/output/{annotation.pl → annotation.eye} +0 -0
- /package/examples/output/{auroracare.pl → auroracare.eye} +0 -0
- /package/examples/output/{backward.pl → backward.eye} +0 -0
- /package/examples/output/{basic-monadic.pl → basic-monadic.eye} +0 -0
- /package/examples/output/{bayes-diagnosis.pl → bayes-diagnosis.eye} +0 -0
- /package/examples/output/{bayes-therapy.pl → bayes-therapy.eye} +0 -0
- /package/examples/output/{beam-deflection.pl → beam-deflection.eye} +0 -0
- /package/examples/output/{binomial-vandermonde.pl → binomial-vandermonde.eye} +0 -0
- /package/examples/output/{blocks-world-planning.pl → blocks-world-planning.eye} +0 -0
- /package/examples/output/{bmi.pl → bmi.eye} +0 -0
- /package/examples/output/{braking-safety-worlds.pl → braking-safety-worlds.eye} +0 -0
- /package/examples/output/{buck-converter-design.pl → buck-converter-design.eye} +0 -0
- /package/examples/output/{cache-performance.pl → cache-performance.eye} +0 -0
- /package/examples/output/{canary-release.pl → canary-release.eye} +0 -0
- /package/examples/output/{cat-koko.pl → cat-koko.eye} +0 -0
- /package/examples/output/{catalan-convolution.pl → catalan-convolution.eye} +0 -0
- /package/examples/output/{chart-parser.pl → chart-parser.eye} +0 -0
- /package/examples/output/{clinical-trial-screening.pl → clinical-trial-screening.eye} +0 -0
- /package/examples/output/{collatz-1000.pl → collatz-1000.eye} +0 -0
- /package/examples/output/{combinatorics-findall-sort.pl → combinatorics-findall-sort.eye} +0 -0
- /package/examples/output/{competitive-enzyme-kinetics.pl → competitive-enzyme-kinetics.eye} +0 -0
- /package/examples/output/{complex.pl → complex.eye} +0 -0
- /package/examples/output/{composition-of-injective-functions-is-injective.pl → composition-of-injective-functions-is-injective.eye} +0 -0
- /package/examples/output/{context-association.pl → context-association.eye} +0 -0
- /package/examples/output/{context-schema-audit.pl → context-schema-audit.eye} +0 -0
- /package/examples/output/{continued-fraction-sqrt2.pl → continued-fraction-sqrt2.eye} +0 -0
- /package/examples/output/{control-system.pl → control-system.eye} +0 -0
- /package/examples/output/{critical-path-schedule.pl → critical-path-schedule.eye} +0 -0
- /package/examples/output/{cyclic-path.pl → cyclic-path.eye} +0 -0
- /package/examples/output/{d3-group.pl → d3-group.eye} +0 -0
- /package/examples/output/{dairy-energy-balance.pl → dairy-energy-balance.eye} +0 -0
- /package/examples/output/{data-negotiation.pl → data-negotiation.eye} +0 -0
- /package/examples/output/{deep-taxonomy-10.pl → deep-taxonomy-10.eye} +0 -0
- /package/examples/output/{deep-taxonomy-100.pl → deep-taxonomy-100.eye} +0 -0
- /package/examples/output/{deep-taxonomy-1000.pl → deep-taxonomy-1000.eye} +0 -0
- /package/examples/output/{deep-taxonomy-10000.pl → deep-taxonomy-10000.eye} +0 -0
- /package/examples/output/{deep-taxonomy-100000.pl → deep-taxonomy-100000.eye} +0 -0
- /package/examples/output/{delfour.pl → delfour.eye} +0 -0
- /package/examples/output/{deontic-logic.pl → deontic-logic.eye} +0 -0
- /package/examples/output/{derived-backward-rule.pl → derived-backward-rule.eye} +0 -0
- /package/examples/output/{derived-rule.pl → derived-rule.eye} +0 -0
- /package/examples/output/{diamond-property.pl → diamond-property.eye} +0 -0
- /package/examples/output/{dijkstra-findall-sort.pl → dijkstra-findall-sort.eye} +0 -0
- /package/examples/output/{dijkstra-risk-path.pl → dijkstra-risk-path.eye} +0 -0
- /package/examples/output/{dijkstra.pl → dijkstra.eye} +0 -0
- /package/examples/output/{dining-philosophers.pl → dining-philosophers.eye} +0 -0
- /package/examples/output/{dog.pl → dog.eye} +0 -0
- /package/examples/output/{dpv-odrl-purpose-mapping.pl → dpv-odrl-purpose-mapping.eye} +0 -0
- /package/examples/output/{drone-corridor-planner.pl → drone-corridor-planner.eye} +0 -0
- /package/examples/output/{easter-computus.pl → easter-computus.eye} +0 -0
- /package/examples/output/{electrical-rc-filter.pl → electrical-rc-filter.eye} +0 -0
- /package/examples/output/{epidemic-policy.pl → epidemic-policy.eye} +0 -0
- /package/examples/output/{equivalence-classes-overlap-implies-same-class.pl → equivalence-classes-overlap-implies-same-class.eye} +0 -0
- /package/examples/output/{eulerian-path.pl → eulerian-path.eye} +0 -0
- /package/examples/output/{ev-range-worlds.pl → ev-range-worlds.eye} +0 -0
- /package/examples/output/{existential-rule.pl → existential-rule.eye} +0 -0
- /package/examples/output/{exoplanet-validation-worlds.pl → exoplanet-validation-worlds.eye} +0 -0
- /package/examples/output/{expression-eval.pl → expression-eval.eye} +0 -0
- /package/examples/output/{family-cousins.pl → family-cousins.eye} +0 -0
- /package/examples/output/{fastpow.pl → fastpow.eye} +0 -0
- /package/examples/output/{fft8-numeric.pl → fft8-numeric.eye} +0 -0
- /package/examples/output/{fibonacci.pl → fibonacci.eye} +0 -0
- /package/examples/output/{field-nitrogen-balance.pl → field-nitrogen-balance.eye} +0 -0
- /package/examples/output/{flandor.pl → flandor.eye} +0 -0
- /package/examples/output/{floating-point.pl → floating-point.eye} +0 -0
- /package/examples/output/{four-color-map.pl → four-color-map.eye} +0 -0
- /package/examples/output/{fundamental-theorem-arithmetic.pl → fundamental-theorem-arithmetic.eye} +0 -0
- /package/examples/output/{gd-step-certified.pl → gd-step-certified.eye} +0 -0
- /package/examples/output/{gdpr-compliance.pl → gdpr-compliance.eye} +0 -0
- /package/examples/output/{good-cobbler.pl → good-cobbler.eye} +0 -0
- /package/examples/output/{gps.pl → gps.eye} +0 -0
- /package/examples/output/{graph-reachability.pl → graph-reachability.eye} +0 -0
- /package/examples/output/{graph.pl → graph.eye} +0 -0
- /package/examples/output/{gray-code-counter.pl → gray-code-counter.eye} +0 -0
- /package/examples/output/{greatest-lower-bound-uniqueness.pl → greatest-lower-bound-uniqueness.eye} +0 -0
- /package/examples/output/{group-inverse-uniqueness.pl → group-inverse-uniqueness.eye} +0 -0
- /package/examples/output/{hamiltonian-path.pl → hamiltonian-path.eye} +0 -0
- /package/examples/output/{hamming-code.pl → hamming-code.eye} +0 -0
- /package/examples/output/{hanoi.pl → hanoi.eye} +0 -0
- /package/examples/output/{heat-loss.pl → heat-loss.eye} +0 -0
- /package/examples/output/{heron-theorem.pl → heron-theorem.eye} +0 -0
- /package/examples/output/{ideal-gas-law.pl → ideal-gas-law.eye} +0 -0
- /package/examples/output/{illegitimate-reasoning.pl → illegitimate-reasoning.eye} +0 -0
- /package/examples/output/{integer-partitions.pl → integer-partitions.eye} +0 -0
- /package/examples/output/{intuitionistic-logic-kripke.pl → intuitionistic-logic-kripke.eye} +0 -0
- /package/examples/output/{job-shop-scheduling.pl → job-shop-scheduling.eye} +0 -0
- /package/examples/output/{knapsack-optimization.pl → knapsack-optimization.eye} +0 -0
- /package/examples/output/{knowledge-engineering-alignment-flow.pl → knowledge-engineering-alignment-flow.eye} +0 -0
- /package/examples/output/{law-of-cosines.pl → law-of-cosines.eye} +0 -0
- /package/examples/output/{least-squares-regression.pl → least-squares-regression.eye} +0 -0
- /package/examples/output/{linear-logic-resources.pl → linear-logic-resources.eye} +0 -0
- /package/examples/output/{list-collection.pl → list-collection.eye} +0 -0
- /package/examples/output/{lldm.pl → lldm.eye} +0 -0
- /package/examples/output/{manufacturing-quality-control.pl → manufacturing-quality-control.eye} +0 -0
- /package/examples/output/{matrix-chain-order.pl → matrix-chain-order.eye} +0 -0
- /package/examples/output/{microgrid-dispatch.pl → microgrid-dispatch.eye} +0 -0
- /package/examples/output/{missionaries-cannibals.pl → missionaries-cannibals.eye} +0 -0
- /package/examples/output/{modal-logic-kripke.pl → modal-logic-kripke.eye} +0 -0
- /package/examples/output/{modular-exponentiation.pl → modular-exponentiation.eye} +0 -0
- /package/examples/output/{monkey-bananas.pl → monkey-bananas.eye} +0 -0
- /package/examples/output/{n-queens-8.pl → n-queens-8.eye} +0 -0
- /package/examples/output/{network-sla.pl → network-sla.eye} +0 -0
- /package/examples/output/{newton-raphson.pl → newton-raphson.eye} +0 -0
- /package/examples/output/{nixon-diamond.pl → nixon-diamond.eye} +0 -0
- /package/examples/output/{observability-log-correlation.pl → observability-log-correlation.eye} +0 -0
- /package/examples/output/{odrl-dpv-fpv-trust-flow.pl → odrl-dpv-fpv-trust-flow.eye} +0 -0
- /package/examples/output/{odrl-dpv-healthcare-risk-ranked.pl → odrl-dpv-healthcare-risk-ranked.eye} +0 -0
- /package/examples/output/{odrl-dpv-risk-ranked.pl → odrl-dpv-risk-ranked.eye} +0 -0
- /package/examples/output/{orbital-transfer-design.pl → orbital-transfer-design.eye} +0 -0
- /package/examples/output/{path-discovery.pl → path-discovery.eye} +0 -0
- /package/examples/output/{peano-arithmetic.pl → peano-arithmetic.eye} +0 -0
- /package/examples/output/{peasant.pl → peasant.eye} +0 -0
- /package/examples/output/{pell-equation.pl → pell-equation.eye} +0 -0
- /package/examples/output/{pendulum-period.pl → pendulum-period.eye} +0 -0
- /package/examples/output/{polynomial.pl → polynomial.eye} +0 -0
- /package/examples/output/{proof-contrapositive.pl → proof-contrapositive.eye} +0 -0
- /package/examples/output/{quadratic-formula.pl → quadratic-formula.eye} +0 -0
- /package/examples/output/{radioactive-decay.pl → radioactive-decay.eye} +0 -0
- /package/examples/output/{reusable-builtins.pl → reusable-builtins.eye} +0 -0
- /package/examples/output/{riemann-hypothesis.pl → riemann-hypothesis.eye} +0 -0
- /package/examples/output/{security-incident-correlation.pl → security-incident-correlation.eye} +0 -0
- /package/examples/output/{send-more-money.pl → send-more-money.eye} +0 -0
- /package/examples/output/{service-impact.pl → service-impact.eye} +0 -0
- /package/examples/output/{sieve.pl → sieve.eye} +0 -0
- /package/examples/output/{skolem-functions.pl → skolem-functions.eye} +0 -0
- /package/examples/output/{socket-age.pl → socket-age.eye} +0 -0
- /package/examples/output/{socket-family.pl → socket-family.eye} +0 -0
- /package/examples/output/{socrates.pl → socrates.eye} +0 -0
- /package/examples/output/{stable-marriage.pl → stable-marriage.eye} +0 -0
- /package/examples/output/{statistics-summary.pl → statistics-summary.eye} +0 -0
- /package/examples/output/{stirling-bell-numbers.pl → stirling-bell-numbers.eye} +0 -0
- /package/examples/output/{sudoku-4x4.pl → sudoku-4x4.eye} +0 -0
- /package/examples/output/{superdense-coding.pl → superdense-coding.eye} +0 -0
- /package/examples/output/{term-tools.pl → term-tools.eye} +0 -0
- /package/examples/output/{totient-summatory.pl → totient-summatory.eye} +0 -0
- /package/examples/output/{trust-flow-provenance-threshold.pl → trust-flow-provenance-threshold.eye} +0 -0
- /package/examples/output/{turing.pl → turing.eye} +0 -0
- /package/examples/output/{vector-similarity.pl → vector-similarity.eye} +0 -0
- /package/examples/output/{vulnerability-impact.pl → vulnerability-impact.eye} +0 -0
- /package/examples/output/{web-names.pl → web-names.eye} +0 -0
- /package/examples/output/{weighted-interval-scheduling.pl → weighted-interval-scheduling.eye} +0 -0
- /package/examples/output/{witch.pl → witch.eye} +0 -0
- /package/examples/output/{wolf-goat-cabbage.pl → wolf-goat-cabbage.eye} +0 -0
- /package/examples/output/{zebra.pl → zebra.eye} +0 -0
- /package/test/conformance/cases/{037_matching_and_comparison.pl → 037_matching_and_comparison.eye} +0 -0
- /package/test/conformance/cases/{054_numeric_and_lexical_comparison.pl → 054_numeric_and_lexical_comparison.eye} +0 -0
- /package/test/conformance/cases/{082_comparison_semantics.pl → 082_comparison_semantics.eye} +0 -0
- /package/test/conformance/expected/{001_fact_output.pl → 001_fact_output.eye} +0 -0
- /package/test/conformance/expected/{002_rule_recursion.pl → 002_rule_recursion.eye} +0 -0
- /package/test/conformance/expected/{003_terms_and_readback.pl → 003_terms_and_readback.eye} +0 -0
- /package/test/conformance/expected/{004_conjunction_and_parentheses.pl → 004_conjunction_and_parentheses.eye} +0 -0
- /package/test/conformance/expected/{005_list_deconstruction.pl → 005_list_deconstruction.eye} +0 -0
- /package/test/conformance/expected/{006_comma_formula_data.pl → 006_comma_formula_data.eye} +0 -0
- /package/test/conformance/expected/{007_anonymous_variables.pl → 007_anonymous_variables.eye} +0 -0
- /package/test/conformance/expected/{008_graphic_atoms.pl → 008_graphic_atoms.eye} +0 -0
- /package/test/conformance/expected/{009_comments_and_whitespace.pl → 009_comments_and_whitespace.eye} +0 -0
- /package/test/conformance/expected/{010_variable_scope_and_reuse.pl → 010_variable_scope_and_reuse.eye} +0 -0
- /package/test/conformance/expected/{011_predicate_arity.pl → 011_predicate_arity.eye} +0 -0
- /package/test/conformance/expected/{012_nested_compound_unification.pl → 012_nested_compound_unification.eye} +0 -0
- /package/test/conformance/expected/{013_multiple_clauses_order.pl → 013_multiple_clauses_order.eye} +0 -0
- /package/test/conformance/expected/{014_failure_filters_answers.pl → 014_failure_filters_answers.eye} +0 -0
- /package/test/conformance/expected/{015_improper_list_unification.pl → 015_improper_list_unification.eye} +0 -0
- /package/test/conformance/expected/{016_arity_zero_atom.pl → 016_arity_zero_atom.eye} +0 -0
- /package/test/conformance/expected/{017_three_step_recursion.pl → 017_three_step_recursion.eye} +0 -0
- /package/test/conformance/expected/{018_quoted_atom_readback.pl → 018_quoted_atom_readback.eye} +0 -0
- /package/test/conformance/expected/{019_parenthesized_three_conjuncts.pl → 019_parenthesized_three_conjuncts.eye} +0 -0
- /package/test/conformance/expected/{020_nested_list_terms.pl → 020_nested_list_terms.eye} +0 -0
- /package/test/conformance/expected/{021_repeated_variable_head.pl → 021_repeated_variable_head.eye} +0 -0
- /package/test/conformance/expected/{022_rule_head_structure.pl → 022_rule_head_structure.eye} +0 -0
- /package/test/conformance/expected/{023_quoted_escapes_readback.pl → 023_quoted_escapes_readback.eye} +0 -0
- /package/test/conformance/expected/{024_numeric_literal_readback.pl → 024_numeric_literal_readback.eye} +0 -0
- /package/test/conformance/expected/{025_body_parentheses_with_formula_data.pl → 025_body_parentheses_with_formula_data.eye} +0 -0
- /package/test/conformance/expected/{026_underscore_named_variable_reuse.pl → 026_question_underscore_named_variable_reuse.eye} +0 -0
- /package/test/conformance/expected/{027_default_derived_output.pl → 027_default_derived_output.eye} +0 -0
- /package/test/conformance/expected/{028_materialize_focus.pl → 028_materialize_focus.eye} +0 -0
- /package/test/conformance/expected/{029_arithmetic_and_comparison.pl → 029_arithmetic_and_comparison.eye} +0 -0
- /package/test/conformance/expected/{030_strings_and_atoms.pl → 030_strings_and_atoms.eye} +0 -0
- /package/test/conformance/expected/{031_lists_aggregation_ordering.pl → 031_lists_aggregation_ordering.eye} +0 -0
- /package/test/conformance/expected/{032_holds_parts.pl → 032_holds_parts.eye} +0 -0
- /package/test/conformance/expected/{033_negation_once_generators.pl → 033_negation_once_generators.eye} +0 -0
- /package/test/conformance/expected/{034_equality_and_inequality.pl → 034_equality_and_inequality.eye} +0 -0
- /package/test/conformance/expected/{035_list_relations.pl → 035_list_relations.eye} +0 -0
- /package/test/conformance/expected/{036_append_splits.pl → 036_append_splits.eye} +0 -0
- /package/test/conformance/expected/{037_matching_and_comparison.pl → 037_matching_and_comparison.eye} +0 -0
- /package/test/conformance/expected/{038_memoize_declaration.pl → 038_table_declaration.eye} +0 -0
- /package/test/conformance/expected/{039_numeric_functions.pl → 039_numeric_functions.eye} +0 -0
- /package/test/conformance/expected/{040_between_enumeration.pl → 040_between_enumeration.eye} +0 -0
- /package/test/conformance/expected/{041_smallest_divisor.pl → 041_smallest_divisor.eye} +0 -0
- /package/test/conformance/expected/{042_negation_filter.pl → 042_negation_filter.eye} +0 -0
- /package/test/conformance/expected/{043_once_user_predicate.pl → 043_once_user_predicate.eye} +0 -0
- /package/test/conformance/expected/{044_findall_user_goal.pl → 044_findall_user_goal.eye} +0 -0
- /package/test/conformance/expected/{045_sort_deduplicates_atoms.pl → 045_sort_deduplicates_atoms.eye} +0 -0
- /package/test/conformance/expected/{046_append_bound_prefix_suffix.pl → 046_append_bound_prefix_suffix.eye} +0 -0
- /package/test/conformance/expected/{047_nth0_index_generation.pl → 047_nth0_index_generation.eye} +0 -0
- /package/test/conformance/expected/{048_set_nth0_edges.pl → 048_set_nth0_edges.eye} +0 -0
- /package/test/conformance/expected/{049_select_duplicate_occurrences.pl → 049_select_duplicate_occurrences.eye} +0 -0
- /package/test/conformance/expected/{050_not_member_filter.pl → 050_not_member_filter.eye} +0 -0
- /package/test/conformance/expected/{051_nested_holds_parts.pl → 051_nested_holds_parts.eye} +0 -0
- /package/test/conformance/expected/{052_holds_member.pl → 052_holds_member.eye} +0 -0
- /package/test/conformance/expected/{053_materialize_excludes_source_fact.pl → 053_materialize_excludes_source_fact.eye} +0 -0
- /package/test/conformance/expected/{054_numeric_and_lexical_comparison.pl → 054_numeric_and_lexical_comparison.eye} +0 -0
- /package/test/conformance/expected/{055_string_matching_filters.pl → 055_string_matching_filters.eye} +0 -0
- /package/test/conformance/expected/{056_string_and_atom_concat.pl → 056_string_and_atom_concat.eye} +0 -0
- /package/test/conformance/expected/{057_countall_empty_and_nonempty.pl → 057_countall_empty_and_nonempty.eye} +0 -0
- /package/test/conformance/expected/{058_sumall_numeric_template.pl → 058_sumall_numeric_template.eye} +0 -0
- /package/test/conformance/expected/{059_aggregate_min_template.pl → 059_aggregate_min_template.eye} +0 -0
- /package/test/conformance/expected/{060_aggregate_max_compound_key.pl → 060_aggregate_max_compound_key.eye} +0 -0
- /package/test/conformance/expected/{061_date_difference.pl → 061_date_difference.eye} +0 -0
- /package/test/conformance/expected/{062_reusable_numeric_builtins.pl → 062_reusable_numeric_builtins.eye} +0 -0
- /package/test/conformance/expected/{063_reusable_list_builtins.pl → 063_reusable_list_builtins.eye} +0 -0
- /package/test/conformance/expected/{064_reusable_string_builtins.pl → 064_reusable_string_builtins.eye} +0 -0
- /package/test/conformance/expected/{065_reusable_term_control_builtins.pl → 065_reusable_term_control_builtins.eye} +0 -0
- /package/test/conformance/expected/{066_numeric_edges.pl → 066_numeric_edges.eye} +0 -0
- /package/test/conformance/expected/{067_list_edges.pl → 067_list_edges.eye} +0 -0
- /package/test/conformance/expected/{068_list_generation_order.pl → 068_list_generation_order.eye} +0 -0
- /package/test/conformance/expected/{069_list_summaries_and_sets.pl → 069_list_summaries_and_sets.eye} +0 -0
- /package/test/conformance/expected/{070_matches_named_captures.pl → 070_matches_named_captures.eye} +0 -0
- /package/test/conformance/expected/{071_string_edges.pl → 071_string_edges.eye} +0 -0
- /package/test/conformance/expected/{072_string_conversions.pl → 072_string_conversions.eye} +0 -0
- /package/test/conformance/expected/{073_term_introspection_edges.pl → 073_term_introspection_edges.eye} +0 -0
- /package/test/conformance/expected/{074_forall_edges.pl → 074_forall_edges.eye} +0 -0
- /package/test/conformance/expected/{075_aggregation_edges.pl → 075_aggregation_edges.eye} +0 -0
- /package/test/conformance/expected/{076_composed_reusable_builtins.pl → 076_composed_reusable_builtins.eye} +0 -0
- /package/test/conformance/expected/{077_recursive_path_with_lists.pl → 077_recursive_path_with_lists.eye} +0 -0
- /package/test/conformance/expected/{078_mutual_recursion_with_arithmetic.pl → 078_mutual_recursion_with_arithmetic.eye} +0 -0
- /package/test/conformance/expected/{079_big_integer_arithmetic.pl → 079_big_integer_arithmetic.eye} +0 -0
- /package/test/conformance/expected/{080_rounding_modes.pl → 080_rounding_modes.eye} +0 -0
- /package/test/conformance/expected/{081_zero_safe_numeric_functions.pl → 081_zero_safe_numeric_functions.eye} +0 -0
- /package/test/conformance/expected/{082_comparison_semantics.pl → 082_comparison_semantics.eye} +0 -0
- /package/test/conformance/expected/{083_between_modes_and_empty_ranges.pl → 083_between_modes_and_empty_ranges.eye} +0 -0
- /package/test/conformance/expected/{084_append_and_select_composition.pl → 084_append_and_select_composition.eye} +0 -0
- /package/test/conformance/expected/{085_nth_and_update_edges.pl → 085_nth_and_update_edges.eye} +0 -0
- /package/test/conformance/expected/{086_slicing_pipeline.pl → 086_slicing_pipeline.eye} +0 -0
- /package/test/conformance/expected/{087_sort_reverse_length.pl → 087_sort_reverse_length.eye} +0 -0
- /package/test/conformance/expected/{088_list_summaries_failures.pl → 088_list_summaries_failures.eye} +0 -0
- /package/test/conformance/expected/{089_string_split_join_pipeline.pl → 089_string_split_join_pipeline.eye} +0 -0
- /package/test/conformance/expected/{090_string_substring_replace_edges.pl → 090_string_substring_replace_edges.eye} +0 -0
- /package/test/conformance/expected/{091_string_case_and_trim.pl → 091_string_case_and_trim.eye} +0 -0
- /package/test/conformance/expected/{092_scalar_string_conversions.pl → 092_scalar_string_conversions.eye} +0 -0
- /package/test/conformance/expected/{093_regex_named_captures_context.pl → 093_regex_named_captures_context.eye} +0 -0
- /package/test/conformance/expected/{094_context_holds_enumeration.pl → 094_context_holds_enumeration.eye} +0 -0
- /package/test/conformance/expected/{095_term_introspection_roundtrip.pl → 095_term_introspection_roundtrip.eye} +0 -0
- /package/test/conformance/expected/{096_functor_scalar_edges.pl → 096_functor_scalar_edges.eye} +0 -0
- /package/test/conformance/expected/{097_control_negation_once_forall.pl → 097_control_negation_once_forall.eye} +0 -0
- /package/test/conformance/expected/{098_aggregation_nested_templates.pl → 098_aggregation_nested_templates.eye} +0 -0
- /package/test/conformance/expected/{099_materialize_multiple_arities.pl → 099_materialize_multiple_arities.eye} +0 -0
- /package/test/conformance/expected/{100_reusable_builtin_workflow.pl → 100_reusable_builtin_workflow.eye} +0 -0
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
- [9.10 Search control](#910-search-control)
|
|
44
44
|
- [10. Implementation-specific built-ins](#10-implementation-specific-built-ins)
|
|
45
45
|
- [11. Declarations](#11-declarations)
|
|
46
|
-
- [11.1
|
|
46
|
+
- [11.1 Tabling](#111-tabling)
|
|
47
47
|
- [11.2 Default-output materialization](#112-default-output-materialization)
|
|
48
48
|
- [12. eyelang Sockets](#12-eyelang-sockets)
|
|
49
49
|
- [12.1 Socket vocabulary](#121-socket-vocabulary)
|
|
@@ -62,9 +62,9 @@
|
|
|
62
62
|
|
|
63
63
|
## Abstract
|
|
64
64
|
|
|
65
|
-
Eyelang is a compact definite-clause language whose surface syntax is
|
|
65
|
+
Eyelang is a compact definite-clause language whose surface syntax is Prolog-like term and clause syntax with deliberate eyelang choices for rule-based programs over ordinary terms, lists, arithmetic, strings, and finite search. A Eyelang program is a finite sequence of facts and Horn clauses. The underlying declarative semantics of the pure language is **Herbrand semantics**: constants, compound terms, and lists denote themselves, and predicates denote sets of ground atomic formulas over those terms. Evaluation is goal-directed: goals are solved by unification against facts, rules, and a fixed set of built-in predicates.
|
|
66
66
|
|
|
67
|
-
Eyelang is intentionally smaller than ISO Prolog. It supports
|
|
67
|
+
Eyelang is intentionally smaller than ISO Prolog. It supports compact Horn-clause reasoning, list processing, arithmetic examples, finite search, and context data, without operators, cut, modules, dynamic predicates, DCGs, zero-arity compound syntax, or a complete ISO standard library.
|
|
68
68
|
|
|
69
69
|
## 1. Terminology and normative language
|
|
70
70
|
|
|
@@ -78,7 +78,7 @@ An **atomic formula** is a predicate application such as `parent(pat, jan)` or `
|
|
|
78
78
|
|
|
79
79
|
This distinction is normative: `pat` is an atom constant and can appear as a term argument; `parent(pat, jan)` is an atomic formula and can appear as a fact, rule head, or goal. A compound term such as `pair(pat, jan)` has the same surface shape as an atomic formula, but its role is determined by context: as data it is a compound term, and as a clause head or goal it is an atomic formula with predicate symbol `pair/2`.
|
|
80
80
|
|
|
81
|
-
A **clause** is either a fact `
|
|
81
|
+
A **clause** is either a fact such as `parent(pat, jan).` or a rule such as `ancestor(?x, ?y) :- parent(?x, ?y).`.
|
|
82
82
|
|
|
83
83
|
A **goal** is an atomic formula, a built-in call, or a comma conjunction.
|
|
84
84
|
|
|
@@ -92,7 +92,7 @@ Eyelang is designed to be:
|
|
|
92
92
|
|
|
93
93
|
- small enough to embed and audit;
|
|
94
94
|
- deterministic in textual output order after duplicate suppression;
|
|
95
|
-
- useful for relation-style `p(
|
|
95
|
+
- useful for relation-style `p(?s, ?o)` output through ordinary predicate names;
|
|
96
96
|
- practical for examples involving recursion, lists, arithmetic, strings, aggregation, finite search, and context-valued data.
|
|
97
97
|
|
|
98
98
|
Non-goals include complete ISO Prolog compatibility, operator declarations, module systems, dynamic database updates, cut-based control, and full bottom-up closure semantics.
|
|
@@ -107,7 +107,7 @@ Input is Unicode text. Whitespace separates tokens and is otherwise insignifican
|
|
|
107
107
|
|
|
108
108
|
A percent sign starts a line comment outside quoted strings and quoted atom constants. The comment extends to the end of the line.
|
|
109
109
|
|
|
110
|
-
```
|
|
110
|
+
```eyelang
|
|
111
111
|
parent(pat, jan). % this is a comment
|
|
112
112
|
```
|
|
113
113
|
|
|
@@ -119,28 +119,28 @@ The punctuation tokens are:
|
|
|
119
119
|
( ) [ ] , | . :-
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
-
A colon outside `:-` is not part of the language. Namespace-like names SHOULD be written as
|
|
122
|
+
A colon outside `:-` is not part of the language. Namespace-like names SHOULD be written as explicit atom constants such as `person_type`, `odrl_permission`, or quoted atoms such as `'org.schema'`.
|
|
123
123
|
|
|
124
124
|
### 3.4 Variables
|
|
125
125
|
|
|
126
|
-
A variable starts with an
|
|
126
|
+
A variable starts with `?` followed by an ASCII letter or underscore and then zero or more ASCII letters, digits, or underscores. This N3/SPARQL-style spelling is the only source-level variable spelling in eyelang.
|
|
127
127
|
|
|
128
128
|
Examples:
|
|
129
129
|
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
_
|
|
130
|
+
```eyelang
|
|
131
|
+
?x
|
|
132
|
+
?person
|
|
133
|
+
?_thing
|
|
134
|
+
?_
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
Each
|
|
137
|
+
Each `?_` anonymous variable occurrence is fresh. A bare `_` is not a variable in eyelang source.
|
|
138
138
|
|
|
139
139
|
### 3.5 Atom constants
|
|
140
140
|
|
|
141
|
-
A plain atom constant starts with a lowercase ASCII letter and is followed by zero or more ASCII letters, digits, or underscores. A dot is not part of a plain atom
|
|
141
|
+
A plain atom constant starts with a lowercase ASCII letter and is followed by zero or more ASCII letters, digits, or underscores. A dot is not part of a plain atom; dotted web spaces such as `'be.ugent'` or `'org.schema'` MUST be quoted if they are meant as one atom constant. Names such as `a-b` MUST also be quoted if they are meant as one atom constant:
|
|
142
142
|
|
|
143
|
-
```
|
|
143
|
+
```eyelang
|
|
144
144
|
pat
|
|
145
145
|
type
|
|
146
146
|
case_123
|
|
@@ -148,12 +148,21 @@ case_123
|
|
|
148
148
|
'org.schema'
|
|
149
149
|
'eyereasoner.github'
|
|
150
150
|
'a-b'
|
|
151
|
-
'http://example'
|
|
152
151
|
```
|
|
153
152
|
|
|
153
|
+
Absolute IRI atom constants MAY also be written between angle brackets. The content must be an absolute IRI-like lexical value with a scheme such as `https:` or `urn:`. Eyelang stores the content as the atom value and prints absolute IRI atoms with angle brackets on read-back:
|
|
154
|
+
|
|
155
|
+
```eyelang
|
|
156
|
+
<https://example.org/alice>
|
|
157
|
+
<urn:example:bob>
|
|
158
|
+
triple(<https://example.org/alice>, <https://schema.org/name>, "Alice").
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Quoted absolute IRI atoms remain valid input, but read-back normalizes them to angle-bracket syntax. For example, `'https://example.org/alice'` prints as `<https://example.org/alice>`.
|
|
162
|
+
|
|
154
163
|
A quoted atom constant is enclosed in single quotes. A single quote inside a quoted atom constant is represented by doubling it:
|
|
155
164
|
|
|
156
|
-
```
|
|
165
|
+
```eyelang
|
|
157
166
|
'atom with spaces'
|
|
158
167
|
'needs''quote'
|
|
159
168
|
''
|
|
@@ -165,6 +174,8 @@ A graphic atom constant is one or more graphic characters from this set:
|
|
|
165
174
|
#$&*+-/<=>?@^~\
|
|
166
175
|
```
|
|
167
176
|
|
|
177
|
+
Angle-bracket IRI syntax is recognized only for absolute IRI-like contents. Graphic atoms such as `<=>`, `<`, and `>=` remain graphic atoms.
|
|
178
|
+
|
|
168
179
|
### 3.6 Strings
|
|
169
180
|
|
|
170
181
|
A string is enclosed in double quotes. The implementation supports common escapes such as `\n`, `\t`, `\"`, and `\\`.
|
|
@@ -173,7 +184,7 @@ A string is enclosed in double quotes. The implementation supports common escape
|
|
|
173
184
|
|
|
174
185
|
Numbers are scalar terms. Integers, decimal numbers, and scientific notation are accepted:
|
|
175
186
|
|
|
176
|
-
```
|
|
187
|
+
```eyelang
|
|
177
188
|
0
|
|
178
189
|
-42
|
|
179
190
|
0.25
|
|
@@ -207,17 +218,17 @@ A clause head SHOULD be a compound term. Non-compound heads are parsed but are n
|
|
|
207
218
|
|
|
208
219
|
Arity-zero data is written as an atom constant, not as a zero-arity compound:
|
|
209
220
|
|
|
210
|
-
```
|
|
221
|
+
```eyelang
|
|
211
222
|
value(example, nil).
|
|
212
223
|
```
|
|
213
224
|
|
|
214
|
-
The syntax `nil()` is intentionally rejected so eyelang source and read-back output
|
|
225
|
+
The syntax `nil()` is intentionally rejected so eyelang source and read-back output use one representation for arity-zero data.
|
|
215
226
|
|
|
216
227
|
## 5. Terms
|
|
217
228
|
|
|
218
229
|
### 5.1 Variables
|
|
219
230
|
|
|
220
|
-
Variables are scoped to a single clause or selected goal. A variable in a rule head and body denotes the same logical variable within that clause.
|
|
231
|
+
Variables are scoped to a single clause or selected goal. A variable in a rule head and body denotes the same logical variable within that clause. Names preserve their spelling, so repeated `?x` occurrences in one clause refer to the same variable.
|
|
221
232
|
|
|
222
233
|
### 5.2 Atom constants, strings, and numbers
|
|
223
234
|
|
|
@@ -227,7 +238,7 @@ Atom constants, strings, and numbers are distinct scalar term kinds. Two scalar
|
|
|
227
238
|
|
|
228
239
|
A compound term has a functor name and arity:
|
|
229
240
|
|
|
230
|
-
```
|
|
241
|
+
```eyelang
|
|
231
242
|
parent(pat, jan)
|
|
232
243
|
pair(3, nested(atom, [x, y]))
|
|
233
244
|
```
|
|
@@ -240,7 +251,7 @@ The functor or predicate name is fixed syntactically and is written as an atom c
|
|
|
240
251
|
|
|
241
252
|
Lists use Prolog surface syntax and are represented internally with `./2` and `[]`:
|
|
242
253
|
|
|
243
|
-
```
|
|
254
|
+
```eyelang
|
|
244
255
|
[]
|
|
245
256
|
[a, b, c]
|
|
246
257
|
[a, b | tail]
|
|
@@ -250,7 +261,7 @@ Lists use Prolog surface syntax and are represented internally with `./2` and `[
|
|
|
250
261
|
|
|
251
262
|
Parenthesized comma terms may be goals or data:
|
|
252
263
|
|
|
253
|
-
```
|
|
264
|
+
```eyelang
|
|
254
265
|
(parent(pat, jan), parent(jan, emma))
|
|
255
266
|
(name(alice, "Alice"), knows(alice, bob))
|
|
256
267
|
```
|
|
@@ -261,19 +272,19 @@ When a comma term appears as a goal, it is evaluated as conjunction. When it app
|
|
|
261
272
|
|
|
262
273
|
A fact has no body:
|
|
263
274
|
|
|
264
|
-
```
|
|
275
|
+
```eyelang
|
|
265
276
|
parent(pat, jan).
|
|
266
277
|
```
|
|
267
278
|
|
|
268
279
|
A rule has a head and a body:
|
|
269
280
|
|
|
270
|
-
```
|
|
271
|
-
ancestor(
|
|
272
|
-
parent(
|
|
281
|
+
```eyelang
|
|
282
|
+
ancestor(?x, ?y) :-
|
|
283
|
+
parent(?x, ?y).
|
|
273
284
|
|
|
274
|
-
ancestor(
|
|
275
|
-
parent(
|
|
276
|
-
ancestor(
|
|
285
|
+
ancestor(?x, ?z) :-
|
|
286
|
+
parent(?x, ?y),
|
|
287
|
+
ancestor(?y, ?z).
|
|
277
288
|
```
|
|
278
289
|
|
|
279
290
|
Clauses with the same predicate name and arity define one predicate group. Predicate name and arity are both significant: `p/1` and `p/2` are different predicates.
|
|
@@ -294,7 +305,7 @@ A goal fails when no built-in case or user clause can prove it. eyelang has no e
|
|
|
294
305
|
|
|
295
306
|
### 7.3 Finite search expectation
|
|
296
307
|
|
|
297
|
-
Programs and selected output goals SHOULD be written so the relevant search space is finite. eyelang includes recursion guards and
|
|
308
|
+
Programs and selected output goals SHOULD be written so the relevant search space is finite. eyelang includes recursion guards and tabling support, but it is not required to terminate for arbitrary recursive logic programs.
|
|
298
309
|
|
|
299
310
|
## 8. Logical reading: Herbrand semantics
|
|
300
311
|
|
|
@@ -304,17 +315,17 @@ An atom constant by itself is not true or false. For example, `pat` is a term, n
|
|
|
304
315
|
|
|
305
316
|
A **Herbrand interpretation** for a program is a set of ground atomic formulas that are considered true. A source fact such as:
|
|
306
317
|
|
|
307
|
-
```
|
|
318
|
+
```eyelang
|
|
308
319
|
parent(pat, jan).
|
|
309
320
|
```
|
|
310
321
|
|
|
311
322
|
places the ground atomic formula `parent(pat, jan)` in the interpretation. A rule such as:
|
|
312
323
|
|
|
313
|
-
```
|
|
314
|
-
ancestor(
|
|
324
|
+
```eyelang
|
|
325
|
+
ancestor(?x, ?z) :- parent(?x, ?y), ancestor(?y, ?z).
|
|
315
326
|
```
|
|
316
327
|
|
|
317
|
-
is read universally over Herbrand terms: for every substitution of
|
|
328
|
+
is read universally over Herbrand terms: for every substitution of `?x`, `?y`, and `?z` by ground Herbrand terms, if both ground body atomic formulas are true, then the ground head atomic formula is true. The declarative meaning of a pure program is the **least Herbrand model**: the smallest set of ground atomic formulas that contains all facts and is closed under all rules.
|
|
318
329
|
|
|
319
330
|
Equivalently, the least Herbrand model is obtained by repeatedly applying the immediate-consequence operation: start with the source facts, add every ground rule head whose ground body is already true, and continue to the least fixed point. This definition is mathematical; an implementation does not have to compute the model bottom-up.
|
|
320
331
|
|
|
@@ -326,11 +337,11 @@ Variables do not range over external objects, records, pointers, or host-languag
|
|
|
326
337
|
|
|
327
338
|
Because the domain is Herbrand, equality in the pure language is syntactic identity of terms after substitution. Two distinct atom constants are distinct. Two compound terms are equal only when they have the same functor, the same arity, and pairwise equal arguments. Lists follow the same rule through their `[]` and `./2` representation.
|
|
328
339
|
|
|
329
|
-
Operationally, eyelang uses first-order unification to find substitutions. The implementation does not perform an occurs check, so cyclic terms are not part of the portable Herbrand reading even if a particular implementation can temporarily construct recursive bindings internally. Portable programs SHOULD avoid relying on occurs-check-sensitive cases such as `eq(
|
|
340
|
+
Operationally, eyelang uses first-order unification to find substitutions. The implementation does not perform an occurs check, so cyclic terms are not part of the portable Herbrand reading even if a particular implementation can temporarily construct recursive bindings internally. Portable programs SHOULD avoid relying on occurs-check-sensitive cases such as `eq(?x, f(?x))`.
|
|
330
341
|
|
|
331
342
|
### 8.3 Goal-directed execution versus model-theoretic meaning
|
|
332
343
|
|
|
333
|
-
eyelang's CLI and library evaluator are goal-directed. They try to prove requested goals by resolving them against facts, rules, and built-ins, using clause order, goal order, indexing,
|
|
344
|
+
eyelang's CLI and library evaluator are goal-directed. They try to prove requested goals by resolving them against facts, rules, and built-ins, using clause order, goal order, indexing, tabling, and deterministic built-in execution. This operational strategy is intended to enumerate answers that are true in the least Herbrand model for the pure Horn-clause fragment, but it is not a complete bottom-up model enumerator. Non-terminating recursion or infinite generators can prevent an answer from being found even when the answer belongs to the least Herbrand model.
|
|
334
345
|
|
|
335
346
|
Default CLI output is also a host behavior, not a separate semantics. It asks broad materialization goals, suppresses duplicates, excludes source facts, keeps ground answers, and prints selected consequences. Embedders can still access the goal-directed solver directly through the implementation API.
|
|
336
347
|
|
|
@@ -338,9 +349,9 @@ Default CLI output is also a host behavior, not a separate semantics. It asks br
|
|
|
338
349
|
|
|
339
350
|
Built-ins are specified relations or operations added to the Herbrand core. A built-in call in a goal has the syntax of an atomic formula, but its success relation is specified procedurally here rather than by source clauses. Some built-ins, such as `eq/2`, `append/3`, `member/2`, and `length/2`, can be understood as relations over Herbrand terms. Others, such as arithmetic, string matching, date/time predicates, aggregation, `once/1`, and negation-as-failure, are operational extensions whose behavior is defined by this specification rather than by pure least-Herbrand-model semantics alone.
|
|
340
351
|
|
|
341
|
-
Arithmetic and string built-ins do not introduce a separate semantic universe. They inspect the lexical values of already represented Herbrand constants and, when they succeed, bind output arguments to eyelang terms such as numbers, strings, or atom constants. For example, `add(2, 3,
|
|
352
|
+
Arithmetic and string built-ins do not introduce a separate semantic universe. They inspect the lexical values of already represented Herbrand constants and, when they succeed, bind output arguments to eyelang terms such as numbers, strings, or atom constants. For example, `add(2, 3, ?x)` may bind `?x` to the number term `5`; it does not mean that variables range over host-language numbers outside the Herbrand universe.
|
|
342
353
|
|
|
343
|
-
Negation-as-failure `not(
|
|
354
|
+
Negation-as-failure `not(?goal)` is especially operational: it succeeds when the current goal-directed search finds no solution for `?goal`. It is not classical negation and should not be read as adding negative facts to the Herbrand model. Programs using negation SHOULD keep the negated goal sufficiently ground and finite.
|
|
344
355
|
|
|
345
356
|
## 9. Standard built-in predicates
|
|
346
357
|
|
|
@@ -354,36 +365,36 @@ Implementations MAY provide additional built-ins, but such built-ins are impleme
|
|
|
354
365
|
|
|
355
366
|
| Built-in | Meaning |
|
|
356
367
|
|---|---|
|
|
357
|
-
| `eq(
|
|
358
|
-
| `neq(
|
|
368
|
+
| `eq(?a, ?b)` | Succeeds when `?a` and `?b` unify. |
|
|
369
|
+
| `neq(?a, ?b)` | Succeeds when `?a` and `?b` do not unify. |
|
|
359
370
|
|
|
360
371
|
### 9.2 Arithmetic
|
|
361
372
|
|
|
362
373
|
| Built-in | Meaning |
|
|
363
374
|
|---|---|
|
|
364
|
-
| `neg(
|
|
365
|
-
| `abs(
|
|
366
|
-
| `sin(
|
|
367
|
-
| `asin(
|
|
368
|
-
| `sqrt(
|
|
369
|
-
| `floor(
|
|
370
|
-
| `exp(
|
|
371
|
-
| `add(
|
|
372
|
-
| `sub(
|
|
373
|
-
| `mul(
|
|
374
|
-
| `div(
|
|
375
|
-
| `mod(
|
|
376
|
-
| `pow(
|
|
377
|
-
| `min(
|
|
375
|
+
| `neg(?a, ?b)` | `?b` is the numeric negation of `?a`. |
|
|
376
|
+
| `abs(?a, ?b)` | `?b` is the absolute value of `?a`. |
|
|
377
|
+
| `sin(?a, ?b)`, `cos(?a, ?b)`, `tan(?a, ?b)` | Trigonometric floating functions. |
|
|
378
|
+
| `asin(?a, ?b)`, `acos(?a, ?b)`, `atan2(?y, ?x, ?angle)` | Inverse trigonometric floating functions. |
|
|
379
|
+
| `sqrt(?a, ?b)` | Square root. Fails for negative inputs. |
|
|
380
|
+
| `floor(?a, ?b)`, `ceiling(?a, ?b)`, `trunc(?a, ?b)`, `rounded(?a, ?b)` | Integer-valued numeric rounding functions. |
|
|
381
|
+
| `exp(?a, ?b)`, `log(?a, ?b)` | Natural exponent and logarithm. `log/2` fails for non-positive inputs. |
|
|
382
|
+
| `add(?a, ?b, ?c)` | `?c = ?a + ?b`. |
|
|
383
|
+
| `sub(?a, ?b, ?c)` | `?c = ?a - ?b`. |
|
|
384
|
+
| `mul(?a, ?b, ?c)` | `?c = ?a * ?b`. |
|
|
385
|
+
| `div(?a, ?b, ?c)` | `?c = ?a / ?b`; integer inputs use integer division. |
|
|
386
|
+
| `mod(?a, ?b, ?c)` | Integer remainder. |
|
|
387
|
+
| `pow(?a, ?b, ?c)` | `?c = ?a^?b`. |
|
|
388
|
+
| `min(?a, ?b, ?c)`, `max(?a, ?b, ?c)` | Numeric minimum and maximum. |
|
|
378
389
|
|
|
379
390
|
### 9.3 Comparison
|
|
380
391
|
|
|
381
392
|
| Built-in | Meaning |
|
|
382
393
|
|---|---|
|
|
383
|
-
| `lt(
|
|
384
|
-
| `gt(
|
|
385
|
-
| `le(
|
|
386
|
-
| `ge(
|
|
394
|
+
| `lt(?a, ?b)` | `?a < ?b`. |
|
|
395
|
+
| `gt(?a, ?b)` | `?a > ?b`. |
|
|
396
|
+
| `le(?a, ?b)` | `?a =< ?b`. |
|
|
397
|
+
| `ge(?a, ?b)` | `?a >= ?b`. |
|
|
387
398
|
|
|
388
399
|
Comparisons interpret numeric-looking terms numerically. Other scalar terms are compared lexically.
|
|
389
400
|
|
|
@@ -391,66 +402,66 @@ Comparisons interpret numeric-looking terms numerically. Other scalar terms are
|
|
|
391
402
|
|
|
392
403
|
| Built-in | Meaning |
|
|
393
404
|
|---|---|
|
|
394
|
-
| `local_time(
|
|
395
|
-
| `difference(
|
|
405
|
+
| `local_time(?t)` | Binds `?t` to the local date string. For deterministic runs, `EYELANG_LOCAL_TIME=YYYY-MM-DD` overrides the current date. |
|
|
406
|
+
| `difference(?a, ?b, ?d)` | Computes an ISO-like date/duration difference. |
|
|
396
407
|
|
|
397
408
|
### 9.5 Generators
|
|
398
409
|
|
|
399
410
|
| Built-in | Meaning |
|
|
400
411
|
|---|---|
|
|
401
|
-
| `between(
|
|
402
|
-
| `smallest_divisor_from(
|
|
412
|
+
| `between(?low, ?high, ?x)` | Enumerates integers from `?low` through `?high`. |
|
|
413
|
+
| `smallest_divisor_from(?n, ?start, ?d)` | Finds a divisor of `?n` starting at `?start`. |
|
|
403
414
|
|
|
404
415
|
### 9.6 Strings and atom constants
|
|
405
416
|
|
|
406
417
|
| Built-in | Meaning |
|
|
407
418
|
|---|---|
|
|
408
|
-
| `str_concat(
|
|
409
|
-
| `contains(
|
|
410
|
-
| `matches(
|
|
411
|
-
| `matches(
|
|
412
|
-
| `not_matches(
|
|
413
|
-
| `split(
|
|
414
|
-
| `join(
|
|
415
|
-
| `substring(
|
|
416
|
-
| `replace(
|
|
417
|
-
| `lowercase(
|
|
418
|
-
| `number_string(
|
|
419
|
-
| `atom_string(
|
|
420
|
-
| `term_string(
|
|
419
|
+
| `str_concat(?a, ?b, ?c)` | String concatenation. |
|
|
420
|
+
| `contains(?text, ?needle)` | `?text` contains `?needle`. |
|
|
421
|
+
| `matches(?text, ?pattern)` | Text matches a simple implementation regex/search pattern. |
|
|
422
|
+
| `matches(?text, ?pattern, ?context)` | `?text` matches a JavaScript regular expression with named capture groups; `?context` is a comma context containing one unary term per matched capture group. |
|
|
423
|
+
| `not_matches(?text, ?pattern)` | Negation of `matches/2`. |
|
|
424
|
+
| `split(?text, ?separator, ?parts)` | Splits text into a proper list of strings. |
|
|
425
|
+
| `join(?parts, ?separator, ?text)` | Joins a proper list of scalar terms into a string. |
|
|
426
|
+
| `substring(?text, ?start, ?length, ?out)` | Extracts a zero-based substring. |
|
|
427
|
+
| `replace(?text, ?search, ?replacement, ?out)` | Replaces all non-empty literal occurrences of `?search`. |
|
|
428
|
+
| `lowercase(?text, ?out)`, `uppercase(?text, ?out)`, `trim(?text, ?out)` | Text normalization helpers. |
|
|
429
|
+
| `number_string(?number, ?string)` | Converts a number to a string or parses a numeric string into a number. |
|
|
430
|
+
| `atom_string(?atom, ?string)` | Converts between atom constants and strings. |
|
|
431
|
+
| `term_string(?term, ?string)` | Renders a ground term as its eyelang source string. |
|
|
421
432
|
|
|
422
433
|
### 9.7 Lists
|
|
423
434
|
|
|
424
435
|
| Built-in | Meaning |
|
|
425
436
|
|---|---|
|
|
426
|
-
| `append(
|
|
427
|
-
| `nth0(
|
|
428
|
-
| `set_nth0(
|
|
429
|
-
| `head(
|
|
430
|
-
| `rest(
|
|
431
|
-
| `last(
|
|
432
|
-
| `take(
|
|
433
|
-
| `drop(
|
|
434
|
-
| `slice(
|
|
435
|
-
| `member(
|
|
436
|
-
| `select(
|
|
437
|
-
| `not_member(
|
|
438
|
-
| `reverse(
|
|
439
|
-
| `length(
|
|
440
|
-
| `sum_list(
|
|
441
|
-
| `min_list(
|
|
442
|
-
| `list_to_set(
|
|
443
|
-
| `sort(
|
|
437
|
+
| `append(?a, ?b, ?c)` | List append/split relation. |
|
|
438
|
+
| `nth0(?index, ?list, ?value)` | Zero-based list lookup. |
|
|
439
|
+
| `set_nth0(?index, ?list, ?value, ?out)` | Functional list update. |
|
|
440
|
+
| `head(?list, ?head)` | Head of a non-empty list. |
|
|
441
|
+
| `rest(?list, ?tail)` | Tail of a non-empty list. |
|
|
442
|
+
| `last(?list, ?last)` | Last element of a non-empty proper list. |
|
|
443
|
+
| `take(?n, ?list, ?prefix)` | First `?n` items of a proper list. |
|
|
444
|
+
| `drop(?n, ?list, ?suffix)` | Proper-list suffix after dropping `?n` items. |
|
|
445
|
+
| `slice(?start, ?length, ?list, ?slice)` | Zero-based proper-list slice. |
|
|
446
|
+
| `member(?x, ?list)` | Member generator. |
|
|
447
|
+
| `select(?x, ?list, ?rest)` | Selects one occurrence. |
|
|
448
|
+
| `not_member(?x, ?list)` | Succeeds when `?x` is not a member. |
|
|
449
|
+
| `reverse(?a, ?b)` | Reverses a proper list. |
|
|
450
|
+
| `length(?list, ?n)` | Proper-list length. |
|
|
451
|
+
| `sum_list(?list, ?sum)` | Numeric sum of a proper list; empty lists produce `0`. |
|
|
452
|
+
| `min_list(?list, ?min)`, `max_list(?list, ?max)` | Minimum and maximum under standard term ordering. |
|
|
453
|
+
| `list_to_set(?list, ?set)` | Removes duplicates while preserving the first occurrence order. |
|
|
454
|
+
| `sort(?input, ?output)` | Sorts and deduplicates a proper list. |
|
|
444
455
|
|
|
445
456
|
### 9.8 Aggregation and ordering
|
|
446
457
|
|
|
447
458
|
| Built-in | Meaning |
|
|
448
459
|
|---|---|
|
|
449
|
-
| `findall(
|
|
450
|
-
| `countall(
|
|
451
|
-
| `sumall(
|
|
452
|
-
| `aggregate_min(
|
|
453
|
-
| `aggregate_max(
|
|
460
|
+
| `findall(?template, ?goal, ?bag)` | Collects all templates for solutions of `?goal`. |
|
|
461
|
+
| `countall(?goal, ?count)` | Counts solutions of `?goal`; empty solution sets produce `0`. |
|
|
462
|
+
| `sumall(?template, ?goal, ?sum)` | Sums numeric `?template` values over solutions of `?goal`; empty solution sets produce `0`. |
|
|
463
|
+
| `aggregate_min(?key, ?template, ?goal, ?bestkey, ?besttemplate)` | Selects the solution of `?goal` with the smallest resolved `?key`, returning that key and the corresponding resolved `?template`. Fails when `?goal` has no solutions. |
|
|
464
|
+
| `aggregate_max(?key, ?template, ?goal, ?bestkey, ?besttemplate)` | Selects the solution of `?goal` with the largest resolved `?key`, returning that key and the corresponding resolved `?template`. Fails when `?goal` has no solutions. |
|
|
454
465
|
|
|
455
466
|
### 9.9 Context and term inspection
|
|
456
467
|
|
|
@@ -458,33 +469,33 @@ Context terms are data representations of atomic formulas and comma conjunctions
|
|
|
458
469
|
|
|
459
470
|
| Built-in | Meaning |
|
|
460
471
|
|---|---|
|
|
461
|
-
| `holds(
|
|
462
|
-
| `holds(
|
|
463
|
-
| `functor(
|
|
464
|
-
| `arg(
|
|
465
|
-
| `compound_name_arguments(
|
|
472
|
+
| `holds(?context, ?term)` | Enumerates member terms inside a context term and unifies each member with `?term`. |
|
|
473
|
+
| `holds(?context, ?name, ?args)` | Enumerates context members of any arity, exposing each member as atom constant `?name` plus a proper argument list `?args`. |
|
|
474
|
+
| `functor(?term, ?name, ?arity)` | Decomposes a non-variable term into its name and arity. |
|
|
475
|
+
| `arg(?index, ?term, ?arg)` | Extracts the 1-based argument of a compound term. |
|
|
476
|
+
| `compound_name_arguments(?term, ?name, ?args)` | Decomposes a compound term or constructs one from an atom name and proper argument list. |
|
|
466
477
|
|
|
467
478
|
Example:
|
|
468
479
|
|
|
469
|
-
```
|
|
470
|
-
holds((name(alice, "Alice"), knows(alice, bob)), name(
|
|
471
|
-
holds((ready, name(alice, "Alice"), route(alice, bob, 7)),
|
|
480
|
+
```eyelang
|
|
481
|
+
holds((name(alice, "Alice"), knows(alice, bob)), name(?s, ?o)).
|
|
482
|
+
holds((ready, name(alice, "Alice"), route(alice, bob, 7)), ?name, ?args).
|
|
472
483
|
functor(route(alice, bob, 7), route, 3).
|
|
473
484
|
arg(2, route(alice, bob, 7), bob).
|
|
474
|
-
compound_name_arguments(
|
|
485
|
+
compound_name_arguments(?term, route, [alice, bob, 7]).
|
|
475
486
|
```
|
|
476
487
|
|
|
477
488
|
The first goal can yield `holds((name(alice, "Alice"), knows(alice, bob)), name(alice, "Alice")).` The second can yield `holds((ready, name(alice, "Alice"), route(alice, bob, 7)), ready, []).`, `holds((ready, name(alice, "Alice"), route(alice, bob, 7)), name, [alice, "Alice"]).`, and `holds((ready, name(alice, "Alice"), route(alice, bob, 7)), route, [alice, bob, 7]).`
|
|
478
489
|
|
|
479
|
-
`holds/3` is the appropriate form for schema-style introspection because it exposes the predicate name and all arguments without assuming a fixed arity. For example, a single rule can inspect `heartbeat`, `source(sensor17)`, `temperature(sensor17, 38)`, and `signature(sensor17, sha256,
|
|
490
|
+
`holds/3` is the appropriate form for schema-style introspection because it exposes the predicate name and all arguments without assuming a fixed arity. For example, a single rule can inspect `heartbeat`, `source(sensor17)`, `temperature(sensor17, 38)`, and `signature(sensor17, sha256, ?hash, ?time)` as `heartbeat/0`, `source/1`, `temperature/2`, and `signature/4`; see [`context-schema-audit.eye`](../examples/context-schema-audit.eye).
|
|
480
491
|
|
|
481
492
|
### 9.10 Search control
|
|
482
493
|
|
|
483
494
|
| Built-in | Meaning |
|
|
484
495
|
|---|---|
|
|
485
|
-
| `not(
|
|
486
|
-
| `once(
|
|
487
|
-
| `forall(
|
|
496
|
+
| `not(?goal)` | Negation as failure. Succeeds when `?goal` has no solution. |
|
|
497
|
+
| `once(?goal)` | Succeeds with at most the first solution of `?goal`. |
|
|
498
|
+
| `forall(?generator, ?test)` | Succeeds when every solution of `?generator` also satisfies `?test`; succeeds vacuously when `?generator` has no solutions. |
|
|
488
499
|
|
|
489
500
|
## 10. Implementation-specific built-ins
|
|
490
501
|
|
|
@@ -494,7 +505,7 @@ Implementation-specific built-ins are not required for conformance to this speci
|
|
|
494
505
|
|
|
495
506
|
An implementation-specific built-in SHOULD obey the same surface-language discipline as standard built-ins:
|
|
496
507
|
|
|
497
|
-
- it is called using ordinary atomic-formula syntax, for example `some_extension(
|
|
508
|
+
- it is called using ordinary atomic-formula syntax, for example `some_extension(?a, ?b)`;
|
|
498
509
|
- its arguments and results are eyelang terms from the Herbrand universe;
|
|
499
510
|
- it succeeds, fails, and binds variables as a relation over eyelang terms;
|
|
500
511
|
- it SHOULD document its intended modes, especially which arguments must be ground before it runs deterministically;
|
|
@@ -508,36 +519,36 @@ An implementation that provides explanation output SHOULD make implementation-sp
|
|
|
508
519
|
|
|
509
520
|
Declarations are written as ordinary facts, but the host treats them specially.
|
|
510
521
|
|
|
511
|
-
### 11.1
|
|
522
|
+
### 11.1 Tabling
|
|
512
523
|
|
|
513
|
-
```
|
|
514
|
-
|
|
524
|
+
```eyelang
|
|
525
|
+
table(path, 2).
|
|
515
526
|
```
|
|
516
527
|
|
|
517
|
-
|
|
528
|
+
The first argument MUST be an atom constant and the second argument MUST be a non-negative integer. A `table/2` declaration asks the solver to table answers for the named predicate group when applicable. The old `memoize/2` spelling is not part of the eyelang language.
|
|
518
529
|
|
|
519
530
|
Example:
|
|
520
531
|
|
|
521
|
-
```
|
|
522
|
-
|
|
532
|
+
```eyelang
|
|
533
|
+
table(path, 2).
|
|
523
534
|
```
|
|
524
535
|
|
|
525
536
|
### 11.2 Default-output materialization
|
|
526
537
|
|
|
527
|
-
```
|
|
528
|
-
materialize(
|
|
538
|
+
```eyelang
|
|
539
|
+
materialize(answer, 2).
|
|
529
540
|
```
|
|
530
541
|
|
|
531
|
-
|
|
542
|
+
The first argument MUST be an atom constant and the second argument MUST be a non-negative integer. If a program contains one or more `materialize/2` declarations, default CLI output is restricted to those predicate groups. Source facts are still excluded from printed output.
|
|
532
543
|
|
|
533
544
|
Example:
|
|
534
545
|
|
|
535
|
-
```
|
|
546
|
+
```eyelang
|
|
536
547
|
materialize(status, 2).
|
|
537
548
|
materialize(reason, 2).
|
|
538
549
|
```
|
|
539
550
|
|
|
540
|
-
`materialize/2` affects host output selection only; it does not change the logical meaning of the program. Materialized output facts are not asserted as new source facts for subsequent output goals. A host MAY solve several materialized predicates in one solver run, and
|
|
551
|
+
`materialize/2` affects host output selection only; it does not change the logical meaning of the program. Materialized output facts are not asserted as new source facts for subsequent output goals. A host MAY solve several materialized predicates in one solver run, and tabled predicate answers MAY be reused within that run, but this reuse is controlled by `table/2`, not by materialization.
|
|
541
552
|
|
|
542
553
|
## 12. Eyelang Sockets
|
|
543
554
|
|
|
@@ -551,22 +562,22 @@ In this specification, sockets are a portable **programming pattern** expressed
|
|
|
551
562
|
|
|
552
563
|
The minimal socket vocabulary is:
|
|
553
564
|
|
|
554
|
-
```
|
|
555
|
-
socket(
|
|
556
|
-
plug(
|
|
557
|
-
provides(
|
|
558
|
-
requires(
|
|
565
|
+
```eyelang
|
|
566
|
+
socket(?name, ?contract).
|
|
567
|
+
plug(?provider, ?name).
|
|
568
|
+
provides(?signature).
|
|
569
|
+
requires(?signature).
|
|
559
570
|
```
|
|
560
571
|
|
|
561
|
-
`
|
|
572
|
+
`?name` and `?provider` are ordinary eyelang terms, usually atom constants. `?contract` is an ordinary eyelang term that describes the expected or offered knowledge. A portable signature form is:
|
|
562
573
|
|
|
563
|
-
```
|
|
564
|
-
predicate(
|
|
574
|
+
```eyelang
|
|
575
|
+
predicate(?predicatename, ?arity)
|
|
565
576
|
```
|
|
566
577
|
|
|
567
578
|
For example:
|
|
568
579
|
|
|
569
|
-
```
|
|
580
|
+
```eyelang
|
|
570
581
|
socket(family_source, provides(predicate(parent, 2))).
|
|
571
582
|
plug(family_file, family_source).
|
|
572
583
|
```
|
|
@@ -577,7 +588,7 @@ This says that `family_source` is a named opening for knowledge of the shape `pa
|
|
|
577
588
|
|
|
578
589
|
A rule module can declare the knowledge it expects:
|
|
579
590
|
|
|
580
|
-
```
|
|
591
|
+
```eyelang
|
|
581
592
|
materialize(ancestor, 2).
|
|
582
593
|
|
|
583
594
|
socket(family_source, provides(predicate(parent, 2))).
|
|
@@ -586,12 +597,12 @@ plug(family_file, family_source).
|
|
|
586
597
|
parent(pat, jan).
|
|
587
598
|
parent(jan, emma).
|
|
588
599
|
|
|
589
|
-
ancestor(
|
|
590
|
-
parent(
|
|
600
|
+
ancestor(?x, ?y) :-
|
|
601
|
+
parent(?x, ?y).
|
|
591
602
|
|
|
592
|
-
ancestor(
|
|
593
|
-
parent(
|
|
594
|
-
ancestor(
|
|
603
|
+
ancestor(?x, ?z) :-
|
|
604
|
+
parent(?x, ?y),
|
|
605
|
+
ancestor(?y, ?z).
|
|
595
606
|
```
|
|
596
607
|
|
|
597
608
|
The `ancestor/2` rules do not depend on a particular storage mechanism for `parent/2`. In a small test, the provider may be the same file. In an embedded host, it may be a database adapter, a document extractor, a remote service, or another eyelang module. The socket facts make that boundary explicit without changing the logical meaning of the rules.
|
|
@@ -622,7 +633,7 @@ Default host output behavior is:
|
|
|
622
633
|
|
|
623
634
|
### 13.1 Explanation output
|
|
624
635
|
|
|
625
|
-
When proof output is enabled, each answer SHOULD be followed by a machine-readable `why/2` fact. Explanation output is ordinary eyelang syntax whose second argument is a nested abstract proof term such as `proof(goal(
|
|
636
|
+
When proof output is enabled, each answer SHOULD be followed by a machine-readable `why/2` fact. Explanation output is ordinary eyelang syntax whose second argument is a nested abstract proof term such as `proof(goal(?g), by(?method), bindings(?bindings), uses(?proofs))`; implementations SHOULD print `goal(...)` and `by(...)` on separate lines for readability. A proof term preserves the answer goal, derivation method, relevant bindings, and nested uses while omitting proof IDs. User clauses SHOULD be referenced explicitly as `fact(?filename, clause(?n))` or `rule(?filename, clause(?n))`, where `?n` is the 1-based clause number within that source. Built-ins SHOULD be referenced as `builtin(?name, ?arity)` because they do not come from source clauses. Explanation output is outside the logical semantics of the input program and MUST NOT change the set of answers.
|
|
626
637
|
|
|
627
638
|
## 14. Conformance
|
|
628
639
|
|
|
@@ -635,19 +646,20 @@ A conforming eyelang implementation supports the standard language described abo
|
|
|
635
646
|
- lists and comma conjunctions;
|
|
636
647
|
- answer printing and read-back formatting;
|
|
637
648
|
- the standard built-ins listed in section 9;
|
|
638
|
-
- `
|
|
649
|
+
- `table/2` declarations;
|
|
639
650
|
- `materialize/2` declarations;
|
|
640
651
|
- default derived output;
|
|
641
652
|
- explanation output when the host exposes proof output.
|
|
642
653
|
|
|
643
654
|
Browser execution, package layout, CLI URL loading, and any implementation-specific built-ins described in host documentation are outside this conformance surface unless separately standardized.
|
|
644
655
|
|
|
645
|
-
Conformance cases live in the repository under `test/conformance/`. They are run by `npm test` before the example suite, and can be run alone with `node test/run-conformance.mjs`. Each case has an input program under `conformance/cases/` and an exact expected standard-output file under `conformance/expected/`; both use `.
|
|
656
|
+
Conformance cases live in the repository under `test/conformance/`. They are run by `npm test` before the example suite, and can be run alone with `node test/run-conformance.mjs`. Each case has an input program under `conformance/cases/` and an exact expected standard-output file under `conformance/expected/`; both use `.eye` so expected output remains eyelang-readable.
|
|
646
657
|
|
|
647
658
|
## 15. Relationship to ISO Prolog
|
|
648
659
|
|
|
649
|
-
eyelang source is intended to be
|
|
660
|
+
eyelang source is intended to be familiar to Prolog readers, but eyelang is not ISO Prolog and intentionally avoids some ISO-compatible source spellings. Notable differences include:
|
|
650
661
|
|
|
662
|
+
- `?x` variables are the only variable spelling; traditional Prolog `X` and `_` variables are rejected;
|
|
651
663
|
- no operators or operator declarations;
|
|
652
664
|
- no zero-arity compound syntax such as `nil()`;
|
|
653
665
|
- no cut;
|
|
@@ -658,39 +670,39 @@ eyelang source is intended to be a subset of familiar Prolog term and Horn-claus
|
|
|
658
670
|
- no variables in functor or predicate position;
|
|
659
671
|
- no occurs check in unification.
|
|
660
672
|
|
|
661
|
-
Programs intended to be portable to eyelang SHOULD avoid ISO-specific syntax and keep terms explicit. Atom names that are not plain lowercase-starting names,
|
|
673
|
+
Programs intended to be portable to eyelang SHOULD use `?` variables, avoid ISO-specific syntax, and keep terms explicit. Atom names that are not plain lowercase-starting names, graphic atom tokens, or angle-bracket absolute IRI atoms SHOULD be written as quoted atoms, for example `'a-b'`.
|
|
662
674
|
|
|
663
675
|
## 16. Examples
|
|
664
676
|
|
|
665
677
|
### 16.1 Transitive closure
|
|
666
678
|
|
|
667
|
-
```
|
|
679
|
+
```eyelang
|
|
668
680
|
parent(pat, jan).
|
|
669
681
|
parent(jan, emma).
|
|
670
682
|
|
|
671
|
-
ancestor(
|
|
672
|
-
ancestor(
|
|
683
|
+
ancestor(?x, ?y) :- parent(?x, ?y).
|
|
684
|
+
ancestor(?x, ?z) :- parent(?x, ?y), ancestor(?y, ?z).
|
|
673
685
|
```
|
|
674
686
|
|
|
675
687
|
### 16.2 Arithmetic
|
|
676
688
|
|
|
677
|
-
```
|
|
678
|
-
square(
|
|
679
|
-
answer(three,
|
|
689
|
+
```eyelang
|
|
690
|
+
square(?x, ?y) :- mul(?x, ?x, ?y).
|
|
691
|
+
answer(three, ?y) :- square(3, ?y).
|
|
680
692
|
```
|
|
681
693
|
|
|
682
694
|
### 16.3 Lists
|
|
683
695
|
|
|
684
|
-
```
|
|
685
|
-
first([
|
|
686
|
-
answer(example,
|
|
696
|
+
```eyelang
|
|
697
|
+
first([?x | ?_rest], ?x).
|
|
698
|
+
answer(example, ?x) :- first([a, b, c], ?x).
|
|
687
699
|
```
|
|
688
700
|
|
|
689
701
|
### 16.4 Negation as failure
|
|
690
702
|
|
|
691
|
-
```
|
|
703
|
+
```eyelang
|
|
692
704
|
closed(b).
|
|
693
|
-
open(
|
|
705
|
+
open(?x) :- not(closed(?x)).
|
|
694
706
|
status(a, open) :- open(a).
|
|
695
707
|
```
|
|
696
708
|
|