eyeprolog 1.6.21 → 1.6.23

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 (51) hide show
  1. package/arc-in-eyeprolog.md +21 -8
  2. package/book-assets/aggregation-market.svg +21 -4
  3. package/book-assets/and-or-binding-trace.svg +22 -3
  4. package/book-assets/arithmetic-binding-flow.svg +16 -1
  5. package/book-assets/auditable-decision-service.svg +18 -1
  6. package/book-assets/bounded-experimental-math.svg +21 -2
  7. package/book-assets/cli-observation-loop.svg +17 -0
  8. package/book-assets/context-data-boundary.svg +18 -2
  9. package/book-assets/correctness-obligations.svg +17 -1
  10. package/book-assets/debugging-four-lenses.svg +19 -2
  11. package/book-assets/example-landscape.svg +33 -6
  12. package/book-assets/finite-search-funnel.svg +31 -6
  13. package/book-assets/herbrand-world.svg +17 -2
  14. package/book-assets/integrity-check-control-panel.svg +18 -3
  15. package/book-assets/iso-control-board.svg +21 -2
  16. package/book-assets/iso-state-operator-console.svg +21 -2
  17. package/book-assets/iso-stream-roundtrip.svg +17 -1
  18. package/book-assets/iso-term-prism.svg +16 -1
  19. package/book-assets/knowledge-engineering-workflow.svg +19 -3
  20. package/book-assets/laboratory-progression.svg +18 -0
  21. package/book-assets/lists-train.svg +16 -2
  22. package/book-assets/logic-and-control.svg +31 -10
  23. package/book-assets/negation-guest-registry.svg +17 -2
  24. package/book-assets/part-1-relations.svg +34 -6
  25. package/book-assets/part-2-search.svg +25 -4
  26. package/book-assets/part-3-trustworthy-reasoning.svg +35 -6
  27. package/book-assets/part-4-craft.svg +37 -10
  28. package/book-assets/part-5-relational-design.svg +18 -1
  29. package/book-assets/part-6-mathematics.svg +31 -6
  30. package/book-assets/part-7-laboratory.svg +19 -2
  31. package/book-assets/part-8-standard-prolog.svg +35 -5
  32. package/book-assets/pattern-selection-map.svg +16 -1
  33. package/book-assets/program-construction-loop.svg +16 -1
  34. package/book-assets/program-transformation-workbench.svg +21 -2
  35. package/book-assets/proof-and-search.svg +14 -1
  36. package/book-assets/proof-as-computation.svg +17 -1
  37. package/book-assets/recursion-induction-ladder.svg +19 -2
  38. package/book-assets/recursion-tabling-railway.svg +13 -1
  39. package/book-assets/reference-navigation.svg +16 -0
  40. package/book-assets/relational-test-spectrum.svg +16 -1
  41. package/book-assets/review-lenses.svg +18 -0
  42. package/book-assets/syntax-relations.svg +18 -2
  43. package/book-assets/termination-map.svg +15 -1
  44. package/book-assets/title-page.svg +30 -1
  45. package/book-assets/unification.svg +16 -2
  46. package/package.json +1 -1
  47. package/src/repl.js +29 -20
  48. package/test/run-proof-checking.mjs +0 -0
  49. package/test/run-properties.mjs +0 -0
  50. package/the-art-of-eyeprolog.md +5 -4
  51. package/why-eyeprolog.md +3 -3
@@ -114,6 +114,13 @@ with C5 as the only objecting condition.
114
114
 
115
115
  A condition that cannot fail is not much of a check.
116
116
 
117
+ Not every step needs recomputing to be established. A control construct such as
118
+ `once(G)` records the goal it wraps among its uses, and that goal is itself a
119
+ step which C1 and C4 already check, so the conclusion is carried rather than
120
+ trusted — and the checker verifies that entailment actually holds instead of
121
+ assuming it. Constructs that claim something about the *absence* of further
122
+ solutions are excluded, because no recorded use can establish an absence.
123
+
117
124
  ## 04 — Composition: a checked answer is data
118
125
 
119
126
  An arc need not stay isolated. Its output is the same kind of thing as its
@@ -200,18 +207,24 @@ the program themselves, with a different copy of the checker if they like.
200
207
 
201
208
  ## 08 — Catalogue: the corpus
202
209
 
203
- The pattern is not aspirational here. Every one of the **235 examples** ships
204
- with its answer and a checked proof, and `npm test` re-checks all of them on
205
- every run:
210
+ The pattern is not aspirational here. Every one of the **236 examples** ships
211
+ with its answer, the proof of that answer, and the result of checking the
212
+ proof, and `npm test` re-checks all of them on every run:
206
213
 
207
214
  | | |
208
215
  | --- | ---: |
209
- | examples | 235 |
210
- | packaged proofs | 235 |
211
- | recorded steps | 36423 |
212
- | verified against a source clause | 20746 |
216
+ | examples | 236 |
217
+ | packaged proofs | 236 |
218
+ | packaged check results | 236 |
219
+ | recorded steps | 36432 |
220
+ | verified against a source clause | 20753 |
213
221
  | recomputed independently | 14720 |
214
- | remaining obligations | 952 (2.6%) |
222
+ | carried by the goal they wrap | 76 |
223
+ | remaining obligations | 878 (2.4%) |
224
+
225
+ Each obligation names the conclusion it stands for, so the residue can be read
226
+ rather than only counted. Two thirds of it is one thing: a `\+` step claims a
227
+ goal has no proof, and no recorded use can establish an absence.
215
228
 
216
229
  The proof directory is read from disk rather than from a list, so a document
217
230
  cannot be added without being checked. An unverified proof is worse than none,
@@ -5,11 +5,28 @@
5
5
  .wall{fill:#FFF0D6}.counter{fill:#F6D978}.basket{fill:#E2BA22;stroke:#9D8200;stroke-width:3}.fruit{stroke:#008EAA;stroke-width:2}
6
6
  .card{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.text{fill:#17324D;font:15px ui-monospace,monospace}
7
7
  .flow{fill:none;stroke:#C8A100;stroke-width:3}.result{fill:#DDF7FB;stroke:#008EAA;stroke-width:3}
8
- </style>
8
+
9
+ .f-E2BA22{fill:#E2BA22}
10
+ .f-F6D978{fill:#F6D978}
11
+ .s-9D8200{stroke:#9D8200}
12
+ @media (prefers-color-scheme: dark) {
13
+ .wall{fill:#272015}
14
+ .counter{fill:#36301D}
15
+ .basket{fill:#453E25;stroke:#D6C572;stroke-width:3}
16
+ .fruit{stroke:#6EC4D5;stroke-width:2}
17
+ .card{fill:#221E12;stroke:#82AEDA;stroke-width:2}
18
+ .text{fill:#D7E3F0;font:15px ui-monospace,monospace}
19
+ .flow{fill:none;stroke:#D3BD66;stroke-width:3}
20
+ .result{fill:#152427;stroke:#6EC4D5;stroke-width:3}
21
+ .f-E2BA22{fill:#453E25}
22
+ .f-F6D978{fill:#36301D}
23
+ .s-9D8200{stroke:#D6C572}
24
+ }
25
+ </style>
9
26
  <rect width="900" height="380" class="wall"/><rect y="235" width="900" height="145" class="counter"/>
10
- <g transform="translate(65 120)"><path class="basket" d="M0 40 H140 L120 130 H20Z"/><path d="M30 40 Q70-35 110 40" fill="none" stroke="#9D8200" stroke-width="5"/><circle class="fruit" cx="48" cy="55" r="25" fill="#E2BA22"/><circle class="fruit" cx="91" cy="57" r="27" fill="#F6D978"/><rect class="card" x="38" y="93" width="65" height="30"/><text class="text" x="70" y="114" text-anchor="middle">2 kg</text></g>
11
- <g transform="translate(245 130) scale(.85)"><path class="basket" d="M0 40 H140 L120 130 H20Z"/><path d="M30 40 Q70-35 110 40" fill="none" stroke="#9D8200" stroke-width="5"/><circle class="fruit" cx="48" cy="55" r="25" fill="#E2BA22"/><circle class="fruit" cx="91" cy="57" r="27" fill="#F6D978"/><rect class="card" x="38" y="93" width="65" height="30"/><text class="text" x="70" y="114" text-anchor="middle">5 kg</text></g>
12
- <g transform="translate(395 135) scale(.78)"><path class="basket" d="M0 40 H140 L120 130 H20Z"/><path d="M30 40 Q70-35 110 40" fill="none" stroke="#9D8200" stroke-width="5"/><circle class="fruit" cx="48" cy="55" r="25" fill="#E2BA22"/><circle class="fruit" cx="91" cy="57" r="27" fill="#F6D978"/><rect class="card" x="38" y="93" width="65" height="30"/><text class="text" x="70" y="114" text-anchor="middle">3 kg</text></g>
27
+ <g transform="translate(65 120)"><path class="basket" d="M0 40 H140 L120 130 H20Z"/><path d="M30 40 Q70-35 110 40" fill="none" stroke-width="5" class="s-9D8200"/><circle class="fruit f-E2BA22" cx="48" cy="55" r="25"/><circle class="fruit f-F6D978" cx="91" cy="57" r="27"/><rect class="card" x="38" y="93" width="65" height="30"/><text class="text" x="70" y="114" text-anchor="middle">2 kg</text></g>
28
+ <g transform="translate(245 130) scale(.85)"><path class="basket" d="M0 40 H140 L120 130 H20Z"/><path d="M30 40 Q70-35 110 40" fill="none" stroke-width="5" class="s-9D8200"/><circle class="fruit f-E2BA22" cx="48" cy="55" r="25"/><circle class="fruit f-F6D978" cx="91" cy="57" r="27"/><rect class="card" x="38" y="93" width="65" height="30"/><text class="text" x="70" y="114" text-anchor="middle">5 kg</text></g>
29
+ <g transform="translate(395 135) scale(.78)"><path class="basket" d="M0 40 H140 L120 130 H20Z"/><path d="M30 40 Q70-35 110 40" fill="none" stroke-width="5" class="s-9D8200"/><circle class="fruit f-E2BA22" cx="48" cy="55" r="25"/><circle class="fruit f-F6D978" cx="91" cy="57" r="27"/><rect class="card" x="38" y="93" width="65" height="30"/><text class="text" x="70" y="114" text-anchor="middle">3 kg</text></g>
13
30
  <path class="flow" d="M520 190 C575 190 575 95 630 95 M520 190 C575 190 575 165 630 165 M520 190 C575 190 575 235 630 235 M520 190 C575 190 575 305 630 305"/>
14
31
  <rect class="result" x="630" y="67" width="210" height="55" rx="8"/><text class="text" x="735" y="100" text-anchor="middle">count = 3</text>
15
32
  <rect class="result" x="630" y="137" width="210" height="55" rx="8"/><text class="text" x="735" y="170" text-anchor="middle">sum = 10 kg</text>
@@ -8,11 +8,30 @@
8
8
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}
9
9
  .prose{fill:#405E70;font:16px Georgia,serif}.code{fill:#102A3A;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}
10
10
  .line{fill:none;stroke:#537487;stroke-width:2}.dash{fill:none;stroke:#C8A100;stroke-width:2;stroke-dasharray:6 5}
11
+
12
+ .f-537487{fill:#537487}
13
+ .f-C8A100{fill:#C8A100}
14
+ .f-FFF9E8{fill:#FFF9E8}
15
+ @media (prefers-color-scheme: dark) {
16
+ .paper{fill:#221E12;stroke:#82AEDA;stroke-width:2}
17
+ .goal{fill:#142325;stroke:#6EC4D5;stroke-width:2}
18
+ .choice{fill:#2A2717;stroke:#CEB556;stroke-width:2}
19
+ .fail{fill:#272015;stroke:#D3BD66;stroke-width:2}
20
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
21
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
22
+ .prose{fill:#CDDBE3;font:16px Georgia,serif}
23
+ .code{fill:#DCEAF2;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}
24
+ .line{fill:none;stroke:#81A0B1;stroke-width:2}
25
+ .dash{fill:none;stroke:#D3BD66;stroke-width:2;stroke-dasharray:6 5}
26
+ .f-537487{fill:#2C3D47}
27
+ .f-C8A100{fill:#4D472A}
28
+ .f-FFF9E8{fill:#242014}
29
+ }
11
30
  </style>
12
- <marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker>
13
- <marker id="redarrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#C8A100"/></marker>
31
+ <marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker>
32
+ <marker id="redarrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-C8A100"/></marker>
14
33
  </defs>
15
- <rect width="900" height="510" fill="#FFF9E8"/>
34
+ <rect width="900" height="510" class="f-FFF9E8"/>
16
35
  <text class="title" x="450" y="34" text-anchor="middle">READING ONE COMPUTATION</text>
17
36
  <rect class="paper" x="25" y="55" width="540" height="420" rx="10"/>
18
37
  <text class="label" x="295" y="84" text-anchor="middle">AND-OR SEARCH</text>
@@ -4,7 +4,22 @@
4
4
  <defs><style>
5
5
  .bg{fill:#FFF9E8}.box{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.rose{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}.code{fill:#102A3A;font:15px ui-monospace,monospace}.prose{fill:#405E70;font:15px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:3}
7
- </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker></defs>
7
+
8
+ .f-537487{fill:#537487}
9
+ @media (prefers-color-scheme: dark) {
10
+ .bg{fill:#242014}
11
+ .box{fill:#221E12;stroke:#82AEDA;stroke-width:2}
12
+ .green{fill:#152427;stroke:#6EC4D5;stroke-width:2}
13
+ .gold{fill:#2A2717;stroke:#CEB556;stroke-width:2}
14
+ .rose{fill:#272015;stroke:#D3BD66;stroke-width:2}
15
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
16
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
17
+ .code{fill:#DCEAF2;font:15px ui-monospace,monospace}
18
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
19
+ .line{fill:none;stroke:#81A0B1;stroke-width:3}
20
+ .f-537487{fill:#2C3D47}
21
+ }
22
+ </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker></defs>
8
23
  <rect class="bg" width="900" height="420"/><text class="title" x="450" y="38" text-anchor="middle">ARITHMETIC RUNS ON BOUND VALUES</text>
9
24
  <rect class="green" x="45" y="95" width="220" height="150" rx="12"/><text class="label" x="155" y="128" text-anchor="middle">1 · GENERATE</text><text class="code" x="155" y="166" text-anchor="middle">between(1,10,N)</text><text class="prose" x="155" y="202" text-anchor="middle">binds N to one finite</text><text class="prose" x="155" y="225" text-anchor="middle">candidate at a time</text>
10
25
  <rect class="gold" x="340" y="95" width="220" height="150" rx="12"/><text class="label" x="450" y="128" text-anchor="middle">2 · COMPUTE</text><text class="code" x="450" y="166" text-anchor="middle">S is N * N</text><text class="prose" x="450" y="202" text-anchor="middle">reads bound N</text><text class="prose" x="450" y="225" text-anchor="middle">and binds S</text>
@@ -4,7 +4,24 @@
4
4
  <defs><style>
5
5
  .bg{fill:#FFF9E8}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}.rose{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.dark{fill:#2C657A;stroke:#17324D;stroke-width:3}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 16px Georgia,serif}.code{fill:#102A3A;font:13px ui-monospace,monospace}.light{fill:#FFFDF8;font:14px ui-monospace,monospace}.prose{fill:#405E70;font:14px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:3}
7
- </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker></defs>
7
+
8
+ .f-537487{fill:#537487}
9
+ @media (prefers-color-scheme: dark) {
10
+ .bg{fill:#242014}
11
+ .paper{fill:#221E12;stroke:#82AEDA;stroke-width:2}
12
+ .green{fill:#152427;stroke:#6EC4D5;stroke-width:2}
13
+ .blue{fill:#152427;stroke:#81A0B1;stroke-width:2}
14
+ .rose{fill:#272015;stroke:#D3BD66;stroke-width:2}
15
+ .dark{fill:#2C4852;stroke:#82AEDA;stroke-width:3}
16
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
17
+ .label{fill:#D7E3F0;font:bold 16px Georgia,serif}
18
+ .code{fill:#DCEAF2;font:13px ui-monospace,monospace}
19
+ .light{fill:#F4EFE1;font:14px ui-monospace,monospace}
20
+ .prose{fill:#CDDBE3;font:14px Georgia,serif}
21
+ .line{fill:none;stroke:#81A0B1;stroke-width:3}
22
+ .f-537487{fill:#2C3D47}
23
+ }
24
+ </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker></defs>
8
25
  <rect class="bg" width="900" height="460"/><text class="title" x="450" y="38" text-anchor="middle">THE AUDIT TRAIL IS PART OF THE DECISION</text>
9
26
  <rect class="paper" x="30" y="90" width="195" height="105" rx="10"/><text class="label" x="127" y="120" text-anchor="middle">SOURCE FACTS</text><text class="code" x="127" y="151" text-anchor="middle">person · badge</text><text class="code" x="127" y="176" text-anchor="middle">source_version(v7)</text>
10
27
  <rect class="blue" x="30" y="245" width="195" height="105" rx="10"/><text class="label" x="127" y="275" text-anchor="middle">POLICY</text><text class="code" x="127" y="306" text-anchor="middle">standing · limits</text><text class="code" x="127" y="331" text-anchor="middle">theory_version(t3)</text>
@@ -4,10 +4,29 @@
4
4
  <defs><style>
5
5
  .bg{fill:#FFF9E8}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.domain{fill:#DDF7FB;stroke:#537487;stroke-width:3}.bad{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.good{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}.code{fill:#102A3A;font:14px ui-monospace,monospace}.prose{fill:#405E70;font:15px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:3}
7
- </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker></defs>
7
+
8
+ .f-008EAA{fill:#008EAA}
9
+ .f-537487{fill:#537487}
10
+ .f-C8A100{fill:#C8A100}
11
+ @media (prefers-color-scheme: dark) {
12
+ .bg{fill:#242014}
13
+ .paper{fill:#221E12;stroke:#82AEDA;stroke-width:2}
14
+ .domain{fill:#152427;stroke:#81A0B1;stroke-width:3}
15
+ .bad{fill:#272015;stroke:#D3BD66;stroke-width:2}
16
+ .good{fill:#152427;stroke:#6EC4D5;stroke-width:2}
17
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
18
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
19
+ .code{fill:#DCEAF2;font:14px ui-monospace,monospace}
20
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
21
+ .line{fill:none;stroke:#81A0B1;stroke-width:3}
22
+ .f-008EAA{fill:#2C4C52}
23
+ .f-537487{fill:#2C3D47}
24
+ .f-C8A100{fill:#4D472A}
25
+ }
26
+ </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker></defs>
8
27
  <rect class="bg" width="900" height="440"/><text class="title" x="450" y="38" text-anchor="middle">FINITE SEARCH: REFUTATION AND BOUNDED EVIDENCE</text>
9
28
  <rect class="paper" x="30" y="125" width="210" height="125" rx="10"/><text class="label" x="135" y="158" text-anchor="middle">CONJECTURE</text><text class="code" x="135" y="198" text-anchor="middle">∀ n . P(n)</text><text class="prose" x="135" y="227" text-anchor="middle">a universal claim</text>
10
- <path class="line" marker-end="url(#a)" d="M240 187H292"/><rect class="domain" x="300" y="75" width="300" height="250" rx="16"/><text class="label" x="450" y="110" text-anchor="middle">DECLARED FINITE DOMAIN</text><text class="code" x="450" y="145" text-anchor="middle">between(-100,100,n)</text><circle cx="380" cy="205" r="12" fill="#008EAA"/><circle cx="425" cy="235" r="12" fill="#008EAA"/><circle cx="480" cy="185" r="12" fill="#008EAA"/><circle cx="530" cy="245" r="12" fill="#C8A100"/><text class="prose" x="450" y="295" text-anchor="middle">test every generated point</text>
29
+ <path class="line" marker-end="url(#a)" d="M240 187H292"/><rect class="domain" x="300" y="75" width="300" height="250" rx="16"/><text class="label" x="450" y="110" text-anchor="middle">DECLARED FINITE DOMAIN</text><text class="code" x="450" y="145" text-anchor="middle">between(-100,100,n)</text><circle cx="380" cy="205" r="12" class="f-008EAA"/><circle cx="425" cy="235" r="12" class="f-008EAA"/><circle cx="480" cy="185" r="12" class="f-008EAA"/><circle cx="530" cy="245" r="12" class="f-C8A100"/><text class="prose" x="450" y="295" text-anchor="middle">test every generated point</text>
11
30
  <path class="line" marker-end="url(#a)" d="M600 150C645 135 650 125 680 125"/><rect class="bad" x="688" y="75" width="182" height="125" rx="10"/><text class="label" x="779" y="108" text-anchor="middle">FOUND n</text><text class="code" x="779" y="145" text-anchor="middle">¬ P(n)</text><text class="prose" x="779" y="175" text-anchor="middle">global refutation</text>
12
31
  <path class="line" marker-end="url(#a)" d="M600 260C645 275 650 290 680 290"/><rect class="good" x="688" y="240" width="182" height="125" rx="10"/><text class="label" x="779" y="273" text-anchor="middle">NONE FOUND</text><text class="code" x="779" y="310" text-anchor="middle">P(-100..100)</text><text class="prose" x="779" y="340" text-anchor="middle">bounded evidence</text>
13
32
  <text class="prose" x="450" y="410" text-anchor="middle">Exhaustion proves the bounded statement—not the unbounded theorem.</text>
@@ -5,6 +5,23 @@
5
5
  <style>
6
6
  .bg{fill:#FFF9E8}.source{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.engine{fill:#17324D;stroke:#102A3A;stroke-width:3}.out{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.diag{fill:#BFEAF1;stroke:#2C657A;stroke-width:2}.status{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.compare{fill:#FFFDF8;stroke:#537487;stroke-width:2}
7
7
  .line{fill:none;stroke:#537487;stroke-width:3;stroke-linecap:round}.arrow{fill:#537487}.title{fill:#9D8200;font:bold 24px Georgia,serif}.label{fill:#102A3A;font:bold 17px Georgia,serif}.small{fill:#405E70;font:15px Georgia,serif}.code{fill:#FFFDF8;font:17px ui-monospace,SFMono-Regular,Consolas,monospace}.loop{fill:#9D8200;font:bold 16px Georgia,serif}
8
+
9
+ @media (prefers-color-scheme: dark) {
10
+ .bg{fill:#242014}
11
+ .source{fill:#2A2717;stroke:#CEB556;stroke-width:2}
12
+ .engine{fill:#31475C;stroke:#88BCDC;stroke-width:3}
13
+ .out{fill:#152427;stroke:#6EC4D5;stroke-width:2}
14
+ .diag{fill:#18292C;stroke:#77B6CE;stroke-width:2}
15
+ .status{fill:#272015;stroke:#D3BD66;stroke-width:2}
16
+ .compare{fill:#221E12;stroke:#81A0B1;stroke-width:2}
17
+ .line{fill:none;stroke:#81A0B1;stroke-width:3;stroke-linecap:round}
18
+ .arrow{fill:#2C3D47}
19
+ .title{fill:#EBE5CA;font:bold 24px Georgia,serif}
20
+ .label{fill:#DCEAF2;font:bold 17px Georgia,serif}
21
+ .small{fill:#CDDBE3;font:15px Georgia,serif}
22
+ .code{fill:#F4EFE1;font:17px ui-monospace,SFMono-Regular,Consolas,monospace}
23
+ .loop{fill:#EBE5CA;font:bold 16px Georgia,serif}
24
+ }
8
25
  </style>
9
26
  </defs>
10
27
  <rect width="900" height="470" class="bg"/>
@@ -4,12 +4,28 @@
4
4
  <defs><style>
5
5
  .bg{fill:#FFF9E8}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.ctx{fill:#DDF7FB;stroke:#008EAA;stroke-width:3}.warn{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}.code{fill:#102A3A;font:14px ui-monospace,monospace}.prose{fill:#405E70;font:15px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:3}
7
- </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker></defs>
7
+
8
+ .f-537487{fill:#537487}
9
+ .s-C8A100{stroke:#C8A100}
10
+ @media (prefers-color-scheme: dark) {
11
+ .bg{fill:#242014}
12
+ .paper{fill:#221E12;stroke:#82AEDA;stroke-width:2}
13
+ .ctx{fill:#152427;stroke:#6EC4D5;stroke-width:3}
14
+ .warn{fill:#272015;stroke:#D3BD66;stroke-width:2}
15
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
16
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
17
+ .code{fill:#DCEAF2;font:14px ui-monospace,monospace}
18
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
19
+ .line{fill:none;stroke:#81A0B1;stroke-width:3}
20
+ .f-537487{fill:#2C3D47}
21
+ .s-C8A100{stroke:#D3BD66}
22
+ }
23
+ </style><marker id="a" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker></defs>
8
24
  <rect class="bg" width="900" height="430"/><text class="title" x="450" y="38" text-anchor="middle">STRUCTURE TEXT AT THE MODEL BOUNDARY</text>
9
25
  <rect class="paper" x="30" y="105" width="210" height="150" rx="10"/><text class="label" x="135" y="138" text-anchor="middle">RAW INPUT</text><text class="code" x="135" y="178" text-anchor="middle">" TEMP 91 "</text><text class="prose" x="135" y="215" text-anchor="middle">trim · normalize · parse</text>
10
26
  <path class="line" marker-end="url(#a)" d="M240 180H292"/>
11
27
  <rect class="ctx" x="300" y="75" width="330" height="220" rx="16"/><text class="label" x="465" y="110" text-anchor="middle">MESSAGE CONTEXT · event_17</text><rect class="paper" x="340" y="135" width="250" height="38" rx="18"/><text class="code" x="465" y="159" text-anchor="middle">severity(high)</text><rect class="paper" x="340" y="183" width="250" height="38" rx="18"/><text class="code" x="465" y="207" text-anchor="middle">source(sensor_3)</text><rect class="paper" x="340" y="231" width="250" height="38" rx="18"/><text class="code" x="465" y="255" text-anchor="middle">reading(temp,91)</text>
12
28
  <path class="line" marker-end="url(#a)" d="M630 185H680"/><rect class="paper" x="688" y="105" width="182" height="150" rx="10"/><text class="label" x="779" y="138" text-anchor="middle">INSPECT</text><text class="code" x="779" y="178" text-anchor="middle">context_member/2</text><text class="prose" x="779" y="211" text-anchor="middle">walks members</text><text class="prose" x="779" y="233" text-anchor="middle">inside this message</text>
13
- <path d="M285 315H645" stroke="#C8A100" stroke-width="3" stroke-dasharray="8 6"/><text class="label" x="465" y="340" text-anchor="middle">CONTEXT BOUNDARY</text>
29
+ <path d="M285 315H645" stroke-width="3" stroke-dasharray="8 6" class="s-C8A100"/><text class="label" x="465" y="340" text-anchor="middle">CONTEXT BOUNDARY</text>
14
30
  <rect class="warn" x="245" y="360" width="440" height="45" rx="9"/><text class="code" x="465" y="388" text-anchor="middle">inspection ≠ asserting severity(high) globally</text>
15
31
  </svg>
@@ -4,7 +4,23 @@
4
4
  <defs><style>
5
5
  .bg{fill:#FFF9E8}.partial{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.complete{fill:#DDF7FB;stroke:#537487;stroke-width:2}.term{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.contract{fill:#FFFDF8;stroke:#C8A100;stroke-width:2.5}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}.prose{fill:#405E70;font:15px Georgia,serif}.code{fill:#102A3A;font:14px ui-monospace,monospace}.center{fill:#9D8200;font:bold 17px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:3}
7
- </style><marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker></defs>
7
+
8
+ .f-537487{fill:#537487}
9
+ @media (prefers-color-scheme: dark) {
10
+ .bg{fill:#242014}
11
+ .partial{fill:#152427;stroke:#6EC4D5;stroke-width:2}
12
+ .complete{fill:#152427;stroke:#81A0B1;stroke-width:2}
13
+ .term{fill:#2A2717;stroke:#CEB556;stroke-width:2}
14
+ .contract{fill:#221E12;stroke:#D3BD66;stroke-width:2.5}
15
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
16
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
17
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
18
+ .code{fill:#DCEAF2;font:14px ui-monospace,monospace}
19
+ .center{fill:#EBE5CA;font:bold 17px Georgia,serif}
20
+ .line{fill:none;stroke:#81A0B1;stroke-width:3}
21
+ .f-537487{fill:#2C3D47}
22
+ }
23
+ </style><marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker></defs>
8
24
  <rect class="bg" width="900" height="430"/><text class="title" x="450" y="38" text-anchor="middle">THREE PROMISES, THREE PROOF OBLIGATIONS</text>
9
25
  <rect class="partial" x="35" y="85" width="250" height="155" rx="12"/><text class="label" x="160" y="120" text-anchor="middle">PARTIAL CORRECTNESS</text><text class="prose" x="160" y="157" text-anchor="middle">Every returned answer</text><text class="prose" x="160" y="181" text-anchor="middle">is justified.</text><text class="code" x="160" y="216" text-anchor="middle">no false answers</text>
10
26
  <rect class="complete" x="325" y="85" width="250" height="155" rx="12"/><text class="label" x="450" y="120" text-anchor="middle">COMPLETENESS</text><text class="prose" x="450" y="157" text-anchor="middle">Every intended answer</text><text class="prose" x="450" y="181" text-anchor="middle">can be found.</text><text class="code" x="450" y="216" text-anchor="middle">none silently lost</text>
@@ -8,10 +8,27 @@
8
8
  .blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}.title{fill:#C8A100;font:bold 24px Georgia,serif}
9
9
  .label{fill:#17324D;font:bold 17px Georgia,serif}.prose{fill:#405E70;font:15px Georgia,serif}
10
10
  .code{fill:#102A3A;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}.line{fill:none;stroke:#537487;stroke-width:2.5}
11
+
12
+ .f-537487{fill:#537487}
13
+ .f-FFF9E8{fill:#FFF9E8}
14
+ @media (prefers-color-scheme: dark) {
15
+ .paper{fill:#221E12;stroke:#82AEDA;stroke-width:2}
16
+ .green{fill:#152427;stroke:#6EC4D5;stroke-width:2}
17
+ .gold{fill:#2A2717;stroke:#CEB556;stroke-width:2}
18
+ .rose{fill:#272015;stroke:#D3BD66;stroke-width:2}
19
+ .blue{fill:#152427;stroke:#81A0B1;stroke-width:2}
20
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
21
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
22
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
23
+ .code{fill:#DCEAF2;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
24
+ .line{fill:none;stroke:#81A0B1;stroke-width:2.5}
25
+ .f-537487{fill:#2C3D47}
26
+ .f-FFF9E8{fill:#242014}
27
+ }
11
28
  </style>
12
- <marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker>
29
+ <marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker>
13
30
  </defs>
14
- <rect width="900" height="500" fill="#FFF9E8"/>
31
+ <rect width="900" height="500" class="f-FFF9E8"/>
15
32
  <text class="title" x="450" y="35" text-anchor="middle">DEBUG THROUGH FOUR LENSES</text>
16
33
  <rect class="paper" x="200" y="60" width="500" height="65" rx="10"/>
17
34
  <text class="label" x="450" y="86" text-anchor="middle">SMALLEST DISPUTED GROUND QUESTION</text>
@@ -7,27 +7,54 @@
7
7
  .path{fill:none;stroke:#FFFDF8;stroke-width:5;stroke-linecap:round;opacity:.9}.link{fill:none;stroke:#537487;stroke-width:2.5;stroke-dasharray:6 5}
8
8
  .title{fill:#9D8200;font:bold 24px Georgia,serif}.label{fill:#102A3A;font:bold 17px Georgia,serif}
9
9
  .small{fill:#405E70;font:16px Georgia,serif}.output{fill:#405E70;font:14px Georgia,serif}.code{fill:#DDF7FB;font:16px ui-monospace,SFMono-Regular,Consolas,monospace}
10
+
11
+ .f-BFEAF1{fill:#BFEAF1}
12
+ .f-DDF7FB{fill:#DDF7FB}
13
+ .f-F6D978{fill:#F6D978}
14
+ .f-FFF0D6{fill:#FFF0D6}
15
+ .f-FFFDF8{fill:#FFFDF8}
16
+ .s-008EAA{stroke:#008EAA}
17
+ .s-E2BA22{stroke:#E2BA22}
18
+ @media (prefers-color-scheme: dark) {
19
+ .bg{fill:#242014}
20
+ .region{stroke:#82AEDA;stroke-width:2}
21
+ .core{fill:#31475C;stroke:#88BCDC;stroke-width:3}
22
+ .path{fill:none;stroke:#A0802E;stroke-width:5;stroke-linecap:round;opacity:.9}
23
+ .link{fill:none;stroke:#81A0B1;stroke-width:2.5;stroke-dasharray:6 5}
24
+ .title{fill:#EBE5CA;font:bold 24px Georgia,serif}
25
+ .label{fill:#DCEAF2;font:bold 17px Georgia,serif}
26
+ .small{fill:#CDDBE3;font:16px Georgia,serif}
27
+ .output{fill:#CDDBE3;font:14px Georgia,serif}
28
+ .code{fill:#E1F1F4;font:16px ui-monospace,SFMono-Regular,Consolas,monospace}
29
+ .f-BFEAF1{fill:#18292C}
30
+ .f-DDF7FB{fill:#152427}
31
+ .f-F6D978{fill:#36301D}
32
+ .f-FFF0D6{fill:#272015}
33
+ .f-FFFDF8{fill:#221E12}
34
+ .s-008EAA{stroke:#6EC4D5}
35
+ .s-E2BA22{stroke:#CEB556}
36
+ }
10
37
  </style>
11
38
  </defs>
12
39
  <rect width="900" height="500" class="bg"/>
13
40
  <text class="title" x="450" y="34" text-anchor="middle">THE EXAMPLES ARE A CONNECTED LANDSCAPE</text>
14
41
 
15
- <path class="region" fill="#DDF7FB" d="M35 65H270L300 155L245 220H45Z"/>
42
+ <path class="region f-DDF7FB" d="M35 65H270L300 155L245 220H45Z"/>
16
43
  <text class="label" x="145" y="103" text-anchor="middle">MATHEMATICS</text>
17
44
  <text class="small" x="145" y="130" text-anchor="middle">induction · algebra · number</text>
18
45
  <text class="small" x="145" y="151" text-anchor="middle">theory · counterexamples</text>
19
46
 
20
- <path class="region" fill="#F6D978" d="M630 65H865V220H655L600 155Z"/>
47
+ <path class="region f-F6D978" d="M630 65H865V220H655L600 155Z"/>
21
48
  <text class="label" x="755" y="103" text-anchor="middle">SEARCH &amp; PLANNING</text>
22
49
  <text class="small" x="755" y="130" text-anchor="middle">puzzles · routes · schedules</text>
23
50
  <text class="small" x="755" y="151" text-anchor="middle">states · optimization</text>
24
51
 
25
- <path class="region" fill="#FFF0D6" d="M35 280H245L300 345L270 440H35Z"/>
52
+ <path class="region f-FFF0D6" d="M35 280H245L300 345L270 440H35Z"/>
26
53
  <text class="label" x="145" y="326" text-anchor="middle">POLICY &amp; TRUST</text>
27
54
  <text class="small" x="145" y="353" text-anchor="middle">decisions · provenance</text>
28
55
  <text class="small" x="145" y="374" text-anchor="middle">integrity · audit</text>
29
56
 
30
- <path class="region" fill="#BFEAF1" d="M655 280H865V440H630L600 345Z"/>
57
+ <path class="region f-BFEAF1" d="M655 280H865V440H630L600 345Z"/>
31
58
  <text class="label" x="755" y="326" text-anchor="middle">SCIENCE &amp; MODELS</text>
32
59
  <text class="small" x="755" y="353" text-anchor="middle">models · measurements</text>
33
60
  <text class="small" x="755" y="374" text-anchor="middle">equations · evidence</text>
@@ -39,9 +66,9 @@
39
66
  <text class="code" x="450" y="268" text-anchor="middle" style="font-size:12px">eyeprolog --goal Q file.pl</text>
40
67
  <text class="code" x="450" y="300" text-anchor="middle">rule :- evidence.</text>
41
68
 
42
- <rect x="305" y="385" width="140" height="55" rx="10" fill="#FFFDF8" stroke="#008EAA" stroke-width="2"/>
69
+ <rect x="305" y="385" width="140" height="55" rx="10" stroke-width="2" class="f-FFFDF8 s-008EAA"/>
43
70
  <text class="label" x="375" y="408" text-anchor="middle">ANSWERS</text><text class="output" x="375" y="428" text-anchor="middle">ground results</text>
44
- <rect x="455" y="385" width="140" height="55" rx="10" fill="#FFFDF8" stroke="#E2BA22" stroke-width="2"/>
71
+ <rect x="455" y="385" width="140" height="55" rx="10" stroke-width="2" class="f-FFFDF8 s-E2BA22"/>
45
72
  <text class="label" x="525" y="408" text-anchor="middle">PROOFS</text><text class="output" x="525" y="428" text-anchor="middle">supporting steps</text>
46
73
  <path class="link" d="M410 325L382 385M490 325L518 385"/>
47
74
  <text class="small" x="450" y="474" text-anchor="middle">predict → run → compare → inspect → revise</text>
@@ -8,15 +8,40 @@
8
8
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}
9
9
  .prose{fill:#405E70;font:16px Georgia,serif}.code{fill:#102A3A;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}
10
10
  .line{fill:none;stroke:#537487;stroke-width:2.5}.cut{fill:none;stroke:#C8A100;stroke-width:2}
11
+
12
+ .f-537487{fill:#537487}
13
+ .f-DDF7FB{fill:#DDF7FB}
14
+ .f-FFF0D6{fill:#FFF0D6}
15
+ .f-FFF9E8{fill:#FFF9E8}
16
+ .f-FFFDF8{fill:#FFFDF8}
17
+ .s-17324D{stroke:#17324D}
18
+ @media (prefers-color-scheme: dark) {
19
+ .paper{fill:#221E12;stroke:#82AEDA;stroke-width:2}
20
+ .green{fill:#152427;stroke:#6EC4D5;stroke-width:2}
21
+ .gold{fill:#2A2717;stroke:#CEB556;stroke-width:2}
22
+ .rose{fill:#272015;stroke:#D3BD66;stroke-width:2}
23
+ .title{fill:#E7E0C1;font:bold 24px Georgia,serif}
24
+ .label{fill:#D7E3F0;font:bold 17px Georgia,serif}
25
+ .prose{fill:#CDDBE3;font:16px Georgia,serif}
26
+ .code{fill:#DCEAF2;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}
27
+ .line{fill:none;stroke:#81A0B1;stroke-width:2.5}
28
+ .cut{fill:none;stroke:#D3BD66;stroke-width:2}
29
+ .f-537487{fill:#2C3D47}
30
+ .f-DDF7FB{fill:#152427}
31
+ .f-FFF0D6{fill:#272015}
32
+ .f-FFF9E8{fill:#242014}
33
+ .f-FFFDF8{fill:#221E12}
34
+ .s-17324D{stroke:#82AEDA}
35
+ }
11
36
  </style>
12
- <marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" fill="#537487"/></marker>
37
+ <marker id="arrow" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto"><path d="M0 0L8 4L0 8Z" class="f-537487"/></marker>
13
38
  </defs>
14
- <rect width="900" height="500" fill="#FFF9E8"/>
39
+ <rect width="900" height="500" class="f-FFF9E8"/>
15
40
  <text class="title" x="450" y="35" text-anchor="middle">DESIGN THE SEARCH BEFORE RUNNING IT</text>
16
- <path d="M80 85H820L690 360H210Z" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/>
17
- <path d="M80 85H820L780 170H120Z" fill="#DDF7FB"/>
18
- <path d="M120 170H780L740 255H160Z" fill="#FFF0D6"/>
19
- <path d="M160 255H740L700 340H200Z" fill="#DDF7FB"/>
41
+ <path d="M80 85H820L690 360H210Z" stroke-width="2" class="f-FFFDF8 s-17324D"/>
42
+ <path d="M80 85H820L780 170H120Z" class="f-DDF7FB"/>
43
+ <path d="M120 170H780L740 255H160Z" class="f-FFF0D6"/>
44
+ <path d="M160 255H740L700 340H200Z" class="f-DDF7FB"/>
20
45
  <text class="label" x="450" y="113" text-anchor="middle">1 · GENERATE A FINITE DOMAIN</text>
21
46
  <text class="code" x="450" y="142" text-anchor="middle">workers × tasks = 3 × 2 = 6 candidates</text>
22
47
  <text class="label" x="450" y="199" text-anchor="middle">2 · APPLY THE EARLIEST READY CONSTRAINTS</text>
@@ -3,7 +3,7 @@
3
3
  <desc id="desc">Ground terms form the Herbrand universe; ground atomic formulas form the Herbrand base; the formulas justified by facts and rules form the least model.</desc>
4
4
  <defs>
5
5
  <marker id="arrow" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto">
6
- <path d="M0,0 L0,6 L9,3 z" fill="#537487"/>
6
+ <path d="M0,0 L0,6 L9,3 z" class="f-537487"/>
7
7
  </marker>
8
8
  <style>
9
9
  .box{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
@@ -14,9 +14,24 @@
14
14
  .text{fill:#102A3A;font:18px ui-monospace,SFMono-Regular,Consolas,monospace}
15
15
  .prose{fill:#405E70;font:17px Georgia,serif}
16
16
  .line{stroke:#537487;stroke-width:2;fill:none;marker-end:url(#arrow)}
17
+
18
+ .f-537487{fill:#537487}
19
+ .f-FFF9E8{fill:#FFF9E8}
20
+ @media (prefers-color-scheme: dark) {
21
+ .box{fill:#221E12;stroke:#82AEDA;stroke-width:2}
22
+ .model{fill:#142325;stroke:#6EC4D5;stroke-width:3}
23
+ .title{fill:#E7E0C1;font:bold 19px Georgia,serif}
24
+ .box-title{fill:#E7E0C1;font:bold 17px Georgia,serif}
25
+ .box-sub{fill:#CDDBE3;font:15px Georgia,serif}
26
+ .text{fill:#DCEAF2;font:18px ui-monospace,SFMono-Regular,Consolas,monospace}
27
+ .prose{fill:#CDDBE3;font:17px Georgia,serif}
28
+ .line{stroke:#81A0B1;stroke-width:2;fill:none;marker-end:url(#arrow)}
29
+ .f-537487{fill:#2C3D47}
30
+ .f-FFF9E8{fill:#242014}
31
+ }
17
32
  </style>
18
33
  </defs>
19
- <rect width="900" height="500" fill="#FFF9E8"/>
34
+ <rect width="900" height="500" class="f-FFF9E8"/>
20
35
  <rect class="box" x="35" y="65" width="240" height="360" rx="10"/>
21
36
  <text class="box-title" x="155" y="100" text-anchor="middle">HERBRAND UNIVERSE</text>
22
37
  <text class="box-sub" x="155" y="125" text-anchor="middle">all constructible</text>
@@ -5,11 +5,26 @@
5
5
  .wall{fill:#EAF8FA}.panel{fill:#2C657A;stroke:#17324D;stroke-width:4}.screen{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
6
6
  .text{fill:#17324D;font:17px ui-monospace,monospace}.light{fill:#C8A100;stroke:#9D8200;stroke-width:3}.safe{fill:#008EAA}
7
7
  .wire{fill:none;stroke:#C8A100;stroke-width:5}.lever{fill:#DDF7FB;stroke:#17324D;stroke-width:3}
8
- </style>
8
+
9
+ .f-C8A100{fill:#C8A100}
10
+ .f-FFFDF8{fill:#FFFDF8}
11
+ @media (prefers-color-scheme: dark) {
12
+ .wall{fill:#142325}
13
+ .panel{fill:#2C4852;stroke:#82AEDA;stroke-width:4}
14
+ .screen{fill:#221E12;stroke:#82AEDA;stroke-width:2}
15
+ .text{fill:#D7E3F0;font:17px ui-monospace,monospace}
16
+ .light{fill:#4D472A;stroke:#D6C572;stroke-width:3}
17
+ .safe{fill:#2C4C52}
18
+ .wire{fill:none;stroke:#D3BD66;stroke-width:5}
19
+ .lever{fill:#152427;stroke:#82AEDA;stroke-width:3}
20
+ .f-C8A100{fill:#E7E0C1}
21
+ .f-FFFDF8{fill:#F4EFE1}
22
+ }
23
+ </style>
9
24
  <rect width="900" height="380" class="wall"/><rect class="panel" x="55" y="40" width="790" height="300" rx="15"/>
10
25
  <rect class="screen" x="95" y="80" width="230" height="120" rx="7"/><text class="text" x="210" y="110" text-anchor="middle">LOWER LIMIT</text><text class="text" x="210" y="165" text-anchor="middle" font-size="30">80</text>
11
26
  <rect class="screen" x="575" y="80" width="230" height="120" rx="7"/><text class="text" x="690" y="110" text-anchor="middle">UPPER LIMIT</text><text class="text" x="690" y="165" text-anchor="middle" font-size="30">60</text>
12
- <path class="wire" d="M325 140 H390 M510 140 H575"/><circle class="light" cx="450" cy="140" r="48"/><text x="450" y="132" text-anchor="middle" fill="#FFFDF8" font-family="Georgia,serif" font-weight="bold" font-size="18">INVALID</text><text x="450" y="157" text-anchor="middle" fill="#FFFDF8" font-family="ui-monospace,monospace" font-size="14">FOUND</text>
13
- <rect class="screen" x="300" y="230" width="300" height="65" rx="8"/><text class="text" x="450" y="256" text-anchor="middle">invalid_limits(Low, High).</text><text x="450" y="280" text-anchor="middle" fill="#C8A100" font-family="ui-monospace,monospace" font-size="16">reported to the host</text>
27
+ <path class="wire" d="M325 140 H390 M510 140 H575"/><circle class="light" cx="450" cy="140" r="48"/><text x="450" y="132" text-anchor="middle" font-family="Georgia,serif" font-weight="bold" font-size="18" class="f-FFFDF8">INVALID</text><text x="450" y="157" text-anchor="middle" font-family="ui-monospace,monospace" font-size="14" class="f-FFFDF8">FOUND</text>
28
+ <rect class="screen" x="300" y="230" width="300" height="65" rx="8"/><text class="text" x="450" y="256" text-anchor="middle">invalid_limits(Low, High).</text><text x="450" y="280" text-anchor="middle" font-family="ui-monospace,monospace" font-size="16" class="f-C8A100">reported to the host</text>
14
29
  <circle cx="140" cy="265" r="16" class="safe"/><circle cx="760" cy="265" r="16" class="light"/>
15
30
  </svg>
@@ -8,9 +8,28 @@
8
8
  .title{fill:#C8A100;font:bold 23px Georgia,serif}.label{fill:#17324D;font:bold 16px Georgia,serif}
9
9
  .code{fill:#102A3A;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}.prose{fill:#405E70;font:15px Georgia,serif}
10
10
  .line{fill:none;stroke:#537487;stroke-width:2.5}.error{fill:none;stroke:#C8A100;stroke-width:2.5;stroke-dasharray:7 5}
11
+
12
+ .f-537487{fill:#537487}
13
+ .f-C8A100{fill:#C8A100}
14
+ @media (prefers-color-scheme: dark) {
15
+ .bg{fill:#242014}
16
+ .box{fill:#221E12;stroke:#82AEDA;stroke-width:2}
17
+ .choice{fill:#272015;stroke:#D3BD66;stroke-width:2}
18
+ .ok{fill:#152427;stroke:#6EC4D5;stroke-width:2}
19
+ .group{fill:#152427;stroke:#81A0B1;stroke-width:2}
20
+ .gold{fill:#2A2717;stroke:#CEB556;stroke-width:2}
21
+ .title{fill:#E7E0C1;font:bold 23px Georgia,serif}
22
+ .label{fill:#D7E3F0;font:bold 16px Georgia,serif}
23
+ .code{fill:#DCEAF2;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
24
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
25
+ .line{fill:none;stroke:#81A0B1;stroke-width:2.5}
26
+ .error{fill:none;stroke:#D3BD66;stroke-width:2.5;stroke-dasharray:7 5}
27
+ .f-537487{fill:#2C3D47}
28
+ .f-C8A100{fill:#4D472A}
29
+ }
11
30
  </style>
12
- <marker id="a" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" fill="#537487"/></marker>
13
- <marker id="r" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" fill="#C8A100"/></marker>
31
+ <marker id="a" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" class="f-537487"/></marker>
32
+ <marker id="r" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" class="f-C8A100"/></marker>
14
33
  </defs>
15
34
  <rect width="900" height="390" class="bg"/><text class="title" x="450" y="34" text-anchor="middle">FROM A GOAL TO A CONTROLLED ANSWER SET</text>
16
35
  <rect class="box" x="30" y="145" width="130" height="70" rx="10"/><text class="label" x="95" y="174" text-anchor="middle">GOAL</text><text class="code" x="95" y="199" text-anchor="middle">route(A, B)</text>
@@ -8,9 +8,28 @@
8
8
  .title{fill:#C8A100;font:bold 23px Georgia,serif}.label{fill:#17324D;font:bold 16px Georgia,serif}
9
9
  .code{fill:#102A3A;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}.prose{fill:#405E70;font:15px Georgia,serif}
10
10
  .line{fill:none;stroke:#537487;stroke-width:2.5}.redline{fill:none;stroke:#C8A100;stroke-width:2.5}
11
+
12
+ .f-537487{fill:#537487}
13
+ .f-C8A100{fill:#C8A100}
14
+ @media (prefers-color-scheme: dark) {
15
+ .bg{fill:#142325}
16
+ .panel{fill:#221E12;stroke:#82AEDA;stroke-width:2}
17
+ .slot{fill:#152427;stroke:#6EC4D5;stroke-width:2}
18
+ .first{fill:#272015;stroke:#D3BD66;stroke-width:2}
19
+ .last{fill:#2A2717;stroke:#CEB556;stroke-width:2}
20
+ .blue{fill:#152427;stroke:#81A0B1;stroke-width:2}
21
+ .title{fill:#E7E0C1;font:bold 23px Georgia,serif}
22
+ .label{fill:#D7E3F0;font:bold 16px Georgia,serif}
23
+ .code{fill:#DCEAF2;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
24
+ .prose{fill:#CDDBE3;font:15px Georgia,serif}
25
+ .line{fill:none;stroke:#81A0B1;stroke-width:2.5}
26
+ .redline{fill:none;stroke:#D3BD66;stroke-width:2.5}
27
+ .f-537487{fill:#2C3D47}
28
+ .f-C8A100{fill:#4D472A}
29
+ }
11
30
  </style>
12
- <marker id="a" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" fill="#537487"/></marker>
13
- <marker id="r" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" fill="#C8A100"/></marker>
31
+ <marker id="a" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" class="f-537487"/></marker>
32
+ <marker id="r" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0 0L7 3.5L0 7Z" class="f-C8A100"/></marker>
14
33
  </defs>
15
34
  <rect width="900" height="410" class="bg"/><text class="title" x="450" y="34" text-anchor="middle">SOLVER-LOCAL STATE AND READABLE SYNTAX</text>
16
35