eyeling 1.34.5 → 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/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 -697
- 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/socket-family.pl +0 -3
- 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
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
% Delfour insight-economy case adapted from Eyeling delfour.n3.
|
|
2
|
-
% The original N3 emits a Markdown answer. This eyelang
|
|
3
|
-
% translation derives the same authorization, shopping banner, alternative, and
|
|
4
|
-
% checklist facts as relation materialization.
|
|
5
|
-
%
|
|
6
|
-
% Static input is kept as scoped data: the case, insight, policy, envelope, and
|
|
7
|
-
% signature are context terms, while the product catalog is a list of records.
|
|
8
|
-
% Rules project only the fields they need, avoiding global permission/prohibition
|
|
9
|
-
% facts that could contradict another policy formula in the same program.
|
|
10
|
-
|
|
11
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
12
|
-
materialize(caseName, 2).
|
|
13
|
-
materialize(needsLowSugar, 2).
|
|
14
|
-
materialize(derivedFromNeed, 2).
|
|
15
|
-
materialize(outcome, 2).
|
|
16
|
-
materialize(target, 2).
|
|
17
|
-
materialize(metric, 2).
|
|
18
|
-
materialize(threshold, 2).
|
|
19
|
-
materialize(scope, 2).
|
|
20
|
-
materialize(retailer, 2).
|
|
21
|
-
materialize(expiresAt, 2).
|
|
22
|
-
materialize(scannedProduct, 2).
|
|
23
|
-
materialize(suggestedAlternative, 2).
|
|
24
|
-
materialize(headline, 2).
|
|
25
|
-
materialize(note, 2).
|
|
26
|
-
materialize(reason, 2).
|
|
27
|
-
materialize(value, 2).
|
|
28
|
-
materialize(alg, 2).
|
|
29
|
-
materialize(auditEntries, 2).
|
|
30
|
-
materialize(filesWritten, 2).
|
|
31
|
-
materialize(allChecksPass, 2).
|
|
32
|
-
materialize(signatureVerifies, 2).
|
|
33
|
-
materialize(payloadHashMatches, 2).
|
|
34
|
-
materialize(minimizationStripsSensitiveTerms, 2).
|
|
35
|
-
materialize(scopeComplete, 2).
|
|
36
|
-
materialize(authorizationAllowed, 2).
|
|
37
|
-
materialize(bannerFlagsHighSugar, 2).
|
|
38
|
-
materialize(alternativeIsLowerSugar, 2).
|
|
39
|
-
materialize(dutyTimingConsistent, 2).
|
|
40
|
-
materialize(marketingProhibited, 2).
|
|
41
|
-
materialize(filesWrittenExpected, 2).
|
|
42
|
-
|
|
43
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
44
|
-
% Context-valued facts keep each input graph scoped and easy to project.
|
|
45
|
-
case_graph(delfourCaseGraph, (
|
|
46
|
-
caseName(case, "delfour"),
|
|
47
|
-
requestPurpose(case, "shopping_assist"),
|
|
48
|
-
requestAction(case, odrl_use),
|
|
49
|
-
phoneCreatedAt(case, "2025-10-05T20:33:48.907163+00:00"),
|
|
50
|
-
phoneExpiresAt(case, "2025-10-05T22:33:48.907185+00:00"),
|
|
51
|
-
scannerAuthAt(case, "2025-10-05T20:35:48.907163+00:00"),
|
|
52
|
-
scannerDutyAt(case, "2025-10-05T20:37:48.907163+00:00"),
|
|
53
|
-
filesWritten(case, 6),
|
|
54
|
-
auditEntries(case, 1),
|
|
55
|
-
condition(householdProfile, "Diabetes"),
|
|
56
|
-
scannedProduct(scan, prod_BIS_001)
|
|
57
|
-
)).
|
|
58
|
-
|
|
59
|
-
% Catalog rows are product(IdTerm, DisplayId, Name, SugarTenths, SugarG).
|
|
60
|
-
product_catalog(delfourCatalog, [
|
|
61
|
-
product(prod_BIS_001, "prod_BIS_001", "Classic Tea Biscuits", 120, 12.0),
|
|
62
|
-
product(prod_BIS_101, "prod_BIS_101", "Low-Sugar Tea Biscuits", 30, 3.0),
|
|
63
|
-
product(prod_CHOC_050, "prod_CHOC_050", "Milk Chocolate Bar", 150, 15.0),
|
|
64
|
-
product(prod_CHOC_150, "prod_CHOC_150", "85% Dark Chocolate", 60, 6.0)
|
|
65
|
-
]).
|
|
66
|
-
|
|
67
|
-
insight_graph(delfourInsightGraph, (
|
|
68
|
-
metric(insight, "sugar_g_per_serving"),
|
|
69
|
-
thresholdTenths(insight, 100),
|
|
70
|
-
thresholdDisplay(insight, "10.0"),
|
|
71
|
-
thresholdG(insight, 10.0),
|
|
72
|
-
suggestionPolicy(insight, "lower_metric_first_higher_price_ok"),
|
|
73
|
-
scopeDevice(insight, "self-scanner"),
|
|
74
|
-
scopeEvent(insight, "pick_up_scanner"),
|
|
75
|
-
retailer(insight, "Delfour"),
|
|
76
|
-
createdAt(insight, "2025-10-05T20:33:48.907163+00:00"),
|
|
77
|
-
expiresAt(insight, "2025-10-05T22:33:48.907185+00:00"),
|
|
78
|
-
serializedLowercase(insight, "createdat expiresat insight metric sugar_g_per_serving retailer delfour scopedevice self-scanner scopeevent pick_up_scanner")
|
|
79
|
-
)).
|
|
80
|
-
|
|
81
|
-
policy_graph(delfourPolicyGraph, (
|
|
82
|
-
odrl_permission(policy, permission(odrl_use, insight, "shopping_assist")),
|
|
83
|
-
odrl_prohibition(policy, prohibition(odrl_distribute, insight, "marketing")),
|
|
84
|
-
odrl_duty(policy, duty(odrl_delete, "2025-10-05T22:33:48.907185+00:00"))
|
|
85
|
-
)).
|
|
86
|
-
|
|
87
|
-
envelope_graph(delfourEnvelopeGraph, (
|
|
88
|
-
insight(envelope, delfourInsightGraph),
|
|
89
|
-
policy(envelope, delfourPolicyGraph),
|
|
90
|
-
hash(envelope, "34ad35638dfd7c67d031eeca8abb235ec24280740f863f3f31cd9d7b6517f098")
|
|
91
|
-
)).
|
|
92
|
-
|
|
93
|
-
signature_graph(delfourSignatureGraph, (
|
|
94
|
-
alg(signature, "HMAC-SHA256"),
|
|
95
|
-
keyid(signature, "demo-shared-secret"),
|
|
96
|
-
created(signature, "2025-10-05T20:33:48.907163+00:00"),
|
|
97
|
-
payloadHashSha256(signature, "34ad35638dfd7c67d031eeca8abb235ec24280740f863f3f31cd9d7b6517f098"),
|
|
98
|
-
hmac(signature, "b21d0072d90112a9f820aced0286889f4b6ef92b145e6fdef1011f3bfa4608c2"),
|
|
99
|
-
hmacVerificationMode(signature, trustedPrecomputedInput)
|
|
100
|
-
)).
|
|
101
|
-
|
|
102
|
-
reason_text(reasonText, "Household requires low-sugar guidance (diabetes in POD). A neutral Insight is scoped to device 'self-scanner', event 'pick_up_scanner', retailer 'Delfour', and expires soon; the policy confines use to shopping assistance.").
|
|
103
|
-
|
|
104
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
105
|
-
case_statement(S, P, O) :- case_graph(delfourCaseGraph, Context), holds(Context, P, [S, O]).
|
|
106
|
-
insight_statement(S, P, O) :- insight_graph(delfourInsightGraph, Context), holds(Context, P, [S, O]).
|
|
107
|
-
policy_statement(S, P, O) :- policy_graph(delfourPolicyGraph, Context), holds(Context, P, [S, O]).
|
|
108
|
-
envelope_statement(S, P, O) :- envelope_graph(delfourEnvelopeGraph, Context), holds(Context, P, [S, O]).
|
|
109
|
-
signature_statement(S, P, O) :- signature_graph(delfourSignatureGraph, Context), holds(Context, P, [S, O]).
|
|
110
|
-
|
|
111
|
-
case_name(case, Name) :- case_statement(case, caseName, Name).
|
|
112
|
-
request_purpose(case, Purpose) :- case_statement(case, requestPurpose, Purpose).
|
|
113
|
-
request_action(case, Action) :- case_statement(case, requestAction, Action).
|
|
114
|
-
phone_created_at(case, Time) :- case_statement(case, phoneCreatedAt, Time).
|
|
115
|
-
phone_expires_at(case, Time) :- case_statement(case, phoneExpiresAt, Time).
|
|
116
|
-
scanner_auth_at(case, Time) :- case_statement(case, scannerAuthAt, Time).
|
|
117
|
-
scanner_duty_at(case, Time) :- case_statement(case, scannerDutyAt, Time).
|
|
118
|
-
files_written(case, Count) :- case_statement(case, filesWritten, Count).
|
|
119
|
-
audit_entries(case, Count) :- case_statement(case, auditEntries, Count).
|
|
120
|
-
condition(householdProfile, Condition) :- case_statement(householdProfile, condition, Condition).
|
|
121
|
-
scanned_product(scan, Product) :- case_statement(scan, scannedProduct, Product).
|
|
122
|
-
|
|
123
|
-
product(Product) :- product_catalog(delfourCatalog, Products), member(product(Product, _Id, _Name, _SugarTenths, _SugarG), Products).
|
|
124
|
-
product_id(Product, Id) :- product_catalog(delfourCatalog, Products), member(product(Product, Id, _Name, _SugarTenths, _SugarG), Products).
|
|
125
|
-
product_name(Product, Name) :- product_catalog(delfourCatalog, Products), member(product(Product, _Id, Name, _SugarTenths, _SugarG), Products).
|
|
126
|
-
sugar_tenths(Product, Sugar) :- product_catalog(delfourCatalog, Products), member(product(Product, _Id, _Name, Sugar, _SugarG), Products).
|
|
127
|
-
sugar_per_serving(Product, Sugar) :- product_catalog(delfourCatalog, Products), member(product(Product, _Id, _Name, _SugarTenths, Sugar), Products).
|
|
128
|
-
|
|
129
|
-
insight(insight).
|
|
130
|
-
metric(insight, Metric) :- insight_statement(insight, metric, Metric).
|
|
131
|
-
threshold_tenths(insight, Threshold) :- insight_statement(insight, thresholdTenths, Threshold).
|
|
132
|
-
threshold_display(insight, Threshold) :- insight_statement(insight, thresholdDisplay, Threshold).
|
|
133
|
-
threshold_g(insight, Threshold) :- insight_statement(insight, thresholdG, Threshold).
|
|
134
|
-
suggestion_policy(insight, Policy) :- insight_statement(insight, suggestionPolicy, Policy).
|
|
135
|
-
scope_device(insight, Device) :- insight_statement(insight, scopeDevice, Device).
|
|
136
|
-
scope_event(insight, Event) :- insight_statement(insight, scopeEvent, Event).
|
|
137
|
-
retailer(insight, Retailer) :- insight_statement(insight, retailer, Retailer).
|
|
138
|
-
created_at(insight, Time) :- insight_statement(insight, createdAt, Time).
|
|
139
|
-
expires_at(insight, Time) :- insight_statement(insight, expiresAt, Time).
|
|
140
|
-
serialized_lowercase(insight, Text) :- insight_statement(insight, serializedLowercase, Text).
|
|
141
|
-
|
|
142
|
-
policy(policy).
|
|
143
|
-
permission(policy, Action, Target, Purpose) :- policy_statement(policy, odrl_permission, permission(Action, Target, Purpose)).
|
|
144
|
-
prohibition(policy, Action, Target, Purpose) :- policy_statement(policy, odrl_prohibition, prohibition(Action, Target, Purpose)).
|
|
145
|
-
duty(policy, Action, Time) :- policy_statement(policy, odrl_duty, duty(Action, Time)).
|
|
146
|
-
|
|
147
|
-
envelope_insight(envelope, Insight) :- envelope_statement(envelope, insight, Insight).
|
|
148
|
-
envelope_policy(envelope, Policy) :- envelope_statement(envelope, policy, Policy).
|
|
149
|
-
envelope_hash(envelope, Hash) :- envelope_statement(envelope, hash, Hash).
|
|
150
|
-
signature_alg(signature, Alg) :- signature_statement(signature, alg, Alg).
|
|
151
|
-
signature_keyid(signature, KeyId) :- signature_statement(signature, keyid, KeyId).
|
|
152
|
-
signature_created(signature, Time) :- signature_statement(signature, created, Time).
|
|
153
|
-
payload_hash_sha256(signature, Hash) :- signature_statement(signature, payloadHashSha256, Hash).
|
|
154
|
-
signature_hmac(signature, Hmac) :- signature_statement(signature, hmac, Hmac).
|
|
155
|
-
hmac_verification_mode(signature, Mode) :- signature_statement(signature, hmacVerificationMode, Mode).
|
|
156
|
-
|
|
157
|
-
% The household profile creates the low-sugar need used by the insight.
|
|
158
|
-
needs_low_sugar(case) :-
|
|
159
|
-
condition(householdProfile, "Diabetes").
|
|
160
|
-
|
|
161
|
-
derived_from_need(insight, "low_sugar") :-
|
|
162
|
-
needs_low_sugar(case).
|
|
163
|
-
|
|
164
|
-
payload_hash_matches(check) :-
|
|
165
|
-
envelope_hash(envelope, Digest),
|
|
166
|
-
payload_hash_sha256(signature, Digest).
|
|
167
|
-
|
|
168
|
-
signature_verifies(check) :-
|
|
169
|
-
hmac_verification_mode(signature, trustedPrecomputedInput).
|
|
170
|
-
|
|
171
|
-
minimization_strips_sensitive_terms(check) :-
|
|
172
|
-
serialized_lowercase(insight, Text),
|
|
173
|
-
not_matches(Text, "diabetes|medical").
|
|
174
|
-
|
|
175
|
-
scope_complete(check) :-
|
|
176
|
-
scope_device(insight, _Device),
|
|
177
|
-
scope_event(insight, _Event),
|
|
178
|
-
expires_at(insight, _Expiry).
|
|
179
|
-
|
|
180
|
-
authorization_allowed(check) :-
|
|
181
|
-
permission(policy, odrl_use, insight, "shopping_assist"),
|
|
182
|
-
request_purpose(case, "shopping_assist"),
|
|
183
|
-
scanner_auth_at(case, AuthAt),
|
|
184
|
-
expires_at(insight, ExpiresAt),
|
|
185
|
-
le(AuthAt, ExpiresAt).
|
|
186
|
-
|
|
187
|
-
decision(decision, "Allowed", insight) :-
|
|
188
|
-
authorization_allowed(check).
|
|
189
|
-
|
|
190
|
-
banner_flags_high_sugar(check) :-
|
|
191
|
-
decision(decision, "Allowed", insight),
|
|
192
|
-
scanned_product(scan, Product),
|
|
193
|
-
sugar_per_serving(Product, Sugar),
|
|
194
|
-
threshold_g(insight, Threshold),
|
|
195
|
-
ge(Sugar, Threshold).
|
|
196
|
-
|
|
197
|
-
banner_headline(banner, "Track sugar per serving while you scan") :-
|
|
198
|
-
banner_flags_high_sugar(check).
|
|
199
|
-
|
|
200
|
-
banner_note(banner, "High sugar") :-
|
|
201
|
-
banner_flags_high_sugar(check).
|
|
202
|
-
|
|
203
|
-
better_lower_sugar(ScannedSugar, CandidateSugar) :-
|
|
204
|
-
product(Other),
|
|
205
|
-
sugar_tenths(Other, OtherSugar),
|
|
206
|
-
gt(ScannedSugar, OtherSugar),
|
|
207
|
-
lt(OtherSugar, CandidateSugar).
|
|
208
|
-
|
|
209
|
-
% Pick the lowest-sugar alternative according to the insight suggestion policy.
|
|
210
|
-
suggested_alternative(case, Candidate) :-
|
|
211
|
-
scanned_product(scan, Scanned),
|
|
212
|
-
sugar_tenths(Scanned, ScannedSugar),
|
|
213
|
-
product(Candidate),
|
|
214
|
-
sugar_tenths(Candidate, CandidateSugar),
|
|
215
|
-
gt(ScannedSugar, CandidateSugar),
|
|
216
|
-
not(better_lower_sugar(ScannedSugar, CandidateSugar)).
|
|
217
|
-
|
|
218
|
-
banner_suggested_alternative(banner, Name) :-
|
|
219
|
-
banner_note(banner, "High sugar"),
|
|
220
|
-
suggested_alternative(case, Alternative),
|
|
221
|
-
product_name(Alternative, Name).
|
|
222
|
-
|
|
223
|
-
alternative_is_lower_sugar(check) :-
|
|
224
|
-
scanned_product(scan, Scanned),
|
|
225
|
-
sugar_tenths(Scanned, ScannedSugar),
|
|
226
|
-
suggested_alternative(case, Alternative),
|
|
227
|
-
sugar_tenths(Alternative, AlternativeSugar),
|
|
228
|
-
gt(ScannedSugar, AlternativeSugar).
|
|
229
|
-
|
|
230
|
-
duty_timing_consistent(check) :-
|
|
231
|
-
scanner_duty_at(case, DutyAt),
|
|
232
|
-
expires_at(insight, ExpiresAt),
|
|
233
|
-
le(DutyAt, ExpiresAt).
|
|
234
|
-
|
|
235
|
-
marketing_prohibited(check) :-
|
|
236
|
-
prohibition(policy, odrl_distribute, insight, "marketing").
|
|
237
|
-
|
|
238
|
-
files_written_expected(check) :-
|
|
239
|
-
files_written(case, 6).
|
|
240
|
-
|
|
241
|
-
all_checks_pass(result) :-
|
|
242
|
-
signature_verifies(check),
|
|
243
|
-
payload_hash_matches(check),
|
|
244
|
-
minimization_strips_sensitive_terms(check),
|
|
245
|
-
scope_complete(check),
|
|
246
|
-
authorization_allowed(check),
|
|
247
|
-
banner_flags_high_sugar(check),
|
|
248
|
-
alternative_is_lower_sugar(check),
|
|
249
|
-
duty_timing_consistent(check),
|
|
250
|
-
marketing_prohibited(check),
|
|
251
|
-
files_written_expected(check).
|
|
252
|
-
|
|
253
|
-
caseName(case, Name) :- case_name(case, Name).
|
|
254
|
-
needsLowSugar(case, true) :- needs_low_sugar(case).
|
|
255
|
-
derivedFromNeed(insight, Need) :- derived_from_need(insight, Need).
|
|
256
|
-
outcome(decision, Outcome) :- decision(decision, Outcome, _Target).
|
|
257
|
-
target(decision, Target) :- decision(decision, _Outcome, Target).
|
|
258
|
-
scannedProduct(scan, ProductName) :- scanned_product(scan, Product), product_name(Product, ProductName).
|
|
259
|
-
suggestedAlternative(case, Name) :- suggested_alternative(case, Alternative), product_name(Alternative, Name).
|
|
260
|
-
threshold(insight, Threshold) :- threshold_display(insight, Threshold).
|
|
261
|
-
scope(insight, "self-scanner @ pick_up_scanner") :- scope_device(insight, "self-scanner"), scope_event(insight, "pick_up_scanner").
|
|
262
|
-
expiresAt(insight, Time) :- expires_at(insight, Time).
|
|
263
|
-
reason(why, "The phone desensitizes a diabetes-related household condition into a scoped low-sugar need, wraps it in an expiring Insight + Policy envelope, signs it, and the scanner consumes that envelope for shopping assistance.") :- authorization_allowed(check).
|
|
264
|
-
headline(banner, Headline) :- banner_headline(banner, Headline).
|
|
265
|
-
note(banner, Note) :- banner_note(banner, Note).
|
|
266
|
-
suggestedAlternative(banner, Name) :- banner_suggested_alternative(banner, Name).
|
|
267
|
-
value(reasonText, Text) :- reason_text(reasonText, Text).
|
|
268
|
-
alg(signature, Alg) :- signature_alg(signature, Alg).
|
|
269
|
-
auditEntries(case, Count) :- audit_entries(case, Count).
|
|
270
|
-
filesWritten(case, Count) :- files_written(case, Count).
|
|
271
|
-
allChecksPass(result, true) :- all_checks_pass(result).
|
|
272
|
-
signatureVerifies(check, true) :- signature_verifies(check).
|
|
273
|
-
payloadHashMatches(check, true) :- payload_hash_matches(check).
|
|
274
|
-
minimizationStripsSensitiveTerms(check, true) :- minimization_strips_sensitive_terms(check).
|
|
275
|
-
scopeComplete(check, true) :- scope_complete(check).
|
|
276
|
-
authorizationAllowed(check, true) :- authorization_allowed(check).
|
|
277
|
-
bannerFlagsHighSugar(check, true) :- banner_flags_high_sugar(check).
|
|
278
|
-
alternativeIsLowerSugar(check, true) :- alternative_is_lower_sugar(check).
|
|
279
|
-
dutyTimingConsistent(check, true) :- duty_timing_consistent(check).
|
|
280
|
-
marketingProhibited(check, true) :- marketing_prohibited(check).
|
|
281
|
-
filesWrittenExpected(check, true) :- files_written_expected(check).
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
% Deontic logic: obligations, prohibitions, compensations, and violations.
|
|
2
|
-
|
|
3
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
4
|
-
materialize(violation, 2).
|
|
5
|
-
materialize(compensation, 2).
|
|
6
|
-
materialize(status, 2).
|
|
7
|
-
|
|
8
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
9
|
-
% Facts state what the actor was obliged/prohibited to do and what happened.
|
|
10
|
-
actor(alice).
|
|
11
|
-
action(share_record).
|
|
12
|
-
action(delete_unneeded_copy).
|
|
13
|
-
|
|
14
|
-
obliged(alice, obtain_consent).
|
|
15
|
-
prohibited(alice, share_record).
|
|
16
|
-
compensates(share_record, notify_dpo).
|
|
17
|
-
|
|
18
|
-
performed(alice, share_record).
|
|
19
|
-
performed(alice, notify_dpo).
|
|
20
|
-
not_performed(alice, obtain_consent).
|
|
21
|
-
not_performed(alice, delete_unneeded_copy).
|
|
22
|
-
|
|
23
|
-
% Missing an obligation and performing a prohibited action are both violations.
|
|
24
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
25
|
-
violation(Actor, missed_obligation(Action)) :-
|
|
26
|
-
obliged(Actor, Action),
|
|
27
|
-
not_performed(Actor, Action).
|
|
28
|
-
|
|
29
|
-
violation(Actor, prohibited_action(Action)) :-
|
|
30
|
-
prohibited(Actor, Action),
|
|
31
|
-
performed(Actor, Action).
|
|
32
|
-
|
|
33
|
-
% Some prohibited actions can be repaired by a configured compensation action.
|
|
34
|
-
compensated_violation(Actor, Action, Compensation) :-
|
|
35
|
-
prohibited(Actor, Action),
|
|
36
|
-
performed(Actor, Action),
|
|
37
|
-
compensates(Action, Compensation),
|
|
38
|
-
performed(Actor, Compensation).
|
|
39
|
-
|
|
40
|
-
uncompensated_violation(Actor, missed_obligation(Action)) :-
|
|
41
|
-
violation(Actor, missed_obligation(Action)).
|
|
42
|
-
|
|
43
|
-
uncompensated_violation(Actor, prohibited_action(Action)) :-
|
|
44
|
-
violation(Actor, prohibited_action(Action)),
|
|
45
|
-
not(compensated_violation(Actor, Action, _Compensation)).
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
compensation(Actor, compensation(Action, Compensation)) :-
|
|
49
|
-
compensated_violation(Actor, Action, Compensation).
|
|
50
|
-
|
|
51
|
-
status(Actor, requires_review) :-
|
|
52
|
-
uncompensated_violation(Actor, _Violation).
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
% Derived backward rule example adapted from Eyeling derived-backward-rule.n3.
|
|
2
|
-
%
|
|
3
|
-
% Eyeling source shape:
|
|
4
|
-
% parentOf invOf childOf.
|
|
5
|
-
% alice parentOf bob.
|
|
6
|
-
% { ?p invOf ?q. } => { { ?x ?q ?y. } <= { ?y ?p ?x. }. }.
|
|
7
|
-
% { ?x childOf ?y. } => { ?x hasParent ?y. }.
|
|
8
|
-
%
|
|
9
|
-
% The generated backward rule is represented as quoted formula data in
|
|
10
|
-
% log_impliedBy/2, then mirrored as an ordinary eyelang rule so the generated
|
|
11
|
-
% childOf relation can feed the ordinary hasParent rule.
|
|
12
|
-
|
|
13
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
14
|
-
materialize(log_impliedBy, 2).
|
|
15
|
-
materialize(childOf, 2).
|
|
16
|
-
materialize(hasParent, 2).
|
|
17
|
-
|
|
18
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
19
|
-
invOf(parentOf, childOf).
|
|
20
|
-
parentOf(alice, bob).
|
|
21
|
-
|
|
22
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
23
|
-
log_impliedBy(childOf(var(x), var(y)), parentOf(var(y), var(x))) :-
|
|
24
|
-
invOf(parentOf, childOf).
|
|
25
|
-
|
|
26
|
-
childOf(X, Y) :-
|
|
27
|
-
log_impliedBy(childOf(var(x), var(y)), parentOf(var(y), var(x))),
|
|
28
|
-
parentOf(Y, X).
|
|
29
|
-
|
|
30
|
-
hasParent(X, Y) :- childOf(X, Y).
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
% Derived rule example adapted from Eyeling derived-rule.n3.
|
|
2
|
-
%
|
|
3
|
-
% Eyeling source shape:
|
|
4
|
-
% minka a cat.
|
|
5
|
-
% charly a dog.
|
|
6
|
-
% { ?x a cat. } => { { ?y a dog. } => { test is true. }. }.
|
|
7
|
-
%
|
|
8
|
-
% The inner implication is represented directly as quoted formula data.
|
|
9
|
-
% var(y) is not an eyelang variable; it is a ground term that names
|
|
10
|
-
% a variable placeholder inside the quoted formula.
|
|
11
|
-
|
|
12
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
13
|
-
materialize(type, 2).
|
|
14
|
-
materialize(log_implies, 2).
|
|
15
|
-
materialize(is, 2).
|
|
16
|
-
|
|
17
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
18
|
-
type(minka, cat).
|
|
19
|
-
type(charly, dog).
|
|
20
|
-
|
|
21
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
22
|
-
log_implies(type(var(y), dog), is(test, true)) :-
|
|
23
|
-
type(_X, cat).
|
|
24
|
-
|
|
25
|
-
is(test, true) :-
|
|
26
|
-
log_implies(type(var(y), dog), is(test, true)),
|
|
27
|
-
type(_Y, dog).
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
% Diamond property, adapted from Eyelet's input/diamond-property.pl.
|
|
2
|
-
%
|
|
3
|
-
% A relation has the diamond property when two outgoing steps from the same
|
|
4
|
-
% source can be joined again. This compact eyelang version keeps the same
|
|
5
|
-
% diamond idea and also checks that it is preserved by reflexive closure.
|
|
6
|
-
|
|
7
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
8
|
-
materialize(holdsFor, 2).
|
|
9
|
-
materialize(commonSuccessor, 2).
|
|
10
|
-
materialize(preservedUnderReflexiveClosure, 2).
|
|
11
|
-
|
|
12
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
13
|
-
node(a).
|
|
14
|
-
node(b).
|
|
15
|
-
node(c).
|
|
16
|
-
node(d).
|
|
17
|
-
|
|
18
|
-
r(a, b).
|
|
19
|
-
r(a, c).
|
|
20
|
-
r(b, d).
|
|
21
|
-
r(c, d).
|
|
22
|
-
|
|
23
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
24
|
-
re(X, X) :- node(X).
|
|
25
|
-
re(X, Y) :- r(X, Y).
|
|
26
|
-
|
|
27
|
-
diamond(Rel, A, B, C, D) :-
|
|
28
|
-
step(Rel, A, B),
|
|
29
|
-
step(Rel, A, C),
|
|
30
|
-
step(Rel, B, D),
|
|
31
|
-
step(Rel, C, D).
|
|
32
|
-
|
|
33
|
-
step(r, X, Y) :- r(X, Y).
|
|
34
|
-
step(re, X, Y) :- re(X, Y).
|
|
35
|
-
|
|
36
|
-
holdsFor(diamondProperty, Rel) :- diamond(Rel, a, b, c, d).
|
|
37
|
-
commonSuccessor(diamondProperty, D) :- diamond(r, a, b, c, D).
|
|
38
|
-
preservedUnderReflexiveClosure(diamondProperty, true) :- diamond(re, a, b, c, d).
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
% Eyelet-inspired Dijkstra example using findall/3 and sort/2.
|
|
2
|
-
% Adapted to eyelang's explicit built-ins and relation report style.
|
|
3
|
-
|
|
4
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
5
|
-
materialize(shortestPath, 2).
|
|
6
|
-
materialize(cost, 2).
|
|
7
|
-
materialize(reason, 2).
|
|
8
|
-
|
|
9
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
10
|
-
% Weighted undirected graph; the symmetric edge rule below adds reverse arcs.
|
|
11
|
-
edge(a, b, 4).
|
|
12
|
-
edge(a, c, 2).
|
|
13
|
-
edge(b, c, 1).
|
|
14
|
-
edge(b, d, 5).
|
|
15
|
-
edge(c, d, 8).
|
|
16
|
-
edge(c, e, 10).
|
|
17
|
-
edge(d, e, 2).
|
|
18
|
-
edge(d, f, 6).
|
|
19
|
-
edge(e, f, 3).
|
|
20
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
21
|
-
edge(A, B, Cost) :- edge(B, A, Cost).
|
|
22
|
-
|
|
23
|
-
% The frontier is represented as [Cost, Node | ReversePath] entries.
|
|
24
|
-
dijkstra(Start, Goal, Path, Cost) :-
|
|
25
|
-
dijkstra_queue([[0, Start]], Goal, [], RevPath, Cost),
|
|
26
|
-
reverse(RevPath, Path).
|
|
27
|
-
|
|
28
|
-
dijkstra_queue([[Cost, Goal | Path] | _Queue], Goal, _Visited, [Goal | Path], Cost).
|
|
29
|
-
dijkstra_queue([[Cost, Node | Path] | Queue], Goal, Visited, ResultPath, ResultCost) :-
|
|
30
|
-
% Expand all unvisited neighbors, then sort so the cheapest frontier wins.
|
|
31
|
-
findall([NewCost, Neighbor, Node | Path],
|
|
32
|
-
(edge(Node, Neighbor, Weight), not(member(Neighbor, Visited)), add(Cost, Weight, NewCost)),
|
|
33
|
-
Neighbors),
|
|
34
|
-
append(Queue, Neighbors, NewQueue),
|
|
35
|
-
sort(NewQueue, SortedQueue),
|
|
36
|
-
dijkstra_queue(SortedQueue, Goal, [Node | Visited], ResultPath, ResultCost).
|
|
37
|
-
|
|
38
|
-
shortestPath(dijkstra_findall_sort, Path) :-
|
|
39
|
-
once(dijkstra(a, f, Path, _Cost)).
|
|
40
|
-
|
|
41
|
-
cost(dijkstra_findall_sort, Cost) :-
|
|
42
|
-
once(dijkstra(a, f, _Path, Cost)).
|
|
43
|
-
|
|
44
|
-
reason(dijkstra_findall_sort, "frontier candidates are collected with findall and ordered with sort").
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
% Memoize route costs: selected paths, route relations, and trust checks reuse
|
|
2
|
-
% the same path-list reductions.
|
|
3
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
4
|
-
materialize(route, 2).
|
|
5
|
-
materialize(rawCost, 2).
|
|
6
|
-
materialize(riskSum, 2).
|
|
7
|
-
materialize(score, 2).
|
|
8
|
-
materialize(edgeCount, 2).
|
|
9
|
-
materialize(selectedPath, 2).
|
|
10
|
-
materialize(trustGate, 2).
|
|
11
|
-
materialize(notes, 2).
|
|
12
|
-
materialize(selects, 2).
|
|
13
|
-
|
|
14
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
15
|
-
memoize(route_cost, 4).
|
|
16
|
-
|
|
17
|
-
% Risk-adjusted route selection adapted from Eyeling dijkstra-risk-path.n3.
|
|
18
|
-
% The score is raw delivery cost plus ten times the accumulated risk.
|
|
19
|
-
% Segments live in a quoted formula term, while candidate paths remain lists.
|
|
20
|
-
|
|
21
|
-
route_network(riskNetwork, (
|
|
22
|
-
segment(depotA, segment(depotB, 4.0, 0.2)),
|
|
23
|
-
segment(depotB, segment(labD, 4.0, 0.3)),
|
|
24
|
-
segment(depotA, segment(depotC, 3.0, 0.9)),
|
|
25
|
-
segment(depotC, segment(labD, 6.0, 0.3)),
|
|
26
|
-
segment(depotC, segment(depotB, 0.5, 0.5)),
|
|
27
|
-
segment(depotB, segment(depotC, 1.0, 0.5)),
|
|
28
|
-
segment(depotA, segment(relay, 5.0, 0.2)),
|
|
29
|
-
segment(relay, segment(labD, 5.0, 0.2)),
|
|
30
|
-
segment(depotA, segment(labD, 14.0, 0.05))
|
|
31
|
-
)).
|
|
32
|
-
|
|
33
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
34
|
-
route_segment(From, To, Raw, Risk) :-
|
|
35
|
-
route_network(riskNetwork, Context),
|
|
36
|
-
holds(Context, segment(From, segment(To, Raw, Risk))).
|
|
37
|
-
|
|
38
|
-
candidate(pathB, [depotA, depotB, labD]).
|
|
39
|
-
candidate(pathC, [depotA, depotC, labD]).
|
|
40
|
-
candidate(pathRelay, [depotA, relay, labD]).
|
|
41
|
-
candidate(pathDirectC, [depotA, labD]).
|
|
42
|
-
candidate(pathViaC, [depotA, depotC, depotB, labD]).
|
|
43
|
-
|
|
44
|
-
route_cost([_], 0.0, 0.0, 0).
|
|
45
|
-
route_cost([From, To|Rest], Raw, Risk, Edges) :-
|
|
46
|
-
route_segment(From, To, StepRaw, StepRisk),
|
|
47
|
-
route_cost([To|Rest], RestRaw, RestRisk, RestEdges),
|
|
48
|
-
add(StepRaw, RestRaw, Raw),
|
|
49
|
-
add(StepRisk, RestRisk, Risk),
|
|
50
|
-
add(1, RestEdges, Edges).
|
|
51
|
-
|
|
52
|
-
score(Raw, Risk, Score) :-
|
|
53
|
-
mul(Risk, 10.0, Penalty),
|
|
54
|
-
add(Raw, Penalty, Score).
|
|
55
|
-
|
|
56
|
-
path_metrics(Path, Route, Raw, Risk, Score, Edges) :-
|
|
57
|
-
candidate(Path, Route),
|
|
58
|
-
route_cost(Route, Raw, Risk, Edges),
|
|
59
|
-
score(Raw, Risk, Score).
|
|
60
|
-
|
|
61
|
-
best_path(pathB) :-
|
|
62
|
-
path_metrics(pathB, _BestRoute, _BestRaw, _BestRisk, BestScore, _BestEdges),
|
|
63
|
-
path_metrics(pathC, _CRoute, _CRaw, _CRisk, CScore, _CEdges),
|
|
64
|
-
path_metrics(pathRelay, _RRoute, _RRaw, _RRisk, RelayScore, _REdges),
|
|
65
|
-
path_metrics(pathDirectC, _DRoute, _DRaw, _DRisk, DirectScore, _DEdges),
|
|
66
|
-
path_metrics(pathViaC, _VRoute, _VRaw, _VRisk, ViaScore, _VEdges),
|
|
67
|
-
lt(BestScore, CScore),
|
|
68
|
-
lt(BestScore, RelayScore),
|
|
69
|
-
lt(BestScore, DirectScore),
|
|
70
|
-
lt(BestScore, ViaScore).
|
|
71
|
-
|
|
72
|
-
risk_outweighs_raw_cost(true) :-
|
|
73
|
-
path_metrics(pathB, _BR, BestRaw, _BRS, BestScore, _BE),
|
|
74
|
-
path_metrics(pathViaC, _VR, ViaRaw, _VRS, ViaScore, _VE),
|
|
75
|
-
lt(ViaRaw, BestRaw),
|
|
76
|
-
lt(BestScore, ViaScore).
|
|
77
|
-
|
|
78
|
-
route(Path, Route) :- path_metrics(Path, Route, _Raw, _Risk, _Score, _Edges).
|
|
79
|
-
rawCost(Path, Raw) :- path_metrics(Path, _Route, Raw, _Risk, _Score, _Edges).
|
|
80
|
-
riskSum(Path, Risk) :- path_metrics(Path, _Route, _Raw, Risk, _Score, _Edges).
|
|
81
|
-
score(Path, Score) :- path_metrics(Path, _Route, _Raw, _Risk, Score, _Edges).
|
|
82
|
-
edgeCount(Path, Edges) :- path_metrics(Path, _Route, _Raw, _Risk, _Score, Edges).
|
|
83
|
-
selectedPath(case, Path) :- best_path(Path).
|
|
84
|
-
trustGate(case, noEnumeratedPathIsLower) :- best_path(_Path).
|
|
85
|
-
notes(case, riskCanOutweighRawCost) :- risk_outweighs_raw_cost(true).
|
|
86
|
-
selects(dijkstraRiskPath, Path) :- best_path(Path), risk_outweighs_raw_cost(true).
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
% Weighted path enumeration adapted from Eyeling dijkstra.n3.
|
|
2
|
-
% The Eyeling source uses collect/sort built-ins for Dijkstra's queue.
|
|
3
|
-
% This eyelang variant enumerates simple paths and keeps the bounded frontier
|
|
4
|
-
% that appears in the Eyeling output for a -> f.
|
|
5
|
-
% The input weighted graph is quoted as ... data and projected locally,
|
|
6
|
-
% so the route network is not asserted as ambient edge facts.
|
|
7
|
-
|
|
8
|
-
% Output declarations: materialize/2 selects the relations written to this example's golden output.
|
|
9
|
-
materialize(edge, 2).
|
|
10
|
-
materialize(path, 2).
|
|
11
|
-
|
|
12
|
-
% Program structure: facts set up the scenario, and rules derive the materialized conclusions.
|
|
13
|
-
weighted_graph(dijkstraGraph, (
|
|
14
|
-
edge(a, arc(b, 4)),
|
|
15
|
-
edge(a, arc(c, 2)),
|
|
16
|
-
edge(b, arc(c, 1)),
|
|
17
|
-
edge(b, arc(d, 5)),
|
|
18
|
-
edge(c, arc(d, 8)),
|
|
19
|
-
edge(c, arc(e, 10)),
|
|
20
|
-
edge(d, arc(e, 2)),
|
|
21
|
-
edge(d, arc(f, 6)),
|
|
22
|
-
edge(e, arc(f, 3))
|
|
23
|
-
)).
|
|
24
|
-
|
|
25
|
-
% Derivation rules: each rule below contributes one logical step toward the displayed results.
|
|
26
|
-
base_link(A, B, Cost) :-
|
|
27
|
-
weighted_graph(dijkstraGraph, Context),
|
|
28
|
-
holds(Context, edge(A, arc(B, Cost))).
|
|
29
|
-
|
|
30
|
-
link(A, B, Cost) :- base_link(A, B, Cost).
|
|
31
|
-
link(B, A, Cost) :- base_link(A, B, Cost).
|
|
32
|
-
|
|
33
|
-
path(Goal, Goal, _Visited, [Goal], 0).
|
|
34
|
-
path(Node, Goal, Visited, [Node|Path], Cost) :-
|
|
35
|
-
link(Node, Next, StepCost),
|
|
36
|
-
not_member(Next, Visited),
|
|
37
|
-
path(Next, Goal, [Next|Visited], Path, RestCost),
|
|
38
|
-
add(StepCost, RestCost, Cost).
|
|
39
|
-
|
|
40
|
-
% Derived reverse links, mirroring the rule output in the Eyeling example.
|
|
41
|
-
edge([B, A], Cost) :-
|
|
42
|
-
base_link(A, B, Cost).
|
|
43
|
-
|
|
44
|
-
path([a, f], [Path, Cost]) :-
|
|
45
|
-
path(a, f, [a], Path, Cost),
|
|
46
|
-
le(Cost, 16).
|