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