eyeling 1.16.4 → 1.17.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.
@@ -0,0 +1,195 @@
1
+ # ==========================
2
+ # Ill-formed literal checker
3
+ #
4
+ # Datatypes covered
5
+ # - xsd:boolean
6
+ # - integer family
7
+ # - xsd:decimal
8
+ # - xsd:float / xsd:double
9
+ # - xsd:date
10
+ # - xsd:dateTime
11
+ # - xsd:duration
12
+ # ==========================
13
+
14
+ @prefix : <http://example.org/#>.
15
+ @prefix list: <http://www.w3.org/2000/10/swap/list#>.
16
+ @prefix log: <http://www.w3.org/2000/10/swap/log#>.
17
+ @prefix math: <http://www.w3.org/2000/10/swap/math#>.
18
+ @prefix string: <http://www.w3.org/2000/10/swap/string#>.
19
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
20
+
21
+ # ---------
22
+ # Demo data
23
+ # ---------
24
+
25
+ # well-formed examples
26
+ :okInt :p "42"^^xsd:integer.
27
+ :okBool1 :p "true"^^xsd:boolean.
28
+ :okBool2 :p "0"^^xsd:boolean.
29
+ :okDecimal :p "-12.50"^^xsd:decimal.
30
+ :okDouble :p "6.022e23"^^xsd:double.
31
+ :okDate :p "2025-01-31"^^xsd:date.
32
+ :okDateTime :p "2025-01-31T23:59:59Z"^^xsd:dateTime.
33
+ :okDuration :p "PT900S"^^xsd:duration.
34
+
35
+ # ill-formed examples
36
+ :badInt1 :p "abc"^^xsd:integer.
37
+ :badInt2 :p "12.3"^^xsd:int.
38
+ :badBool :p "truish"^^xsd:boolean.
39
+ :badDecimal :p "12.3.4"^^xsd:decimal.
40
+ :badDouble :p "1e"^^xsd:double.
41
+ :badDate :p "yesterday"^^xsd:dateTime.
42
+ :badDateTime :p "not-a-datetime"^^xsd:dateTime.
43
+ :badDuration :p "not-a-duration"^^xsd:duration.
44
+
45
+ # ---------------------------------
46
+ # Rules: detect ill-formed literals
47
+ # ---------------------------------
48
+
49
+ # xsd:boolean
50
+ {
51
+ ?s ?p ?lit.
52
+ ?lit log:rawType log:Literal.
53
+ (?lex xsd:boolean) log:dtlit ?lit.
54
+ ?lex string:notMatches "^(true|false|1|0)$".
55
+ }
56
+ =>
57
+ {
58
+ (?s ?p ?lit)
59
+ :illFormedLiteral true;
60
+ :datatype xsd:boolean;
61
+ :lexicalForm ?lex;
62
+ :reason "invalid xsd:boolean lexical form".
63
+ }.
64
+
65
+ # integer family
66
+ {
67
+ ?s ?p ?lit.
68
+ ?lit log:rawType log:Literal.
69
+ (?lex ?dt) log:dtlit ?lit.
70
+ ?dt list:in (
71
+ xsd:integer
72
+ xsd:long
73
+ xsd:int
74
+ xsd:short
75
+ xsd:byte
76
+ xsd:nonNegativeInteger
77
+ xsd:positiveInteger
78
+ xsd:nonPositiveInteger
79
+ xsd:negativeInteger
80
+ xsd:unsignedLong
81
+ xsd:unsignedInt
82
+ xsd:unsignedShort
83
+ xsd:unsignedByte
84
+ ).
85
+ ?lex string:notMatches "^[+-]?[0-9]+$".
86
+ }
87
+ =>
88
+ {
89
+ (?s ?p ?lit)
90
+ :illFormedLiteral true;
91
+ :datatype ?dt;
92
+ :lexicalForm ?lex;
93
+ :reason "invalid integer-family lexical form".
94
+ }.
95
+
96
+ # xsd:decimal
97
+ {
98
+ ?s ?p ?lit.
99
+ ?lit log:rawType log:Literal.
100
+ (?lex xsd:decimal) log:dtlit ?lit.
101
+ ?lex string:notMatches "^[+-]?(?:[0-9]+\\.[0-9]*|\\.[0-9]+|[0-9]+)$".
102
+ }
103
+ =>
104
+ {
105
+ (?s ?p ?lit)
106
+ :illFormedLiteral true;
107
+ :datatype xsd:decimal;
108
+ :lexicalForm ?lex;
109
+ :reason "invalid xsd:decimal lexical form".
110
+ }.
111
+
112
+ # xsd:float / xsd:double
113
+ {
114
+ ?s ?p ?lit.
115
+ ?lit log:rawType log:Literal.
116
+ (?lex ?dt) log:dtlit ?lit.
117
+ ?dt list:in ( xsd:float xsd:double ).
118
+ ?lex string:notMatches "^(?:NaN|INF|-INF|[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?)$".
119
+ }
120
+ =>
121
+ {
122
+ (?s ?p ?lit)
123
+ :illFormedLiteral true;
124
+ :datatype ?dt;
125
+ :lexicalForm ?lex;
126
+ :reason "invalid xsd:float/xsd:double lexical form".
127
+ }.
128
+
129
+ # xsd:date
130
+ {
131
+ ?s ?p ?lit.
132
+ ?lit log:rawType log:Literal.
133
+ (?lex xsd:date) log:dtlit ?lit.
134
+ 1 log:notIncludes { ?lit math:equalTo ?lit. }.
135
+ }
136
+ =>
137
+ {
138
+ (?s ?p ?lit)
139
+ :illFormedLiteral true;
140
+ :datatype xsd:date;
141
+ :lexicalForm ?lex;
142
+ :reason "xsd:date literal is not parseable by the reasoner".
143
+ }.
144
+
145
+ # xsd:dateTime
146
+ {
147
+ ?s ?p ?lit.
148
+ ?lit log:rawType log:Literal.
149
+ (?lex xsd:dateTime) log:dtlit ?lit.
150
+ 1 log:notIncludes { ?lit math:equalTo ?lit. }.
151
+ }
152
+ =>
153
+ {
154
+ (?s ?p ?lit)
155
+ :illFormedLiteral true;
156
+ :datatype xsd:dateTime;
157
+ :lexicalForm ?lex;
158
+ :reason "xsd:dateTime literal is not parseable by the reasoner".
159
+ }.
160
+
161
+ # xsd:duration
162
+ {
163
+ ?s ?p ?lit.
164
+ ?lit log:rawType log:Literal.
165
+ (?lex xsd:duration) log:dtlit ?lit.
166
+ 1 log:notIncludes { ?lit math:equalTo ?lit. }.
167
+ }
168
+ =>
169
+ {
170
+ (?s ?p ?lit)
171
+ :illFormedLiteral true;
172
+ :datatype xsd:duration;
173
+ :lexicalForm ?lex;
174
+ :reason "xsd:duration literal is not parseable by the reasoner".
175
+ }.
176
+
177
+ # -----------------
178
+ # Output projection
179
+ # -----------------
180
+
181
+ {
182
+ ?issue :illFormedLiteral true;
183
+ :datatype ?dt;
184
+ :lexicalForm ?lex;
185
+ :reason ?why.
186
+ }
187
+ log:query
188
+ {
189
+ ?issue :datatype ?dt;
190
+ :lexicalForm ?lex;
191
+ :reason ?why.
192
+ }.
193
+
194
+ # Optional hard-fail mode:
195
+ # { ?issue :illFormedLiteral true. } => false.
@@ -0,0 +1,149 @@
1
+ AuroraCare — Purpose-based Medical Data Exchange
2
+
3
+ === A – Primary care visit ===
4
+ Clinician in the patient's care team accessing the patient summary for primary care management.
5
+
6
+ Answer
7
+ PERMIT
8
+
9
+ Reason Why
10
+ Permitted: clinician in the patient's care team, and the primary-care policy matched.
11
+
12
+ Check
13
+ C1 SKIPPED - not a prohibited purpose
14
+ C2 OK - clinician
15
+ C3 OK - care-team linked
16
+ C4 SKIPPED
17
+ C5 OK - operator=isAnyOf, allowed=["https://example.org/health#PATIENT_SUMMARY","https://example.org/health#LAB_RESULTS"], requested=["https://example.org/health#PATIENT_SUMMARY"]
18
+ C6 SKIPPED - no prohibition matched
19
+ C7 OK - trace shows matching permission
20
+ C8 SKIPPED - no matched policy or no duties
21
+ C9 SKIPPED - policy has no environment constraint
22
+ C10 INFO - matched policy: urn:policy:primary-care-001
23
+
24
+ === B – Quality improvement (in scope) ===
25
+ QI analyst using lab results + summary in a secure environment.
26
+
27
+ Answer
28
+ PERMIT
29
+
30
+ Reason Why
31
+ Permitted: ODRL/DPV policy matched for secondary use.
32
+
33
+ Check
34
+ C1 SKIPPED - not a prohibited purpose
35
+ C2 SKIPPED
36
+ C3 SKIPPED
37
+ C4 OK - opt-in present and policy matched
38
+ C5 OK - operator=isAllOf, allowed=["https://example.org/health#LAB_RESULTS","https://example.org/health#PATIENT_SUMMARY"], requested=["https://example.org/health#LAB_RESULTS","https://example.org/health#PATIENT_SUMMARY"]
39
+ C6 SKIPPED - no prohibition matched
40
+ C7 OK - trace shows matching permission
41
+ C8 INFO - duties attached: duty:https://w3id.org/dpv/legal/eu/ehds#requireConsent, duty:https://w3id.org/dpv/legal/eu/ehds#noExfiltration
42
+ C9 OK - operator=eq, allowed="secure_env", requested="secure_env"
43
+ C10 INFO - matched policy: urn:policy:qi-2025-aurora
44
+
45
+ === C – Quality improvement (out of scope) ===
46
+ QI analyst with only lab results; policy expects labs + summary.
47
+
48
+ Answer
49
+ DENY
50
+
51
+ Reason Why
52
+ Denied: no policy matched (purpose, environment, TOMs, or categories out of scope).
53
+
54
+ Check
55
+ C1 SKIPPED - not a prohibited purpose
56
+ C2 SKIPPED
57
+ C3 SKIPPED
58
+ C4 OK - denied because opt-in missing or no policy match
59
+ C5 SKIPPED
60
+ C6 SKIPPED - no prohibition matched
61
+ C7 SKIPPED
62
+ C8 SKIPPED - no matched policy or no duties
63
+ C9 SKIPPED
64
+ C10 SKIPPED - no matched policy
65
+
66
+ === D – Insurance management ===
67
+ Insurance bot attempting to use health data for insurance management (prohibited purpose).
68
+
69
+ Answer
70
+ DENY
71
+
72
+ Reason Why
73
+ Denied: the requested purpose (insurance management) is prohibited by policy.
74
+
75
+ Check
76
+ C1 OK - denied prohibited purpose
77
+ C2 SKIPPED
78
+ C3 SKIPPED
79
+ C4 SKIPPED
80
+ C5 SKIPPED
81
+ C6 OK - denied due to prohibition
82
+ C7 SKIPPED
83
+ C8 SKIPPED - no matched policy or no duties
84
+ C9 SKIPPED
85
+ C10 SKIPPED - no matched policy
86
+
87
+ === E – GP checks labs ===
88
+ GP for the same patient checking lab results via the API gateway.
89
+
90
+ Answer
91
+ PERMIT
92
+
93
+ Reason Why
94
+ Permitted: clinician in the patient's care team, and the primary-care policy matched.
95
+
96
+ Check
97
+ C1 SKIPPED - not a prohibited purpose
98
+ C2 OK - clinician
99
+ C3 OK - care-team linked
100
+ C4 SKIPPED
101
+ C5 OK - operator=isAnyOf, allowed=["https://example.org/health#PATIENT_SUMMARY","https://example.org/health#LAB_RESULTS"], requested=["https://example.org/health#LAB_RESULTS"]
102
+ C6 SKIPPED - no prohibition matched
103
+ C7 OK - trace shows matching permission
104
+ C8 SKIPPED - no matched policy or no duties
105
+ C9 SKIPPED - policy has no environment constraint
106
+ C10 INFO - matched policy: urn:policy:primary-care-001
107
+
108
+ === F – Research on anonymised dataset ===
109
+ Researcher using anonymised labs + summary in a secure environment, with opt-in.
110
+
111
+ Answer
112
+ PERMIT
113
+
114
+ Reason Why
115
+ Permitted: subject opted in and an ODRL/DPV policy matched (anonymised dataset in secure environment).
116
+
117
+ Check
118
+ C1 SKIPPED - not a prohibited purpose
119
+ C2 SKIPPED
120
+ C3 SKIPPED
121
+ C4 OK - opt-in present and policy matched
122
+ C5 OK - operator=isAnyOf, allowed=["https://example.org/health#LAB_RESULTS","https://example.org/health#PATIENT_SUMMARY","https://example.org/health#IMAGING_REPORT"], requested=["https://example.org/health#PATIENT_SUMMARY","https://example.org/health#LAB_RESULTS"]
123
+ C6 SKIPPED - no prohibition matched
124
+ C7 OK - trace shows matching permission
125
+ C8 INFO - duties attached: duty:https://w3id.org/dpv/legal/eu/ehds#annualOutcomeReport, duty:https://w3id.org/dpv/legal/eu/ehds#noReidentification, duty:https://w3id.org/dpv/legal/eu/ehds#noExfiltration
126
+ C9 OK - operator=eq, allowed="secure_env", requested="secure_env"
127
+ C10 INFO - matched policy: urn:policy:research-aurora-diabetes
128
+
129
+ === G – AI training (opt-out) ===
130
+ Data user wants to train AI, but the subject opted out of AI training.
131
+
132
+ Answer
133
+ DENY
134
+
135
+ Reason Why
136
+ Denied: you opted out of your data being used to train AI systems.
137
+
138
+ Check
139
+ C1 SKIPPED - not a prohibited purpose
140
+ C2 SKIPPED
141
+ C3 SKIPPED
142
+ C4 OK - denied because opt-in missing or no policy match
143
+ C5 SKIPPED
144
+ C6 SKIPPED - no prohibition matched
145
+ C7 SKIPPED
146
+ C8 SKIPPED - no matched policy or no duties
147
+ C9 SKIPPED
148
+ C10 SKIPPED - no matched policy
149
+
@@ -1,5 +1,20 @@
1
- @prefix : <https://eyereasoner.github.io/eye/reasoning/cs#> .
2
- @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
1
+ Control System ARC explanation of two control signals
3
2
 
4
- :actuator1 :control1 "39.27346198678276"^^xsd:decimal .
5
- :actuator2 :control1 "26.08"^^xsd:decimal .
3
+ Answer
4
+ Send both actuator commands now.
5
+ Actuator 1 command: 39.27346198678276
6
+ Actuator 2 command: 26.08
7
+
8
+ Reason Why
9
+ The first sensor pair is 6 and 11, so the reading is rising and the controller normalizes the gap 5 into 2.23606797749979. That normalized value creates a feedforward term of 43.82693235899588, while the known disturbance 35766 contributes a compensation term of 4.553470372213121. Subtracting that compensation gives actuator 1 the command 39.27346198678276. For actuator 2, the target is 5 units above the measured output, so the tracking error is positive. The observed state is -2 relative units below the measured output, so the differential correction is negative. That yields a proportional feedback part of 29, a nonlinear factor of 1.46, and a differential contribution of -2.92. Together they produce actuator 2 command 26.08.
10
+
11
+ Check
12
+ C1 OK - the first sensor pair is rising, so the normalization uses the rising-branch rule.
13
+ C2 OK - the normalized measurement is positive and smaller than the raw gap, which is consistent with a square-root normalization.
14
+ C3 OK - actuator 1 is lower than its proportional feedforward term because disturbance compensation is subtracted.
15
+ C4 OK - the target is above the measured output, so the tracking error is positive.
16
+ C5 OK - the observed state is below the measured output, so the differential error is negative.
17
+ C6 OK - actuator 2 is lower than its pure proportional term because the differential part reduces it.
18
+ C7 OK - actuator 1 matches an independently reconstructed feedforward calculation.
19
+ C8 OK - actuator 2 matches an independently reconstructed feedback calculation.
20
+ C9 OK - both actuator commands stay positive.
@@ -0,0 +1,30 @@
1
+ === Answer ===
2
+ The scanner is allowed to use a neutral shopping insight and recommends Low-Sugar Tea Biscuits instead of Classic Tea Biscuits.
3
+ case : delfour
4
+ decision : Allowed
5
+ scanned product : Classic Tea Biscuits
6
+ suggested alternative: Low-Sugar Tea Biscuits
7
+
8
+ === Reason Why ===
9
+ 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.
10
+ metric : sugar_g_per_serving
11
+ threshold : 10.0
12
+ scope : self-scanner @ pick_up_scanner
13
+ retailer : Delfour
14
+ signature alg : HMAC-SHA256
15
+ banner headline : Track sugar per serving while you scan
16
+ expires at : 2025-10-05T22:33:48.907185+00:00
17
+ reason.txt : 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.
18
+ audit entries : 1
19
+ bus files written : 6
20
+
21
+ === Check ===
22
+ signature verifies : yes
23
+ payload hash matches : yes
24
+ minimization strips sensitive terms: yes
25
+ scope complete : yes
26
+ authorization allowed : yes
27
+ high-sugar banner : yes
28
+ alternative lowers sugar : yes
29
+ duty timing consistent : yes
30
+ marketing prohibited : yes
@@ -1,10 +1 @@
1
- @prefix : <http://example.org/dpp#> .
2
- @prefix log: <http://www.w3.org/2000/10/swap/log#> .
3
-
4
- :ACME-X1000-SN123 :totalMassG 105 .
5
- :ACME-X1000-SN123 :recycledMassG 14 .
6
- :ACME-X1000-SN123 :recycledContentPct 13 .
7
- :ACME-X1000-SN123 :lifecycleFootprint_gCO2e 52500 .
8
- :ACME-X1000-SN123 :circularityHint :repairFriendly .
9
- :ACME-X1000-SN123 :containsCriticalRawMaterial true .
10
- :ACME-X1000-SN123 log:outputString "ACME X1000 SN123 | recycled=13% | lifecycle=52500 gCO2e | CRM=true | hint=http://example.org/dpp#repairFriendly\n" .
1
+ ACME X1000 SN123 | recycled=13% | lifecycle=52500 gCO2e | CRM=true | hint=http://example.org/dpp#repairFriendly
@@ -1,32 +1,150 @@
1
- @prefix : <http://www.agfa.com/w3c/euler/easterP#> .
2
-
3
- (4 4) :easterFor 2021 .
4
- (17 4) :easterFor 2022 .
5
- (9 4) :easterFor 2023 .
6
- (31 3) :easterFor 2024 .
7
- (20 4) :easterFor 2025 .
8
- (5 4) :easterFor 2026 .
9
- (28 3) :easterFor 2027 .
10
- (16 4) :easterFor 2028 .
11
- (1 4) :easterFor 2029 .
12
- (21 4) :easterFor 2030 .
13
- (13 4) :easterFor 2031 .
14
- (28 3) :easterFor 2032 .
15
- (17 4) :easterFor 2033 .
16
- (9 4) :easterFor 2034 .
17
- (25 3) :easterFor 2035 .
18
- (13 4) :easterFor 2036 .
19
- (5 4) :easterFor 2037 .
20
- (25 4) :easterFor 2038 .
21
- (10 4) :easterFor 2039 .
22
- (1 4) :easterFor 2040 .
23
- (21 4) :easterFor 2041 .
24
- (6 4) :easterFor 2042 .
25
- (29 3) :easterFor 2043 .
26
- (17 4) :easterFor 2044 .
27
- (9 4) :easterFor 2045 .
28
- (25 3) :easterFor 2046 .
29
- (14 4) :easterFor 2047 .
30
- (5 4) :easterFor 2048 .
31
- (18 4) :easterFor 2049 .
32
- (10 4) :easterFor 2050 .
1
+ Easter Gregorian computus
2
+
3
+ === 2026 ===
4
+ Answer
5
+ Easter Sunday falls on April 5.
6
+
7
+ Reason Why
8
+ For year 2026, the computus gives j=12, k=20, q=6, r=12, v=2, and final month/day numbers x=4, z=4. Because the day is z+1, the resulting Easter date is April 5.
9
+
10
+ Check
11
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
12
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
13
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
14
+ C4 OK - the final month is a valid Easter month (March or April).
15
+ C5 OK - the final date is inside the legal Gregorian Easter window.
16
+ Easter Gregorian computus
17
+
18
+ === 2027 ===
19
+ Answer
20
+ Easter Sunday falls on March 28.
21
+
22
+ Reason Why
23
+ For year 2027, the computus gives j=13, k=20, q=6, r=1, v=5, and final month/day numbers x=3, z=27. Because the day is z+1, the resulting Easter date is March 28.
24
+
25
+ Check
26
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
27
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
28
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
29
+ C4 OK - the final month is a valid Easter month (March or April).
30
+ C5 OK - the final date is inside the legal Gregorian Easter window.
31
+ Easter Gregorian computus
32
+
33
+ === 2028 ===
34
+ Answer
35
+ Easter Sunday falls on April 16.
36
+
37
+ Reason Why
38
+ For year 2028, the computus gives j=14, k=20, q=6, r=20, v=5, and final month/day numbers x=4, z=15. Because the day is z+1, the resulting Easter date is April 16.
39
+
40
+ Check
41
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
42
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
43
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
44
+ C4 OK - the final month is a valid Easter month (March or April).
45
+ C5 OK - the final date is inside the legal Gregorian Easter window.
46
+ Easter — Gregorian computus
47
+
48
+ === 2029 ===
49
+ Answer
50
+ Easter Sunday falls on April 1.
51
+
52
+ Reason Why
53
+ For year 2029, the computus gives j=15, k=20, q=6, r=9, v=1, and final month/day numbers x=4, z=0. Because the day is z+1, the resulting Easter date is April 1.
54
+
55
+ Check
56
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
57
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
58
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
59
+ C4 OK - the final month is a valid Easter month (March or April).
60
+ C5 OK - the final date is inside the legal Gregorian Easter window.
61
+ Easter — Gregorian computus
62
+
63
+ === 2030 ===
64
+ Answer
65
+ Easter Sunday falls on April 21.
66
+
67
+ Reason Why
68
+ For year 2030, the computus gives j=16, k=20, q=6, r=28, v=2, and final month/day numbers x=4, z=20. Because the day is z+1, the resulting Easter date is April 21.
69
+
70
+ Check
71
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
72
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
73
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
74
+ C4 OK - the final month is a valid Easter month (March or April).
75
+ C5 OK - the final date is inside the legal Gregorian Easter window.
76
+ Easter — Gregorian computus
77
+
78
+ === 2031 ===
79
+ Answer
80
+ Easter Sunday falls on April 13.
81
+
82
+ Reason Why
83
+ For year 2031, the computus gives j=17, k=20, q=6, r=17, v=5, and final month/day numbers x=4, z=12. Because the day is z+1, the resulting Easter date is April 13.
84
+
85
+ Check
86
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
87
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
88
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
89
+ C4 OK - the final month is a valid Easter month (March or April).
90
+ C5 OK - the final date is inside the legal Gregorian Easter window.
91
+ Easter — Gregorian computus
92
+
93
+ === 2032 ===
94
+ Answer
95
+ Easter Sunday falls on March 28.
96
+
97
+ Reason Why
98
+ For year 2032, the computus gives j=18, k=20, q=6, r=6, v=0, and final month/day numbers x=3, z=27. Because the day is z+1, the resulting Easter date is March 28.
99
+
100
+ Check
101
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
102
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
103
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
104
+ C4 OK - the final month is a valid Easter month (March or April).
105
+ C5 OK - the final date is inside the legal Gregorian Easter window.
106
+ Easter — Gregorian computus
107
+
108
+ === 2033 ===
109
+ Answer
110
+ Easter Sunday falls on April 17.
111
+
112
+ Reason Why
113
+ For year 2033, the computus gives j=0, k=20, q=6, r=24, v=2, and final month/day numbers x=4, z=16. Because the day is z+1, the resulting Easter date is April 17.
114
+
115
+ Check
116
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
117
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
118
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
119
+ C4 OK - the final month is a valid Easter month (March or April).
120
+ C5 OK - the final date is inside the legal Gregorian Easter window.
121
+ Easter — Gregorian computus
122
+
123
+ === 2034 ===
124
+ Answer
125
+ Easter Sunday falls on April 9.
126
+
127
+ Reason Why
128
+ For year 2034, the computus gives j=1, k=20, q=6, r=13, v=5, and final month/day numbers x=4, z=8. Because the day is z+1, the resulting Easter date is April 9.
129
+
130
+ Check
131
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
132
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
133
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
134
+ C4 OK - the final month is a valid Easter month (March or April).
135
+ C5 OK - the final date is inside the legal Gregorian Easter window.
136
+ Easter — Gregorian computus
137
+
138
+ === 2035 ===
139
+ Answer
140
+ Easter Sunday falls on March 25.
141
+
142
+ Reason Why
143
+ For year 2035, the computus gives j=2, k=20, q=6, r=2, v=1, and final month/day numbers x=3, z=24. Because the day is z+1, the resulting Easter date is March 25.
144
+
145
+ Check
146
+ C1 OK - the Golden Number remainder j is inside the 0–18 cycle.
147
+ C2 OK - the epact-style remainder r is inside the 0–29 cycle.
148
+ C3 OK - the weekday adjustment v is inside the 0–6 cycle.
149
+ C4 OK - the final month is a valid Easter month (March or April).
150
+ C5 OK - the final date is inside the legal Gregorian Easter window.
@@ -1,3 +1 @@
1
- @prefix log: <http://www.w3.org/2000/10/swap/log#> .
2
-
3
- 1 log:outputString "Knapsack GA best genome 101000000101 (feasible=true): weight=50 value=101 after 4 generations.\n" .
1
+ Knapsack GA best genome 101000000101 (feasible=true): weight=50 value=101 after 4 generations.
@@ -1,3 +1 @@
1
- @prefix log: <http://www.w3.org/2000/10/swap/log#> .
2
-
3
- 1 log:outputString "GA evolved 11111101010 -> 2026 in 8 generations.\n" .
1
+ GA evolved 11111101010 -> 2026 in 8 generations.
@@ -1,6 +1,15 @@
1
- @prefix : <https://eyereasoner.github.io/eye/reasoning#> .
2
- @prefix gps: <https://eyereasoner.github.io/eye/reasoning/gps/gps-schema#> .
3
- @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
1
+ GPS Goal driven route planning
4
2
 
5
- :i1 gps:path ((:drive_gent_brugge :drive_brugge_oostende) "2400"^^xsd:decimal "0.01"^^xsd:decimal "0.9408"^^xsd:decimal "0.99"^^xsd:decimal) .
6
- :i1 gps:path ((:drive_gent_kortrijk :drive_kortrijk_brugge :drive_brugge_oostende) "4100"^^xsd:decimal "0.018"^^xsd:decimal "0.903168"^^xsd:decimal "0.9801"^^xsd:decimal) .
3
+ Answer
4
+ Take the direct route via Brugge.
5
+ Recommended route: Gent → Brugge → Oostende
6
+
7
+ Reason Why
8
+ From Gent to Oostende, the planner found two routes in this small map. The direct route (Gent → Brugge → Oostende) takes 2400 seconds at cost 0.01, with belief 0.9408 and comfort 0.99. The alternative (Gent → Kortrijk → Brugge → Oostende) takes 4100 seconds at cost 0.018, with belief 0.903168 and comfort 0.9801. So the direct route is faster, cheaper, more reliable, and slightly more comfortable.
9
+
10
+ Check
11
+ C1 OK - the direct Gent → Brugge → Oostende route was derived.
12
+ C2 OK - the alternative Gent → Kortrijk → Brugge → Oostende route was derived.
13
+ C3 OK - the recommended route is faster than the alternative.
14
+ C4 OK - the recommended route is cheaper than the alternative.
15
+ C5 OK - the recommended route has higher belief and comfort scores.
@@ -0,0 +1,27 @@
1
+ @prefix : <http://example.org/#> .
2
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
3
+
4
+ (:badBool :p "truish"^^xsd:boolean) :datatype xsd:boolean .
5
+ (:badBool :p "truish"^^xsd:boolean) :lexicalForm "truish" .
6
+ (:badBool :p "truish"^^xsd:boolean) :reason "invalid xsd:boolean lexical form" .
7
+ (:badDate :p "yesterday"^^xsd:dateTime) :datatype xsd:dateTime .
8
+ (:badDate :p "yesterday"^^xsd:dateTime) :lexicalForm "yesterday" .
9
+ (:badDate :p "yesterday"^^xsd:dateTime) :reason "xsd:dateTime literal is not parseable by the reasoner" .
10
+ (:badDateTime :p "not-a-datetime"^^xsd:dateTime) :datatype xsd:dateTime .
11
+ (:badDateTime :p "not-a-datetime"^^xsd:dateTime) :lexicalForm "not-a-datetime" .
12
+ (:badDateTime :p "not-a-datetime"^^xsd:dateTime) :reason "xsd:dateTime literal is not parseable by the reasoner" .
13
+ (:badDecimal :p "12.3.4"^^xsd:decimal) :datatype xsd:decimal .
14
+ (:badDecimal :p "12.3.4"^^xsd:decimal) :lexicalForm "12.3.4" .
15
+ (:badDecimal :p "12.3.4"^^xsd:decimal) :reason "invalid xsd:decimal lexical form" .
16
+ (:badDouble :p "1e"^^xsd:double) :datatype xsd:double .
17
+ (:badDouble :p "1e"^^xsd:double) :lexicalForm "1e" .
18
+ (:badDouble :p "1e"^^xsd:double) :reason "invalid xsd:float/xsd:double lexical form" .
19
+ (:badDuration :p "not-a-duration"^^xsd:duration) :datatype xsd:duration .
20
+ (:badDuration :p "not-a-duration"^^xsd:duration) :lexicalForm "not-a-duration" .
21
+ (:badDuration :p "not-a-duration"^^xsd:duration) :reason "xsd:duration literal is not parseable by the reasoner" .
22
+ (:badInt1 :p "abc"^^xsd:integer) :datatype xsd:integer .
23
+ (:badInt1 :p "abc"^^xsd:integer) :lexicalForm "abc" .
24
+ (:badInt1 :p "abc"^^xsd:integer) :reason "invalid integer-family lexical form" .
25
+ (:badInt2 :p "12.3"^^xsd:int) :datatype xsd:int .
26
+ (:badInt2 :p "12.3"^^xsd:int) :lexicalForm "12.3" .
27
+ (:badInt2 :p "12.3"^^xsd:int) :reason "invalid integer-family lexical form" .