eyeprolog 1.6.12 → 1.6.13

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.
Files changed (129) hide show
  1. package/examples/proof/abstract-interpretation.pl +146 -0
  2. package/examples/proof/ackermann.pl +296 -0
  3. package/examples/proof/alignment-demo.pl +196 -0
  4. package/examples/proof/allen-interval-calculus.pl +1271 -0
  5. package/examples/proof/auroracare.pl +954 -0
  6. package/examples/proof/basic-monadic.pl +37176 -0
  7. package/examples/proof/bayes-therapy.pl +1349 -0
  8. package/examples/proof/bench.pl +2802 -0
  9. package/examples/proof/binomial-vandermonde.pl +983 -0
  10. package/examples/proof/blocks-world-planning.pl +471 -0
  11. package/examples/proof/bmi.pl +386 -0
  12. package/examples/proof/braking-safety-worlds.pl +508 -0
  13. package/examples/proof/buck-converter-design.pl +179 -0
  14. package/examples/proof/bulk-stream-write.pl +3 -0
  15. package/examples/proof/collatz-1000.pl +43784 -0
  16. package/examples/proof/competitive-enzyme-kinetics.pl +167 -0
  17. package/examples/proof/complex.pl +514 -0
  18. package/examples/proof/context-schema-audit.pl +374 -0
  19. package/examples/proof/continued-fraction-sqrt2.pl +476 -0
  20. package/examples/proof/control-system.pl +137 -0
  21. package/examples/proof/critical-path-schedule.pl +491 -0
  22. package/examples/proof/cross-organization-data-sharing.pl +732 -0
  23. package/examples/proof/cyclic-path.pl +44 -0
  24. package/examples/proof/dairy-energy-balance.pl +290 -0
  25. package/examples/proof/dcg-expression-language.pl +157 -0
  26. package/examples/proof/deep-taxonomy-10.pl +185 -0
  27. package/examples/proof/deep-taxonomy-100.pl +365 -0
  28. package/examples/proof/deep-taxonomy-1000.pl +163 -0
  29. package/examples/proof/deep-taxonomy-10000.pl +163 -0
  30. package/examples/proof/deep-taxonomy-100000.pl +163 -0
  31. package/examples/proof/delfour.pl +1615 -0
  32. package/examples/proof/dijkstra-findall-sort.pl +354 -0
  33. package/examples/proof/dijkstra-risk-path.pl +820 -0
  34. package/examples/proof/dijkstra.pl +753 -0
  35. package/examples/proof/dining-philosophers.pl +2663 -0
  36. package/examples/proof/donald-gerald-robert.pl +311 -0
  37. package/examples/proof/dpv-odrl-purpose-mapping.pl +1189 -0
  38. package/examples/proof/drone-corridor-planner.pl +2365 -0
  39. package/examples/proof/easter-computus.pl +1406 -0
  40. package/examples/proof/eulerian-path.pl +457 -0
  41. package/examples/proof/ev-range-worlds.pl +508 -0
  42. package/examples/proof/exoplanet-validation-worlds.pl +397 -0
  43. package/examples/proof/explainable-ev-depot-configuration.pl +313 -0
  44. package/examples/proof/family-cousins.pl +920 -0
  45. package/examples/proof/fast-fourier-transform.pl +5045 -0
  46. package/examples/proof/fastpow.pl +769 -0
  47. package/examples/proof/fft8-numeric.pl +685 -0
  48. package/examples/proof/fibonacci.pl +1425 -0
  49. package/examples/proof/field-nitrogen-balance.pl +320 -0
  50. package/examples/proof/flandor.pl +533 -0
  51. package/examples/proof/fundamental-theorem-arithmetic.pl +245 -0
  52. package/examples/proof/gd-step-certified.pl +1717 -0
  53. package/examples/proof/goldbach.pl +1135 -0
  54. package/examples/proof/gps.pl +627 -0
  55. package/examples/proof/graph.pl +105 -0
  56. package/examples/proof/gray-code-counter.pl +355 -0
  57. package/examples/proof/hamiltonian-path.pl +3373 -0
  58. package/examples/proof/hamming-code.pl +232 -0
  59. package/examples/proof/heron-theorem.pl +79 -0
  60. package/examples/proof/http-client.pl +0 -0
  61. package/examples/proof/illegitimate-reasoning.pl +220 -0
  62. package/examples/proof/integer-partitions.pl +1642 -0
  63. package/examples/proof/iso-atomic-conversion.pl +73 -0
  64. package/examples/proof/knowledge-engineering-alignment-flow.pl +200 -0
  65. package/examples/proof/knuth-bendix-completion.pl +290 -0
  66. package/examples/proof/law-of-cosines.pl +71 -0
  67. package/examples/proof/least-squares-regression.pl +342 -0
  68. package/examples/proof/lee.pl +637 -0
  69. package/examples/proof/lldm.pl +581 -0
  70. package/examples/proof/manufacturing-quality-control.pl +181 -0
  71. package/examples/proof/map-four-color-search.pl +796 -0
  72. package/examples/proof/markov-logic-network.pl +405 -0
  73. package/examples/proof/matrix-chain-order.pl +164 -0
  74. package/examples/proof/matrix-noncommutativity.pl +183 -0
  75. package/examples/proof/microgrid-dispatch.pl +164 -0
  76. package/examples/proof/missionaries-cannibals.pl +428 -0
  77. package/examples/proof/modular-exponentiation.pl +838 -0
  78. package/examples/proof/monkey-bananas.pl +278 -0
  79. package/examples/proof/network-sla.pl +100 -0
  80. package/examples/proof/newton-raphson.pl +520 -0
  81. package/examples/proof/observability-log-correlation.pl +1061 -0
  82. package/examples/proof/odrl-dpv-fpv-trust-flow.pl +1366 -0
  83. package/examples/proof/odrl-dpv-healthcare-risk-ranked.pl +488 -0
  84. package/examples/proof/odrl-dpv-risk-ranked.pl +637 -0
  85. package/examples/proof/odrl-policy-advanced.pl +705 -0
  86. package/examples/proof/odrl-policy-reasoning.pl +1423 -0
  87. package/examples/proof/odrl-policy.pl +103 -0
  88. package/examples/proof/operational-incident-response.pl +435 -0
  89. package/examples/proof/orbital-transfer-design.pl +288 -0
  90. package/examples/proof/path-discovery.pl +502 -0
  91. package/examples/proof/peano-arithmetic.pl +910 -0
  92. package/examples/proof/peano-calculus.pl +294 -0
  93. package/examples/proof/pell-equation.pl +295 -0
  94. package/examples/proof/pendulum-period.pl +97 -0
  95. package/examples/proof/pi.pl +3 -0
  96. package/examples/proof/pointer-analysis.pl +94 -0
  97. package/examples/proof/polynomial.pl +2487 -0
  98. package/examples/proof/portable-library-overlap.pl +6 -0
  99. package/examples/proof/quadratic-formula.pl +159 -0
  100. package/examples/proof/quine-mccluskey.pl +914 -0
  101. package/examples/proof/radioactive-decay.pl +104 -0
  102. package/examples/proof/rdf12-annotated-claims.pl +263 -0
  103. package/examples/proof/register-allocation.pl +120 -0
  104. package/examples/proof/relational-cube-lookup.pl +15867 -0
  105. package/examples/proof/riemann-hypothesis.pl +148 -0
  106. package/examples/proof/sat-solver-dpll.pl +226 -0
  107. package/examples/proof/scientific-evidence-graph.pl +681 -0
  108. package/examples/proof/send-more-money.pl +252 -0
  109. package/examples/proof/service-impact.pl +151 -0
  110. package/examples/proof/shoelace-polygon-area.pl +161 -0
  111. package/examples/proof/skolem-functions.pl +128 -0
  112. package/examples/proof/statistics-summary.pl +250 -0
  113. package/examples/proof/stirling-bell-numbers.pl +125 -0
  114. package/examples/proof/superdense-coding.pl +118 -0
  115. package/examples/proof/symbiotic-knowledge-graph.pl +1569 -0
  116. package/examples/proof/truth-maintenance-system.pl +466 -0
  117. package/examples/proof/turing.pl +1183 -0
  118. package/examples/proof/type-inference.pl +267 -0
  119. package/examples/proof/vector-similarity.pl +163 -0
  120. package/examples/proof/vulnerability-impact.pl +180 -0
  121. package/examples/proof/wolf-goat-cabbage.pl +339 -0
  122. package/examples/proof/zebra.pl +176 -0
  123. package/package.json +1 -1
  124. package/src/check-proof.js +159 -11
  125. package/test/conformance/NEUMERKEL-LATEST.md +3 -3
  126. package/test/regression/cases-white-box.mjs +38 -0
  127. package/test/run-examples.mjs +7 -111
  128. package/test/run-proof-checking.mjs +28 -5
  129. package/the-art-of-eyeprolog.md +4 -2
@@ -0,0 +1,508 @@
1
+ safeInWorld(city_errand, w1).
2
+ safeInWorld(city_errand, w2).
3
+ safeInWorld(city_errand, w0).
4
+ safeInWorld(city_errand, w3).
5
+ safeInWorld(winter_highway, w1).
6
+ safeInWorld(heavy_delivery, w1).
7
+ safeInWorld(heavy_delivery, w2).
8
+ safeInWorld(heavy_delivery, w0).
9
+ safeInWorld(cold_commute, w1).
10
+ safeInWorld(cold_commute, w2).
11
+ safeInWorld(cold_commute, w0).
12
+ safeInWorld(cold_commute, w3).
13
+ riskyInWorld(winter_highway, w2).
14
+ riskyInWorld(winter_highway, w0).
15
+ riskyInWorld(winter_highway, w3).
16
+ riskyInWorld(heavy_delivery, w3).
17
+ reason(winter_highway, "cold fast payload trip exceeds battery in physics-aware worlds").
18
+ reason(heavy_delivery, "safety buffer turns a physics-safe delivery into a cautious risk").
19
+ status(ev_range_worlds, expected_world_pattern).
20
+
21
+ clause(5, trip_data(city_errand, 40, 45, 20, 100, 30, 0.18), true).
22
+ clause(6, trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2), true).
23
+ clause(7, trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22), true).
24
+ clause(8, trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19), true).
25
+ clause(9,
26
+ speed_factor(var('T'), 1.2),
27
+ (trip_data(var('T'), anonymous(1), var('S'), anonymous(2), anonymous(3), anonymous(4), anonymous(5)),
28
+ var('S') > 100)).
29
+ clause(10,
30
+ speed_factor(var('T'), 1.0),
31
+ (trip_data(var('T'), anonymous(1), var('S'), anonymous(2), anonymous(3), anonymous(4), anonymous(5)),
32
+ var('S') =< 100)).
33
+ clause(11,
34
+ temperature_factor(var('T'), 1.15),
35
+ (trip_data(var('T'), anonymous(1), anonymous(2), var('Temp'), anonymous(3), anonymous(4), anonymous(5)),
36
+ var('Temp') < 0)).
37
+ clause(12,
38
+ temperature_factor(var('T'), 1.0),
39
+ (trip_data(var('T'), anonymous(1), anonymous(2), var('Temp'), anonymous(3), anonymous(4), anonymous(5)),
40
+ var('Temp') >= 0)).
41
+ clause(13,
42
+ payload_factor(var('T'), 1.15),
43
+ (trip_data(var('T'), anonymous(1), anonymous(2), anonymous(3), var('P'), anonymous(4), anonymous(5)),
44
+ var('P') > 500)).
45
+ clause(14,
46
+ payload_factor(var('T'), 1.08),
47
+ (trip_data(var('T'), anonymous(1), anonymous(2), anonymous(3), var('P'), anonymous(4), anonymous(5)),
48
+ var('P') > 250,
49
+ var('P') =< 500)).
50
+ clause(15,
51
+ payload_factor(var('T'), 1.0),
52
+ (trip_data(var('T'), anonymous(1), anonymous(2), anonymous(3), var('P'), anonymous(4), anonymous(5)),
53
+ var('P') =< 250)).
54
+ clause(16,
55
+ base_energy(var('T'), var('E')),
56
+ (trip_data(var('T'), var('D'), anonymous(1), anonymous(2), anonymous(3), anonymous(4), var('B')),
57
+ var('E') is var('D') * var('B'))).
58
+ clause(17, required_energy(var('T'), w1, var('E')), base_energy(var('T'), var('E'))).
59
+ clause(18,
60
+ required_energy(var('T'), w2, var('E')),
61
+ (base_energy(var('T'), var('Base')),
62
+ speed_factor(var('T'), var('Sf')),
63
+ var('E') is var('Base') * var('Sf'))).
64
+ clause(19,
65
+ required_energy(var('T'), w0, var('E')),
66
+ (base_energy(var('T'), var('Base')),
67
+ speed_factor(var('T'), var('Sf')),
68
+ temperature_factor(var('T'), var('Tf')),
69
+ payload_factor(var('T'), var('Pf')),
70
+ var('A') is var('Base') * var('Sf'),
71
+ var('B') is var('A') * var('Tf'),
72
+ var('E') is var('B') * var('Pf'))).
73
+ clause(20,
74
+ required_energy(var('T'), w3, var('E')),
75
+ (required_energy(var('T'), w0, var('W0')), var('E') is var('W0') * 1.3)).
76
+ clause(21,
77
+ safe_in_world(var('T'), var('W')),
78
+ (trip_data(var('T'), anonymous(1), anonymous(2), anonymous(3), anonymous(4), var('Battery'), anonymous(5)),
79
+ required_energy(var('T'), var('W'), var('Required')),
80
+ var('Required') =< var('Battery'))).
81
+ clause(22,
82
+ risky_in_world(var('T'), var('W')),
83
+ (trip_data(var('T'), anonymous(1), anonymous(2), anonymous(3), anonymous(4), var('Battery'), anonymous(5)),
84
+ required_energy(var('T'), var('W'), var('Required')),
85
+ var('Required') > var('Battery'))).
86
+ clause(23, safeInWorld(var('T'), var('W')), safe_in_world(var('T'), var('W'))).
87
+ clause(24, riskyInWorld(var('T'), var('W')), risky_in_world(var('T'), var('W'))).
88
+ clause(25,
89
+ reason(winter_highway, "cold fast payload trip exceeds battery in physics-aware worlds"),
90
+ (risky_in_world(winter_highway, w0),
91
+ risky_in_world(winter_highway, w2),
92
+ risky_in_world(winter_highway, w3),
93
+ safe_in_world(winter_highway, w1))).
94
+ clause(26,
95
+ reason(heavy_delivery, "safety buffer turns a physics-safe delivery into a cautious risk"),
96
+ (safe_in_world(heavy_delivery, w0), risky_in_world(heavy_delivery, w3))).
97
+ clause(27,
98
+ status(ev_range_worlds, expected_world_pattern),
99
+ (safe_in_world(city_errand, w3),
100
+ risky_in_world(winter_highway, w0),
101
+ risky_in_world(heavy_delivery, w3),
102
+ safe_in_world(cold_commute, w3))).
103
+
104
+ step(safeInWorld(city_errand, w1),
105
+ rule(23),
106
+ ['T' = city_errand, 'W' = w1],
107
+ [safe_in_world(city_errand, w1)]).
108
+ step(safe_in_world(city_errand, w1),
109
+ rule(21),
110
+ ['T' = city_errand, 'W' = w1, 'Battery' = 30, 'Required' = 7.199999999999999],
111
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18),
112
+ required_energy(city_errand, w1, 7.199999999999999),
113
+ 7.199999999999999 =< 30]).
114
+ step(trip_data(city_errand, 40, 45, 20, 100, 30, 0.18), fact(5), [], []).
115
+ step(required_energy(city_errand, w1, 7.199999999999999),
116
+ rule(17),
117
+ ['T' = city_errand, 'E' = 7.199999999999999],
118
+ [base_energy(city_errand, 7.199999999999999)]).
119
+ step(base_energy(city_errand, 7.199999999999999),
120
+ rule(16),
121
+ ['T' = city_errand, 'E' = 7.199999999999999, 'D' = 40, 'B' = 0.18],
122
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18), 7.199999999999999 is 40 * 0.18]).
123
+ step(7.199999999999999 is 40 * 0.18, builtin, [], []).
124
+ step(7.199999999999999 =< 30, builtin, [], []).
125
+ step(safeInWorld(city_errand, w2),
126
+ rule(23),
127
+ ['T' = city_errand, 'W' = w2],
128
+ [safe_in_world(city_errand, w2)]).
129
+ step(safe_in_world(city_errand, w2),
130
+ rule(21),
131
+ ['T' = city_errand, 'W' = w2, 'Battery' = 30, 'Required' = 7.199999999999999],
132
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18),
133
+ required_energy(city_errand, w2, 7.199999999999999),
134
+ 7.199999999999999 =< 30]).
135
+ step(required_energy(city_errand, w2, 7.199999999999999),
136
+ rule(18),
137
+ ['T' = city_errand, 'E' = 7.199999999999999, 'Base' = 7.199999999999999, 'Sf' = 1.0],
138
+ [base_energy(city_errand, 7.199999999999999),
139
+ speed_factor(city_errand, 1.0),
140
+ 7.199999999999999 is 7.199999999999999 * 1.0]).
141
+ step(speed_factor(city_errand, 1.0),
142
+ rule(10),
143
+ ['T' = city_errand, 'S' = 45],
144
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18), 45 =< 100]).
145
+ step(45 =< 100, builtin, [], []).
146
+ step(7.199999999999999 is 7.199999999999999 * 1.0, builtin, [], []).
147
+ step(safeInWorld(city_errand, w0),
148
+ rule(23),
149
+ ['T' = city_errand, 'W' = w0],
150
+ [safe_in_world(city_errand, w0)]).
151
+ step(safe_in_world(city_errand, w0),
152
+ rule(21),
153
+ ['T' = city_errand, 'W' = w0, 'Battery' = 30, 'Required' = 7.199999999999999],
154
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18),
155
+ required_energy(city_errand, w0, 7.199999999999999),
156
+ 7.199999999999999 =< 30]).
157
+ step(required_energy(city_errand, w0, 7.199999999999999),
158
+ rule(19),
159
+ ['T' = city_errand,
160
+ 'E' = 7.199999999999999,
161
+ 'Base' = 7.199999999999999,
162
+ 'Sf' = 1.0,
163
+ 'Tf' = 1.0,
164
+ 'Pf' = 1.0,
165
+ 'A' = 7.199999999999999,
166
+ 'B' = 7.199999999999999],
167
+ [base_energy(city_errand, 7.199999999999999),
168
+ speed_factor(city_errand, 1.0),
169
+ temperature_factor(city_errand, 1.0),
170
+ payload_factor(city_errand, 1.0),
171
+ 7.199999999999999 is 7.199999999999999 * 1.0,
172
+ 7.199999999999999 is 7.199999999999999 * 1.0,
173
+ 7.199999999999999 is 7.199999999999999 * 1.0]).
174
+ step(temperature_factor(city_errand, 1.0),
175
+ rule(12),
176
+ ['T' = city_errand, 'Temp' = 20],
177
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18), 20 >= 0]).
178
+ step(20 >= 0, builtin, [], []).
179
+ step(payload_factor(city_errand, 1.0),
180
+ rule(15),
181
+ ['T' = city_errand, 'P' = 100],
182
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18), 100 =< 250]).
183
+ step(100 =< 250, builtin, [], []).
184
+ step(safeInWorld(city_errand, w3),
185
+ rule(23),
186
+ ['T' = city_errand, 'W' = w3],
187
+ [safe_in_world(city_errand, w3)]).
188
+ step(safe_in_world(city_errand, w3),
189
+ rule(21),
190
+ ['T' = city_errand, 'W' = w3, 'Battery' = 30, 'Required' = 9.36],
191
+ [trip_data(city_errand, 40, 45, 20, 100, 30, 0.18),
192
+ required_energy(city_errand, w3, 9.36),
193
+ 9.36 =< 30]).
194
+ step(required_energy(city_errand, w3, 9.36),
195
+ rule(20),
196
+ ['T' = city_errand, 'E' = 9.36, 'W0' = 7.199999999999999],
197
+ [required_energy(city_errand, w0, 7.199999999999999), 9.36 is 7.199999999999999 * 1.3]).
198
+ step(9.36 is 7.199999999999999 * 1.3, builtin, [], []).
199
+ step(9.36 =< 30, builtin, [], []).
200
+ step(safeInWorld(winter_highway, w1),
201
+ rule(23),
202
+ ['T' = winter_highway, 'W' = w1],
203
+ [safe_in_world(winter_highway, w1)]).
204
+ step(safe_in_world(winter_highway, w1),
205
+ rule(21),
206
+ ['T' = winter_highway, 'W' = w1, 'Battery' = 60, 'Required' = 52.0],
207
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2),
208
+ required_energy(winter_highway, w1, 52.0),
209
+ 52.0 =< 60]).
210
+ step(trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2), fact(6), [], []).
211
+ step(required_energy(winter_highway, w1, 52.0),
212
+ rule(17),
213
+ ['T' = winter_highway, 'E' = 52.0],
214
+ [base_energy(winter_highway, 52.0)]).
215
+ step(base_energy(winter_highway, 52.0),
216
+ rule(16),
217
+ ['T' = winter_highway, 'E' = 52.0, 'D' = 260, 'B' = 0.2],
218
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2), 52.0 is 260 * 0.2]).
219
+ step(52.0 is 260 * 0.2, builtin, [], []).
220
+ step(52.0 =< 60, builtin, [], []).
221
+ step(safeInWorld(heavy_delivery, w1),
222
+ rule(23),
223
+ ['T' = heavy_delivery, 'W' = w1],
224
+ [safe_in_world(heavy_delivery, w1)]).
225
+ step(safe_in_world(heavy_delivery, w1),
226
+ rule(21),
227
+ ['T' = heavy_delivery, 'W' = w1, 'Battery' = 55, 'Required' = 39.6],
228
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22),
229
+ required_energy(heavy_delivery, w1, 39.6),
230
+ 39.6 =< 55]).
231
+ step(trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22), fact(7), [], []).
232
+ step(required_energy(heavy_delivery, w1, 39.6),
233
+ rule(17),
234
+ ['T' = heavy_delivery, 'E' = 39.6],
235
+ [base_energy(heavy_delivery, 39.6)]).
236
+ step(base_energy(heavy_delivery, 39.6),
237
+ rule(16),
238
+ ['T' = heavy_delivery, 'E' = 39.6, 'D' = 180, 'B' = 0.22],
239
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22), 39.6 is 180 * 0.22]).
240
+ step(39.6 is 180 * 0.22, builtin, [], []).
241
+ step(39.6 =< 55, builtin, [], []).
242
+ step(safeInWorld(heavy_delivery, w2),
243
+ rule(23),
244
+ ['T' = heavy_delivery, 'W' = w2],
245
+ [safe_in_world(heavy_delivery, w2)]).
246
+ step(safe_in_world(heavy_delivery, w2),
247
+ rule(21),
248
+ ['T' = heavy_delivery, 'W' = w2, 'Battery' = 55, 'Required' = 39.6],
249
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22),
250
+ required_energy(heavy_delivery, w2, 39.6),
251
+ 39.6 =< 55]).
252
+ step(required_energy(heavy_delivery, w2, 39.6),
253
+ rule(18),
254
+ ['T' = heavy_delivery, 'E' = 39.6, 'Base' = 39.6, 'Sf' = 1.0],
255
+ [base_energy(heavy_delivery, 39.6), speed_factor(heavy_delivery, 1.0), 39.6 is 39.6 * 1.0]).
256
+ step(speed_factor(heavy_delivery, 1.0),
257
+ rule(10),
258
+ ['T' = heavy_delivery, 'S' = 80],
259
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22), 80 =< 100]).
260
+ step(80 =< 100, builtin, [], []).
261
+ step(39.6 is 39.6 * 1.0, builtin, [], []).
262
+ step(safeInWorld(heavy_delivery, w0),
263
+ rule(23),
264
+ ['T' = heavy_delivery, 'W' = w0],
265
+ [safe_in_world(heavy_delivery, w0)]).
266
+ step(safe_in_world(heavy_delivery, w0),
267
+ rule(21),
268
+ ['T' = heavy_delivery, 'W' = w0, 'Battery' = 55, 'Required' = 45.54],
269
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22),
270
+ required_energy(heavy_delivery, w0, 45.54),
271
+ 45.54 =< 55]).
272
+ step(required_energy(heavy_delivery, w0, 45.54),
273
+ rule(19),
274
+ ['T' = heavy_delivery,
275
+ 'E' = 45.54,
276
+ 'Base' = 39.6,
277
+ 'Sf' = 1.0,
278
+ 'Tf' = 1.0,
279
+ 'Pf' = 1.15,
280
+ 'A' = 39.6,
281
+ 'B' = 39.6],
282
+ [base_energy(heavy_delivery, 39.6),
283
+ speed_factor(heavy_delivery, 1.0),
284
+ temperature_factor(heavy_delivery, 1.0),
285
+ payload_factor(heavy_delivery, 1.15),
286
+ 39.6 is 39.6 * 1.0,
287
+ 39.6 is 39.6 * 1.0,
288
+ 45.54 is 39.6 * 1.15]).
289
+ step(temperature_factor(heavy_delivery, 1.0),
290
+ rule(12),
291
+ ['T' = heavy_delivery, 'Temp' = 15],
292
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22), 15 >= 0]).
293
+ step(15 >= 0, builtin, [], []).
294
+ step(payload_factor(heavy_delivery, 1.15),
295
+ rule(13),
296
+ ['T' = heavy_delivery, 'P' = 700],
297
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22), 700 > 500]).
298
+ step(700 > 500, builtin, [], []).
299
+ step(45.54 is 39.6 * 1.15, builtin, [], []).
300
+ step(45.54 =< 55, builtin, [], []).
301
+ step(safeInWorld(cold_commute, w1),
302
+ rule(23),
303
+ ['T' = cold_commute, 'W' = w1],
304
+ [safe_in_world(cold_commute, w1)]).
305
+ step(safe_in_world(cold_commute, w1),
306
+ rule(21),
307
+ ['T' = cold_commute, 'W' = w1, 'Battery' = 35, 'Required' = 22.8],
308
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19),
309
+ required_energy(cold_commute, w1, 22.8),
310
+ 22.8 =< 35]).
311
+ step(trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19), fact(8), [], []).
312
+ step(required_energy(cold_commute, w1, 22.8),
313
+ rule(17),
314
+ ['T' = cold_commute, 'E' = 22.8],
315
+ [base_energy(cold_commute, 22.8)]).
316
+ step(base_energy(cold_commute, 22.8),
317
+ rule(16),
318
+ ['T' = cold_commute, 'E' = 22.8, 'D' = 120, 'B' = 0.19],
319
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19), 22.8 is 120 * 0.19]).
320
+ step(22.8 is 120 * 0.19, builtin, [], []).
321
+ step(22.8 =< 35, builtin, [], []).
322
+ step(safeInWorld(cold_commute, w2),
323
+ rule(23),
324
+ ['T' = cold_commute, 'W' = w2],
325
+ [safe_in_world(cold_commute, w2)]).
326
+ step(safe_in_world(cold_commute, w2),
327
+ rule(21),
328
+ ['T' = cold_commute, 'W' = w2, 'Battery' = 35, 'Required' = 22.8],
329
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19),
330
+ required_energy(cold_commute, w2, 22.8),
331
+ 22.8 =< 35]).
332
+ step(required_energy(cold_commute, w2, 22.8),
333
+ rule(18),
334
+ ['T' = cold_commute, 'E' = 22.8, 'Base' = 22.8, 'Sf' = 1.0],
335
+ [base_energy(cold_commute, 22.8), speed_factor(cold_commute, 1.0), 22.8 is 22.8 * 1.0]).
336
+ step(speed_factor(cold_commute, 1.0),
337
+ rule(10),
338
+ ['T' = cold_commute, 'S' = 90],
339
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19), 90 =< 100]).
340
+ step(90 =< 100, builtin, [], []).
341
+ step(22.8 is 22.8 * 1.0, builtin, [], []).
342
+ step(safeInWorld(cold_commute, w0),
343
+ rule(23),
344
+ ['T' = cold_commute, 'W' = w0],
345
+ [safe_in_world(cold_commute, w0)]).
346
+ step(safe_in_world(cold_commute, w0),
347
+ rule(21),
348
+ ['T' = cold_commute, 'W' = w0, 'Battery' = 35, 'Required' = 26.22],
349
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19),
350
+ required_energy(cold_commute, w0, 26.22),
351
+ 26.22 =< 35]).
352
+ step(required_energy(cold_commute, w0, 26.22),
353
+ rule(19),
354
+ ['T' = cold_commute,
355
+ 'E' = 26.22,
356
+ 'Base' = 22.8,
357
+ 'Sf' = 1.0,
358
+ 'Tf' = 1.15,
359
+ 'Pf' = 1.0,
360
+ 'A' = 22.8,
361
+ 'B' = 26.22],
362
+ [base_energy(cold_commute, 22.8),
363
+ speed_factor(cold_commute, 1.0),
364
+ temperature_factor(cold_commute, 1.15),
365
+ payload_factor(cold_commute, 1.0),
366
+ 22.8 is 22.8 * 1.0,
367
+ 26.22 is 22.8 * 1.15,
368
+ 26.22 is 26.22 * 1.0]).
369
+ step(temperature_factor(cold_commute, 1.15),
370
+ rule(11),
371
+ ['T' = cold_commute, 'Temp' = -8],
372
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19), -8 < 0]).
373
+ step(-8 < 0, builtin, [], []).
374
+ step(payload_factor(cold_commute, 1.0),
375
+ rule(15),
376
+ ['T' = cold_commute, 'P' = 100],
377
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19), 100 =< 250]).
378
+ step(26.22 is 22.8 * 1.15, builtin, [], []).
379
+ step(26.22 is 26.22 * 1.0, builtin, [], []).
380
+ step(26.22 =< 35, builtin, [], []).
381
+ step(safeInWorld(cold_commute, w3),
382
+ rule(23),
383
+ ['T' = cold_commute, 'W' = w3],
384
+ [safe_in_world(cold_commute, w3)]).
385
+ step(safe_in_world(cold_commute, w3),
386
+ rule(21),
387
+ ['T' = cold_commute, 'W' = w3, 'Battery' = 35, 'Required' = 34.086],
388
+ [trip_data(cold_commute, 120, 90, -8, 100, 35, 0.19),
389
+ required_energy(cold_commute, w3, 34.086),
390
+ 34.086 =< 35]).
391
+ step(required_energy(cold_commute, w3, 34.086),
392
+ rule(20),
393
+ ['T' = cold_commute, 'E' = 34.086, 'W0' = 26.22],
394
+ [required_energy(cold_commute, w0, 26.22), 34.086 is 26.22 * 1.3]).
395
+ step(34.086 is 26.22 * 1.3, builtin, [], []).
396
+ step(34.086 =< 35, builtin, [], []).
397
+ step(riskyInWorld(winter_highway, w2),
398
+ rule(24),
399
+ ['T' = winter_highway, 'W' = w2],
400
+ [risky_in_world(winter_highway, w2)]).
401
+ step(risky_in_world(winter_highway, w2),
402
+ rule(22),
403
+ ['T' = winter_highway, 'W' = w2, 'Battery' = 60, 'Required' = 62.4],
404
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2),
405
+ required_energy(winter_highway, w2, 62.4),
406
+ 62.4 > 60]).
407
+ step(required_energy(winter_highway, w2, 62.4),
408
+ rule(18),
409
+ ['T' = winter_highway, 'E' = 62.4, 'Base' = 52.0, 'Sf' = 1.2],
410
+ [base_energy(winter_highway, 52.0), speed_factor(winter_highway, 1.2), 62.4 is 52.0 * 1.2]).
411
+ step(speed_factor(winter_highway, 1.2),
412
+ rule(9),
413
+ ['T' = winter_highway, 'S' = 115],
414
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2), 115 > 100]).
415
+ step(115 > 100, builtin, [], []).
416
+ step(62.4 is 52.0 * 1.2, builtin, [], []).
417
+ step(62.4 > 60, builtin, [], []).
418
+ step(riskyInWorld(winter_highway, w0),
419
+ rule(24),
420
+ ['T' = winter_highway, 'W' = w0],
421
+ [risky_in_world(winter_highway, w0)]).
422
+ step(risky_in_world(winter_highway, w0),
423
+ rule(22),
424
+ ['T' = winter_highway, 'W' = w0, 'Battery' = 60, 'Required' = 77.5008],
425
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2),
426
+ required_energy(winter_highway, w0, 77.5008),
427
+ 77.5008 > 60]).
428
+ step(required_energy(winter_highway, w0, 77.5008),
429
+ rule(19),
430
+ ['T' = winter_highway,
431
+ 'E' = 77.5008,
432
+ 'Base' = 52.0,
433
+ 'Sf' = 1.2,
434
+ 'Tf' = 1.15,
435
+ 'Pf' = 1.08,
436
+ 'A' = 62.4,
437
+ 'B' = 71.75999999999999],
438
+ [base_energy(winter_highway, 52.0),
439
+ speed_factor(winter_highway, 1.2),
440
+ temperature_factor(winter_highway, 1.15),
441
+ payload_factor(winter_highway, 1.08),
442
+ 62.4 is 52.0 * 1.2,
443
+ 71.75999999999999 is 62.4 * 1.15,
444
+ 77.5008 is 71.75999999999999 * 1.08]).
445
+ step(temperature_factor(winter_highway, 1.15),
446
+ rule(11),
447
+ ['T' = winter_highway, 'Temp' = -5],
448
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2), -5 < 0]).
449
+ step(-5 < 0, builtin, [], []).
450
+ step(payload_factor(winter_highway, 1.08),
451
+ rule(14),
452
+ ['T' = winter_highway, 'P' = 400],
453
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2), 400 > 250, 400 =< 500]).
454
+ step(400 > 250, builtin, [], []).
455
+ step(400 =< 500, builtin, [], []).
456
+ step(71.75999999999999 is 62.4 * 1.15, builtin, [], []).
457
+ step(77.5008 is 71.75999999999999 * 1.08, builtin, [], []).
458
+ step(77.5008 > 60, builtin, [], []).
459
+ step(riskyInWorld(winter_highway, w3),
460
+ rule(24),
461
+ ['T' = winter_highway, 'W' = w3],
462
+ [risky_in_world(winter_highway, w3)]).
463
+ step(risky_in_world(winter_highway, w3),
464
+ rule(22),
465
+ ['T' = winter_highway, 'W' = w3, 'Battery' = 60, 'Required' = 100.75104],
466
+ [trip_data(winter_highway, 260, 115, -5, 400, 60, 0.2),
467
+ required_energy(winter_highway, w3, 100.75104),
468
+ 100.75104 > 60]).
469
+ step(required_energy(winter_highway, w3, 100.75104),
470
+ rule(20),
471
+ ['T' = winter_highway, 'E' = 100.75104, 'W0' = 77.5008],
472
+ [required_energy(winter_highway, w0, 77.5008), 100.75104 is 77.5008 * 1.3]).
473
+ step(100.75104 is 77.5008 * 1.3, builtin, [], []).
474
+ step(100.75104 > 60, builtin, [], []).
475
+ step(riskyInWorld(heavy_delivery, w3),
476
+ rule(24),
477
+ ['T' = heavy_delivery, 'W' = w3],
478
+ [risky_in_world(heavy_delivery, w3)]).
479
+ step(risky_in_world(heavy_delivery, w3),
480
+ rule(22),
481
+ ['T' = heavy_delivery, 'W' = w3, 'Battery' = 55, 'Required' = 59.202],
482
+ [trip_data(heavy_delivery, 180, 80, 15, 700, 55, 0.22),
483
+ required_energy(heavy_delivery, w3, 59.202),
484
+ 59.202 > 55]).
485
+ step(required_energy(heavy_delivery, w3, 59.202),
486
+ rule(20),
487
+ ['T' = heavy_delivery, 'E' = 59.202, 'W0' = 45.54],
488
+ [required_energy(heavy_delivery, w0, 45.54), 59.202 is 45.54 * 1.3]).
489
+ step(59.202 is 45.54 * 1.3, builtin, [], []).
490
+ step(59.202 > 55, builtin, [], []).
491
+ step(reason(winter_highway, "cold fast payload trip exceeds battery in physics-aware worlds"),
492
+ rule(25),
493
+ [],
494
+ [risky_in_world(winter_highway, w0),
495
+ risky_in_world(winter_highway, w2),
496
+ risky_in_world(winter_highway, w3),
497
+ safe_in_world(winter_highway, w1)]).
498
+ step(reason(heavy_delivery, "safety buffer turns a physics-safe delivery into a cautious risk"),
499
+ rule(26),
500
+ [],
501
+ [safe_in_world(heavy_delivery, w0), risky_in_world(heavy_delivery, w3)]).
502
+ step(status(ev_range_worlds, expected_world_pattern),
503
+ rule(27),
504
+ [],
505
+ [safe_in_world(city_errand, w3),
506
+ risky_in_world(winter_highway, w0),
507
+ risky_in_world(heavy_delivery, w3),
508
+ safe_in_world(cold_commute, w3)]).