/ docs / lambda-hierarchy.svg
lambda-hierarchy.svg
  1  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1400">
  2    <defs>
  3      <pattern id="grid" width="64" height="64" patternUnits="userSpaceOnUse">
  4        <path d="M 64 0 L 0 0 0 64" fill="none" stroke="#596775" stroke-width="0.5" opacity="0.15"/>
  5      </pattern>
  6      <marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
  7        <path d="M0,0 L0,6 L9,3 z" fill="#54aeff"/>
  8      </marker>
  9      <marker id="arrowGray" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
 10        <path d="M0,0 L0,6 L9,3 z" fill="#596775"/>
 11      </marker>
 12      <linearGradient id="cubeGrad" x1="0%" y1="0%" x2="100%" y2="100%">
 13        <stop offset="0%" stop-color="#54aeff" stop-opacity="0.3"/>
 14        <stop offset="100%" stop-color="#111417" stop-opacity="0"/>
 15      </linearGradient>
 16    </defs>
 17    
 18    <rect width="1920" height="1400" fill="#111417"/>
 19    <rect width="1920" height="1400" fill="url(#grid)"/>
 20    
 21    <!-- Title -->
 22    <text x="960" y="60" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="48" font-weight="600" fill="#80ccff">The Lambda Hierarchy</text>
 23    <text x="960" y="100" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="20" fill="#596775">From Untyped to CIC · A Map of Type-Theoretic Foundations</text>
 24    
 25    <!-- Lambda Cube Legend -->
 26    <g transform="translate(1500, 130)">
 27      <rect x="0" y="0" width="380" height="130" rx="6" fill="#111417" stroke="#596775" stroke-width="1"/>
 28      <text x="190" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#80ccff">Barendregt's Lambda Cube</text>
 29      <text x="15" y="50" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#54aeff">λ2</text>
 30      <text x="45" y="50" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Terms → Types (polymorphism)</text>
 31      <text x="15" y="70" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#80ccff">λω</text>
 32      <text x="45" y="70" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Types → Types (type operators)</text>
 33      <text x="15" y="90" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#b6e3ff">λΠ</text>
 34      <text x="45" y="90" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Terms → Types (dependent types)</text>
 35      <text x="15" y="115" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">CoC = λ2 + λω + λΠ (all three)</text>
 36    </g>
 37  
 38    <!-- TIER 0: Untyped -->
 39    <g transform="translate(100, 160)">
 40      <rect x="0" y="0" width="1300" height="120" rx="8" fill="#111417" stroke="#596775" stroke-width="2"/>
 41      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="24" fill="#596775">Untyped Lambda Calculus</text>
 42      <text x="30" y="60" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#596775">λx.M | M N | x — No static type checking, everything is a function</text>
 43      
 44      <g transform="translate(30, 75)">
 45        <rect x="0" y="0" width="90" height="30" rx="4" fill="#111417" stroke="#596775"/>
 46        <text x="45" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Scheme</text>
 47      </g>
 48      <g transform="translate(130, 75)">
 49        <rect x="0" y="0" width="70" height="30" rx="4" fill="#111417" stroke="#596775"/>
 50        <text x="35" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Lisp</text>
 51      </g>
 52      <g transform="translate(210, 75)">
 53        <rect x="0" y="0" width="80" height="30" rx="4" fill="#111417" stroke="#596775"/>
 54        <text x="40" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Erlang</text>
 55      </g>
 56      <g transform="translate(300, 75)">
 57        <rect x="0" y="0" width="80" height="30" rx="4" fill="#111417" stroke="#596775"/>
 58        <text x="40" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Python</text>
 59      </g>
 60      <g transform="translate(390, 75)">
 61        <rect x="0" y="0" width="60" height="30" rx="4" fill="#111417" stroke="#596775"/>
 62        <text x="30" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Ruby</text>
 63      </g>
 64      <g transform="translate(460, 75)">
 65        <rect x="0" y="0" width="40" height="30" rx="4" fill="#111417" stroke="#596775"/>
 66        <text x="20" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">JS</text>
 67      </g>
 68      <g transform="translate(510, 75)">
 69        <rect x="0" y="0" width="60" height="30" rx="4" fill="#111417" stroke="#596775"/>
 70        <text x="30" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Bash</text>
 71      </g>
 72      
 73      <text x="650" y="100" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775" font-style="italic">Runtime dynamism. Types are lies we tell at 3am.</text>
 74    </g>
 75    
 76    <!-- Arrow up -->
 77    <line x1="750" y1="280" x2="750" y2="310" stroke="#596775" stroke-width="2" marker-end="url(#arrowGray)"/>
 78    
 79    <!-- TIER 1: STLC -->
 80    <g transform="translate(100, 320)">
 81      <rect x="0" y="0" width="1300" height="120" rx="8" fill="#111417" stroke="#54aeff" stroke-width="2"/>
 82      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="24" fill="#54aeff">Simply Typed Lambda Calculus (STLC)</text>
 83      <text x="30" y="60" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#596775">τ ::= α | τ → τ — Base types and function types. No polymorphism.</text>
 84      
 85      <g transform="translate(30, 75)">
 86        <rect x="0" y="0" width="120" height="30" rx="4" fill="#111417" stroke="#54aeff"/>
 87        <text x="60" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#54aeff">Go (pre-1.18)</text>
 88      </g>
 89      <g transform="translate(160, 75)">
 90        <rect x="0" y="0" width="50" height="30" rx="4" fill="#111417" stroke="#54aeff"/>
 91        <text x="25" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#54aeff">C</text>
 92      </g>
 93      <g transform="translate(220, 75)">
 94        <rect x="0" y="0" width="60" height="30" rx="4" fill="#111417" stroke="#54aeff"/>
 95        <text x="30" y="20" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#54aeff">Pascal</text>
 96      </g>
 97      
 98      <text x="350" y="100" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775" font-style="italic">Types exist. Copy-paste reigns supreme.</text>
 99    </g>
100    
101    <!-- Arrow up -->
102    <line x1="750" y1="440" x2="750" y2="470" stroke="#54aeff" stroke-width="2" marker-end="url(#arrow)"/>
103    
104    <!-- TIER 2: System F -->
105    <g transform="translate(100, 480)">
106      <rect x="0" y="0" width="1300" height="160" rx="8" fill="#111417" stroke="#54aeff" stroke-width="3"/>
107      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="24" fill="#54aeff">System F (λ2) — Polymorphic Lambda Calculus</text>
108      <text x="30" y="60" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#b6e3ff">∀α. α → α — Universal quantification over types. Parametric polymorphism.</text>
109      
110      <!-- Straylight languages -->
111      <g transform="translate(30, 80)">
112        <rect x="0" y="0" width="80" height="35" rx="4" fill="#0d1012" stroke="#54aeff" stroke-width="2"/>
113        <text x="40" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#54aeff">Rust</text>
114      </g>
115      <g transform="translate(120, 80)">
116        <rect x="0" y="0" width="120" height="35" rx="4" fill="#0d1012" stroke="#54aeff" stroke-width="2"/>
117        <text x="60" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#54aeff">TypeScript</text>
118      </g>
119      <g transform="translate(250, 80)">
120        <rect x="0" y="0" width="80" height="35" rx="4" fill="#0d1012" stroke="#54aeff" stroke-width="2"/>
121        <text x="40" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#54aeff">C++</text>
122      </g>
123      
124      <!-- Other System F languages -->
125      <g transform="translate(360, 80)">
126        <rect x="0" y="0" width="60" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
127        <text x="30" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Go</text>
128      </g>
129      <g transform="translate(430, 80)">
130        <rect x="0" y="0" width="70" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
131        <text x="35" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Java</text>
132      </g>
133      <g transform="translate(510, 80)">
134        <rect x="0" y="0" width="80" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
135        <text x="40" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Kotlin</text>
136      </g>
137      <g transform="translate(600, 80)">
138        <rect x="0" y="0" width="70" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
139        <text x="35" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Swift</text>
140      </g>
141      <g transform="translate(680, 80)">
142        <rect x="0" y="0" width="55" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
143        <text x="27" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">C#</text>
144      </g>
145      <g transform="translate(745, 80)">
146        <rect x="0" y="0" width="55" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
147        <text x="27" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">F#</text>
148      </g>
149      <g transform="translate(810, 80)">
150        <rect x="0" y="0" width="55" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
151        <text x="27" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Zig</text>
152      </g>
153      
154      <!-- Special: Elm -->
155      <g transform="translate(900, 80)">
156        <rect x="0" y="0" width="55" height="35" rx="4" fill="#111417" stroke="#7ec699"/>
157        <text x="27" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#7ec699">Elm</text>
158      </g>
159      
160      <text x="30" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775" font-style="italic">Generics. The industrial workhorse tier. Most production code lives here.</text>
161      <text x="730" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#7ec699">Elm: System F with no escape hatches. "If it compiles, it works."</text>
162    </g>
163    
164    <!-- Branch into two paths -->
165    <line x1="500" y1="640" x2="500" y2="680" stroke="#54aeff" stroke-width="2"/>
166    <line x1="1000" y1="640" x2="1000" y2="680" stroke="#80ccff" stroke-width="2"/>
167    
168    <!-- TIER 3a: System Fω (left branch) -->
169    <g transform="translate(100, 690)">
170      <rect x="0" y="0" width="600" height="160" rx="8" fill="#111417" stroke="#80ccff" stroke-width="2"/>
171      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="22" fill="#80ccff">System Fω — Type Operators</text>
172      <text x="30" y="58" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#b6e3ff">List : Type → Type — Higher-kinded types</text>
173      
174      <!-- Straylight -->
175      <g transform="translate(30, 75)">
176        <rect x="0" y="0" width="100" height="35" rx="4" fill="#0d1012" stroke="#80ccff" stroke-width="2"/>
177        <text x="50" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Haskell</text>
178      </g>
179      
180      <!-- Others -->
181      <g transform="translate(140, 75)">
182        <rect x="0" y="0" width="80" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
183        <text x="40" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">OCaml</text>
184      </g>
185      <g transform="translate(230, 75)">
186        <rect x="0" y="0" width="80" height="35" rx="4" fill="#111417" stroke="#80ccff"/>
187        <text x="40" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#80ccff">Scala 3</text>
188      </g>
189      <g transform="translate(320, 75)">
190        <rect x="0" y="0" width="110" height="35" rx="4" fill="#111417" stroke="#d19a66"/>
191        <text x="55" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#d19a66">PureScript</text>
192      </g>
193      
194      <text x="30" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775" font-style="italic">Functor, Monad, Applicative. The type-level DSL tier.</text>
195    </g>
196    
197    <!-- TIER 3b: LF/λΠ (right branch) -->
198    <g transform="translate(800, 690)">
199      <rect x="0" y="0" width="600" height="160" rx="8" fill="#111417" stroke="#b6e3ff" stroke-width="2"/>
200      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="22" fill="#b6e3ff">LF (λΠ) — Dependent Functions</text>
201      <text x="30" y="58" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#b6e3ff">Πn:Nat. Vec n — Types indexed by terms</text>
202      
203      <g transform="translate(30, 75)">
204        <rect x="0" y="0" width="70" height="35" rx="4" fill="#111417" stroke="#b6e3ff"/>
205        <text x="35" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#b6e3ff">Twelf</text>
206      </g>
207      <g transform="translate(110, 75)">
208        <rect x="0" y="0" width="80" height="35" rx="4" fill="#111417" stroke="#b6e3ff"/>
209        <text x="40" y="22" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#b6e3ff">Beluga</text>
210      </g>
211      
212      <text x="30" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775" font-style="italic">Metatheory. Proofs about proofs. The logical framework.</text>
213    </g>
214    
215    <!-- Converge arrows -->
216    <line x1="400" y1="850" x2="400" y2="890" stroke="#80ccff" stroke-width="2"/>
217    <line x1="1100" y1="850" x2="1100" y2="890" stroke="#b6e3ff" stroke-width="2"/>
218    <line x1="400" y1="890" x2="750" y2="890" stroke="#80ccff" stroke-width="2"/>
219    <line x1="1100" y1="890" x2="750" y2="890" stroke="#b6e3ff" stroke-width="2"/>
220    <line x1="750" y1="890" x2="750" y2="920" stroke="#54aeff" stroke-width="2" marker-end="url(#arrow)"/>
221    
222    <!-- TIER 4: CoC -->
223    <g transform="translate(100, 930)">
224      <rect x="0" y="0" width="1300" height="100" rx="8" fill="#111417" stroke="url(#cubeGrad)" stroke-width="3"/>
225      <rect x="0" y="0" width="1300" height="100" rx="8" fill="none" stroke="#54aeff" stroke-width="2"/>
226      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="22" fill="#54aeff">Calculus of Constructions (CoC)</text>
227      <text x="30" y="60" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="13" fill="#b6e3ff">λ2 + λω + λΠ — All three axes of the Lambda Cube. Propositions-as-types.</text>
228      
229      <text x="30" y="85" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775" font-style="italic">Foundational. The Curry-Howard apex. No inhabitants yet.</text>
230    </g>
231    
232    <!-- Arrow up -->
233    <line x1="750" y1="1030" x2="750" y2="1060" stroke="#54aeff" stroke-width="2" marker-end="url(#arrow)"/>
234    
235    <!-- TIER 5: CIC -->
236    <g transform="translate(100, 1070)">
237      <rect x="0" y="0" width="1300" height="180" rx="8" fill="#111417" stroke="#54aeff" stroke-width="3"/>
238      <text x="30" y="35" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="24" fill="#54aeff">Calculus of Inductive Constructions (CIC)</text>
239      <text x="30" y="60" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#b6e3ff">CoC + Inductive Types + Universe Hierarchy — The proof assistant foundation</text>
240      
241      <g transform="translate(30, 80)">
242        <rect x="0" y="0" width="120" height="40" rx="4" fill="#0d1012" stroke="#54aeff" stroke-width="2"/>
243        <text x="60" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#54aeff">Coq/Rocq</text>
244      </g>
245      <g transform="translate(160, 80)">
246        <rect x="0" y="0" width="100" height="40" rx="4" fill="#0d1012" stroke="#54aeff" stroke-width="2"/>
247        <text x="50" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#54aeff">Lean 4</text>
248      </g>
249      <g transform="translate(270, 80)">
250        <rect x="0" y="0" width="80" height="40" rx="4" fill="#111417" stroke="#80ccff"/>
251        <text x="40" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#80ccff">Agda</text>
252      </g>
253      <g transform="translate(360, 80)">
254        <rect x="0" y="0" width="90" height="40" rx="4" fill="#111417" stroke="#80ccff"/>
255        <text x="45" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#80ccff">Idris 2</text>
256      </g>
257      
258      <text x="30" y="160" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775" font-style="italic">"Programs are proofs. Types are theorems. Compilation is verification."</text>
259      <text x="750" y="160" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#54aeff">The shape_pos : shape > 0 proof obligation lives here.</text>
260    </g>
261    
262    <!-- Side note: Nix -->
263    <g transform="translate(1500, 690)">
264      <rect x="0" y="0" width="380" height="160" rx="8" fill="#111417" stroke="#7ec699" stroke-width="2"/>
265      <text x="190" y="30" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="18" fill="#7ec699">Straylight Outlier: Nix</text>
266      <text x="20" y="55" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Lazy, pure, functional DSL</text>
267      <text x="20" y="75" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Untyped at its core (dynamic)</text>
268      <text x="20" y="95" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">But: derivations are pure functions</text>
269      <text x="20" y="115" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">Reproducibility by construction</text>
270      <text x="20" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#7ec699" font-style="italic">The build system as theorem prover.</text>
271    </g>
272    
273    <!-- PureScript vs Elm note -->
274    <g transform="translate(1500, 870)">
275      <rect x="0" y="0" width="380" height="140" rx="8" fill="#111417" stroke="#d19a66" stroke-width="1" stroke-dasharray="5,3"/>
276      <text x="190" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="16" fill="#d19a66">PureScript vs Elm</text>
277      <text x="20" y="50" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#d19a66">PureScript:</text>
278      <text x="100" y="50" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">Full Fω, HKT, type classes</text>
279      <text x="100" y="65" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">FFI escape hatch, row types</text>
280      <text x="20" y="90" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#7ec699">Elm:</text>
281      <text x="100" y="90" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">Intentionally System F only</text>
282      <text x="100" y="105" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">No type classes, no HKT, no FFI</text>
283      <text x="20" y="130" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="10" fill="#596775" font-style="italic">Simplicity vs power. The eternal trade.</text>
284    </g>
285    
286    <!-- Practical notes box -->
287    <g transform="translate(1500, 1030)">
288      <rect x="0" y="0" width="380" height="220" rx="8" fill="#111417" stroke="#596775" stroke-width="1"/>
289      <text x="190" y="25" text-anchor="middle" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="16" fill="#80ccff">Practical Reality</text>
290      
291      <text x="20" y="55" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#54aeff">Rust:</text>
292      <text x="70" y="55" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">System F + affine types (ownership)</text>
293      
294      <text x="20" y="80" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#54aeff">TypeScript:</text>
295      <text x="110" y="80" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">Unsound. Gradual typing.</text>
296      
297      <text x="20" y="105" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#54aeff">Haskell:</text>
298      <text x="90" y="105" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">Fω + GADTs + DataKinds</text>
299      <text x="90" y="120" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">(creeping toward dependent types)</text>
300      
301      <text x="20" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#54aeff">C++:</text>
302      <text x="60" y="145" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">Templates are Turing-complete</text>
303      <text x="60" y="160" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">(accidental type-level programming)</text>
304      
305      <text x="20" y="185" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#54aeff">Zig:</text>
306      <text x="60" y="185" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">comptime ≈ dependent types</text>
307      <text x="60" y="200" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="11" fill="#596775">(without the formalism)</text>
308    </g>
309    
310    <!-- Footer -->
311    <text x="100" y="1360" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#596775">"Villa Straylight was a body grown in upon itself. Each space in some way secret, with a morbid grandiosity."</text>
312    <text x="100" y="1380" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="12" fill="#596775">— Types are the rectilinear chambers. The question is how deep you can go.</text>
313    
314    <text x="1870" y="1370" text-anchor="end" font-family="Berkeley Mono, SF Mono, Consolas, monospace" font-size="14" fill="#596775" opacity="0.6">razorgirl · λ-hierarchy · 2026</text>
315  </svg>