eyeprolog 0.5.16 → 0.5.18

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 (46) hide show
  1. package/README.md +0 -4
  2. package/book-assets/aggregation-market.svg +4 -4
  3. package/book-assets/and-or-binding-trace.svg +2 -2
  4. package/book-assets/auditable-decision-service.svg +1 -1
  5. package/book-assets/bounded-experimental-math.svg +1 -1
  6. package/book-assets/cli-observation-loop.svg +1 -1
  7. package/book-assets/correctness-obligations.svg +1 -1
  8. package/book-assets/debugging-four-lenses.svg +1 -1
  9. package/book-assets/example-landscape.svg +1 -1
  10. package/book-assets/finite-search-funnel.svg +1 -1
  11. package/book-assets/herbrand-world.svg +1 -1
  12. package/book-assets/integrity-check-control-panel.svg +1 -1
  13. package/book-assets/iso-control-board.svg +2 -2
  14. package/book-assets/iso-state-operator-console.svg +1 -1
  15. package/book-assets/iso-stream-roundtrip.svg +1 -1
  16. package/book-assets/iso-term-prism.svg +1 -1
  17. package/book-assets/knowledge-engineering-workflow.svg +2 -2
  18. package/book-assets/laboratory-progression.svg +1 -1
  19. package/book-assets/lists-train.svg +1 -1
  20. package/book-assets/logic-and-control.svg +4 -4
  21. package/book-assets/negation-guest-registry.svg +2 -2
  22. package/book-assets/part-1-relations.svg +7 -7
  23. package/book-assets/part-2-search.svg +4 -4
  24. package/book-assets/part-3-trustworthy-reasoning.svg +5 -5
  25. package/book-assets/part-4-craft.svg +3 -3
  26. package/book-assets/part-5-relational-design.svg +2 -2
  27. package/book-assets/part-6-mathematics.svg +7 -7
  28. package/book-assets/part-7-laboratory.svg +2 -2
  29. package/book-assets/part-8-standard-prolog.svg +3 -3
  30. package/book-assets/pattern-selection-map.svg +1 -1
  31. package/book-assets/program-transformation-workbench.svg +1 -1
  32. package/book-assets/proof-and-search.svg +2 -2
  33. package/book-assets/rdf-adapter-pipeline.svg +1 -1
  34. package/book-assets/recursion-induction-ladder.svg +1 -1
  35. package/book-assets/recursion-tabling-railway.svg +1 -1
  36. package/book-assets/relational-test-spectrum.svg +1 -1
  37. package/book-assets/review-lenses.svg +1 -1
  38. package/book-assets/sockets-providers.svg +1 -1
  39. package/book-assets/syntax-relations.svg +1 -1
  40. package/book-assets/termination-map.svg +1 -1
  41. package/book-assets/title-page.svg +51 -51
  42. package/book-assets/unification.svg +1 -1
  43. package/package.json +1 -2
  44. package/playground.html +0 -1
  45. package/the-art-of-eyeprolog.md +0 -4
  46. package/eyeprolog-logo.png +0 -0
package/README.md CHANGED
@@ -1,9 +1,5 @@
1
1
  # EyeProlog
2
2
 
3
- <p align="center">
4
- <img src="eyeprolog-logo.png" alt="EyeProlog logo" width="520">
5
- </p>
6
-
7
3
  [![npm version](https://img.shields.io/npm/v/eyeprolog.svg)](https://www.npmjs.com/package/eyeprolog)
8
4
  [![DOI](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.21446308-blue.svg)](https://doi.org/10.5281/zenodo.21446308)
9
5
 
@@ -2,14 +2,14 @@
2
2
  <title id="title">Aggregation at a produce market</title>
3
3
  <desc id="desc">Baskets with measured weights pass over a market counter into count, sum, minimum, and maximum result cards.</desc>
4
4
  <style>
5
- .wall{fill:#FFF3D8}.counter{fill:#E4C13C}.basket{fill:#E5B23B;stroke:#A48800;stroke-width:3}.fruit{stroke:#008EAA;stroke-width:2}
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
8
  </style>
9
9
  <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="#A48800" stroke-width="5"/><circle class="fruit" cx="48" cy="55" r="25" fill="#D8AE1E"/><circle class="fruit" cx="91" cy="57" r="27" fill="#F2C94C"/><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="#A48800" stroke-width="5"/><circle class="fruit" cx="48" cy="55" r="25" fill="#D8AE1E"/><circle class="fruit" cx="91" cy="57" r="27" fill="#F2C94C"/><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="#A48800" stroke-width="5"/><circle class="fruit" cx="48" cy="55" r="25" fill="#D8AE1E"/><circle class="fruit" cx="91" cy="57" r="27" fill="#F2C94C"/><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>
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>
13
13
  <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
14
  <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
15
  <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>
@@ -3,8 +3,8 @@
3
3
  <desc id="desc">An ancestor query chooses between clauses, completes every goal in a recursive clause, carries bindings from left to right, and rewinds to the latest choice after failure.</desc>
4
4
  <defs>
5
5
  <style>
6
- .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.goal{fill:#E8FAFC;stroke:#008EAA;stroke-width:2}
7
- .choice{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.fail{fill:#FFF1D8;stroke:#C8A100;stroke-width:2}
6
+ .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.goal{fill:#EAF8FA;stroke:#008EAA;stroke-width:2}
7
+ .choice{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.fail{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
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}
@@ -2,7 +2,7 @@
2
2
  <title id="title">An auditable decision service keeps evidence, policy, decision, and proof connected</title>
3
3
  <desc id="desc">Versioned evidence and policy flow through integrity checks and reasoning to a permit decision. A proof bundle points back to every source and theory version, while an explicit integrity query exposes invalid inputs.</desc>
4
4
  <defs><style>
5
- .bg{fill:#FFF9E8}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}.rose{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.dark{fill:#2C657A;stroke:#17324D;stroke-width:3}
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
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>
8
8
  <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>
@@ -2,7 +2,7 @@
2
2
  <title id="title">Finite search as experimental mathematics</title>
3
3
  <desc id="desc">A universal conjecture is restricted to a declared finite domain. Search either returns a counterexample, which refutes the conjecture, or exhausts the box, which supplies bounded evidence but not a universal proof.</desc>
4
4
  <defs><style>
5
- .bg{fill:#FFF9E8}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.domain{fill:#DCEFF7;stroke:#537487;stroke-width:3}.bad{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.good{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
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
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>
8
8
  <rect class="bg" width="900" height="440"/><text class="title" x="450" y="38" text-anchor="middle">FINITE SEARCH: REFUTATION AND BOUNDED EVIDENCE</text>
@@ -3,7 +3,7 @@
3
3
  <desc id="desc">A predicted result and an EyeProlog program enter the command line. It emits answers and proofs on standard output, warnings and statistics on standard error, and a process status. Comparison of prediction and evidence leads to a focused revision.</desc>
4
4
  <defs>
5
5
  <style>
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:#087F98;stroke-width:2}.status{fill:#FFE7BF;stroke:#C8A100;stroke-width:2}.compare{fill:#FFFDF8;stroke:#537487;stroke-width:2}
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
8
  </style>
9
9
  </defs>
@@ -2,7 +2,7 @@
2
2
  <title id="title">Correctness, completeness, and termination are separate obligations</title>
3
3
  <desc id="desc">Three overlapping circles represent no false answers, all intended answers, and finite computation. The dependable operational contract lies where all three overlap.</desc>
4
4
  <defs><style>
5
- .bg{fill:#FFF9E8}.sound{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.complete{fill:#DCEFF7;stroke:#537487;stroke-width:2}.term{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.contract{fill:#FFFDF8;stroke:#C8A100;stroke-width:2.5}
5
+ .bg{fill:#FFF9E8}.sound{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
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>
8
8
  <rect class="bg" width="900" height="430"/><text class="title" x="450" y="38" text-anchor="middle">THREE PROMISES, THREE PROOF OBLIGATIONS</text>
@@ -5,7 +5,7 @@
5
5
  <style>
6
6
  .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
7
7
  .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.rose{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
8
- .blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}.title{fill:#C8A100;font:bold 24px Georgia,serif}
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
11
  </style>
@@ -22,7 +22,7 @@
22
22
  <text class="small" x="755" y="130" text-anchor="middle">puzzles · routes · schedules</text>
23
23
  <text class="small" x="755" y="151" text-anchor="middle">states · optimization</text>
24
24
 
25
- <path class="region" fill="#FFE7BF" d="M35 280H245L300 345L270 440H35Z"/>
25
+ <path class="region" fill="#FFF0D6" d="M35 280H245L300 345L270 440H35Z"/>
26
26
  <text class="label" x="145" y="326" text-anchor="middle">POLICY &amp; TRUST</text>
27
27
  <text class="small" x="145" y="353" text-anchor="middle">decisions · provenance</text>
28
28
  <text class="small" x="145" y="374" text-anchor="middle">integrity · audit</text>
@@ -14,7 +14,7 @@
14
14
  <rect width="900" height="500" fill="#FFF9E8"/>
15
15
  <text class="title" x="450" y="35" text-anchor="middle">DESIGN THE SEARCH BEFORE RUNNING IT</text>
16
16
  <path d="M80 85H820L690 360H210Z" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/>
17
- <path d="M80 85H820L780 170H120Z" fill="#DCEFF7"/>
17
+ <path d="M80 85H820L780 170H120Z" fill="#DDF7FB"/>
18
18
  <path d="M120 170H780L740 255H160Z" fill="#FFF0D6"/>
19
19
  <path d="M160 255H740L700 340H200Z" fill="#DDF7FB"/>
20
20
  <text class="label" x="450" y="113" text-anchor="middle">1 · GENERATE A FINITE DOMAIN</text>
@@ -7,7 +7,7 @@
7
7
  </marker>
8
8
  <style>
9
9
  .box{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
10
- .model{fill:#E8FAFC;stroke:#008EAA;stroke-width:3}
10
+ .model{fill:#EAF8FA;stroke:#008EAA;stroke-width:3}
11
11
  .title{fill:#C8A100;font:bold 19px Georgia,serif}
12
12
  .box-title{fill:#C8A100;font:bold 17px Georgia,serif}
13
13
  .box-sub{fill:#405E70;font:15px Georgia,serif}
@@ -4,7 +4,7 @@
4
4
  <style>
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
- .wire{fill:none;stroke:#C8A100;stroke-width:5}.lever{fill:#D6F3F7;stroke:#17324D;stroke-width:3}
7
+ .wire{fill:none;stroke:#C8A100;stroke-width:5}.lever{fill:#DDF7FB;stroke:#17324D;stroke-width:3}
8
8
  </style>
9
9
  <rect width="900" height="380" class="wall"/><rect class="panel" x="55" y="40" width="790" height="300" rx="15"/>
10
10
  <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>
@@ -3,8 +3,8 @@
3
3
  <desc id="desc">A goal enters a control board, branches through choice and exception recovery, then solutions flow into findall, bagof, and setof collectors.</desc>
4
4
  <defs>
5
5
  <style>
6
- .bg{fill:#FFF9E8}.box{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.choice{fill:#FFEBC7;stroke:#C8A100;stroke-width:2}
7
- .ok{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.group{fill:#DCEFF7;stroke:#537487;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
6
+ .bg{fill:#FFF9E8}.box{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.choice{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
7
+ .ok{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.group{fill:#DDF7FB;stroke:#537487;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
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}
@@ -4,7 +4,7 @@
4
4
  <defs>
5
5
  <style>
6
6
  .bg{fill:#EAF8FA}.panel{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.slot{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
7
- .first{fill:#FFEBC7;stroke:#C8A100;stroke-width:2}.last{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
7
+ .first{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.last{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
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}
@@ -3,7 +3,7 @@
3
3
  <desc id="desc">A structured event term is canonically written with a period, stored as text, read back with variable metadata, and followed to the end-of-stream state.</desc>
4
4
  <defs>
5
5
  <style>
6
- .bg{fill:#FFF9E8}.term{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.stream{fill:#DCEFF7;stroke:#537487;stroke-width:2}
6
+ .bg{fill:#FFF9E8}.term{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.stream{fill:#DDF7FB;stroke:#537487;stroke-width:2}
7
7
  .file{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.eof{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
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}
@@ -4,7 +4,7 @@
4
4
  <defs>
5
5
  <style>
6
6
  .bg{fill:#FFF9E8}.term{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.card{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
7
- .blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
7
+ .blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
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
  .ray{fill:none;stroke:#537487;stroke-width:2.2}
@@ -3,7 +3,7 @@
3
3
  <desc id="desc">Sensor readings and records move through normalization, domain concepts, and a decision, with a proof folder retaining the evidence.</desc>
4
4
  <defs><marker id="a" markerWidth="10" markerHeight="10" refX="8" refY="3" orient="auto"><path d="M0 0 L0 6 L9 3Z" fill="#2C657A"/></marker></defs>
5
5
  <style>
6
- .bg{fill:#FFF3D8}.box{fill:#FFFDF8;stroke:#17324D;stroke-width:2.5}.concept{fill:#DDF7FB;stroke:#008EAA;stroke-width:3}
6
+ .bg{fill:#FFF0D6}.box{fill:#FFFDF8;stroke:#17324D;stroke-width:2.5}.concept{fill:#DDF7FB;stroke:#008EAA;stroke-width:3}
7
7
  .text{fill:#17324D;font:16px ui-monospace,monospace}.title{fill:#9D8200;font:bold 17px Georgia,serif}
8
8
  .arrow{fill:none;stroke:#2C657A;stroke-width:3;marker-end:url(#a)}.proof{fill:#F6D978;stroke:#E2BA22;stroke-width:2}
9
9
  </style>
@@ -12,5 +12,5 @@
12
12
  <path class="arrow" d="M200 190 H260"/><rect class="box" x="265" y="120" width="165" height="140" rx="8"/><text class="title" x="348" y="150" text-anchor="middle">NORMALIZE</text><text class="text" x="285" y="190">celsius(91)</text><text class="text" x="285" y="225">max_temp(80)</text>
13
13
  <path class="arrow" d="M430 190 H490"/><rect class="concept" x="495" y="120" width="165" height="140" rx="8"/><text class="title" x="578" y="150" text-anchor="middle">CONCEPT</text><text class="text" x="520" y="195">overheated(b1)</text>
14
14
  <path class="arrow" d="M660 190 H720"/><rect class="concept" x="725" y="120" width="145" height="140" rx="8"/><text class="title" x="798" y="150" text-anchor="middle">DECISION</text><text class="text" x="747" y="195">isolate(b1)</text><text class="text" x="755" y="225">cool(b1)</text>
15
- <path class="arrow" d="M578 265 C578 315 665 315 715 300"/><path class="proof" d="M715 270 H845 V345 H715Z"/><path d="M715 270 H760 L775 285 H845" fill="#F2C94C" stroke="#E2BA22" stroke-width="2"/><text class="text" x="780" y="318" text-anchor="middle">why/2</text>
15
+ <path class="arrow" d="M578 265 C578 315 665 315 715 300"/><path class="proof" d="M715 270 H845 V345 H715Z"/><path d="M715 270 H760 L775 285 H845" fill="#F6D978" stroke="#E2BA22" stroke-width="2"/><text class="text" x="780" y="318" text-anchor="middle">why/2</text>
16
16
  </svg>
@@ -3,7 +3,7 @@
3
3
  <desc id="desc">Five connected stages group laboratories one and two as relational foundations, three and four as finite search, five through seven as mathematical and symbolic methods, eight through eleven as domain reasoning, and twelve as an integrated release-quality service.</desc>
4
4
  <defs>
5
5
  <style>
6
- .bg{fill:#FFF9E8}.stage{stroke:#537487;stroke-width:2}.s1{fill:#DDF7FB}.s2{fill:#BFEAF1}.s3{fill:#FFF4BF}.s4{fill:#FFE7BF}.s5{fill:#17324D;stroke:#102A3A;stroke-width:3}
6
+ .bg{fill:#FFF9E8}.stage{stroke:#537487;stroke-width:2}.s1{fill:#DDF7FB}.s2{fill:#BFEAF1}.s3{fill:#FFF4BF}.s4{fill:#FFF0D6}.s5{fill:#17324D;stroke:#102A3A;stroke-width:3}
7
7
  .line{fill:none;stroke:#537487;stroke-width:4;stroke-linecap:round}.arrow{fill:#537487}.title{fill:#9D8200;font:bold 24px Georgia,serif}.number{fill:#9D8200;font:bold 20px Georgia,serif}.label{fill:#102A3A;font:bold 17px Georgia,serif}.small{fill:#405E70;font:15px Georgia,serif}.white{fill:#FFFDF8}.thread{fill:#405E70;font:italic 16px Georgia,serif}
8
8
  </style>
9
9
  </defs>
@@ -2,7 +2,7 @@
2
2
  <title id="title">Lists as railway carriages</title>
3
3
  <desc id="desc">A train of labeled carriages shows a list head, its tail, and two shorter trains joining through append.</desc>
4
4
  <style>
5
- .sky{fill:#EAF8FA}.ground{fill:#FFF3D8}.rail{stroke:#2C657A;stroke-width:5}.tie{stroke:#A48800;stroke-width:3}
5
+ .sky{fill:#EAF8FA}.ground{fill:#FFF0D6}.rail{stroke:#2C657A;stroke-width:5}.tie{stroke:#9D8200;stroke-width:3}
6
6
  .car{fill:#FFFDF8;stroke:#17324D;stroke-width:3}.head{fill:#DDF7FB;stroke:#008EAA;stroke-width:4}
7
7
  .wheel{fill:#2C657A;stroke:#17324D;stroke-width:2}.text{fill:#17324D;font:18px ui-monospace,monospace}.brace{fill:none;stroke:#C8A100;stroke-width:3}
8
8
  </style>
@@ -24,10 +24,10 @@
24
24
  <rect class="paper" x="35" y="55" width="235" height="305" rx="8"/>
25
25
  <text class="label" x="152" y="92" text-anchor="middle">LOGIC</text>
26
26
  <text class="ink" x="58" y="130">What is true?</text>
27
- <path d="M65 172 C95 142,125 202,155 172 S215 202,245 172" fill="none" stroke="#087F98" stroke-width="4"/>
28
- <circle cx="65" cy="172" r="7" fill="#087F98"/>
29
- <circle cx="155" cy="172" r="7" fill="#087F98"/>
30
- <circle cx="245" cy="172" r="7" fill="#087F98"/>
27
+ <path d="M65 172 C95 142,125 202,155 172 S215 202,245 172" fill="none" stroke="#2C657A" stroke-width="4"/>
28
+ <circle cx="65" cy="172" r="7" fill="#2C657A"/>
29
+ <circle cx="155" cy="172" r="7" fill="#2C657A"/>
30
+ <circle cx="245" cy="172" r="7" fill="#2C657A"/>
31
31
  <text class="small" x="58" y="225">An edge followed by a</text>
32
32
  <text class="small" x="58" y="248">path is itself a path.</text>
33
33
  <text class="small" x="58" y="292">Ground consequences form</text>
@@ -2,8 +2,8 @@
2
2
  <title id="title">Negation and a complete guest registry</title>
3
3
  <desc id="desc">A receptionist checks a complete event registry; one invited name is absent from the blocked list, making closed-world negation meaningful.</desc>
4
4
  <style>
5
- .wall{fill:#EAF8FA}.desk{fill:#E4C13C}.book{fill:#FFFDF8;stroke:#17324D;stroke-width:3}.line{stroke:#2C657A;stroke-width:2}
6
- .person{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.coat{fill:#D6F3F7;stroke:#17324D;stroke-width:2}
5
+ .wall{fill:#EAF8FA}.desk{fill:#F6D978}.book{fill:#FFFDF8;stroke:#17324D;stroke-width:3}.line{stroke:#2C657A;stroke-width:2}
6
+ .person{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.coat{fill:#DDF7FB;stroke:#17324D;stroke-width:2}
7
7
  .text{fill:#17324D;font:15px ui-monospace,monospace}.red{fill:#C8A100}.green{fill:#008EAA}.stamp{fill:none;stroke:#008EAA;stroke-width:4}
8
8
  </style>
9
9
  <rect width="900" height="380" class="wall"/><rect y="285" width="900" height="95" class="desk"/>
@@ -2,10 +2,10 @@
2
2
  <title id="title">Relations in an ordinary town</title>
3
3
  <desc id="desc">People, homes, a school, and a bicycle are connected by labeled facts in a small town scene.</desc>
4
4
  <style>
5
- .sky{fill:#EAF8FA}.ground{fill:#FFF3D8}.road{fill:#D9D1C1}
6
- .building{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.roof{fill:#D8AE1E;stroke:#17324D;stroke-width:2}
7
- .tree{fill:#55BFD0;stroke:#008EAA;stroke-width:2}.trunk{stroke:#A48800;stroke-width:8}
8
- .person{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.shirt{fill:#D6F3F7;stroke:#17324D;stroke-width:2}
5
+ .sky{fill:#EAF8FA}.ground{fill:#FFF0D6}.road{fill:#D9D1C1}
6
+ .building{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.roof{fill:#E2BA22;stroke:#17324D;stroke-width:2}
7
+ .tree{fill:#78AFC0;stroke:#008EAA;stroke-width:2}.trunk{stroke:#9D8200;stroke-width:8}
8
+ .person{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.shirt{fill:#DDF7FB;stroke:#17324D;stroke-width:2}
9
9
  .relation{fill:none;stroke:#C8A100;stroke-width:2.5;stroke-dasharray:7 5}
10
10
  .label{fill:#FFFDF8;stroke:#C8A100;stroke-width:1.5}.text{fill:#9D8200;font:14px ui-monospace,monospace}
11
11
  .detail{fill:none;stroke:#17324D;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
@@ -15,10 +15,10 @@
15
15
  <rect width="900" height="265" class="sky"/><rect y="265" width="900" height="155" class="ground"/>
16
16
  <path class="road" d="M0 355 C220 305 390 385 565 335 S770 300 900 325 L900 420 L0 420Z"/>
17
17
  <rect class="building" x="65" y="155" width="190" height="140"/><polygon class="roof" points="45,160 160,75 275,160"/>
18
- <rect x="93" y="202" width="45" height="93" fill="#E5B23B" stroke="#17324D" stroke-width="2"/>
19
- <rect x="178" y="195" width="47" height="48" fill="#B8DDE8" stroke="#17324D" stroke-width="2"/>
18
+ <rect x="93" y="202" width="45" height="93" fill="#E2BA22" stroke="#17324D" stroke-width="2"/>
19
+ <rect x="178" y="195" width="47" height="48" fill="#BFEAF1" stroke="#17324D" stroke-width="2"/>
20
20
  <rect class="building" x="650" y="120" width="180" height="155"/><polygon class="roof" points="625,125 740,48 855,125"/>
21
- <rect x="716" y="194" width="50" height="81" fill="#E5B23B" stroke="#17324D" stroke-width="2"/>
21
+ <rect x="716" y="194" width="50" height="81" fill="#E2BA22" stroke="#17324D" stroke-width="2"/>
22
22
  <text x="740" y="163" text-anchor="middle" fill="#17324D" font-family="Georgia,serif" font-size="18">SCHOOL</text>
23
23
  <line class="trunk" x1="570" y1="165" x2="570" y2="282"/><circle class="tree" cx="570" cy="125" r="55"/>
24
24
  <g transform="translate(340 230)"><circle class="person" cx="0" cy="-42" r="19"/><path class="shirt" d="M-30 -15 Q0-35 30-15 L24 48 H-24Z"/><path class="detail" d="M-12 48 L-15 85 M12 48 L16 85"/></g>
@@ -2,11 +2,11 @@
2
2
  <title id="title">Searching for a route through the hills</title>
3
3
  <desc id="desc">A traveler studies several mountain paths; dead ends and a loop are marked while one green route reaches a cabin.</desc>
4
4
  <style>
5
- .sky{fill:#EAF8FA}.hill1{fill:#BDEBF0}.hill2{fill:#6BCBD7}.snow{fill:#FFFDF8}
6
- .path{fill:none;stroke:#A48800;stroke-width:7;stroke-linecap:round;stroke-dasharray:9 7}
5
+ .sky{fill:#EAF8FA}.hill1{fill:#BFEAF1}.hill2{fill:#78AFC0}.snow{fill:#FFFDF8}
6
+ .path{fill:none;stroke:#9D8200;stroke-width:7;stroke-linecap:round;stroke-dasharray:9 7}
7
7
  .chosen{fill:none;stroke:#008EAA;stroke-width:9;stroke-linecap:round}
8
8
  .dead{stroke:#C8A100;stroke-width:5}.sign{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
9
- .ink{fill:none;stroke:#17324D;stroke-width:3;stroke-linecap:round}.coat{fill:#D8AE1E;stroke:#17324D;stroke-width:2}
9
+ .ink{fill:none;stroke:#17324D;stroke-width:3;stroke-linecap:round}.coat{fill:#E2BA22;stroke:#17324D;stroke-width:2}
10
10
  </style>
11
11
  <rect width="900" height="420" class="sky"/>
12
12
  <circle cx="735" cy="85" r="43" fill="#F6D978"/>
@@ -22,6 +22,6 @@
22
22
  <line class="dead" x1="380" y1="327" x2="410" y2="357"/><line class="dead" x1="410" y1="327" x2="380" y2="357"/>
23
23
  <line class="dead" x1="647" y1="132" x2="675" y2="158"/><line class="dead" x1="675" y1="132" x2="647" y2="158"/>
24
24
  <g transform="translate(75 315)"><circle cx="0" cy="-35" r="14" class="sign"/><path class="coat" d="M-22-13 Q0-28 22-13 L18 37 H-18Z"/><path class="ink" d="M-8 37 L-12 66 M8 37 L13 66 M18-2 L35 10"/></g>
25
- <g transform="translate(760 205)"><rect class="sign" x="0" y="28" width="92" height="62"/><polygon points="-12,30 46,-10 104,30" fill="#D8AE1E" stroke="#17324D" stroke-width="2"/><rect x="37" y="58" width="22" height="32" fill="#E5B23B" stroke="#17324D" stroke-width="2"/><path d="M72 0 Q65-25 76-43" class="ink"/></g>
25
+ <g transform="translate(760 205)"><rect class="sign" x="0" y="28" width="92" height="62"/><polygon points="-12,30 46,-10 104,30" fill="#E2BA22" stroke="#17324D" stroke-width="2"/><rect x="37" y="58" width="22" height="32" fill="#E2BA22" stroke="#17324D" stroke-width="2"/><path d="M72 0 Q65-25 76-43" class="ink"/></g>
26
26
  <g transform="translate(220 292)"><path class="ink" d="M0 38 V0"/><path class="sign" d="M0 3 L62 3 L52-17 L0-17Z"/><path class="sign" d="M0 28 L-55 28 L-45 8 L0 8Z"/></g>
27
27
  </svg>
@@ -2,20 +2,20 @@
2
2
  <title id="title">Evidence-backed spacecraft diagnosis</title>
3
3
  <desc id="desc">A spacecraft engineer reviews current, resistance, and temperature evidence whose proof lines converge on a battery warning and safe action.</desc>
4
4
  <style>
5
- .wall{fill:#EAF5F7}.panel{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.screen{fill:#DDF6F9;stroke:#008EAA;stroke-width:2}
5
+ .wall{fill:#EAF8FA}.panel{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.screen{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
6
6
  .console{fill:#2C657A}.ink{fill:none;stroke:#17324D;stroke-width:3;stroke-linecap:round}
7
- .wire{fill:none;stroke:#C8A100;stroke-width:2.5}.hot{fill:#D8AE1E}.safe{fill:#008EAA}
7
+ .wire{fill:none;stroke:#C8A100;stroke-width:2.5}.hot{fill:#E2BA22}.safe{fill:#008EAA}
8
8
  .text{fill:#17324D;font:16px ui-monospace,monospace}.small{fill:#405E70;font:15px Georgia,serif}
9
9
  </style>
10
10
  <rect width="900" height="420" class="wall"/>
11
- <circle cx="90" cy="75" r="38" fill="#78AFC0"/><path d="M52 75 Q90 42 128 75 Q90 108 52 75" fill="#B8DDE8"/>
11
+ <circle cx="90" cy="75" r="38" fill="#78AFC0"/><path d="M52 75 Q90 42 128 75 Q90 108 52 75" fill="#BFEAF1"/>
12
12
  <rect class="console" x="35" y="320" width="830" height="100" rx="8"/>
13
13
  <rect class="panel" x="155" y="45" width="165" height="130" rx="7"/><text class="text" x="238" y="72" text-anchor="middle">CURRENT</text><path class="ink" d="M180 137 L205 122 L230 130 L260 87 L295 108"/><text class="text" x="238" y="160" text-anchor="middle">12.1 A</text>
14
14
  <rect class="panel" x="370" y="45" width="165" height="130" rx="7"/><text class="text" x="452" y="72" text-anchor="middle">RESISTANCE</text><path class="ink" d="M393 119 L410 119 L420 96 L440 142 L460 96 L480 142 L492 119 L512 119"/><text class="text" x="452" y="160" text-anchor="middle">0.42 Ω</text>
15
15
  <rect class="panel" x="585" y="45" width="165" height="130" rx="7"/><text class="text" x="668" y="72" text-anchor="middle">TEMPERATURE</text><rect x="645" y="87" width="18" height="53" rx="9" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/><rect class="hot" x="650" y="105" width="8" height="30" rx="4"/><circle class="hot" cx="654" cy="140" r="12"/><text class="text" x="700" y="127">91 °C</text>
16
16
  <path class="wire" d="M238 176 C238 235 370 210 425 268"/><path class="wire" d="M452 176 L452 255"/><path class="wire" d="M668 176 C668 235 540 210 485 268"/>
17
17
  <rect class="screen" x="355" y="250" width="195" height="80" rx="10"/><text class="text" x="452" y="280" text-anchor="middle">THERMAL WARNING</text><text class="small" x="452" y="307" text-anchor="middle">three premises</text>
18
- <g transform="translate(90 270)"><circle class="panel" cx="0" cy="-42" r="18"/><path d="M-30-15 Q0-35 30-15 L24 50 H-24Z" fill="#D6F3F7" stroke="#17324D" stroke-width="2"/><path class="ink" d="M-12 50 L-15 82 M12 50 L16 82 M22 2 L65-18"/></g>
19
- <rect x="635" y="255" width="175" height="63" rx="9" fill="#E8F9FB" stroke="#008EAA" stroke-width="3"/><circle class="safe" cx="666" cy="286" r="15"/><path d="M658 286 L664 293 L676 278" fill="none" stroke="#FFFDF8" stroke-width="4"/><text class="text" x="730" y="282" text-anchor="middle">ISOLATE</text><text class="text" x="730" y="303" text-anchor="middle">&amp; COOL</text>
18
+ <g transform="translate(90 270)"><circle class="panel" cx="0" cy="-42" r="18"/><path d="M-30-15 Q0-35 30-15 L24 50 H-24Z" fill="#DDF7FB" stroke="#17324D" stroke-width="2"/><path class="ink" d="M-12 50 L-15 82 M12 50 L16 82 M22 2 L65-18"/></g>
19
+ <rect x="635" y="255" width="175" height="63" rx="9" fill="#EAF8FA" stroke="#008EAA" stroke-width="3"/><circle class="safe" cx="666" cy="286" r="15"/><path d="M658 286 L664 293 L676 278" fill="none" stroke="#FFFDF8" stroke-width="4"/><text class="text" x="730" y="282" text-anchor="middle">ISOLATE</text><text class="text" x="730" y="303" text-anchor="middle">&amp; COOL</text>
20
20
  <path d="M550 290 L632 287" fill="none" stroke="#008EAA" stroke-width="4"/>
21
21
  </svg>
@@ -2,10 +2,10 @@
2
2
  <title id="title">A logic programmer's workbench</title>
3
3
  <desc id="desc">A programmer moves between domain notes, clause cards, a graph sketch, and tested EyeProlog code at a warm workbench.</desc>
4
4
  <style>
5
- .wall{fill:#FFF3D8}.desk{fill:#E4C13C}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
5
+ .wall{fill:#FFF0D6}.desk{fill:#F6D978}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
6
6
  .screen{fill:#17324D;stroke:#102A3A;stroke-width:5}.code{fill:#DDF7FB;font:16px ui-monospace,monospace}
7
7
  .ink{fill:none;stroke:#17324D;stroke-width:2.5;stroke-linecap:round}.red{stroke:#C8A100}.green{stroke:#008EAA}
8
- .note{fill:#F6D978;stroke:#E2BA22;stroke-width:1.5}.cup{fill:#D6F3F7;stroke:#17324D;stroke-width:2}
8
+ .note{fill:#F6D978;stroke:#E2BA22;stroke-width:1.5}.cup{fill:#DDF7FB;stroke:#17324D;stroke-width:2}
9
9
  </style>
10
10
  <rect width="900" height="420" class="wall"/><rect y="290" width="900" height="130" class="desk"/>
11
11
  <rect class="paper" x="45" y="45" width="220" height="190" rx="4"/><text x="155" y="76" text-anchor="middle" fill="#9D8200" font-family="Georgia,serif" font-size="18">DOMAIN SKETCH</text>
@@ -17,7 +17,7 @@
17
17
  <text class="code" x="495" y="75">path(X, Y) :- edge(X, Y).</text>
18
18
  <text class="code" x="495" y="110">path(X, Z) :-</text><text class="code" x="520" y="135">edge(X, Y),</text><text class="code" x="520" y="160">path(Y, Z).</text>
19
19
  <text class="code" x="495" y="205">eyeprolog --goal 'path(a, X)' program.pl</text>
20
- <text x="495" y="240" fill="#8ADDE5" font-family="ui-monospace,monospace" font-size="16">✓ answers and proofs agree</text>
20
+ <text x="495" y="240" fill="#78AFC0" font-family="ui-monospace,monospace" font-size="16">✓ answers and proofs agree</text>
21
21
  <path d="M625 270 L675 305 H580Z" fill="#2C657A"/>
22
22
  <rect x="545" y="304" width="165" height="12" rx="6" fill="#2C657A"/>
23
23
  <g transform="translate(115 285)"><ellipse class="cup" cx="0" cy="45" rx="45" ry="12"/><path class="cup" d="M-45 0 H45 L35 45 H-35Z"/><path class="ink" d="M45 10 Q78 12 65 36 Q58 46 38 38"/><path d="M-15-8 Q-25-35-8-48 M10-8 Q22-32 8-48" fill="none" stroke="#FFFDF8" stroke-width="3" opacity=".8"/></g>
@@ -3,9 +3,9 @@
3
3
  <desc id="desc">A central relation connects a search tree, a syntax tree, a transformed program, and an auditable decision, with meaning held steady at the center.</desc>
4
4
  <defs>
5
5
  <style>
6
- .bg{fill:#FFF5DF}.panel{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.hub{fill:#DDF7FB;stroke:#008EAA;stroke-width:3}
6
+ .bg{fill:#FFF0D6}.panel{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.hub{fill:#DDF7FB;stroke:#008EAA;stroke-width:3}
7
7
  .ink{fill:none;stroke:#537487;stroke-width:2.5;stroke-linecap:round}.green{stroke:#008EAA}.red{stroke:#C8A100}.gold{stroke:#E2BA22}
8
- .node{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.ok{fill:#E8FAFC;stroke:#008EAA;stroke-width:2}
8
+ .node{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.ok{fill:#EAF8FA;stroke:#008EAA;stroke-width:2}
9
9
  .title{fill:#9D8200;font:bold 24px Georgia,serif}.label{fill:#17324D;font:17px Georgia,serif}
10
10
  .code{fill:#17324D;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
11
11
  </style>
@@ -3,8 +3,8 @@
3
3
  <desc id="desc">A bridge carries mathematical definitions and proof across symbolic clauses into witnesses, counterexamples, and inspectable derivations.</desc>
4
4
  <defs>
5
5
  <style>
6
- .sky{fill:#EAF7F9}.ground{fill:#F2DFAC}.stone{fill:#FFFAE8;stroke:#17324D;stroke-width:2}
7
- .arch{fill:#DDAE4F;stroke:#9D8200;stroke-width:3}.water{fill:#BFEAF1}.ink{fill:none;stroke:#17324D;stroke-width:2.5;stroke-linecap:round}
6
+ .sky{fill:#EAF8FA}.ground{fill:#FFF4BF}.stone{fill:#FFF9E8;stroke:#17324D;stroke-width:2}
7
+ .arch{fill:#E2BA22;stroke:#9D8200;stroke-width:3}.water{fill:#BFEAF1}.ink{fill:none;stroke:#17324D;stroke-width:2.5;stroke-linecap:round}
8
8
  .green{stroke:#008EAA}.red{stroke:#C8A100}.gold{stroke:#E2BA22}.title{fill:#9D8200;font:bold 24px Georgia,serif}
9
9
  .label{fill:#17324D;font:18px Georgia,serif}.code{fill:#102A3A;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}
10
10
  </style>
@@ -31,23 +31,23 @@
31
31
 
32
32
  <rect class="stone" x="660" y="80" width="205" height="190" rx="10"/>
33
33
  <text class="label" x="762" y="110" text-anchor="middle">COMPUTATION</text>
34
- <circle cx="710" cy="155" r="20" fill="#E8FAFC" stroke="#008EAA" stroke-width="2"/>
34
+ <circle cx="710" cy="155" r="20" fill="#EAF8FA" stroke="#008EAA" stroke-width="2"/>
35
35
  <text class="code" x="710" y="160" text-anchor="middle">?</text>
36
36
  <path class="ink green" marker-end="url(#arr)" d="M732 155H797"/>
37
- <rect x="797" y="137" width="45" height="36" rx="6" fill="#E8FAFC" stroke="#008EAA" stroke-width="2"/>
37
+ <rect x="797" y="137" width="45" height="36" rx="6" fill="#EAF8FA" stroke="#008EAA" stroke-width="2"/>
38
38
  <text class="code" x="819" y="160" text-anchor="middle">X</text>
39
39
  <text class="code" x="682" y="207">witness</text>
40
40
  <text class="code" x="682" y="235">proof</text>
41
41
  <text class="code" x="682" y="260">or counterexample</text>
42
42
 
43
43
  <g transform="translate(300 335)">
44
- <circle cx="0" cy="0" r="27" fill="#FFFAE8" stroke="#17324D" stroke-width="2"/>
44
+ <circle cx="0" cy="0" r="27" fill="#FFF9E8" stroke="#17324D" stroke-width="2"/>
45
45
  <text class="code" x="0" y="5" text-anchor="middle">axiom</text>
46
46
  <path class="ink green" d="M27 0H103"/>
47
- <circle cx="130" cy="0" r="27" fill="#FFFAE8" stroke="#17324D" stroke-width="2"/>
47
+ <circle cx="130" cy="0" r="27" fill="#FFF9E8" stroke="#17324D" stroke-width="2"/>
48
48
  <text class="code" x="130" y="5" text-anchor="middle">rule</text>
49
49
  <path class="ink green" d="M157 0H233"/>
50
- <circle cx="260" cy="0" r="27" fill="#E8FAFC" stroke="#008EAA" stroke-width="2"/>
50
+ <circle cx="260" cy="0" r="27" fill="#EAF8FA" stroke="#008EAA" stroke-width="2"/>
51
51
  <text class="code" x="260" y="5" text-anchor="middle">answer</text>
52
52
  </g>
53
53
  <text class="label" x="450" y="420" text-anchor="middle">certainty whose boundary is visible</text>
@@ -3,9 +3,9 @@
3
3
  <desc id="desc">A theory on a laboratory bench moves through prediction, tests, search statistics, proof inspection, and a controlled revision loop.</desc>
4
4
  <defs>
5
5
  <style>
6
- .bg{fill:#FFF3D8}.bench{fill:#E4C13C}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
6
+ .bg{fill:#FFF0D6}.bench{fill:#F6D978}.paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
7
7
  .screen{fill:#17324D;stroke:#102A3A;stroke-width:4}.green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
8
- .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.red{fill:#FFECCB;stroke:#C8A100;stroke-width:2}
8
+ .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.red{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
9
9
  .line{fill:none;stroke:#537487;stroke-width:2.5}.title{fill:#9D8200;font:bold 24px Georgia,serif}
10
10
  .label{fill:#17324D;font:17px Georgia,serif}.code{fill:#DDF7FB;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}
11
11
  .darkcode{fill:#17324D;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
@@ -3,10 +3,10 @@
3
3
  <desc id="desc">A programmer at a workbench connects an ISO Prolog manual to control, term, state, operator, and stream instruments.</desc>
4
4
  <defs>
5
5
  <style>
6
- .wall{fill:#EAF8FA}.floor{fill:#FFF3D8}.bench{fill:#E4C13C;stroke:#A48800;stroke-width:3}
6
+ .wall{fill:#EAF8FA}.floor{fill:#FFF0D6}.bench{fill:#F6D978;stroke:#9D8200;stroke-width:3}
7
7
  .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.screen{fill:#102A3A;stroke:#17324D;stroke-width:3}
8
8
  .green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
9
- .red{fill:#FFEBC7;stroke:#C8A100;stroke-width:2}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
9
+ .red{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
10
10
  .ink{fill:#17324D;font:16px Georgia,serif}.label{fill:#17324D;font:bold 15px Georgia,serif}
11
11
  .code{fill:#DDF7FB;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
12
12
  .screen-code{fill:#DDF7FB;font:12px ui-monospace,SFMono-Regular,Consolas,monospace}
@@ -46,7 +46,7 @@
46
46
 
47
47
  <g transform="translate(270 325)">
48
48
  <circle cx="0" cy="-28" r="18" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/>
49
- <path d="M-28 0Q0-25 28 0L22 72H-22Z" fill="#D6F3F7" stroke="#17324D" stroke-width="2"/>
49
+ <path d="M-28 0Q0-25 28 0L22 72H-22Z" fill="#DDF7FB" stroke="#17324D" stroke-width="2"/>
50
50
  <path class="line" d="M-12 72L-15 105M12 72L15 105M-22 15L-70-10M22 15L72-8"/>
51
51
  </g>
52
52
  <rect class="blue" x="350" y="337" width="400" height="66" rx="10"/>
@@ -2,7 +2,7 @@
2
2
  <title id="title">Choose a reasoning pattern by the problem that needs solving</title>
3
3
  <desc id="desc">A central design question branches by symptom: drifting meaning, infinite search, unsafe absence, repeated subproblems, opaque decisions, or representational duplicates, each pointing to a named pattern.</desc>
4
4
  <defs><style>
5
- .bg{fill:#FFF9E8}.core{fill:#2C657A;stroke:#17324D;stroke-width:3}.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}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
5
+ .bg{fill:#FFF9E8}.core{fill:#2C657A;stroke:#17324D;stroke-width:3}.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}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 13px Georgia,serif}.light{fill:#FFFDF8;font:bold 16px Georgia,serif}.prose{fill:#405E70;font:13px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:2.5}
7
7
  </style></defs>
8
8
  <rect class="bg" width="900" height="460"/><text class="title" x="450" y="38" text-anchor="middle">A PATTERN STARTS WITH A NAMED DESIGN PROBLEM</text>
@@ -5,7 +5,7 @@
5
5
  <style>
6
6
  .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.source{fill:#17324D;stroke:#102A3A;stroke-width:3}
7
7
  .green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
8
- .rose{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
8
+ .rose{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
9
9
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 17px Georgia,serif}
10
10
  .prose{fill:#405E70;font:15px Georgia,serif}.code{fill:#102A3A;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
11
11
  .light{fill:#DDF7FB;font:15px ui-monospace,SFMono-Regular,Consolas,monospace}.line{fill:none;stroke:#537487;stroke-width:2.5}
@@ -4,8 +4,8 @@
4
4
  <defs>
5
5
  <style>
6
6
  .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
7
- .goal{fill:#E8FAFC;stroke:#008EAA;stroke-width:2}
8
- .fail{fill:#FFF1D8;stroke:#C8A100;stroke-width:2}
7
+ .goal{fill:#EAF8FA;stroke:#008EAA;stroke-width:2}
8
+ .fail{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
9
9
  .repeat{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
10
10
  .title{fill:#C8A100;font:bold 23px Georgia,serif}
11
11
  .text{fill:#102A3A;font:14px ui-monospace,SFMono-Regular,Consolas,monospace}
@@ -8,7 +8,7 @@
8
8
  .flow{fill:none;stroke:#2C657A;stroke-width:4;marker-end:url(#a)}.graph{fill:none;stroke:#C8A100;stroke-width:3}
9
9
  </style>
10
10
  <rect width="900" height="380" class="bg"/>
11
- <g transform="translate(35 65)"><rect class="paper" width="190" height="240" rx="6"/><text class="title" x="95" y="35" text-anchor="middle">RDF SOURCES</text><circle cx="52" cy="90" r="13" fill="#D8AE1E"/><circle cx="135" cy="75" r="13" fill="#008EAA"/><circle cx="115" cy="145" r="13" fill="#F2C94C"/><path class="graph" d="M65 87 L122 78 M128 88 L119 132 M62 99 L105 139"/><text class="text" x="95" y="195" text-anchor="middle">Turtle · TriG</text><text class="text" x="95" y="220" text-anchor="middle">JSON-LD · RDF/XML</text></g>
11
+ <g transform="translate(35 65)"><rect class="paper" width="190" height="240" rx="6"/><text class="title" x="95" y="35" text-anchor="middle">RDF SOURCES</text><circle cx="52" cy="90" r="13" fill="#E2BA22"/><circle cx="135" cy="75" r="13" fill="#008EAA"/><circle cx="115" cy="145" r="13" fill="#F6D978"/><path class="graph" d="M65 87 L122 78 M128 88 L119 132 M62 99 L105 139"/><text class="text" x="95" y="195" text-anchor="middle">Turtle · TriG</text><text class="text" x="95" y="220" text-anchor="middle">JSON-LD · RDF/XML</text></g>
12
12
  <path class="flow" d="M230 185 H295"/><rect class="adapter" x="305" y="92" width="290" height="186" rx="16"/><text class="title" x="450" y="125" text-anchor="middle">EXPLICIT ADAPTER</text><text class="text" x="330" y="165">rdf(Subject,</text><text class="text" x="365" y="190">Predicate,</text><text class="text" x="365" y="215">Object, Graph)</text><text class="text" x="330" y="250">+ EyeProlog rules</text>
13
13
  <path class="flow" d="M595 185 H660"/><g transform="translate(670 65)"><rect class="paper" width="195" height="240" rx="6"/><text class="title" x="98" y="35" text-anchor="middle">DERIVED RDF</text><text class="text" x="20" y="82">&lt;s&gt; &lt;ancestor&gt; &lt;o&gt;</text><text class="text" x="20" y="110">&lt;s&gt; &lt;status&gt; "safe"</text><text class="text" x="20" y="160">RDF 1.2 N-Quads</text><text class="text" x="20" y="195">named graphs and</text><text class="text" x="20" y="220">triple terms retained</text></g>
14
14
  </svg>
@@ -4,7 +4,7 @@
4
4
  <defs>
5
5
  <style>
6
6
  .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.green{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
7
- .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
7
+ .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
8
8
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 18px 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}.rung{stroke:#E2BA22;stroke-width:4}
@@ -2,7 +2,7 @@
2
2
  <title id="title">Recursion and tabling on a railway map</title>
3
3
  <desc id="desc">A railway network contains a cycle; a route ledger records reached stations so recurring questions reuse known answers.</desc>
4
4
  <style>
5
- .map{fill:#EAF8FA}.land{fill:#FFF3D8}.rail{fill:none;stroke:#2C657A;stroke-width:8}.tie{fill:none;stroke:#FFFDF8;stroke-width:2;stroke-dasharray:4 8}
5
+ .map{fill:#EAF8FA}.land{fill:#FFF0D6}.rail{fill:none;stroke:#2C657A;stroke-width:8}.tie{fill:none;stroke:#FFFDF8;stroke-width:2;stroke-dasharray:4 8}
6
6
  .station{fill:#FFFDF8;stroke:#17324D;stroke-width:3}.known{fill:#DDF7FB;stroke:#008EAA;stroke-width:4}
7
7
  .text{fill:#17324D;font:16px ui-monospace,monospace}.ledger{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.check{fill:#008EAA}
8
8
  </style>
@@ -2,7 +2,7 @@
2
2
  <title id="title">A relational theory needs more than single input-output tests</title>
3
3
  <desc id="desc">A public relation sits at the center of a test spectrum covering meaning, modes, finite properties, metamorphic changes, proof provenance, integrity, and scale.</desc>
4
4
  <defs><style>
5
- .bg{fill:#FFF9E8}.core{fill:#2C657A;stroke:#17324D;stroke-width:3}.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}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
5
+ .bg{fill:#FFF9E8}.core{fill:#2C657A;stroke:#17324D;stroke-width:3}.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}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 13px Georgia,serif}.light{fill:#FFFDF8;font:bold 16px Georgia,serif}.prose{fill:#405E70;font:13px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:2.5}
7
7
  </style></defs>
8
8
  <rect class="bg" width="900" height="460"/><text class="title" x="450" y="38" text-anchor="middle">TEST THE RELATION, NOT JUST ONE CALL</text>
@@ -3,7 +3,7 @@
3
3
  <desc id="desc">Meaning, logic, control, evidence, and boundary surround one program artifact. A lower loop says predict, run, explain, and revise.</desc>
4
4
  <defs>
5
5
  <style>
6
- .bg{fill:#FFF9E8}.artifact{fill:#17324D;stroke:#102A3A;stroke-width:3}.lens{stroke-width:2}.meaning{fill:#DDF7FB;stroke:#008EAA}.logic{fill:#BFEAF1;stroke:#087F98}.control{fill:#FFF4BF;stroke:#E2BA22}.evidence{fill:#FFE7BF;stroke:#C8A100}.boundary{fill:#E2F2F7;stroke:#367C95}
6
+ .bg{fill:#FFF9E8}.artifact{fill:#17324D;stroke:#102A3A;stroke-width:3}.lens{stroke-width:2}.meaning{fill:#DDF7FB;stroke:#008EAA}.logic{fill:#BFEAF1;stroke:#2C657A}.control{fill:#FFF4BF;stroke:#E2BA22}.evidence{fill:#FFF0D6;stroke:#C8A100}.boundary{fill:#DDF7FB;stroke:#2C657A}
7
7
  .line{fill:none;stroke:#537487;stroke-width:2.5}.cycle{fill:none;stroke:#9D8200;stroke-width:3;stroke-linecap:round}.arrow{fill:#9D8200}.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}.verb{fill:#9D8200;font:bold 15px Georgia,serif}
8
8
  </style>
9
9
  </defs>
@@ -2,7 +2,7 @@
2
2
  <title id="title">Interchangeable knowledge providers connecting through a socket</title>
3
3
  <desc id="desc">A file, database, and AI extractor offer parent facts through one declared predicate contract to the same ancestor rules.</desc>
4
4
  <style>
5
- .bg{fill:#FFF3D8}.provider{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.socket{fill:#DDF7FB;stroke:#008EAA;stroke-width:4}
5
+ .bg{fill:#FFF0D6}.provider{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.socket{fill:#DDF7FB;stroke:#008EAA;stroke-width:4}
6
6
  .engine{fill:#2C657A;stroke:#17324D;stroke-width:3}.text{fill:#17324D;font:16px ui-monospace,monospace}.small{fill:#405E70;font:13px ui-monospace,monospace}.claim-text{fill:#9D8200;font:11px ui-monospace,monospace}.light{fill:#FFFDF8;font:16px ui-monospace,monospace}
7
7
  .cable{fill:none;stroke:#C8A100;stroke-width:4;stroke-linecap:round}.claim{fill:#FFFDF8;stroke:#C8A100;stroke-width:2}.pin{fill:#17324D}
8
8
  </style>
@@ -4,7 +4,7 @@
4
4
  <defs>
5
5
  <style>
6
6
  .paper{fill:#FFFDF8;stroke:#17324D;stroke-width:2}.tree{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}
7
- .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.blue{fill:#DCEFF7;stroke:#537487;stroke-width:2}
7
+ .gold{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}.blue{fill:#DDF7FB;stroke:#537487;stroke-width:2}
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;stroke-linecap:round}
@@ -2,7 +2,7 @@
2
2
  <title id="title">Three different termination arguments</title>
3
3
  <desc id="desc">Recursive calls may terminate because a structural measure decreases, because finite tabled calls reach a fixed point, or fail to terminate because terms grow without bound.</desc>
4
4
  <defs><style>
5
- .bg{fill:#FFF9E8}.good{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.table{fill:#DCEFF7;stroke:#537487;stroke-width:2}.bad{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
5
+ .bg{fill:#FFF9E8}.good{fill:#DDF7FB;stroke:#008EAA;stroke-width:2}.table{fill:#DDF7FB;stroke:#537487;stroke-width:2}.bad{fill:#FFF0D6;stroke:#C8A100;stroke-width:2}
6
6
  .title{fill:#C8A100;font:bold 24px Georgia,serif}.label{fill:#17324D;font:bold 15px Georgia,serif}.code{fill:#102A3A;font:14px ui-monospace,monospace}.prose{fill:#405E70;font:15px Georgia,serif}.line{fill:none;stroke:#537487;stroke-width:2.5}
7
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>
8
8
  <rect class="bg" width="900" height="440"/><text class="title" x="450" y="38" text-anchor="middle">ASK WHAT MAKES THE CALL SPACE FINITE</text>
@@ -6,40 +6,40 @@
6
6
 
7
7
  <defs>
8
8
  <linearGradient id="paper" x1="0" y1="0" x2="0" y2="1">
9
- <stop offset="0%" stop-color="#FFFDF5"/>
10
- <stop offset="100%" stop-color="#FFF3CF"/>
9
+ <stop offset="0%" stop-color="#FFFDF8"/>
10
+ <stop offset="100%" stop-color="#FFF0D6"/>
11
11
  </linearGradient>
12
12
  <style>
13
13
  .bg { fill: url(#paper); }
14
- .navy { fill: #0B4F6C; }
15
- .green { fill: #00A6C8; }
16
- .wine { fill: #D8B400; }
17
- .gold { fill: #E7C531; }
14
+ .navy { fill: #17324D; }
15
+ .green { fill: #008EAA; }
16
+ .wine { fill: #C8A100; }
17
+ .gold { fill: #E2BA22; }
18
18
  .cream { fill: #FFFDF8; }
19
- .navy-stroke { stroke: #0B4F6C; fill: none; }
20
- .green-stroke { stroke: #00A6C8; fill: none; }
21
- .wine-stroke { stroke: #D8B400; fill: none; }
22
- .gold-stroke { stroke: #E7C531; fill: none; }
19
+ .navy-stroke { stroke: #17324D; fill: none; }
20
+ .green-stroke { stroke: #008EAA; fill: none; }
21
+ .wine-stroke { stroke: #C8A100; fill: none; }
22
+ .gold-stroke { stroke: #E2BA22; fill: none; }
23
23
  .thin { stroke-width: 2; }
24
24
  .mid { stroke-width: 3; }
25
25
  .thick { stroke-width: 5; }
26
26
  .round { stroke-linecap: round; stroke-linejoin: round; }
27
- .title1 { fill:#0B4F6C; font-family: Georgia, 'Times New Roman', serif; font-size:64px; font-weight:500; }
27
+ .title1 { fill:#17324D; font-family: Georgia, 'Times New Roman', serif; font-size:64px; font-weight:500; }
28
28
  .title2 { font-family: 'Avenir Next', Avenir, 'Trebuchet MS', Helvetica, Arial, sans-serif; font-size:112px; font-weight:700; letter-spacing:-4px; }
29
- .logo-eye { fill:#1498E6; stroke:#0B4F6C; stroke-width:1.2; paint-order:stroke fill; }
30
- .logo-prolog { fill:#F4D21A; stroke:#C8A100; stroke-width:1.6; paint-order:stroke fill; }
31
- .subtitle { fill:#00A6C8; font-family: Georgia, 'Times New Roman', serif; font-size:28px; }
32
- .author { fill:#D8B400; font-family: Georgia, 'Times New Roman', serif; font-size:25px; }
29
+ .logo-eye { fill:#008EAA; stroke:#17324D; stroke-width:1.2; paint-order:stroke fill; }
30
+ .logo-prolog { fill:#E2BA22; stroke:#C8A100; stroke-width:1.6; paint-order:stroke fill; }
31
+ .subtitle { fill:#008EAA; font-family: Georgia, 'Times New Roman', serif; font-size:28px; }
32
+ .author { fill:#C8A100; font-family: Georgia, 'Times New Roman', serif; font-size:25px; }
33
33
  .section { font-family: Georgia, 'Times New Roman', serif; font-size:20px; font-weight:700; letter-spacing:2px; }
34
34
  .smallserif { font-family: Georgia, 'Times New Roman', serif; font-size:18px; }
35
35
  .paneltitle { font-family: Georgia, 'Times New Roman', serif; font-size:21px; font-weight:700; letter-spacing:0.4px; }
36
- .code { fill:#0B4F6C; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:18px; }
37
- .codesm { fill:#0B4F6C; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:15px; }
38
- .label { fill:#0B4F6C; font-family: Georgia, 'Times New Roman', serif; font-size:21px; }
39
- .node { fill:#FFFDF8; stroke:#0B4F6C; stroke-width:3; }
40
- .rdfnode { fill:#68CCD9; stroke:#00A6C8; stroke-width:3; }
36
+ .code { fill:#17324D; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:18px; }
37
+ .codesm { fill:#17324D; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size:15px; }
38
+ .label { fill:#17324D; font-family: Georgia, 'Times New Roman', serif; font-size:21px; }
39
+ .node { fill:#FFFDF8; stroke:#17324D; stroke-width:3; }
40
+ .rdfnode { fill:#78AFC0; stroke:#008EAA; stroke-width:3; }
41
41
  .panel { fill:#FFFDF8; fill-opacity:0.96; stroke-width:3.5; }
42
- .softbox { fill:#F3FBFC; stroke:#0B4F6C; stroke-width:2.2; }
42
+ .softbox { fill:#EAF8FA; stroke:#17324D; stroke-width:2.2; }
43
43
  </style>
44
44
  </defs>
45
45
 
@@ -74,7 +74,7 @@
74
74
  <!-- hero diagrams -->
75
75
  <g id="prolog-rules">
76
76
  <rect x="80" y="510" width="220" height="180" rx="18"
77
- fill="#FFFDF8" stroke="#D8B400" stroke-width="3"/>
77
+ fill="#FFFDF8" stroke="#C8A100" stroke-width="3"/>
78
78
  <text x="100" y="552" class="codesm" style="font-size:14px">path(X, Y) :-</text>
79
79
  <text x="122" y="580" class="codesm" style="font-size:14px">edge(X, Y).</text>
80
80
  <text x="100" y="615" class="codesm" style="font-size:14px">path(X, Y) :-</text>
@@ -93,52 +93,52 @@
93
93
  <circle cx="875" cy="610" r="17" class="rdfnode"/>
94
94
  <circle cx="835" cy="690" r="17" class="rdfnode"/>
95
95
 
96
- <rect x="748" y="500" width="116" height="40" rx="8" fill="#FFF8D9" stroke="#0B4F6C" stroke-width="2"/>
96
+ <rect x="748" y="500" width="116" height="40" rx="8" fill="#FFF9E8" stroke="#17324D" stroke-width="2"/>
97
97
  <text x="806" y="526" text-anchor="middle" class="smallserif navy">ex:Alice</text>
98
98
 
99
- <rect x="855" y="558" width="118" height="40" rx="8" fill="#FFF8D9" stroke="#0B4F6C" stroke-width="2"/>
99
+ <rect x="855" y="558" width="118" height="40" rx="8" fill="#FFF9E8" stroke="#17324D" stroke-width="2"/>
100
100
  <text x="914" y="584" text-anchor="middle" class="smallserif navy">ex:knows</text>
101
101
 
102
- <rect x="846" y="682" width="106" height="40" rx="8" fill="#FFF8D9" stroke="#0B4F6C" stroke-width="2"/>
102
+ <rect x="846" y="682" width="106" height="40" rx="8" fill="#FFF9E8" stroke="#17324D" stroke-width="2"/>
103
103
  <text x="899" y="708" text-anchor="middle" class="smallserif navy">ex:Bob</text>
104
104
  </g>
105
105
 
106
106
  <!-- abstract bridge -->
107
107
  <g id="bridge">
108
108
  <path d="M320 710 C338 560, 410 500, 500 500 C590 500, 662 560, 680 710"
109
- fill="none" stroke="#F6DB83" stroke-width="62" stroke-linecap="round"/>
109
+ fill="none" stroke="#F6D978" stroke-width="62" stroke-linecap="round"/>
110
110
  <path d="M320 710 C338 560, 410 500, 500 500 C590 500, 662 560, 680 710"
111
111
  class="navy-stroke mid round"/>
112
112
 
113
- <path d="M442 488 L558 488 L572 556 L428 556 Z" fill="#FBEDB8" stroke="#0B4F6C" stroke-width="3"/>
113
+ <path d="M442 488 L558 488 L572 556 L428 556 Z" fill="#FFF4BF" stroke="#17324D" stroke-width="3"/>
114
114
  <text x="500" y="523" text-anchor="middle" class="section" style="font-size:14px; letter-spacing:0.5px;"><tspan class="logo-eye">EYE</tspan><tspan class="logo-prolog">PROLOG</tspan></text>
115
115
 
116
- <rect x="290" y="690" width="68" height="148" rx="7" fill="#F9E8A3" stroke="#0B4F6C" stroke-width="3"/>
117
- <rect x="278" y="676" width="92" height="22" rx="5" fill="#F5D86E" stroke="#0B4F6C" stroke-width="3"/>
118
- <rect x="276" y="830" width="96" height="24" rx="5" fill="#F5D86E" stroke="#0B4F6C" stroke-width="3"/>
116
+ <rect x="290" y="690" width="68" height="148" rx="7" fill="#FFF4BF" stroke="#17324D" stroke-width="3"/>
117
+ <rect x="278" y="676" width="92" height="22" rx="5" fill="#F6D978" stroke="#17324D" stroke-width="3"/>
118
+ <rect x="276" y="830" width="96" height="24" rx="5" fill="#F6D978" stroke="#17324D" stroke-width="3"/>
119
119
  <line x1="306" y1="708" x2="306" y2="824" class="gold-stroke thin"/>
120
120
  <line x1="342" y1="708" x2="342" y2="824" class="gold-stroke thin"/>
121
121
 
122
- <rect x="642" y="690" width="68" height="148" rx="7" fill="#F9E8A3" stroke="#0B4F6C" stroke-width="3"/>
123
- <rect x="630" y="676" width="92" height="22" rx="5" fill="#F5D86E" stroke="#0B4F6C" stroke-width="3"/>
124
- <rect x="628" y="830" width="96" height="24" rx="5" fill="#F5D86E" stroke="#0B4F6C" stroke-width="3"/>
122
+ <rect x="642" y="690" width="68" height="148" rx="7" fill="#FFF4BF" stroke="#17324D" stroke-width="3"/>
123
+ <rect x="630" y="676" width="92" height="22" rx="5" fill="#F6D978" stroke="#17324D" stroke-width="3"/>
124
+ <rect x="628" y="830" width="96" height="24" rx="5" fill="#F6D978" stroke="#17324D" stroke-width="3"/>
125
125
  <line x1="658" y1="708" x2="658" y2="824" class="gold-stroke thin"/>
126
126
  <line x1="694" y1="708" x2="694" y2="824" class="gold-stroke thin"/>
127
127
  </g>
128
128
 
129
129
  <!-- proof tree -->
130
130
  <g id="proof-tree">
131
- <circle cx="500" cy="590" r="18" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
132
- <circle cx="455" cy="660" r="18" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
133
- <circle cx="545" cy="660" r="18" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
134
- <circle cx="420" cy="730" r="18" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
135
- <circle cx="500" cy="730" r="18" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
136
- <circle cx="580" cy="730" r="18" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
131
+ <circle cx="500" cy="590" r="18" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
132
+ <circle cx="455" cy="660" r="18" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
133
+ <circle cx="545" cy="660" r="18" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
134
+ <circle cx="420" cy="730" r="18" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
135
+ <circle cx="500" cy="730" r="18" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
136
+ <circle cx="580" cy="730" r="18" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
137
137
  <path d="M500 608 L455 642 M500 608 L545 642 M455 678 L420 712 M455 678 L500 712 M545 678 L580 712"
138
138
  class="green-stroke mid round"/>
139
139
  <line x1="500" y1="752" x2="500" y2="790" class="green-stroke mid round" stroke-dasharray="4 8"/>
140
140
  <path d="M491 785 L500 796 L509 785" class="green-stroke mid round"/>
141
- <circle cx="500" cy="824" r="29" fill="#00A6C8" stroke="#0B4F6C" stroke-width="3"/>
141
+ <circle cx="500" cy="824" r="29" fill="#008EAA" stroke="#17324D" stroke-width="3"/>
142
142
  <path d="M486 825 L497 836 L516 810" fill="none" stroke="#FFFDF8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
143
143
  </g>
144
144
 
@@ -147,8 +147,8 @@
147
147
 
148
148
  <!-- panels -->
149
149
  <g id="panel1">
150
- <rect x="45" y="925" width="280" height="360" rx="28" class="panel" stroke="#D8B400"/>
151
- <circle cx="185" cy="925" r="38" fill="#FFFDF8" stroke="#D8B400" stroke-width="3"/>
150
+ <rect x="45" y="925" width="280" height="360" rx="28" class="panel" stroke="#C8A100"/>
151
+ <circle cx="185" cy="925" r="38" fill="#FFFDF8" stroke="#C8A100" stroke-width="3"/>
152
152
  <text x="185" y="936" text-anchor="middle" class="code wine" style="font-size:27px">:-</text>
153
153
  <text x="185" y="990" text-anchor="middle" class="paneltitle wine" style="font-size:20px">1. ISO PROLOG RULES</text>
154
154
 
@@ -164,8 +164,8 @@
164
164
  </g>
165
165
 
166
166
  <g id="panel2">
167
- <rect x="340" y="925" width="320" height="360" rx="28" class="panel" stroke="#00A6C8"/>
168
- <circle cx="500" cy="925" r="38" fill="#FFFDF8" stroke="#00A6C8" stroke-width="3"/>
167
+ <rect x="340" y="925" width="320" height="360" rx="28" class="panel" stroke="#008EAA"/>
168
+ <circle cx="500" cy="925" r="38" fill="#FFFDF8" stroke="#008EAA" stroke-width="3"/>
169
169
  <circle cx="484" cy="925" r="6" class="rdfnode"/>
170
170
  <circle cx="516" cy="908" r="6" class="rdfnode"/>
171
171
  <circle cx="520" cy="942" r="6" class="rdfnode"/>
@@ -178,10 +178,10 @@
178
178
  <line x1="423" y1="1060" x2="482" y2="1060" class="green-stroke mid round"/>
179
179
  <line x1="518" y1="1060" x2="577" y2="1060" class="green-stroke mid round"/>
180
180
 
181
- <rect x="375" y="1110" width="250" height="38" rx="8" fill="#F3FBFC" stroke="#00A6C8" stroke-width="2"/>
181
+ <rect x="375" y="1110" width="250" height="38" rx="8" fill="#EAF8FA" stroke="#008EAA" stroke-width="2"/>
182
182
  <text x="500" y="1135" text-anchor="middle" class="codesm">ex:alice ex:knows ex:bob</text>
183
183
 
184
- <rect x="375" y="1160" width="250" height="54" rx="8" fill="#F3FBFC" stroke="#00A6C8" stroke-width="2"/>
184
+ <rect x="375" y="1160" width="250" height="54" rx="8" fill="#EAF8FA" stroke="#008EAA" stroke-width="2"/>
185
185
  <text x="500" y="1183" text-anchor="middle" class="codesm" style="font-size:13px">named graphs · literals</text>
186
186
  <text x="500" y="1202" text-anchor="middle" class="codesm" style="font-size:13px">triple terms</text>
187
187
 
@@ -189,11 +189,11 @@
189
189
  </g>
190
190
 
191
191
  <g id="panel3">
192
- <rect x="675" y="925" width="280" height="360" rx="28" class="panel" stroke="#0B4F6C"/>
193
- <circle cx="815" cy="925" r="38" fill="#FFFDF8" stroke="#0B4F6C" stroke-width="3"/>
194
- <rect x="807" y="903" width="16" height="12" rx="2" fill="#FFFDF8" stroke="#0B4F6C" stroke-width="2"/>
195
- <rect x="790" y="934" width="16" height="12" rx="2" fill="#FFFDF8" stroke="#0B4F6C" stroke-width="2"/>
196
- <rect x="824" y="934" width="16" height="12" rx="2" fill="#FFFDF8" stroke="#0B4F6C" stroke-width="2"/>
192
+ <rect x="675" y="925" width="280" height="360" rx="28" class="panel" stroke="#17324D"/>
193
+ <circle cx="815" cy="925" r="38" fill="#FFFDF8" stroke="#17324D" stroke-width="3"/>
194
+ <rect x="807" y="903" width="16" height="12" rx="2" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/>
195
+ <rect x="790" y="934" width="16" height="12" rx="2" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/>
196
+ <rect x="824" y="934" width="16" height="12" rx="2" fill="#FFFDF8" stroke="#17324D" stroke-width="2"/>
197
197
  <path d="M815 915 V926 M798 926 H832 M798 926 V934 M832 926 V934" class="navy-stroke thin round"/>
198
198
  <text x="815" y="990" text-anchor="middle" class="paneltitle navy">3. ANSWERS &amp; PROOFS</text>
199
199
 
@@ -8,7 +8,7 @@
8
8
  <style>
9
9
  .node{fill:#FFFDF8;stroke:#17324D;stroke-width:2}
10
10
  .var{fill:#FFF4BF;stroke:#E2BA22;stroke-width:2}
11
- .value{fill:#E8FAFC;stroke:#008EAA;stroke-width:2}
11
+ .value{fill:#EAF8FA;stroke:#008EAA;stroke-width:2}
12
12
  .text{fill:#102A3A;font:17px ui-monospace,SFMono-Regular,Consolas,monospace}
13
13
  .title{fill:#C8A100;font:bold 22px Georgia,serif}
14
14
  .line{stroke:#537487;stroke-width:2}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "0.5.16",
6
+ "version": "0.5.18",
7
7
  "description": "EyeProlog turns facts and rules into answers and proofs.",
8
8
  "type": "module",
9
9
  "main": "./index.js",
@@ -31,7 +31,6 @@
31
31
  "index.js",
32
32
  "index.d.ts",
33
33
  "playground.html",
34
- "eyeprolog-logo.png",
35
34
  "bin",
36
35
  "src",
37
36
  "tools",
package/playground.html CHANGED
@@ -3,7 +3,6 @@
3
3
  <head>
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
- <link rel="icon" type="image/png" href="eyeprolog-logo.png">
7
6
  <title>EyeProlog Playground</title>
8
7
  <style>
9
8
  :root {
@@ -2,10 +2,6 @@
2
2
  <img src="book-assets/title-page.svg" alt="Front page for The Art of EyeProlog, presenting its dual foundation in ISO Prolog rules and RDF linked data." width="720">
3
3
  </p>
4
4
 
5
- <p align="center">
6
- <img src="eyeprolog-logo.png" alt="EyeProlog logo joining ISO Prolog rules with RDF linked data." width="420">
7
- </p>
8
-
9
5
  **Copyright © 2021–2026 Jos De Roo, KNoWS office of IDLab, Ghent University –
10
6
  imec.** This book is licensed under [Creative Commons Attribution 4.0
11
7
  International](https://creativecommons.org/licenses/by/4.0/). You may copy,
Binary file