eyeling 1.23.4 → 1.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HANDBOOK.md +6 -6
- package/README.md +1 -0
- package/dist/browser/eyeling.browser.js +11812 -11836
- package/eyeling.js +40 -12
- package/lib/prelude.js +40 -12
- package/package.json +7 -5
- package/see/README.md +146 -0
- package/see/examples/_see.js +218 -0
- package/see/examples/age.js +1433 -0
- package/see/examples/annotation.js +1294 -0
- package/see/examples/backward.js +1379 -0
- package/see/examples/backward_recursion.js +1478 -0
- package/see/examples/bayes_diagnosis.js +2857 -0
- package/see/examples/bayes_therapy.js +4126 -0
- package/see/examples/bmi.js +3012 -0
- package/see/examples/builtin_coverage.js +2498 -0
- package/see/examples/collection.js +1294 -0
- package/see/examples/complex.js +3736 -0
- package/see/examples/complex_matrix_stability.js +2947 -0
- package/see/examples/composition_of_injective_functions_is_injective.js +2144 -0
- package/see/examples/control_system.js +1892 -0
- package/see/examples/crypto_builtins_tests.js +1463 -0
- package/see/examples/delfour.js +3148 -0
- package/see/examples/digital_product_passport.js +2830 -0
- package/see/examples/dijkstra.js +2044 -0
- package/see/examples/dijkstra_risk_path.js +1848 -0
- package/see/examples/doc/age.md +27 -0
- package/see/examples/doc/annotation.md +24 -0
- package/see/examples/doc/backward.md +26 -0
- package/see/examples/doc/backward_recursion.md +26 -0
- package/see/examples/doc/bayes_diagnosis.md +41 -0
- package/see/examples/doc/bayes_therapy.md +40 -0
- package/see/examples/doc/bmi.md +38 -0
- package/see/examples/doc/builtin_coverage.md +53 -0
- package/see/examples/doc/collection.md +24 -0
- package/see/examples/doc/complex.md +38 -0
- package/see/examples/doc/complex_matrix_stability.md +35 -0
- package/see/examples/doc/composition_of_injective_functions_is_injective.md +24 -0
- package/see/examples/doc/control_system.md +32 -0
- package/see/examples/doc/crypto_builtins_tests.md +27 -0
- package/see/examples/doc/delfour.md +37 -0
- package/see/examples/doc/digital_product_passport.md +36 -0
- package/see/examples/doc/dijkstra.md +28 -0
- package/see/examples/doc/dijkstra_risk_path.md +30 -0
- package/see/examples/doc/dog.md +28 -0
- package/see/examples/doc/eco_route_insight.md +33 -0
- package/see/examples/doc/equals.md +26 -0
- package/see/examples/doc/equivalence_classes_overlap_implies_same_class.md +24 -0
- package/see/examples/doc/euler_identity.md +39 -0
- package/see/examples/doc/ev_roundtrip_planner.md +32 -0
- package/see/examples/doc/existential_rule.md +24 -0
- package/see/examples/doc/expression_eval.md +26 -0
- package/see/examples/doc/family_cousins.md +24 -0
- package/see/examples/doc/fastpow.md +29 -0
- package/see/examples/doc/fibonacci.md +28 -0
- package/see/examples/doc/french_cities.md +28 -0
- package/see/examples/doc/fundamental_theorem_arithmetic.md +36 -0
- package/see/examples/doc/genetic_knapsack_selection.md +29 -0
- package/see/examples/doc/goldbach_1000.md +31 -0
- package/see/examples/doc/good_cobbler.md +27 -0
- package/see/examples/doc/gps.md +35 -0
- package/see/examples/doc/gray_code_counter.md +31 -0
- package/see/examples/doc/greatest_lower_bound_uniqueness.md +24 -0
- package/see/examples/doc/group_inverse_uniqueness.md +24 -0
- package/see/examples/doc/hadamard_approx.md +32 -0
- package/see/examples/doc/hanoi.md +26 -0
- package/see/examples/doc/odrl_dpv_risk_ranked.md +57 -0
- package/see/examples/doc/path_discovery.md +33 -0
- package/see/examples/doc/rc_discharge_envelope.md +33 -0
- package/see/examples/doc/rdf_message_flow.md +35 -0
- package/see/examples/doc/rdf_messages.md +37 -0
- package/see/examples/doc/school_placement_audit.md +31 -0
- package/see/examples/doc/smoke_arithmetic.md +31 -0
- package/see/examples/doc/socrates.md +24 -0
- package/see/examples/doc/wind_turbine.md +37 -0
- package/see/examples/doc/witch.md +28 -0
- package/see/examples/dog.js +1410 -0
- package/see/examples/eco_route_insight.js +2084 -0
- package/see/examples/equals.js +1337 -0
- package/see/examples/equivalence_classes_overlap_implies_same_class.js +1766 -0
- package/see/examples/euler_identity.js +2012 -0
- package/see/examples/ev_roundtrip_planner.js +2536 -0
- package/see/examples/existential_rule.js +1337 -0
- package/see/examples/expression_eval.js +1772 -0
- package/see/examples/family_cousins.js +1560 -0
- package/see/examples/fastpow.js +2181 -0
- package/see/examples/fibonacci.js +1568 -0
- package/see/examples/french_cities.js +1466 -0
- package/see/examples/fundamental_theorem_arithmetic.js +2080 -0
- package/see/examples/genetic_knapsack_selection.js +1717 -0
- package/see/examples/goldbach_1000.js +1772 -0
- package/see/examples/good_cobbler.js +1370 -0
- package/see/examples/gps.js +2787 -0
- package/see/examples/gray_code_counter.js +1615 -0
- package/see/examples/greatest_lower_bound_uniqueness.js +1892 -0
- package/see/examples/group_inverse_uniqueness.js +1871 -0
- package/see/examples/hadamard_approx.js +4391 -0
- package/see/examples/hanoi.js +1599 -0
- package/see/examples/input/age.trig +27 -0
- package/see/examples/input/annotation.trig +31 -0
- package/see/examples/input/backward.trig +25 -0
- package/see/examples/input/backward_recursion.trig +25 -0
- package/see/examples/input/bayes_diagnosis.trig +111 -0
- package/see/examples/input/bayes_therapy.trig +130 -0
- package/see/examples/input/bmi.trig +28 -0
- package/see/examples/input/builtin_coverage.trig +24 -0
- package/see/examples/input/collection.trig +25 -0
- package/see/examples/input/complex.trig +26 -0
- package/see/examples/input/complex_matrix_stability.trig +65 -0
- package/see/examples/input/composition_of_injective_functions_is_injective.trig +35 -0
- package/see/examples/input/control_system.trig +31 -0
- package/see/examples/input/crypto_builtins_tests.trig +25 -0
- package/see/examples/input/delfour.trig +90 -0
- package/see/examples/input/digital_product_passport.trig +116 -0
- package/see/examples/input/dijkstra.trig +34 -0
- package/see/examples/input/dijkstra_risk_path.trig +46 -0
- package/see/examples/input/dog.trig +31 -0
- package/see/examples/input/eco_route_insight.trig +58 -0
- package/see/examples/input/equals.trig +25 -0
- package/see/examples/input/equivalence_classes_overlap_implies_same_class.trig +28 -0
- package/see/examples/input/euler_identity.trig +34 -0
- package/see/examples/input/ev_roundtrip_planner.trig +90 -0
- package/see/examples/input/existential_rule.trig +26 -0
- package/see/examples/input/expression_eval.trig +41 -0
- package/see/examples/input/family_cousins.trig +39 -0
- package/see/examples/input/fastpow.trig +25 -0
- package/see/examples/input/fibonacci.trig +51 -0
- package/see/examples/input/french_cities.trig +38 -0
- package/see/examples/input/fundamental_theorem_arithmetic.trig +42 -0
- package/see/examples/input/genetic_knapsack_selection.trig +39 -0
- package/see/examples/input/goldbach_1000.trig +53 -0
- package/see/examples/input/good_cobbler.trig +24 -0
- package/see/examples/input/gps.trig +35 -0
- package/see/examples/input/gray_code_counter.trig +33 -0
- package/see/examples/input/greatest_lower_bound_uniqueness.trig +29 -0
- package/see/examples/input/group_inverse_uniqueness.trig +29 -0
- package/see/examples/input/hadamard_approx.trig +32 -0
- package/see/examples/input/hanoi.trig +26 -0
- package/see/examples/input/odrl_dpv_risk_ranked.trig +107 -0
- package/see/examples/input/path-discovery.trig +96448 -0
- package/see/examples/input/path_discovery.trig +29 -0
- package/see/examples/input/rc_discharge_envelope.trig +37 -0
- package/see/examples/input/rdf_message_flow.trig +100 -0
- package/see/examples/input/rdf_messages.trig +69 -0
- package/see/examples/input/school_placement_audit.trig +51 -0
- package/see/examples/input/smoke_arithmetic.trig +27 -0
- package/see/examples/input/socrates.trig +26 -0
- package/see/examples/input/wind_turbine.trig +48 -0
- package/see/examples/input/witch.trig +26 -0
- package/see/examples/n3/age.n3 +28 -0
- package/see/examples/n3/annotation.n3 +7 -0
- package/see/examples/n3/backward.n3 +22 -0
- package/see/examples/n3/backward_recursion.n3 +12 -0
- package/see/examples/n3/bayes_diagnosis.n3 +122 -0
- package/see/examples/n3/bayes_therapy.n3 +149 -0
- package/see/examples/n3/bmi.n3 +145 -0
- package/see/examples/n3/builtin_coverage.n3 +68 -0
- package/see/examples/n3/collection.n3 +3 -0
- package/see/examples/n3/complex.n3 +140 -0
- package/see/examples/n3/complex_matrix_stability.n3 +113 -0
- package/see/examples/n3/composition_of_injective_functions_is_injective.n3 +27 -0
- package/see/examples/n3/control_system.n3 +59 -0
- package/see/examples/n3/crypto_builtins_tests.n3 +18 -0
- package/see/examples/n3/delfour.n3 +167 -0
- package/see/examples/n3/digital_product_passport.n3 +156 -0
- package/see/examples/n3/dijkstra.n3 +46 -0
- package/see/examples/n3/dijkstra_risk_path.n3 +67 -0
- package/see/examples/n3/dog.n3 +20 -0
- package/see/examples/n3/eco_route_insight.n3 +88 -0
- package/see/examples/n3/equals.n3 +11 -0
- package/see/examples/n3/equivalence_classes_overlap_implies_same_class.n3 +19 -0
- package/see/examples/n3/euler_identity.n3 +41 -0
- package/see/examples/n3/ev_roundtrip_planner.n3 +82 -0
- package/see/examples/n3/existential_rule.n3 +10 -0
- package/see/examples/n3/expression_eval.n3 +21 -0
- package/see/examples/n3/family_cousins.n3 +62 -0
- package/see/examples/n3/fastpow.n3 +56 -0
- package/see/examples/n3/fibonacci.n3 +44 -0
- package/see/examples/n3/french_cities.n3 +28 -0
- package/see/examples/n3/fundamental_theorem_arithmetic.n3 +84 -0
- package/see/examples/n3/genetic_knapsack_selection.n3 +54 -0
- package/see/examples/n3/goldbach_1000.n3 +66 -0
- package/see/examples/n3/good_cobbler.n3 +10 -0
- package/see/examples/n3/gps.n3 +70 -0
- package/see/examples/n3/gray_code_counter.n3 +53 -0
- package/see/examples/n3/greatest_lower_bound_uniqueness.n3 +20 -0
- package/see/examples/n3/group_inverse_uniqueness.n3 +19 -0
- package/see/examples/n3/hadamard_approx.n3 +43 -0
- package/see/examples/n3/hanoi.n3 +16 -0
- package/see/examples/n3/odrl_dpv_risk_ranked.n3 +460 -0
- package/see/examples/n3/path_discovery.n3 +43 -0
- package/see/examples/n3/rc_discharge_envelope.n3 +61 -0
- package/see/examples/n3/rdf_message_flow.n3 +209 -0
- package/see/examples/n3/rdf_messages.n3 +143 -0
- package/see/examples/n3/school_placement_audit.n3 +63 -0
- package/see/examples/n3/smoke_arithmetic.n3 +22 -0
- package/see/examples/n3/socrates.n3 +21 -0
- package/see/examples/n3/wind_turbine.n3 +85 -0
- package/see/examples/n3/witch.n3 +30 -0
- package/see/examples/odrl_dpv_risk_ranked.js +5102 -0
- package/see/examples/output/age.md +48 -0
- package/see/examples/output/annotation.md +43 -0
- package/see/examples/output/backward.md +50 -0
- package/see/examples/output/backward_recursion.md +54 -0
- package/see/examples/output/bayes_diagnosis.md +103 -0
- package/see/examples/output/bayes_therapy.md +84 -0
- package/see/examples/output/bmi.md +164 -0
- package/see/examples/output/builtin_coverage.md +99 -0
- package/see/examples/output/collection.md +44 -0
- package/see/examples/output/complex.md +61 -0
- package/see/examples/output/complex_matrix_stability.md +55 -0
- package/see/examples/output/composition_of_injective_functions_is_injective.md +62 -0
- package/see/examples/output/control_system.md +61 -0
- package/see/examples/output/crypto_builtins_tests.md +68 -0
- package/see/examples/output/delfour.md +100 -0
- package/see/examples/output/digital_product_passport.md +100 -0
- package/see/examples/output/dijkstra.md +74 -0
- package/see/examples/output/dijkstra_risk_path.md +76 -0
- package/see/examples/output/dog.md +50 -0
- package/see/examples/output/eco_route_insight.md +88 -0
- package/see/examples/output/equals.md +50 -0
- package/see/examples/output/equivalence_classes_overlap_implies_same_class.md +86 -0
- package/see/examples/output/euler_identity.md +73 -0
- package/see/examples/output/ev_roundtrip_planner.md +79 -0
- package/see/examples/output/existential_rule.md +54 -0
- package/see/examples/output/expression_eval.md +50 -0
- package/see/examples/output/family_cousins.md +187 -0
- package/see/examples/output/fastpow.md +36 -0
- package/see/examples/output/fibonacci.md +53 -0
- package/see/examples/output/french_cities.md +70 -0
- package/see/examples/output/fundamental_theorem_arithmetic.md +101 -0
- package/see/examples/output/genetic_knapsack_selection.md +66 -0
- package/see/examples/output/goldbach_1000.md +58 -0
- package/see/examples/output/good_cobbler.md +54 -0
- package/see/examples/output/gps.md +102 -0
- package/see/examples/output/gray_code_counter.md +68 -0
- package/see/examples/output/greatest_lower_bound_uniqueness.md +60 -0
- package/see/examples/output/group_inverse_uniqueness.md +60 -0
- package/see/examples/output/hadamard_approx.md +510 -0
- package/see/examples/output/hanoi.md +51 -0
- package/see/examples/output/odrl_dpv_risk_ranked.md +139 -0
- package/see/examples/output/path_discovery.md +65 -0
- package/see/examples/output/rc_discharge_envelope.md +102 -0
- package/see/examples/output/rdf_message_flow.md +198 -0
- package/see/examples/output/rdf_messages.md +134 -0
- package/see/examples/output/school_placement_audit.md +99 -0
- package/see/examples/output/smoke_arithmetic.md +54 -0
- package/see/examples/output/socrates.md +55 -0
- package/see/examples/output/wind_turbine.md +108 -0
- package/see/examples/output/witch.md +87 -0
- package/see/examples/path_discovery.js +1748 -0
- package/see/examples/rc_discharge_envelope.js +1967 -0
- package/see/examples/rdf_message_flow.js +2554 -0
- package/see/examples/rdf_messages.js +2150 -0
- package/see/examples/school_placement_audit.js +1841 -0
- package/see/examples/smoke_arithmetic.js +1457 -0
- package/see/examples/socrates.js +1394 -0
- package/see/examples/wind_turbine.js +2827 -0
- package/see/examples/witch.js +1493 -0
- package/see/see.js +1794 -0
- package/test/api.test.js +27 -0
- package/test/see.test.js +159 -0
- package/tools/n3gen.js +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
2
|
+
@prefix nepo: <http://neptune.aws.com/ontology/airroutes/> .
|
|
3
|
+
@prefix res: <http://neptune.aws.com/ontology/airroutes/resource#> .
|
|
4
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
5
|
+
@prefix list: <http://www.w3.org/2000/10/swap/list#> .
|
|
6
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
7
|
+
@prefix : <http://example.org/#> .
|
|
8
|
+
@prefix see: <https://example.org/see#> .
|
|
9
|
+
@prefix in: <https://example.org/see/input#> .
|
|
10
|
+
|
|
11
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
12
|
+
# The generated runner uses the N3 form produced from this file by tools/n3gen.js.
|
|
13
|
+
|
|
14
|
+
# No source facts were present in the N3 program.
|
|
15
|
+
|
|
16
|
+
in:metadata {
|
|
17
|
+
in:run a see:InputDataset .
|
|
18
|
+
in:run see:name "path_discovery" .
|
|
19
|
+
in:run see:title "Path Discovery" .
|
|
20
|
+
in:run see:sourceFile "examples/n3/path_discovery.n3" .
|
|
21
|
+
in:run see:sourceSHA256 "9481a2b27a6cae4d73f312c7d8403d1abd7beab573f627f591ea8301073fe4db" .
|
|
22
|
+
in:run see:description "SEE version of the Eyeling airport path-discovery example.\nThe full airroutes evidence is intentionally stored in\nexamples/input/path-discovery.trig, not in this source file. This file keeps\nonly the path-finding rules and the query shape from the upstream example." .
|
|
23
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
24
|
+
in:run see:inputFacts 0 .
|
|
25
|
+
in:run see:compiledRules 1 .
|
|
26
|
+
in:run see:compiledBackwardRules 2 .
|
|
27
|
+
in:run see:compiledFuses 0 .
|
|
28
|
+
in:run see:compiledQueries 0 .
|
|
29
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
@prefix : <https://eyereasoner.github.io/see/examples/rc-discharge-envelope#> .
|
|
2
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
3
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
4
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
|
|
5
|
+
@prefix see: <https://example.org/see#> .
|
|
6
|
+
@prefix in: <https://example.org/see/input#> .
|
|
7
|
+
|
|
8
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
9
|
+
# The generated runner reads this TriG evidence directly.
|
|
10
|
+
|
|
11
|
+
:case :samplePeriod 0.025 .
|
|
12
|
+
:case :exactDecaySymbol "exp(-1/4)" .
|
|
13
|
+
:case :decayLower 0.778800783 .
|
|
14
|
+
:case :decayUpper 0.7788007831 .
|
|
15
|
+
:case :initialVoltage 24 .
|
|
16
|
+
:case :tolerance 1 .
|
|
17
|
+
:case :maxStep 18 .
|
|
18
|
+
:case :candidateStep :step12 .
|
|
19
|
+
:case :candidateStep :step13 .
|
|
20
|
+
:step12 :index 12 .
|
|
21
|
+
:step13 :index 13 .
|
|
22
|
+
:step13 :previousStep :step12 .
|
|
23
|
+
|
|
24
|
+
in:metadata {
|
|
25
|
+
in:run a see:InputDataset .
|
|
26
|
+
in:run see:name "rc_discharge_envelope" .
|
|
27
|
+
in:run see:title "RC Discharge Envelope" .
|
|
28
|
+
in:run see:sourceFile "examples/n3/rc_discharge_envelope.n3" .
|
|
29
|
+
in:run see:sourceSHA256 "41acff69cd2994230faedf5a466b4c43d47cdff9dc6d834baecd9865979160b8" .
|
|
30
|
+
in:run see:description "Certify when a sampled RC capacitor is guaranteed below tolerance using an\nupper decay bound. The witness is derived by N3 rules and compiled to SEE." .
|
|
31
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
32
|
+
in:run see:inputFacts 12 .
|
|
33
|
+
in:run see:compiledRules 6 .
|
|
34
|
+
in:run see:compiledBackwardRules 0 .
|
|
35
|
+
in:run see:compiledFuses 0 .
|
|
36
|
+
in:run see:compiledQueries 0 .
|
|
37
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
@prefix : <https://eyereasoner.github.io/see/examples/rdf-message-flow#> .
|
|
2
|
+
@prefix msg: <https://example.org/msg#> .
|
|
3
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
4
|
+
@prefix sosa: <http://www.w3.org/ns/sosa/> .
|
|
5
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
6
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
7
|
+
@prefix list: <http://www.w3.org/2000/10/swap/list#> .
|
|
8
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
9
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
|
|
10
|
+
@prefix see: <https://example.org/see#> .
|
|
11
|
+
@prefix in: <https://example.org/see/input#> .
|
|
12
|
+
|
|
13
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
14
|
+
# The generated runner reads this TriG evidence directly.
|
|
15
|
+
|
|
16
|
+
:temperatureFlow rdf:type msg:MessageStream .
|
|
17
|
+
:temperatureFlow msg:orderedMessages (:m001 :m002 :m003 :m004 :m005) .
|
|
18
|
+
:temperatureFlow msg:message :m001 .
|
|
19
|
+
:temperatureFlow msg:message :m002 .
|
|
20
|
+
:temperatureFlow msg:message :m003 .
|
|
21
|
+
:temperatureFlow msg:message :m004 .
|
|
22
|
+
:temperatureFlow msg:message :m005 .
|
|
23
|
+
:temperatureFlow :pipeline (:ingest :validate :interpret :route :sink) .
|
|
24
|
+
:temperatureFlow :highThreshold 26 .
|
|
25
|
+
:m001 :atStage :ingest .
|
|
26
|
+
:m001 rdf:type msg:RDFMessage .
|
|
27
|
+
:m001 msg:offset 1 .
|
|
28
|
+
:m001 msg:nextMessage :m002 .
|
|
29
|
+
:m001 prov:generatedAtTime "2026-05-12T18:20:00Z" .
|
|
30
|
+
:m001 msg:payloadKind :observation .
|
|
31
|
+
:m001 msg:expectedResult 21 .
|
|
32
|
+
:m001 msg:payload in:formula1 .
|
|
33
|
+
:m002 rdf:type msg:RDFMessage .
|
|
34
|
+
:m002 msg:offset 2 .
|
|
35
|
+
:m002 msg:nextMessage :m003 .
|
|
36
|
+
:m002 prov:generatedAtTime "2026-05-12T18:21:00Z" .
|
|
37
|
+
:m002 msg:payloadKind :observation .
|
|
38
|
+
:m002 msg:expectedResult 22 .
|
|
39
|
+
:m002 msg:payload in:formula2 .
|
|
40
|
+
:m003 rdf:type msg:RDFMessage .
|
|
41
|
+
:m003 msg:offset 3 .
|
|
42
|
+
:m003 msg:nextMessage :m004 .
|
|
43
|
+
:m003 prov:generatedAtTime "2026-05-12T18:22:00Z" .
|
|
44
|
+
:m003 msg:payloadKind :heartbeat .
|
|
45
|
+
:m004 rdf:type msg:RDFMessage .
|
|
46
|
+
:m004 msg:offset 4 .
|
|
47
|
+
:m004 msg:nextMessage :m005 .
|
|
48
|
+
:m004 prov:generatedAtTime "2026-05-12T18:23:00Z" .
|
|
49
|
+
:m004 msg:payloadKind :observation .
|
|
50
|
+
:m004 msg:expectedResult 28 .
|
|
51
|
+
:m004 msg:payload in:formula3 .
|
|
52
|
+
:m005 rdf:type msg:RDFMessage .
|
|
53
|
+
:m005 msg:offset 5 .
|
|
54
|
+
:m005 prov:generatedAtTime "2026-05-12T18:24:00Z" .
|
|
55
|
+
:m005 msg:payloadKind :observation .
|
|
56
|
+
:m005 msg:expectedResult 29 .
|
|
57
|
+
:m005 msg:payload in:formula4 .
|
|
58
|
+
|
|
59
|
+
in:formula1 {
|
|
60
|
+
_:m001b0 rdf:type sosa:Observation .
|
|
61
|
+
_:m001b0 sosa:madeBySensor :thermometerA .
|
|
62
|
+
_:m001b0 sosa:resultTime "2026-05-12T18:20:00Z" .
|
|
63
|
+
_:m001b0 sosa:hasSimpleResult 21 .
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
in:formula2 {
|
|
67
|
+
_:m002b0 rdf:type sosa:Observation .
|
|
68
|
+
_:m002b0 sosa:madeBySensor :thermometerA .
|
|
69
|
+
_:m002b0 sosa:resultTime "2026-05-12T18:21:00Z" .
|
|
70
|
+
_:m002b0 sosa:hasSimpleResult 22 .
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
in:formula3 {
|
|
74
|
+
_:m004b0 rdf:type sosa:Observation .
|
|
75
|
+
_:m004b0 sosa:madeBySensor :thermometerA .
|
|
76
|
+
_:m004b0 sosa:resultTime "2026-05-12T18:23:00Z" .
|
|
77
|
+
_:m004b0 sosa:hasSimpleResult 28 .
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
in:formula4 {
|
|
81
|
+
_:m005b0 rdf:type sosa:Observation .
|
|
82
|
+
_:m005b0 sosa:madeBySensor :thermometerA .
|
|
83
|
+
_:m005b0 sosa:resultTime "2026-05-12T18:24:00Z" .
|
|
84
|
+
_:m005b0 sosa:hasSimpleResult 29 .
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
in:metadata {
|
|
88
|
+
in:run a see:InputDataset .
|
|
89
|
+
in:run see:name "rdf_message_flow" .
|
|
90
|
+
in:run see:title "RDF Message Flow" .
|
|
91
|
+
in:run see:sourceFile "examples/n3/rdf_message_flow.n3" .
|
|
92
|
+
in:run see:sourceSHA256 "e4e534c8ac3c2aa276e7158cca8d3146531879033f73685c302b486be2ab0099" .
|
|
93
|
+
in:run see:description "A companion to rdf_messages.n3. This example focuses on a live stream where\nRDF Messages continuously flow through a small processing pipeline. The next\nmessage is released only after the current message reaches the sink, so the\nstream behaves as an ordered, replayable flow rather than a single merged RDF\ngraph." .
|
|
94
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
95
|
+
in:run see:inputFacts 42 .
|
|
96
|
+
in:run see:compiledRules 9 .
|
|
97
|
+
in:run see:compiledBackwardRules 0 .
|
|
98
|
+
in:run see:compiledFuses 0 .
|
|
99
|
+
in:run see:compiledQueries 1 .
|
|
100
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
@prefix : <https://eyereasoner.github.io/see/examples/rdf-messages#> .
|
|
2
|
+
@prefix msg: <https://w3c-cg.github.io/rsp/spec/messages#> .
|
|
3
|
+
@prefix prov: <http://www.w3.org/ns/prov#> .
|
|
4
|
+
@prefix sosa: <http://www.w3.org/ns/sosa/> .
|
|
5
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
|
|
6
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
7
|
+
@prefix list: <http://www.w3.org/2000/10/swap/list#> .
|
|
8
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
9
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
|
|
10
|
+
@prefix see: <https://example.org/see#> .
|
|
11
|
+
@prefix in: <https://example.org/see/input#> .
|
|
12
|
+
|
|
13
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
14
|
+
# The generated runner reads this TriG evidence directly.
|
|
15
|
+
|
|
16
|
+
:temperatureLog rdf:type msg:MessageLog .
|
|
17
|
+
:temperatureLog msg:orderedMessages (:m001 :m002 :m003) .
|
|
18
|
+
:temperatureLog msg:message :m001 .
|
|
19
|
+
:temperatureLog msg:message :m002 .
|
|
20
|
+
:temperatureLog msg:message :m003 .
|
|
21
|
+
:temperatureLog msg:profile :generatedAtTimeProfile .
|
|
22
|
+
:temperatureLog msg:retentionPolicy "replayable archive" .
|
|
23
|
+
:m001 rdf:type msg:RDFMessage .
|
|
24
|
+
:m001 msg:offset 1 .
|
|
25
|
+
:m001 prov:generatedAtTime "2026-05-12T18:20:00Z" .
|
|
26
|
+
:m001 msg:payloadKind :observation .
|
|
27
|
+
:m001 msg:localBlankLabel "_:b0" .
|
|
28
|
+
:m001 msg:expectedResult 22 .
|
|
29
|
+
:m001 msg:payload in:formula1 .
|
|
30
|
+
:m002 rdf:type msg:RDFMessage .
|
|
31
|
+
:m002 msg:offset 2 .
|
|
32
|
+
:m002 prov:generatedAtTime "2026-05-12T18:22:00Z" .
|
|
33
|
+
:m002 msg:payloadKind :heartbeat .
|
|
34
|
+
:m003 rdf:type msg:RDFMessage .
|
|
35
|
+
:m003 msg:offset 3 .
|
|
36
|
+
:m003 prov:generatedAtTime "2026-05-12T18:25:00Z" .
|
|
37
|
+
:m003 msg:payloadKind :observation .
|
|
38
|
+
:m003 msg:localBlankLabel "_:b0" .
|
|
39
|
+
:m003 msg:expectedResult 23 .
|
|
40
|
+
:m003 msg:payload in:formula2 .
|
|
41
|
+
|
|
42
|
+
in:formula1 {
|
|
43
|
+
_:m001b0 rdf:type sosa:Observation .
|
|
44
|
+
_:m001b0 sosa:madeBySensor :thermometerA .
|
|
45
|
+
_:m001b0 sosa:resultTime "2026-05-12T18:20:00Z" .
|
|
46
|
+
_:m001b0 sosa:hasSimpleResult 22 .
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
in:formula2 {
|
|
50
|
+
_:m003b0 rdf:type sosa:Observation .
|
|
51
|
+
_:m003b0 sosa:madeBySensor :thermometerA .
|
|
52
|
+
_:m003b0 sosa:resultTime "2026-05-12T18:25:00Z" .
|
|
53
|
+
_:m003b0 sosa:hasSimpleResult 23 .
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
in:metadata {
|
|
57
|
+
in:run a see:InputDataset .
|
|
58
|
+
in:run see:name "rdf_messages" .
|
|
59
|
+
in:run see:title "RDF Messages" .
|
|
60
|
+
in:run see:sourceFile "examples/n3/rdf_messages.n3" .
|
|
61
|
+
in:run see:sourceSHA256 "2ea8b414b92e65531cf384000955ca47811d5b7c779a8d2c9fb007515e745f32" .
|
|
62
|
+
in:run see:description "This SEE example models the main idea from\nhttps://pietercolpaert.be/papers/eswc2026-rdf-messages/:\na message stream/log is not just one freely mergeable RDF graph. It is an\nordered sequence of RDF Datasets that are interpreted atomically, one message\nat a time. The middle message is deliberately empty to model a heartbeat, and\nthe local blank-node label \"_:b0\" is deliberately reused by two messages to\nshow message-scoped blank nodes." .
|
|
63
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
64
|
+
in:run see:inputFacts 25 .
|
|
65
|
+
in:run see:compiledRules 6 .
|
|
66
|
+
in:run see:compiledBackwardRules 0 .
|
|
67
|
+
in:run see:compiledFuses 0 .
|
|
68
|
+
in:run see:compiledQueries 1 .
|
|
69
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
@prefix : <https://eyereasoner.github.io/see/examples/school-placement-audit#> .
|
|
2
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
3
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
4
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
|
|
5
|
+
@prefix see: <https://example.org/see#> .
|
|
6
|
+
@prefix in: <https://example.org/see/input#> .
|
|
7
|
+
|
|
8
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
9
|
+
# The generated runner reads this TriG evidence directly.
|
|
10
|
+
|
|
11
|
+
:Policy :maxWalkingMeters 2500 .
|
|
12
|
+
:Policy :preferencePenaltyMeters 600 .
|
|
13
|
+
:Ada :name "Ada" .
|
|
14
|
+
:Ada :provisional :Centrum .
|
|
15
|
+
:Ada :auditedBest :Lindholmen .
|
|
16
|
+
:Ada :hiddenDetour 3000 .
|
|
17
|
+
:Ada :walkingMeters 3600 .
|
|
18
|
+
:Bjorn :name "Björn" .
|
|
19
|
+
:Bjorn :provisional :Centrum .
|
|
20
|
+
:Bjorn :auditedBest :Backa .
|
|
21
|
+
:Bjorn :hiddenDetour 2000 .
|
|
22
|
+
:Bjorn :walkingMeters 3100 .
|
|
23
|
+
:Clara :name "Clara" .
|
|
24
|
+
:Clara :provisional :Haga .
|
|
25
|
+
:Clara :auditedBest :Haga .
|
|
26
|
+
:Clara :hiddenDetour 150 .
|
|
27
|
+
:Clara :walkingMeters 800 .
|
|
28
|
+
:Davi :name "Davi" .
|
|
29
|
+
:Davi :provisional :Centrum .
|
|
30
|
+
:Davi :auditedBest :Haga .
|
|
31
|
+
:Davi :hiddenDetour 1800 .
|
|
32
|
+
:Davi :walkingMeters 2800 .
|
|
33
|
+
:Lindholmen :label "Lindholmen" .
|
|
34
|
+
:Haga :label "Haga" .
|
|
35
|
+
:Centrum :label "Centrum" .
|
|
36
|
+
:Backa :label "Backa" .
|
|
37
|
+
|
|
38
|
+
in:metadata {
|
|
39
|
+
in:run a see:InputDataset .
|
|
40
|
+
in:run see:name "school_placement_audit" .
|
|
41
|
+
in:run see:title "School Placement Route Audit" .
|
|
42
|
+
in:run see:sourceFile "examples/n3/school_placement_audit.n3" .
|
|
43
|
+
in:run see:sourceSHA256 "8bea39b2ea4c3045fed64b6e7adef0ca8cdf8d14c3735e28e831a759dae600fd" .
|
|
44
|
+
in:run see:description "N3-compiled version of the school placement audit. The original student,\nschool, distance, and policy JSON is preserved as the data-input sidecar." .
|
|
45
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
46
|
+
in:run see:inputFacts 26 .
|
|
47
|
+
in:run see:compiledRules 4 .
|
|
48
|
+
in:run see:compiledBackwardRules 0 .
|
|
49
|
+
in:run see:compiledFuses 0 .
|
|
50
|
+
in:run see:compiledQueries 1 .
|
|
51
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@prefix : <https://example.org/see/smoke#> .
|
|
2
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
3
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
|
|
4
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
5
|
+
@prefix see: <https://example.org/see#> .
|
|
6
|
+
@prefix in: <https://example.org/see/input#> .
|
|
7
|
+
|
|
8
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
9
|
+
# The generated runner reads this TriG evidence directly.
|
|
10
|
+
|
|
11
|
+
:Input :x 6 .
|
|
12
|
+
:Input :y 7 .
|
|
13
|
+
|
|
14
|
+
in:metadata {
|
|
15
|
+
in:run a see:InputDataset .
|
|
16
|
+
in:run see:name "smoke_arithmetic" .
|
|
17
|
+
in:run see:title "Smoke Arithmetic" .
|
|
18
|
+
in:run see:sourceFile "examples/n3/smoke_arithmetic.n3" .
|
|
19
|
+
in:run see:sourceSHA256 "e254b8b9be8207c07f29cf30426466e2d916286b5f93ea4385786a5d80303499" .
|
|
20
|
+
in:run see:description "Small Notation3 source used to prove that see.js generates a specialized JS\nexample which derives its answer from facts, math built-ins, fuses, and string\nformatting instead of reading a prewritten conclusion." .
|
|
21
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
22
|
+
in:run see:inputFacts 2 .
|
|
23
|
+
in:run see:compiledRules 2 .
|
|
24
|
+
in:run see:compiledBackwardRules 0 .
|
|
25
|
+
in:run see:compiledFuses 0 .
|
|
26
|
+
in:run see:compiledQueries 0 .
|
|
27
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
|
2
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
3
|
+
@prefix : <http://example.org/socrates#> .
|
|
4
|
+
@prefix see: <https://example.org/see#> .
|
|
5
|
+
@prefix in: <https://example.org/see/input#> .
|
|
6
|
+
|
|
7
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
8
|
+
# The generated runner reads this TriG evidence directly.
|
|
9
|
+
|
|
10
|
+
:Socrates rdf:type :Human .
|
|
11
|
+
:Human rdfs:subClassOf :Mortal .
|
|
12
|
+
|
|
13
|
+
in:metadata {
|
|
14
|
+
in:run a see:InputDataset .
|
|
15
|
+
in:run see:name "socrates" .
|
|
16
|
+
in:run see:title "Socrates inference" .
|
|
17
|
+
in:run see:sourceFile "examples/n3/socrates.n3" .
|
|
18
|
+
in:run see:sourceSHA256 "a0c8a488401f3247c2371978378e7f4c532c8b6c22d5f5642665e93fd8c576a4" .
|
|
19
|
+
in:run see:description "" .
|
|
20
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
21
|
+
in:run see:inputFacts 2 .
|
|
22
|
+
in:run see:compiledRules 1 .
|
|
23
|
+
in:run see:compiledBackwardRules 0 .
|
|
24
|
+
in:run see:compiledFuses 0 .
|
|
25
|
+
in:run see:compiledQueries 1 .
|
|
26
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
@prefix : <https://eyereasoner.github.io/see/examples/wind-turbine#> .
|
|
2
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#> .
|
|
3
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
4
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
|
|
5
|
+
@prefix see: <https://example.org/see#> .
|
|
6
|
+
@prefix in: <https://example.org/see/input#> .
|
|
7
|
+
|
|
8
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
9
|
+
# The generated runner reads this TriG evidence directly.
|
|
10
|
+
|
|
11
|
+
:case :cutInMS 3.5 .
|
|
12
|
+
:case :ratedMS 12 .
|
|
13
|
+
:case :cutOutMS 25 .
|
|
14
|
+
:case :ratedPowerMW 3.2 .
|
|
15
|
+
:case :intervalMinutes 10 .
|
|
16
|
+
:case :sample :t1 .
|
|
17
|
+
:case :sample :t2 .
|
|
18
|
+
:case :sample :t3 .
|
|
19
|
+
:case :sample :t4 .
|
|
20
|
+
:case :sample :t5 .
|
|
21
|
+
:case :sample :t6 .
|
|
22
|
+
:t1 :index 1 .
|
|
23
|
+
:t1 :speedMS 3 .
|
|
24
|
+
:t2 :index 2 .
|
|
25
|
+
:t2 :speedMS 6.5 .
|
|
26
|
+
:t3 :index 3 .
|
|
27
|
+
:t3 :speedMS 11.2 .
|
|
28
|
+
:t4 :index 4 .
|
|
29
|
+
:t4 :speedMS 15 .
|
|
30
|
+
:t5 :index 5 .
|
|
31
|
+
:t5 :speedMS 24.5 .
|
|
32
|
+
:t6 :index 6 .
|
|
33
|
+
:t6 :speedMS 27 .
|
|
34
|
+
|
|
35
|
+
in:metadata {
|
|
36
|
+
in:run a see:InputDataset .
|
|
37
|
+
in:run see:name "wind_turbine" .
|
|
38
|
+
in:run see:title "Wind Turbine Envelope" .
|
|
39
|
+
in:run see:sourceFile "examples/n3/wind_turbine.n3" .
|
|
40
|
+
in:run see:sourceSHA256 "cf2129430d3165b9e304a078ce1b40c0f4634b4c98a14832c096ac0c1a70a049" .
|
|
41
|
+
in:run see:description "Classify wind-speed samples against a turbine operating envelope and compute\ninterval energy. The classification and cubic power curve are expressed in N3\nrules and compiled into a standalone SEE JavaScript example." .
|
|
42
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
43
|
+
in:run see:inputFacts 23 .
|
|
44
|
+
in:run see:compiledRules 7 .
|
|
45
|
+
in:run see:compiledBackwardRules 0 .
|
|
46
|
+
in:run see:compiledFuses 0 .
|
|
47
|
+
in:run see:compiledQueries 0 .
|
|
48
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@prefix : <http://example.org/witch#> .
|
|
2
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
|
|
3
|
+
@prefix see: <https://example.org/see#> .
|
|
4
|
+
@prefix in: <https://example.org/see/input#> .
|
|
5
|
+
|
|
6
|
+
# Formal SEE input evidence in RDF 1.2 TriG.
|
|
7
|
+
# The generated runner reads this TriG evidence directly.
|
|
8
|
+
|
|
9
|
+
:GIRL rdf:type :WOMAN .
|
|
10
|
+
:DUCK rdf:type :FLOATS .
|
|
11
|
+
:DUCK :SAMEWEIGHT :GIRL .
|
|
12
|
+
|
|
13
|
+
in:metadata {
|
|
14
|
+
in:run a see:InputDataset .
|
|
15
|
+
in:run see:name "witch" .
|
|
16
|
+
in:run see:title "Burn the witch" .
|
|
17
|
+
in:run see:sourceFile "examples/n3/witch.n3" .
|
|
18
|
+
in:run see:sourceSHA256 "bc0a493c490136926a3e3086f6b8bc63a8ae97334d723c7737eeaea837428045" .
|
|
19
|
+
in:run see:description "http://clarkparsia.com/weblog/2007/01/02/burn-the-witch/\nhttp://www.netfunny.com/rhf/jokes/90q4/burnher.html\noriginal http://www.w3.org/2000/10/swap/test/reason/witch.n3" .
|
|
20
|
+
in:run see:compiler "see.js N3-to-JS compiler" .
|
|
21
|
+
in:run see:inputFacts 3 .
|
|
22
|
+
in:run see:compiledRules 4 .
|
|
23
|
+
in:run see:compiledBackwardRules 0 .
|
|
24
|
+
in:run see:compiledFuses 0 .
|
|
25
|
+
in:run see:compiledQueries 0 .
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# ===========================================
|
|
2
|
+
# Age checker
|
|
3
|
+
# Is the age of a person above some duration?
|
|
4
|
+
# ===========================================
|
|
5
|
+
|
|
6
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
|
|
7
|
+
@prefix time: <http://www.w3.org/2000/10/swap/time#>.
|
|
8
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#>.
|
|
9
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
|
|
10
|
+
@prefix : <https://example.org/#>.
|
|
11
|
+
|
|
12
|
+
# person data
|
|
13
|
+
:patH :birthDay "1944-08-21"^^xsd:date.
|
|
14
|
+
|
|
15
|
+
# is the age of a person above some duration?
|
|
16
|
+
{ ?S :ageAbove ?A } <= {
|
|
17
|
+
?S :birthDay ?B.
|
|
18
|
+
"" time:localTime ?D.
|
|
19
|
+
(?D ?B) math:difference ?F.
|
|
20
|
+
?F math:greaterThan ?A.
|
|
21
|
+
}.
|
|
22
|
+
|
|
23
|
+
# test
|
|
24
|
+
{
|
|
25
|
+
?S :ageAbove "P80Y"^^xsd:duration.
|
|
26
|
+
} log:query {
|
|
27
|
+
:test :is true.
|
|
28
|
+
}.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
@prefix : <https://eyereasoner.github.io/see/examples/annotation#>.
|
|
2
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
|
|
3
|
+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
|
|
4
|
+
:a :name "Alice" .
|
|
5
|
+
:t log:nameOf { :a :name "Alice" . } .
|
|
6
|
+
:t :statedBy :bob .
|
|
7
|
+
:t :recorded "2021-07-07"^^xsd:date .
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# ==============================================================
|
|
2
|
+
# Backward rule example
|
|
3
|
+
# See https://www.w3.org/2000/10/swap/doc/tutorial-1.pdf page 17
|
|
4
|
+
# ==============================================================
|
|
5
|
+
|
|
6
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#>.
|
|
7
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
|
|
8
|
+
@prefix : <http://example.org/#>.
|
|
9
|
+
|
|
10
|
+
# something is more interesting if it is greater
|
|
11
|
+
{
|
|
12
|
+
?X :moreInterestingThan ?Y.
|
|
13
|
+
} <= {
|
|
14
|
+
?X math:greaterThan ?Y.
|
|
15
|
+
}.
|
|
16
|
+
|
|
17
|
+
# derivation (forward)
|
|
18
|
+
{
|
|
19
|
+
5 :moreInterestingThan 3.
|
|
20
|
+
} => {
|
|
21
|
+
5 :isIndeedMoreInterestingThan 3.
|
|
22
|
+
}.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Backward recursion coverage
|
|
2
|
+
# Demonstrates recursive <= rules compiled into specialized JavaScript.
|
|
3
|
+
|
|
4
|
+
@prefix : <urn:example#>.
|
|
5
|
+
:a :parent :b.
|
|
6
|
+
:b :parent :c.
|
|
7
|
+
|
|
8
|
+
{ ?x :ancestor ?y } <= { ?x :parent ?y }.
|
|
9
|
+
{ ?x :ancestor ?z } <= { ?x :parent ?y. ?y :ancestor ?z }.
|
|
10
|
+
|
|
11
|
+
{ :a :ancestor ?who } => { :a :reaches ?who }.
|
|
12
|
+
{ :a :reaches ?who } log:query { :a :reaches ?who }.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# ===============
|
|
2
|
+
# Bayes Diagnosis
|
|
3
|
+
# ===============
|
|
4
|
+
# Naive Bayes diagnosis example, adapted from Eyeling's bayes-diagnosis.n3.
|
|
5
|
+
# The facts and rules compute unnormalized likelihoods, normalize them into
|
|
6
|
+
# posterior probabilities, and emit a SEE report for the highest posterior.
|
|
7
|
+
# Values are illustrative only and are not medical advice.
|
|
8
|
+
|
|
9
|
+
@prefix : <https://eyereasoner.github.io/see/examples/bayes-diagnosis#>.
|
|
10
|
+
@prefix math: <http://www.w3.org/2000/10/swap/math#>.
|
|
11
|
+
@prefix list: <http://www.w3.org/2000/10/swap/list#>.
|
|
12
|
+
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
|
|
13
|
+
@prefix string: <http://www.w3.org/2000/10/swap/string#>.
|
|
14
|
+
|
|
15
|
+
:COVID19 a :Disease; :label "COVID-19"; :prior 0.05.
|
|
16
|
+
:Influenza a :Disease; :label "Influenza"; :prior 0.03.
|
|
17
|
+
:AllergicRhinitis a :Disease; :label "Allergic rhinitis"; :prior 0.10.
|
|
18
|
+
:BacterialPneumonia a :Disease; :label "Bacterial pneumonia"; :prior 0.01.
|
|
19
|
+
|
|
20
|
+
:COVID19 :pGiven [ :symptom :Fever; :p 0.70 ], [ :symptom :DryCough; :p 0.65 ], [ :symptom :LossOfSmell; :p 0.40 ], [ :symptom :Sneezing; :p 0.15 ], [ :symptom :ShortBreath; :p 0.20 ].
|
|
21
|
+
:Influenza :pGiven [ :symptom :Fever; :p 0.80 ], [ :symptom :DryCough; :p 0.50 ], [ :symptom :LossOfSmell; :p 0.05 ], [ :symptom :Sneezing; :p 0.20 ], [ :symptom :ShortBreath; :p 0.10 ].
|
|
22
|
+
:AllergicRhinitis :pGiven [ :symptom :Fever; :p 0.05 ], [ :symptom :DryCough; :p 0.15 ], [ :symptom :LossOfSmell; :p 0.10 ], [ :symptom :Sneezing; :p 0.80 ], [ :symptom :ShortBreath; :p 0.05 ].
|
|
23
|
+
:BacterialPneumonia :pGiven [ :symptom :Fever; :p 0.70 ], [ :symptom :DryCough; :p 0.60 ], [ :symptom :LossOfSmell; :p 0.02 ], [ :symptom :Sneezing; :p 0.05 ], [ :symptom :ShortBreath; :p 0.60 ].
|
|
24
|
+
|
|
25
|
+
:Case a :PatientCase;
|
|
26
|
+
:diseases (:COVID19 :Influenza :AllergicRhinitis :BacterialPneumonia);
|
|
27
|
+
:evidence (
|
|
28
|
+
[ :symptom :Fever; :present true ]
|
|
29
|
+
[ :symptom :DryCough; :present true ]
|
|
30
|
+
[ :symptom :LossOfSmell; :present true ]
|
|
31
|
+
[ :symptom :Sneezing; :present false ]
|
|
32
|
+
[ :symptom :ShortBreath; :present true ]
|
|
33
|
+
).
|
|
34
|
+
|
|
35
|
+
# Probability guard rails: the compiler turns these fuses into runtime guards.
|
|
36
|
+
{ ?d :prior ?p. ?p math:lessThan 0. } => false.
|
|
37
|
+
{ ?d :prior ?p. ?p math:greaterThan 1. } => false.
|
|
38
|
+
{ ?d :pGiven [ :p ?p ]. ?p math:lessThan 0. } => false.
|
|
39
|
+
{ ?d :pGiven [ :p ?p ]. ?p math:greaterThan 1. } => false.
|
|
40
|
+
|
|
41
|
+
# pairList(d, (x1 x2 ...)) -> ((d x1) (d x2) ...)
|
|
42
|
+
{ ( ?d () ) :pairList () } <= true.
|
|
43
|
+
{ ( ?d ?xs ) :pairList ?pairs } <= {
|
|
44
|
+
?xs list:firstRest ( ?x ?rest ).
|
|
45
|
+
( ?d ?rest ) :pairList ?tailPairs.
|
|
46
|
+
?pairs list:firstRest ( ( ?d ?x ) ?tailPairs ).
|
|
47
|
+
}.
|
|
48
|
+
|
|
49
|
+
# Evidence factor: present symptoms use P(symptom|disease), absent symptoms use 1-P.
|
|
50
|
+
{ ( ?d ?ev ) :factor ?p } <= {
|
|
51
|
+
?ev :symptom ?s; :present true.
|
|
52
|
+
?d :pGiven [ :symptom ?s; :p ?p ].
|
|
53
|
+
}.
|
|
54
|
+
{ ( ?d ?ev ) :factor ?q } <= {
|
|
55
|
+
?ev :symptom ?s; :present false.
|
|
56
|
+
?d :pGiven [ :symptom ?s; :p ?p ].
|
|
57
|
+
( 1 ?p ) math:difference ?q.
|
|
58
|
+
}.
|
|
59
|
+
|
|
60
|
+
# unnormalized score(d) = prior(d) * product of evidence factors.
|
|
61
|
+
{ ?d :scoreFor ?score } <= {
|
|
62
|
+
?d :prior ?prior.
|
|
63
|
+
:Case :evidence ?evs.
|
|
64
|
+
( ?d ?evs ) :pairList ?pairs.
|
|
65
|
+
( ?pairs :factor ) list:map ?factors.
|
|
66
|
+
?factors math:product ?likelihood.
|
|
67
|
+
( ?prior ?likelihood ) math:product ?score.
|
|
68
|
+
}.
|
|
69
|
+
|
|
70
|
+
# Normalize scores into posteriors.
|
|
71
|
+
{
|
|
72
|
+
:Case :diseases ?ds.
|
|
73
|
+
( ?ds :scoreFor ) list:map ?scores.
|
|
74
|
+
?scores math:sum ?total.
|
|
75
|
+
} => {
|
|
76
|
+
:Case :scores ?scores;
|
|
77
|
+
:evidenceTotal ?total.
|
|
78
|
+
}.
|
|
79
|
+
{
|
|
80
|
+
:Case :diseases ?ds;
|
|
81
|
+
:scores ?scores;
|
|
82
|
+
:evidenceTotal ?total.
|
|
83
|
+
?ds list:iterate ( ?i ?d ).
|
|
84
|
+
( ?scores ?i ) list:memberAt ?score.
|
|
85
|
+
( ?score ?total ) math:quotient ?post.
|
|
86
|
+
} => {
|
|
87
|
+
:Case :result [ :disease ?d; :unnormalized ?score; :posterior ?post ].
|
|
88
|
+
?d :posterior ?post.
|
|
89
|
+
}.
|
|
90
|
+
|
|
91
|
+
# Pick the posterior maximum by comparing to every case disease.
|
|
92
|
+
{
|
|
93
|
+
:Case :result [ :disease ?d; :posterior ?p ].
|
|
94
|
+
:COVID19 :posterior ?pCOVID.
|
|
95
|
+
:Influenza :posterior ?pFlu.
|
|
96
|
+
:AllergicRhinitis :posterior ?pAllergy.
|
|
97
|
+
:BacterialPneumonia :posterior ?pPneumonia.
|
|
98
|
+
?p math:notLessThan ?pCOVID.
|
|
99
|
+
?p math:notLessThan ?pFlu.
|
|
100
|
+
?p math:notLessThan ?pAllergy.
|
|
101
|
+
?p math:notLessThan ?pPneumonia.
|
|
102
|
+
} => {
|
|
103
|
+
:Case :winner ?d;
|
|
104
|
+
:winnerPosterior ?p.
|
|
105
|
+
}.
|
|
106
|
+
|
|
107
|
+
{
|
|
108
|
+
:Case :winner ?winner;
|
|
109
|
+
:winnerPosterior ?winnerPost;
|
|
110
|
+
:evidenceTotal ?total.
|
|
111
|
+
?winner :label ?winnerLabel.
|
|
112
|
+
:COVID19 :posterior ?covidPost; :scoreFor ?covidScore.
|
|
113
|
+
:Influenza :posterior ?fluPost; :scoreFor ?fluScore.
|
|
114
|
+
:AllergicRhinitis :posterior ?allergyPost; :scoreFor ?allergyScore.
|
|
115
|
+
:BacterialPneumonia :posterior ?pneuPost; :scoreFor ?pneuScore.
|
|
116
|
+
("=== Answer ===\nThe most likely disease is %s (posterior = %.6f).\n\nFull posterior distribution:\n COVID-19 posterior = %.6f (unnormalized = %.8f)\n Influenza posterior = %.6f (unnormalized = %.8f)\n Allergic rhinitis posterior = %.6f (unnormalized = %.8f)\n Bacterial pneumonia posterior = %.6f (unnormalized = %.8f)\n\n=== Explanation ===\nEvidence: Fever=present, DryCough=present, LossOfSmell=present, Sneezing=absent, ShortBreath=present. Evidence total (normalizing constant) = %.8f. Each posterior is prior(d) times the product of symptom likelihood factors, divided by the evidence total." ?winnerLabel ?winnerPost ?covidPost ?covidScore ?fluPost ?fluScore ?allergyPost ?allergyScore ?pneuPost ?pneuScore ?total) string:format ?Block.
|
|
117
|
+
} => {
|
|
118
|
+
:bayesDiagnosis log:outputString ?Block.
|
|
119
|
+
:bayesDiagnosis :recommends ?winner.
|
|
120
|
+
}.
|
|
121
|
+
|
|
122
|
+
{ :bayesDiagnosis :recommends ?Disease } log:query { :bayesDiagnosis :recommends ?Disease }.
|