summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chapter04/docs/lattice.gv29
-rw-r--r--chapter04/docs/lattice.svg390
-rw-r--r--chapter06/docs/lattice.gv29
-rw-r--r--chapter06/docs/lattice.svg412
-rw-r--r--chapter10/docs/lattice.gv210
-rw-r--r--chapter10/docs/lattice.svg1052
6 files changed, 1105 insertions, 1017 deletions
diff --git a/chapter04/docs/lattice.gv b/chapter04/docs/lattice.gv
index 1f286530..29a53b0a 100644
--- a/chapter04/docs/lattice.gv
+++ b/chapter04/docs/lattice.gv
@@ -4,13 +4,13 @@ digraph Lattice {
node [shape=circle, style=filled, fillcolor=lightblue];
nodesep=0.6;
- TOP [label="⊤"];
- BOT [label="⊥"];
+ TOP [label="⊤" , fillcolor=black, fontcolor=white];
+ BOT [label="⊥", fillcolor=black, fontcolor=white];
- CTRL [label="Ctrl"];
+ CTRL [label="Ctrl", fillcolor=yellow];
- INT_TOP [label="IntTop"];
- INT_BOT [label="IntBot"];
+ INT_TOP [label="⊤ :Int"];
+ INT_BOT [label="⊥ :Int"];
INT_MIN [label="-n"];
INT_MINDOTS [label="..." shape=none style=none];
@@ -20,7 +20,7 @@ digraph Lattice {
INT_MAXDOTS [label="..." shape=none style=none];
INT_MAX [label="+n"];
- TUPLE [label="TUPLE"];
+ TUPLE [label="TUPLE", fillcolor=pink];
// Define edges
edge [arrowhead=none];
@@ -44,20 +44,21 @@ digraph Lattice {
INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis];
- TOP -> TUPLE;
- TUPLE -> BOT;
+ TOP -> TUPLE;
+ TUPLE -> BOT;
- TOP -> CTRL;
- CTRL -> BOT;
+ TOP -> CTRL;
+ CTRL -> BOT;
// Additional customization
{rank=same; TOP}
{rank=same; INT_TOP}
- {rank=same; CTRL; INT_MIN; INT_MINDOTS;
- INT_MINUS; INT_ZERO;
- INT_PLUS; INT_MAXDOTS;
- INT_MAX; TUPLE}
+ {rank=same;
+ CTRL;
+ INT_MIN; INT_MINDOTS; INT_MINUS; INT_ZERO; INT_PLUS; INT_MAXDOTS; INT_MAX;
+ TUPLE
+ }
{rank=same; INT_BOT}
{rank=same; BOT;}
}
diff --git a/chapter04/docs/lattice.svg b/chapter04/docs/lattice.svg
index 0d403c20..1cab7681 100644
--- a/chapter04/docs/lattice.svg
+++ b/chapter04/docs/lattice.svg
@@ -1,195 +1,195 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.43.0 (0)
- -->
-<!-- Title: Lattice Pages: 1 -->
-<svg width="802pt" height="478pt"
- viewBox="0.00 0.00 802.14 478.27" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 474.27)">
-<title>Lattice</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-474.27 798.14,-474.27 798.14,4 -4,4"/>
-<!-- TOP -->
-<g id="node1" class="node">
-<title>TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="377.6" cy="-450.77" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="377.6" y="-447.07" font-family="Times,serif" font-size="14.00">⊤</text>
-</g>
-<!-- CTRL -->
-<g id="node3" class="node">
-<title>CTRL</title>
-<ellipse fill="lightblue" stroke="black" cx="28.6" cy="-235.14" rx="28.7" ry="28.7"/>
-<text text-anchor="middle" x="28.6" y="-231.44" font-family="Times,serif" font-size="14.00">Ctrl</text>
-</g>
-<!-- TOP&#45;&gt;CTRL -->
-<g id="edge25" class="edge">
-<title>TOP&#45;&gt;CTRL</title>
-<path fill="none" stroke="black" d="M360.76,-440.37C304.12,-405.37 120.24,-291.76 53.28,-250.38"/>
-</g>
-<!-- INT_TOP -->
-<g id="node4" class="node">
-<title>INT_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="377.6" cy="-354.98" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="377.6" y="-351.28" font-family="Times,serif" font-size="14.00">IntTop</text>
-</g>
-<!-- TOP&#45;&gt;INT_TOP -->
-<g id="edge1" class="edge">
-<title>TOP&#45;&gt;INT_TOP</title>
-<path fill="none" stroke="black" d="M377.6,-431.24C377.6,-420.99 377.6,-407.84 377.6,-395.42"/>
-</g>
-<!-- TUPLE -->
-<g id="node13" class="node">
-<title>TUPLE</title>
-<ellipse fill="lightblue" stroke="black" cx="750.6" cy="-235.14" rx="43.59" ry="43.59"/>
-<text text-anchor="middle" x="750.6" y="-231.44" font-family="Times,serif" font-size="14.00">TUPLE</text>
-</g>
-<!-- TOP&#45;&gt;TUPLE -->
-<g id="edge23" class="edge">
-<title>TOP&#45;&gt;TUPLE</title>
-<path fill="none" stroke="black" d="M394.59,-440.95C451.03,-408.32 633.13,-303.05 712.75,-257.02"/>
-</g>
-<!-- BOT -->
-<g id="node2" class="node">
-<title>BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="377.6" cy="-19.5" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="377.6" y="-15.8" font-family="Times,serif" font-size="14.00">⊥</text>
-</g>
-<!-- CTRL&#45;&gt;BOT -->
-<g id="edge26" class="edge">
-<title>CTRL&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M53.14,-219.97C120.01,-178.65 304.22,-64.84 360.83,-29.86"/>
-</g>
-<!-- INT_MIN -->
-<g id="node6" class="node">
-<title>INT_MIN</title>
-<ellipse fill="lightblue" stroke="black" cx="119.6" cy="-235.14" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="119.6" y="-231.44" font-family="Times,serif" font-size="14.00">&#45;n</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MIN -->
-<g id="edge2" class="edge">
-<title>INT_TOP&#45;&gt;INT_MIN</title>
-<path fill="none" stroke="black" d="M341.18,-337.34C284.92,-311.65 179.02,-263.28 137.21,-244.18"/>
-</g>
-<!-- INT_MINDOTS -->
-<g id="node7" class="node">
-<title>INT_MINDOTS</title>
-<text text-anchor="middle" x="208.6" y="-231.44" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
-<g id="edge3" class="edge">
-<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
-<path fill="none" stroke="black" d="M345.01,-331.26C312.3,-308.45 262.65,-273.83 233.14,-253.25"/>
-</g>
-<!-- INT_MINUS -->
-<g id="node8" class="node">
-<title>INT_MINUS</title>
-<ellipse fill="lightblue" stroke="black" cx="297.6" cy="-235.14" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="297.6" y="-231.44" font-family="Times,serif" font-size="14.00">&#45;1</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MINUS -->
-<g id="edge4" class="edge">
-<title>INT_TOP&#45;&gt;INT_MINUS</title>
-<path fill="none" stroke="black" d="M355.31,-321.15C339.96,-298.54 320.25,-269.51 308.29,-251.89"/>
-</g>
-<!-- INT_ZERO -->
-<g id="node9" class="node">
-<title>INT_ZERO</title>
-<ellipse fill="lightblue" stroke="black" cx="377.6" cy="-235.14" rx="18" ry="18"/>
-<text text-anchor="middle" x="377.6" y="-231.44" font-family="Times,serif" font-size="14.00">0</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_ZERO -->
-<g id="edge5" class="edge">
-<title>INT_TOP&#45;&gt;INT_ZERO</title>
-<path fill="none" stroke="black" d="M377.6,-314.41C377.6,-293.68 377.6,-269.36 377.6,-253.39"/>
-</g>
-<!-- INT_PLUS -->
-<g id="node10" class="node">
-<title>INT_PLUS</title>
-<ellipse fill="lightblue" stroke="black" cx="456.6" cy="-235.14" rx="18" ry="18"/>
-<text text-anchor="middle" x="456.6" y="-231.44" font-family="Times,serif" font-size="14.00">1</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_PLUS -->
-<g id="edge6" class="edge">
-<title>INT_TOP&#45;&gt;INT_PLUS</title>
-<path fill="none" stroke="black" d="M399.6,-321.15C415.13,-298 435.17,-268.1 446.88,-250.63"/>
-</g>
-<!-- INT_MAXDOTS -->
-<g id="node11" class="node">
-<title>INT_MAXDOTS</title>
-<text text-anchor="middle" x="544.6" y="-231.44" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
-<g id="edge7" class="edge">
-<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M410.19,-330.98C442.56,-308.14 491.43,-273.65 520.47,-253.16"/>
-</g>
-<!-- INT_MAX -->
-<g id="node12" class="node">
-<title>INT_MAX</title>
-<ellipse fill="lightblue" stroke="black" cx="639.6" cy="-235.14" rx="24.9" ry="24.9"/>
-<text text-anchor="middle" x="639.6" y="-231.44" font-family="Times,serif" font-size="14.00">+n</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MAX -->
-<g id="edge8" class="edge">
-<title>INT_TOP&#45;&gt;INT_MAX</title>
-<path fill="none" stroke="black" d="M414.03,-337.59C469.15,-312.8 572.09,-266.5 617.32,-246.16"/>
-</g>
-<!-- INT_BOT -->
-<g id="node5" class="node">
-<title>INT_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="377.6" cy="-115.29" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="377.6" y="-111.59" font-family="Times,serif" font-size="14.00">IntBot</text>
-</g>
-<!-- INT_BOT&#45;&gt;BOT -->
-<g id="edge16" class="edge">
-<title>INT_BOT&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M377.6,-74.79C377.6,-62.37 377.6,-49.25 377.6,-39.01"/>
-</g>
-<!-- INT_MIN&#45;&gt;INT_BOT -->
-<g id="edge9" class="edge">
-<title>INT_MIN&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M137.33,-226.04C179.23,-206.9 285.02,-158.58 341.21,-132.91"/>
-</g>
-<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
-<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
-<g id="edge10" class="edge">
-<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M233.17,-217C262.65,-196.45 312.17,-161.91 344.87,-139.11"/>
-</g>
-<!-- INT_MINDOTS&#45;&gt;INT_MINUS -->
-<!-- INT_MINUS&#45;&gt;INT_BOT -->
-<g id="edge11" class="edge">
-<title>INT_MINUS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M308.39,-218.24C320.33,-200.65 339.91,-171.81 355.2,-149.29"/>
-</g>
-<!-- INT_MINUS&#45;&gt;INT_ZERO -->
-<!-- INT_ZERO&#45;&gt;INT_BOT -->
-<g id="edge12" class="edge">
-<title>INT_ZERO&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M377.6,-217C377.6,-201.04 377.6,-176.66 377.6,-155.88"/>
-</g>
-<!-- INT_ZERO&#45;&gt;INT_PLUS -->
-<!-- INT_PLUS&#45;&gt;INT_BOT -->
-<g id="edge13" class="edge">
-<title>INT_PLUS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M446.91,-219.69C435.21,-202.23 415.16,-172.33 399.63,-149.16"/>
-</g>
-<!-- INT_PLUS&#45;&gt;INT_MAXDOTS -->
-<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
-<g id="edge14" class="edge">
-<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M520.31,-217C491.28,-196.51 442.55,-162.13 410.24,-139.33"/>
-</g>
-<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
-<!-- INT_MAX&#45;&gt;INT_BOT -->
-<g id="edge15" class="edge">
-<title>INT_MAX&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M617.26,-224.09C572.09,-203.77 469.52,-157.64 414.35,-132.82"/>
-</g>
-<!-- TUPLE&#45;&gt;BOT -->
-<g id="edge24" class="edge">
-<title>TUPLE&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M712.78,-213.27C633.14,-167.23 450.85,-61.85 394.51,-29.27"/>
-</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 12.2.0 (20241103.1931)
+ -->
+<!-- Title: Lattice Pages: 1 -->
+<svg width="780pt" height="468pt"
+ viewBox="0.00 0.00 779.83 467.88" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 463.88)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-463.88 775.83,-463.88 775.83,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="370.25" cy="-438.75" rx="21.12" ry="21.12"/>
+<text text-anchor="middle" x="370.25" y="-433.33" font-family="Times New Roman,serif" font-size="14.00" fill="white">⊤</text>
+</g>
+<!-- CTRL -->
+<g id="node3" class="node">
+<title>CTRL</title>
+<ellipse fill="yellow" stroke="black" cx="25.25" cy="-229.94" rx="25.25" ry="25.25"/>
+<text text-anchor="middle" x="25.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">Ctrl</text>
+</g>
+<!-- TOP&#45;&gt;CTRL -->
+<g id="edge25" class="edge">
+<title>TOP&#45;&gt;CTRL</title>
+<path fill="none" stroke="black" d="M352.19,-427.82C293.82,-392.49 110.39,-281.47 47.03,-243.12"/>
+</g>
+<!-- INT_TOP -->
+<g id="node4" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="370.25" cy="-343.57" rx="38.06" ry="38.06"/>
+<text text-anchor="middle" x="370.25" y="-338.9" font-family="Times New Roman,serif" font-size="14.00">⊤ :Int</text>
+</g>
+<!-- TOP&#45;&gt;INT_TOP -->
+<g id="edge1" class="edge">
+<title>TOP&#45;&gt;INT_TOP</title>
+<path fill="none" stroke="black" d="M370.25,-417.53C370.25,-407.15 370.25,-394.16 370.25,-382.03"/>
+</g>
+<!-- TUPLE -->
+<g id="node13" class="node">
+<title>TUPLE</title>
+<ellipse fill="pink" stroke="black" cx="732.25" cy="-229.94" rx="39.58" ry="39.58"/>
+<text text-anchor="middle" x="732.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">TUPLE</text>
+</g>
+<!-- TOP&#45;&gt;TUPLE -->
+<g id="edge23" class="edge">
+<title>TOP&#45;&gt;TUPLE</title>
+<path fill="none" stroke="black" d="M388.95,-427.97C446.64,-394.69 622.49,-293.25 697.62,-249.91"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="370.25" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="middle" x="370.25" y="-15.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">⊥</text>
+</g>
+<!-- CTRL&#45;&gt;BOT -->
+<g id="edge26" class="edge">
+<title>CTRL&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M47.09,-216.72C110.49,-178.35 293.71,-67.45 352.13,-32.09"/>
+</g>
+<!-- INT_MIN -->
+<g id="node6" class="node">
+<title>INT_MIN</title>
+<ellipse fill="lightblue" stroke="black" cx="112.25" cy="-229.94" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="112.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">&#45;n</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MIN -->
+<g id="edge2" class="edge">
+<title>INT_TOP&#45;&gt;INT_MIN</title>
+<path fill="none" stroke="black" d="M335.45,-327.52C279.34,-303.24 170.92,-256.32 129.19,-238.27"/>
+</g>
+<!-- INT_MINDOTS -->
+<g id="node7" class="node">
+<title>INT_MINDOTS</title>
+<text text-anchor="middle" x="201.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
+<g id="edge3" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
+<path fill="none" stroke="black" d="M338.86,-321.84C306.59,-300.53 256.96,-267.74 226.95,-247.91"/>
+</g>
+<!-- INT_MINUS -->
+<g id="node8" class="node">
+<title>INT_MINUS</title>
+<ellipse fill="lightblue" stroke="black" cx="290.25" cy="-229.94" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="290.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">&#45;1</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MINUS -->
+<g id="edge4" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINUS</title>
+<path fill="none" stroke="black" d="M348.39,-312.07C332.94,-290.51 312.9,-262.55 300.84,-245.72"/>
+</g>
+<!-- INT_ZERO -->
+<g id="node9" class="node">
+<title>INT_ZERO</title>
+<ellipse fill="lightblue" stroke="black" cx="370.25" cy="-229.94" rx="18" ry="18"/>
+<text text-anchor="middle" x="370.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_ZERO -->
+<g id="edge5" class="edge">
+<title>INT_TOP&#45;&gt;INT_ZERO</title>
+<path fill="none" stroke="black" d="M370.25,-305.09C370.25,-285.83 370.25,-263.3 370.25,-248.18"/>
+</g>
+<!-- INT_PLUS -->
+<g id="node10" class="node">
+<title>INT_PLUS</title>
+<ellipse fill="lightblue" stroke="black" cx="449.25" cy="-229.94" rx="18" ry="18"/>
+<text text-anchor="middle" x="449.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_PLUS -->
+<g id="edge6" class="edge">
+<title>INT_TOP&#45;&gt;INT_PLUS</title>
+<path fill="none" stroke="black" d="M392.05,-311.77C407.39,-290.09 427.23,-262.05 439.06,-245.34"/>
+</g>
+<!-- INT_MAXDOTS -->
+<g id="node11" class="node">
+<title>INT_MAXDOTS</title>
+<text text-anchor="middle" x="537.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
+<g id="edge7" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
+<path fill="none" stroke="black" d="M401.66,-321.58C433.6,-300.23 482.46,-267.57 511.98,-247.83"/>
+</g>
+<!-- INT_MAX -->
+<g id="node12" class="node">
+<title>INT_MAX</title>
+<ellipse fill="lightblue" stroke="black" cx="628.25" cy="-229.94" rx="21.15" ry="21.15"/>
+<text text-anchor="middle" x="628.25" y="-224.89" font-family="Times New Roman,serif" font-size="14.00">+n</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MAX -->
+<g id="edge8" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAX</title>
+<path fill="none" stroke="black" d="M405.04,-327.52C460.06,-303.71 565.35,-258.16 608.78,-239.36"/>
+</g>
+<!-- INT_BOT -->
+<g id="node5" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="370.25" cy="-116.3" rx="38.06" ry="38.06"/>
+<text text-anchor="middle" x="370.25" y="-111.63" font-family="Times New Roman,serif" font-size="14.00">⊥ :Int</text>
+</g>
+<!-- INT_BOT&#45;&gt;BOT -->
+<g id="edge16" class="edge">
+<title>INT_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M370.25,-77.94C370.25,-65.89 370.25,-52.98 370.25,-42.62"/>
+</g>
+<!-- INT_MIN&#45;&gt;INT_BOT -->
+<g id="edge9" class="edge">
+<title>INT_MIN&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M129.18,-221.61C170.88,-203.57 279.24,-156.68 335.39,-132.39"/>
+</g>
+<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
+<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
+<g id="edge10" class="edge">
+<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M226.92,-211.98C256.83,-192.22 306.29,-159.56 338.57,-138.23"/>
+</g>
+<!-- INT_MINDOTS&#45;&gt;INT_MINUS -->
+<!-- INT_MINUS&#45;&gt;INT_BOT -->
+<g id="edge11" class="edge">
+<title>INT_MINUS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M300.71,-214.34C312.74,-197.56 332.82,-169.54 348.32,-147.91"/>
+</g>
+<!-- INT_MINUS&#45;&gt;INT_ZERO -->
+<!-- INT_ZERO&#45;&gt;INT_BOT -->
+<g id="edge12" class="edge">
+<title>INT_ZERO&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M370.25,-211.5C370.25,-196.29 370.25,-173.71 370.25,-154.48"/>
+</g>
+<!-- INT_ZERO&#45;&gt;INT_PLUS -->
+<!-- INT_PLUS&#45;&gt;INT_BOT -->
+<g id="edge13" class="edge">
+<title>INT_PLUS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M439.24,-214.8C427.37,-198.02 407.23,-169.57 391.77,-147.71"/>
+</g>
+<!-- INT_PLUS&#45;&gt;INT_MAXDOTS -->
+<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
+<g id="edge14" class="edge">
+<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M511.89,-211.98C482.32,-192.22 433.46,-159.56 401.56,-138.23"/>
+</g>
+<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
+<!-- INT_MAX&#45;&gt;INT_BOT -->
+<g id="edge15" class="edge">
+<title>INT_MAX&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M608.86,-220.55C565.5,-201.79 460.2,-156.22 405.12,-132.39"/>
+</g>
+<!-- TUPLE&#45;&gt;BOT -->
+<g id="edge24" class="edge">
+<title>TUPLE&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M697.54,-209.92C622.33,-166.53 446.47,-65.09 388.87,-31.87"/>
+</g>
+</g>
+</svg>
diff --git a/chapter06/docs/lattice.gv b/chapter06/docs/lattice.gv
index e533ad4a..782c2253 100644
--- a/chapter06/docs/lattice.gv
+++ b/chapter06/docs/lattice.gv
@@ -4,24 +4,24 @@ digraph Lattice {
node [shape=circle, style=filled, fillcolor=lightblue];
nodesep=0.6;
- TOP [label="⊤"];
- BOT [label="⊥"];
+ TOP [label="⊤" , fillcolor=black, fontcolor=white];
+ BOT [label="⊥", fillcolor=black, fontcolor=white];
- XCTRL [label="~Ctrl"];
- CTRL [label="Ctrl"];
+ XCTRL [label="⊤ :Ctrl", fillcolor=yellow];
+ CTRL [label="⊥ :Ctrl", fillcolor=yellow];
- INT_TOP [label="IntTop"];
- INT_BOT [label="IntBot"];
+ INT_TOP [label="⊤ :Int"];
+ INT_BOT [label="⊥ :Int"];
INT_MIN [label="-n"];
- INT_MINDOTS [label="..." shape=none style=none];
INT_MINUS [label="-1"];
+ INT_MINDOTS [label="..." shape=none style=none];
INT_ZERO [label="0"];
INT_PLUS [label="1"];
INT_MAXDOTS [label="..." shape=none style=none];
INT_MAX [label="+n"];
- TUPLE [label="TUPLE"];
+ TUPLE [label="TUPLE", fillcolor=pink];
// Define edges
edge [arrowhead=none];
@@ -45,20 +45,17 @@ digraph Lattice {
INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis];
- TOP -> TUPLE;
- TUPLE -> BOT;
+ TOP -> TUPLE;
+ TUPLE -> BOT;
- TOP -> XCTRL;
+ TOP -> XCTRL;
XCTRL -> CTRL;
- CTRL -> BOT;
+ CTRL -> BOT;
// Additional customization
{rank=same; TOP}
{rank=same; INT_TOP; XCTRL}
- {rank=same; INT_MIN; INT_MINDOTS;
- INT_MINUS; INT_ZERO;
- INT_PLUS; INT_MAXDOTS;
- INT_MAX; TUPLE}
+ {rank=same; INT_MIN; INT_MINDOTS; INT_MINUS; INT_ZERO; INT_PLUS; INT_MAXDOTS; INT_MAX; TUPLE }
{rank=same; INT_BOT; CTRL}
{rank=same; BOT;}
}
diff --git a/chapter06/docs/lattice.svg b/chapter06/docs/lattice.svg
index 713b54c1..f4929b41 100644
--- a/chapter06/docs/lattice.svg
+++ b/chapter06/docs/lattice.svg
@@ -1,206 +1,206 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.43.0 (0)
- -->
-<!-- Title: Lattice Pages: 1 -->
-<svg width="702pt" height="478pt"
- viewBox="0.00 0.00 702.04 478.27" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 474.27)">
-<title>Lattice</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-474.27 698.04,-474.27 698.04,4 -4,4"/>
-<!-- TOP -->
-<g id="node1" class="node">
-<title>TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="277.5" cy="-450.77" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="277.5" y="-447.07" font-family="Times,serif" font-size="14.00">⊤</text>
-</g>
-<!-- XCTRL -->
-<g id="node3" class="node">
-<title>XCTRL</title>
-<ellipse fill="lightblue" stroke="black" cx="46.5" cy="-354.98" rx="36.29" ry="36.29"/>
-<text text-anchor="middle" x="46.5" y="-351.28" font-family="Times,serif" font-size="14.00">~Ctrl</text>
-</g>
-<!-- TOP&#45;&gt;XCTRL -->
-<g id="edge25" class="edge">
-<title>TOP&#45;&gt;XCTRL</title>
-<path fill="none" stroke="black" d="M259.76,-442.57C221.3,-426.95 129.74,-389.78 80.01,-369.59"/>
-</g>
-<!-- INT_TOP -->
-<g id="node5" class="node">
-<title>INT_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="277.5" cy="-354.98" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="277.5" y="-351.28" font-family="Times,serif" font-size="14.00">IntTop</text>
-</g>
-<!-- TOP&#45;&gt;INT_TOP -->
-<g id="edge1" class="edge">
-<title>TOP&#45;&gt;INT_TOP</title>
-<path fill="none" stroke="black" d="M277.5,-431.24C277.5,-420.99 277.5,-407.84 277.5,-395.42"/>
-</g>
-<!-- TUPLE -->
-<g id="node14" class="node">
-<title>TUPLE</title>
-<ellipse fill="lightblue" stroke="black" cx="650.5" cy="-235.14" rx="43.59" ry="43.59"/>
-<text text-anchor="middle" x="650.5" y="-231.44" font-family="Times,serif" font-size="14.00">TUPLE</text>
-</g>
-<!-- TOP&#45;&gt;TUPLE -->
-<g id="edge23" class="edge">
-<title>TOP&#45;&gt;TUPLE</title>
-<path fill="none" stroke="black" d="M294.49,-440.95C350.93,-408.32 533.03,-303.05 612.65,-257.02"/>
-</g>
-<!-- BOT -->
-<g id="node2" class="node">
-<title>BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="277.5" cy="-19.5" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="277.5" y="-15.8" font-family="Times,serif" font-size="14.00">⊥</text>
-</g>
-<!-- CTRL -->
-<g id="node4" class="node">
-<title>CTRL</title>
-<ellipse fill="lightblue" stroke="black" cx="50.5" cy="-115.29" rx="28.7" ry="28.7"/>
-<text text-anchor="middle" x="50.5" y="-111.59" font-family="Times,serif" font-size="14.00">Ctrl</text>
-</g>
-<!-- XCTRL&#45;&gt;CTRL -->
-<g id="edge26" class="edge">
-<title>XCTRL&#45;&gt;CTRL</title>
-<path fill="none" stroke="black" d="M47.11,-318.58C47.9,-270.77 49.29,-187.82 50.02,-144.12"/>
-</g>
-<!-- CTRL&#45;&gt;BOT -->
-<g id="edge27" class="edge">
-<title>CTRL&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M76.98,-103.35C123.76,-84.02 219.83,-44.32 259.63,-27.88"/>
-</g>
-<!-- INT_MIN -->
-<g id="node7" class="node">
-<title>INT_MIN</title>
-<ellipse fill="lightblue" stroke="black" cx="19.5" cy="-235.14" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="19.5" y="-231.44" font-family="Times,serif" font-size="14.00">&#45;n</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MIN -->
-<g id="edge2" class="edge">
-<title>INT_TOP&#45;&gt;INT_MIN</title>
-<path fill="none" stroke="black" d="M241.08,-337.34C184.83,-311.65 78.92,-263.28 37.12,-244.18"/>
-</g>
-<!-- INT_MINDOTS -->
-<g id="node8" class="node">
-<title>INT_MINDOTS</title>
-<text text-anchor="middle" x="108.5" y="-231.44" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
-<g id="edge3" class="edge">
-<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
-<path fill="none" stroke="black" d="M244.91,-331.26C212.21,-308.45 162.56,-273.83 133.04,-253.25"/>
-</g>
-<!-- INT_MINUS -->
-<g id="node9" class="node">
-<title>INT_MINUS</title>
-<ellipse fill="lightblue" stroke="black" cx="197.5" cy="-235.14" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="197.5" y="-231.44" font-family="Times,serif" font-size="14.00">&#45;1</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MINUS -->
-<g id="edge4" class="edge">
-<title>INT_TOP&#45;&gt;INT_MINUS</title>
-<path fill="none" stroke="black" d="M255.21,-321.15C239.86,-298.54 220.15,-269.51 208.19,-251.89"/>
-</g>
-<!-- INT_ZERO -->
-<g id="node10" class="node">
-<title>INT_ZERO</title>
-<ellipse fill="lightblue" stroke="black" cx="277.5" cy="-235.14" rx="18" ry="18"/>
-<text text-anchor="middle" x="277.5" y="-231.44" font-family="Times,serif" font-size="14.00">0</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_ZERO -->
-<g id="edge5" class="edge">
-<title>INT_TOP&#45;&gt;INT_ZERO</title>
-<path fill="none" stroke="black" d="M277.5,-314.41C277.5,-293.68 277.5,-269.36 277.5,-253.39"/>
-</g>
-<!-- INT_PLUS -->
-<g id="node11" class="node">
-<title>INT_PLUS</title>
-<ellipse fill="lightblue" stroke="black" cx="356.5" cy="-235.14" rx="18" ry="18"/>
-<text text-anchor="middle" x="356.5" y="-231.44" font-family="Times,serif" font-size="14.00">1</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_PLUS -->
-<g id="edge6" class="edge">
-<title>INT_TOP&#45;&gt;INT_PLUS</title>
-<path fill="none" stroke="black" d="M299.5,-321.15C315.03,-298 335.07,-268.1 346.78,-250.63"/>
-</g>
-<!-- INT_MAXDOTS -->
-<g id="node12" class="node">
-<title>INT_MAXDOTS</title>
-<text text-anchor="middle" x="444.5" y="-231.44" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
-<g id="edge7" class="edge">
-<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M310.09,-330.98C342.46,-308.14 391.33,-273.65 420.37,-253.16"/>
-</g>
-<!-- INT_MAX -->
-<g id="node13" class="node">
-<title>INT_MAX</title>
-<ellipse fill="lightblue" stroke="black" cx="539.5" cy="-235.14" rx="24.9" ry="24.9"/>
-<text text-anchor="middle" x="539.5" y="-231.44" font-family="Times,serif" font-size="14.00">+n</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MAX -->
-<g id="edge8" class="edge">
-<title>INT_TOP&#45;&gt;INT_MAX</title>
-<path fill="none" stroke="black" d="M313.93,-337.59C369.05,-312.8 471.99,-266.5 517.22,-246.16"/>
-</g>
-<!-- INT_BOT -->
-<g id="node6" class="node">
-<title>INT_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="277.5" cy="-115.29" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="277.5" y="-111.59" font-family="Times,serif" font-size="14.00">IntBot</text>
-</g>
-<!-- INT_BOT&#45;&gt;BOT -->
-<g id="edge16" class="edge">
-<title>INT_BOT&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M277.5,-74.79C277.5,-62.37 277.5,-49.25 277.5,-39.01"/>
-</g>
-<!-- INT_MIN&#45;&gt;INT_BOT -->
-<g id="edge9" class="edge">
-<title>INT_MIN&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M37.23,-226.04C79.13,-206.9 184.92,-158.58 241.11,-132.91"/>
-</g>
-<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
-<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
-<g id="edge10" class="edge">
-<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M133.07,-217C162.55,-196.45 212.07,-161.91 244.77,-139.11"/>
-</g>
-<!-- INT_MINDOTS&#45;&gt;INT_MINUS -->
-<!-- INT_MINUS&#45;&gt;INT_BOT -->
-<g id="edge11" class="edge">
-<title>INT_MINUS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M208.29,-218.24C220.23,-200.65 239.81,-171.81 255.1,-149.29"/>
-</g>
-<!-- INT_MINUS&#45;&gt;INT_ZERO -->
-<!-- INT_ZERO&#45;&gt;INT_BOT -->
-<g id="edge12" class="edge">
-<title>INT_ZERO&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M277.5,-217C277.5,-201.04 277.5,-176.66 277.5,-155.88"/>
-</g>
-<!-- INT_ZERO&#45;&gt;INT_PLUS -->
-<!-- INT_PLUS&#45;&gt;INT_BOT -->
-<g id="edge13" class="edge">
-<title>INT_PLUS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M346.81,-219.69C335.11,-202.23 315.06,-172.33 299.53,-149.16"/>
-</g>
-<!-- INT_PLUS&#45;&gt;INT_MAXDOTS -->
-<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
-<g id="edge14" class="edge">
-<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M420.22,-217C391.18,-196.51 342.45,-162.13 310.14,-139.33"/>
-</g>
-<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
-<!-- INT_MAX&#45;&gt;INT_BOT -->
-<g id="edge15" class="edge">
-<title>INT_MAX&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M517.16,-224.09C471.99,-203.77 369.42,-157.64 314.25,-132.82"/>
-</g>
-<!-- TUPLE&#45;&gt;BOT -->
-<g id="edge24" class="edge">
-<title>TUPLE&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M612.68,-213.27C533.04,-167.23 350.75,-61.85 294.41,-29.27"/>
-</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 12.2.0 (20241103.1931)
+ -->
+<!-- Title: Lattice Pages: 1 -->
+<svg width="686pt" height="485pt"
+ viewBox="0.00 0.00 686.18 484.71" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 480.71)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-480.71 682.18,-480.71 682.18,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="276.6" cy="-455.59" rx="21.12" ry="21.12"/>
+<text text-anchor="middle" x="276.6" y="-450.16" font-family="Times New Roman,serif" font-size="14.00" fill="white">⊤</text>
+</g>
+<!-- XCTRL -->
+<g id="node3" class="node">
+<title>XCTRL</title>
+<ellipse fill="yellow" stroke="black" cx="44.6" cy="-356.2" rx="42.26" ry="42.26"/>
+<text text-anchor="middle" x="44.6" y="-351.53" font-family="Times New Roman,serif" font-size="14.00">⊤ :Ctrl</text>
+</g>
+<!-- TOP&#45;&gt;XCTRL -->
+<g id="edge25" class="edge">
+<title>TOP&#45;&gt;XCTRL</title>
+<path fill="none" stroke="black" d="M257.21,-446.45C219.1,-430.45 133.74,-394.62 83.54,-373.55"/>
+</g>
+<!-- INT_TOP -->
+<g id="node5" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="276.6" cy="-356.2" rx="38.06" ry="38.06"/>
+<text text-anchor="middle" x="276.6" y="-351.53" font-family="Times New Roman,serif" font-size="14.00">⊤ :Int</text>
+</g>
+<!-- TOP&#45;&gt;INT_TOP -->
+<g id="edge1" class="edge">
+<title>TOP&#45;&gt;INT_TOP</title>
+<path fill="none" stroke="black" d="M276.6,-434.41C276.6,-422.93 276.6,-408.19 276.6,-394.67"/>
+</g>
+<!-- TUPLE -->
+<g id="node14" class="node">
+<title>TUPLE</title>
+<ellipse fill="pink" stroke="black" cx="638.6" cy="-238.36" rx="39.58" ry="39.58"/>
+<text text-anchor="middle" x="638.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">TUPLE</text>
+</g>
+<!-- TOP&#45;&gt;TUPLE -->
+<g id="edge23" class="edge">
+<title>TOP&#45;&gt;TUPLE</title>
+<path fill="none" stroke="black" d="M295.05,-444.52C352.6,-409.98 529.5,-303.82 604.46,-258.84"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="276.6" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="middle" x="276.6" y="-15.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">⊥</text>
+</g>
+<!-- CTRL -->
+<g id="node4" class="node">
+<title>CTRL</title>
+<ellipse fill="yellow" stroke="black" cx="44.6" cy="-120.51" rx="42.26" ry="42.26"/>
+<text text-anchor="middle" x="44.6" y="-115.84" font-family="Times New Roman,serif" font-size="14.00">⊥ :Ctrl</text>
+</g>
+<!-- XCTRL&#45;&gt;CTRL -->
+<g id="edge26" class="edge">
+<title>XCTRL&#45;&gt;CTRL</title>
+<path fill="none" stroke="black" d="M44.6,-313.52C44.6,-270.94 44.6,-205.88 44.6,-163.27"/>
+</g>
+<!-- CTRL&#45;&gt;BOT -->
+<g id="edge27" class="edge">
+<title>CTRL&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M83.43,-103.21C133.61,-82.15 219.04,-46.28 257.2,-30.27"/>
+</g>
+<!-- INT_MIN -->
+<g id="node7" class="node">
+<title>INT_MIN</title>
+<ellipse fill="lightblue" stroke="black" cx="18.6" cy="-238.36" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="18.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">&#45;n</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MIN -->
+<g id="edge2" class="edge">
+<title>INT_TOP&#45;&gt;INT_MIN</title>
+<path fill="none" stroke="black" d="M242.07,-339.7C186.05,-314.54 77.4,-265.76 35.58,-246.98"/>
+</g>
+<!-- INT_MINUS -->
+<g id="node8" class="node">
+<title>INT_MINUS</title>
+<ellipse fill="lightblue" stroke="black" cx="196.6" cy="-238.36" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="196.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">&#45;1</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MINUS -->
+<g id="edge4" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINUS</title>
+<path fill="none" stroke="black" d="M255.16,-324.16C239.51,-301.5 219,-271.8 206.87,-254.23"/>
+</g>
+<!-- INT_MINDOTS -->
+<g id="node9" class="node">
+<title>INT_MINDOTS</title>
+<text text-anchor="middle" x="107.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
+<g id="edge3" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
+<path fill="none" stroke="black" d="M245.6,-333.95C213.01,-311.61 162.38,-276.91 132.36,-256.33"/>
+</g>
+<!-- INT_ZERO -->
+<g id="node10" class="node">
+<title>INT_ZERO</title>
+<ellipse fill="lightblue" stroke="black" cx="276.6" cy="-238.36" rx="18" ry="18"/>
+<text text-anchor="middle" x="276.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_ZERO -->
+<g id="edge5" class="edge">
+<title>INT_TOP&#45;&gt;INT_ZERO</title>
+<path fill="none" stroke="black" d="M276.6,-317.91C276.6,-297.4 276.6,-272.93 276.6,-256.82"/>
+</g>
+<!-- INT_PLUS -->
+<g id="node11" class="node">
+<title>INT_PLUS</title>
+<ellipse fill="lightblue" stroke="black" cx="355.6" cy="-238.36" rx="18" ry="18"/>
+<text text-anchor="middle" x="355.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_PLUS -->
+<g id="edge6" class="edge">
+<title>INT_TOP&#45;&gt;INT_PLUS</title>
+<path fill="none" stroke="black" d="M297.77,-324.16C313.31,-301.37 333.71,-271.45 345.66,-253.92"/>
+</g>
+<!-- INT_MAXDOTS -->
+<g id="node12" class="node">
+<title>INT_MAXDOTS</title>
+<text text-anchor="middle" x="443.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
+<g id="edge7" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
+<path fill="none" stroke="black" d="M307.62,-333.68C339.88,-311.3 389.71,-276.74 419.25,-256.25"/>
+</g>
+<!-- INT_MAX -->
+<g id="node13" class="node">
+<title>INT_MAX</title>
+<ellipse fill="lightblue" stroke="black" cx="534.6" cy="-238.36" rx="21.15" ry="21.15"/>
+<text text-anchor="middle" x="534.6" y="-233.31" font-family="Times New Roman,serif" font-size="14.00">+n</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MAX -->
+<g id="edge8" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAX</title>
+<path fill="none" stroke="black" d="M311.12,-339.7C366.18,-314.97 472.08,-267.43 515.4,-247.97"/>
+</g>
+<!-- INT_BOT -->
+<g id="node6" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="276.6" cy="-120.51" rx="38.06" ry="38.06"/>
+<text text-anchor="middle" x="276.6" y="-115.84" font-family="Times New Roman,serif" font-size="14.00">⊥ :Int</text>
+</g>
+<!-- INT_BOT&#45;&gt;BOT -->
+<g id="edge16" class="edge">
+<title>INT_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M276.6,-82.14C276.6,-68.73 276.6,-54.11 276.6,-42.65"/>
+</g>
+<!-- INT_MIN&#45;&gt;INT_BOT -->
+<g id="edge9" class="edge">
+<title>INT_MIN&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M35.52,-229.76C77.34,-210.98 186.17,-162.11 242.19,-136.96"/>
+</g>
+<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
+<!-- INT_MINUS&#45;&gt;INT_BOT -->
+<g id="edge11" class="edge">
+<title>INT_MINUS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M206.73,-222.68C218.92,-205.03 239.72,-174.92 255.46,-152.12"/>
+</g>
+<!-- INT_MINUS&#45;&gt;INT_ZERO -->
+<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
+<g id="edge10" class="edge">
+<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M132.17,-220.51C162.11,-199.99 212.71,-165.3 245.38,-142.91"/>
+</g>
+<!-- INT_MINDOTS&#45;&gt;INT_MINUS -->
+<!-- INT_ZERO&#45;&gt;INT_BOT -->
+<g id="edge12" class="edge">
+<title>INT_ZERO&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M276.6,-220.01C276.6,-203.86 276.6,-179.23 276.6,-158.64"/>
+</g>
+<!-- INT_ZERO&#45;&gt;INT_PLUS -->
+<!-- INT_PLUS&#45;&gt;INT_BOT -->
+<g id="edge13" class="edge">
+<title>INT_PLUS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M345.91,-223.15C333.96,-205.63 313.31,-175.35 297.65,-152.39"/>
+</g>
+<!-- INT_PLUS&#45;&gt;INT_MAXDOTS -->
+<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
+<g id="edge14" class="edge">
+<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M419.31,-220.51C389.82,-200.05 340.03,-165.51 307.74,-143.12"/>
+</g>
+<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
+<!-- INT_MAX&#45;&gt;INT_BOT -->
+<g id="edge15" class="edge">
+<title>INT_MAX&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M515.62,-228.84C472.45,-209.45 366.34,-161.81 311.17,-137.04"/>
+</g>
+<!-- TUPLE&#45;&gt;BOT -->
+<g id="edge24" class="edge">
+<title>TUPLE&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M604.54,-217.92C529.56,-172.93 352.32,-66.57 294.9,-32.11"/>
+</g>
+</g>
+</svg>
diff --git a/chapter10/docs/lattice.gv b/chapter10/docs/lattice.gv
index c074f1a4..5ac1bd5a 100644
--- a/chapter10/docs/lattice.gv
+++ b/chapter10/docs/lattice.gv
@@ -1,56 +1,32 @@
digraph Lattice {
+ compound = true;
// Define nodes
splines=false;
- node [shape=circle, style=filled, fillcolor=lightblue];
+ node [shape=circle, style=filled];
nodesep=0.6;
- TOP [label="⊤"];
- BOT [label="⊥"];
-
- XCTRL [label="~Ctrl"];
- CTRL [label="Ctrl"];
-
- INT_TOP [label="IntTop"];
- INT_BOT [label="IntBot"];
-
- INT_MIN [label="-n"];
- INT_MINDOTS [label="..." shape=none style=none];
- INT_ZERO [label="0"];
- INT_MAXDOTS [label="..." shape=none style=none];
- INT_MAX [label="+n"];
-
- TUPLE [label="TUPLE"];
-
- STRUCT_TOP [label="$TOP"];
- STRUCT_S1 [label="S1"];
- STRUCT_DOTS [label="..." shape=none style=none];
- STRUCT_SN [label="Sn"];
- STRUCT_BOT [label="$BOT"]
-
- PTR_TOP [label="*$TOP"];
- PTR_NULL [label="null"];
- PTR_VOIDPTR [label="*void"];
- PTR_S1 [label="*S1"];
- PTR_SDOTS [label="..." shape=none style=none];
- PTR_SN [label="*SN"];
- PTR_S1OPT [label="*S1?"];
- PTR_SOPTDOTS [label="..." shape=none style=none];
- PTR_SNOPT [label="*SN?"];
- PTR_BOT [label="*$BOT?"];
-
- MEM_TOP [label="MEM#TOP"];
- MEM_ALIAS1 [label="#1"];
- MEM_ALIAS2 [label="#2"];
- MEM_ALIASDOTS [label="..." shape=none style=none];
- MEM_ALIASN [label="#n"];
- MEM_BOT [label="MEM#BOT"];
-
- // Define edges
- edge [arrowhead=none];
-
- TOP -> XCTRL;
+ TOP [label=<<B>⊤ </B>>, fillcolor=black, fontcolor=white];
+ BOT [label=<<B>⊥</B>>, fillcolor=black, fontcolor=white];
+
+ // ----------------------
+ // Control
+ XCTRL [label=<<B>⊤ </B>:ctrl>, fillcolor=yellow, shape=oval];
+ CTRL [label=<<B>⊥</B>:ctrl>, fillcolor=yellow, shape=oval];
+
+ TOP -> XCTRL;
XCTRL -> CTRL;
- CTRL -> BOT;
+ CTRL -> BOT;
+
+ // ----------------------
+ // Integers
+ INT_TOP [label=<<B>⊤ </B>:int>, fillcolor=lightblue, shape=oval];
+ INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval];
+
+ INT_MIN [label="-n" , fillcolor=lightblue];
+ INT_MINDOTS [label="...", fillcolor=lightblue, shape=oval];
+ INT_ZERO [label="0" , fillcolor=lightblue];
+ INT_MAXDOTS [label="...", fillcolor=lightblue, shape=oval];
+ INT_MAX [label="+n" , fillcolor=lightblue];
TOP -> INT_TOP;
INT_TOP -> INT_MIN;
@@ -67,69 +43,127 @@ digraph Lattice {
INT_MIN -> INT_MINDOTS -> INT_ZERO -> INT_MAXDOTS -> INT_MAX [style=invis];
- TOP -> TUPLE;
- TUPLE -> BOT;
+ // ----------------------
+ // Pointers, just a boolean nil/not and a struct
+ PTR [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD BGCOLOR="green"><FONT color="white">*ptr</FONT></TD></TR>
+ <TR><TD BGCOLOR="lightgreen">struct</TD></TR>
+ </TABLE>
+ >];
+ PTR0 [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD BGCOLOR="green"><FONT color="white">*ptr?</FONT></TD></TR>
+ <TR><TD BGCOLOR="lightgreen">struct</TD></TR>
+ </TABLE>
+ >];
+
+ TOP -> PTR;
+ PTR -> PTR0;
+ PTR0 -> BOT;
+
+ // ----------------------
+ // Structs
+ STRUCT_TOP [label=<<B>⊤</B>:struct>, fillcolor=lightgreen, shape=oval];
+
+ STRUCT_S1 [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int:ptr</TD></TR>
+ </TABLE>
+ >];
+ STRUCT_S2 [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int:ptr</TD></TR>
+ <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int:ptr</TD></TR>
+ </TABLE>
+ >];
+ STRUCT_SN [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int:ptr</TD></TR>
+ <TR><TD BGCOLOR="lightgreen">... </TD><TD BGCOLOR="lightblue:green" gradientangle="315">int:ptr</TD></TR>
+ <TR><TD BGCOLOR="lightgreen">field</TD><TD BGCOLOR="lightblue:green" gradientangle="315">int:ptr</TD></TR>
+ </TABLE>
+ >];
+
+ STRUCT_BOT [label=<<B>⊥</B>:struct>, fillcolor=lightgreen, shape=oval]
TOP -> STRUCT_TOP;
STRUCT_TOP -> STRUCT_S1;
- STRUCT_TOP -> STRUCT_DOTS;
+ STRUCT_TOP -> STRUCT_S2;
STRUCT_TOP -> STRUCT_SN;
STRUCT_S1 -> STRUCT_BOT;
- STRUCT_DOTS -> STRUCT_BOT;
+ STRUCT_S2 -> STRUCT_BOT;
STRUCT_SN -> STRUCT_BOT;
STRUCT_BOT -> BOT;
- STRUCT_S1 -> STRUCT_DOTS -> STRUCT_SN [style=invis];
-
- TOP -> PTR_TOP;
- PTR_TOP -> PTR_S1;
- PTR_TOP -> PTR_SDOTS;
- PTR_TOP -> PTR_SN;
- PTR_TOP -> PTR_NULL;
- PTR_TOP -> PTR_VOIDPTR;
- PTR_NULL -> PTR_BOT;
- PTR_NULL -> PTR_S1OPT;
- PTR_NULL -> PTR_SOPTDOTS;
- PTR_NULL -> PTR_SNOPT;
- PTR_S1 -> PTR_S1OPT;
- PTR_S1 -> PTR_VOIDPTR;
- PTR_SDOTS -> PTR_SOPTDOTS;
- PTR_SDOTS -> PTR_VOIDPTR;
- PTR_SN -> PTR_SNOPT;
- PTR_SN -> PTR_VOIDPTR;
- PTR_VOIDPTR -> PTR_BOT;
- PTR_S1OPT -> PTR_BOT;
- PTR_SOPTDOTS -> PTR_BOT;
- PTR_SNOPT -> PTR_BOT;
- PTR_BOT -> BOT;
-
- PTR_S1 -> PTR_SDOTS -> PTR_SN [style=invis];
- PTR_S1OPT -> PTR_SOPTDOTS -> PTR_SNOPT [style=invis];
+ STRUCT_S1 -> STRUCT_S2 -> STRUCT_SN [style=invis];
+
+ // ----------------------
+ // Memory
+ MEM_TOP [label=<<B>⊤</B>:mem>, fillcolor=blue, fontcolor=white, shape=oval];
+ MEM_ALIAS1 [label="#1" , fillcolor=blue, fontcolor=white];
+ MEM_ALIASDOTS [label="..." , fillcolor=blue, fontcolor=white, shape=oval];
+ MEM_ALIASN [label="#n" , fillcolor=blue, fontcolor=white];
+ MEM_BOT [label=<<B>⊥</B>:mem>, fillcolor=blue, fontcolor=white, shape=oval];
TOP -> MEM_TOP;
MEM_TOP -> MEM_ALIAS1;
- MEM_TOP -> MEM_ALIAS2;
MEM_TOP -> MEM_ALIASDOTS;
MEM_TOP -> MEM_ALIASN;
MEM_ALIAS1 -> MEM_BOT;
- MEM_ALIAS2 -> MEM_BOT;
MEM_ALIASDOTS -> MEM_BOT;
MEM_ALIASN -> MEM_BOT;
MEM_BOT -> BOT;
- MEM_ALIAS1 -> MEM_ALIAS2 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis];
-
+ MEM_ALIAS1 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis];
+
+ // ----------------------
+ // Tuples
+
+ TUPLE_TOP [label=<<B>⊤</B>:tuple>, fillcolor=pink, shape=oval];
+
+ TUPLE1 [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TH><TD BGCOLOR="pink">Tuple</TD></TH>
+ <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR>
+ </TABLE>
+ >];
+ TUPLE2 [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TH><TD BGCOLOR="pink">Tuple</TD></TH>
+ <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR>
+ <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR>
+ </TABLE>
+ >];
+ TUPLEN [shape=none, fillcolor=none, label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TH><TD BGCOLOR="pink">Tuple</TD></TH>
+ <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR>
+ <TR><TD BGCOLOR="black" ><FONT color="white">...</FONT></TD></TR>
+ <TR><TD BGCOLOR="black" ><FONT color="white">type</FONT></TD></TR>
+ </TABLE>
+ >];
+
+ TUPLE_BOT [label=<<B>⊥</B>:tuple>, fillcolor=pink, shape=oval];
+
+ TOP -> TUPLE_TOP;
+ TUPLE_TOP -> TUPLE1;
+ TUPLE_TOP -> TUPLE2;
+ TUPLE_TOP -> TUPLEN;
+ TUPLE1 -> TUPLE_BOT;
+ TUPLE2 -> TUPLE_BOT;
+ TUPLEN -> TUPLE_BOT;
+ TUPLE_BOT -> BOT;
+
+ // ----------------------
// Additional customization
{rank=same; TOP;}
- {rank=same; INT_TOP; XCTRL; STRUCT_TOP; PTR_TOP; MEM_TOP;}
- {rank=same; PTR_S1; PTR_SDOTS; PTR_SN;}
+ {rank=same; INT_TOP; XCTRL; STRUCT_TOP; MEM_TOP; TUPLE_TOP}
{rank=same; INT_MIN; INT_MINDOTS;
INT_ZERO; INT_MAXDOTS;
- INT_MAX; TUPLE; STRUCT_S1; STRUCT_DOTS; STRUCT_SN;
- PTR_NULL; PTR_VOIDPTR;
- MEM_ALIAS1; MEM_ALIAS2;
+ INT_MAX; STRUCT_S1; STRUCT_S2; STRUCT_SN;
+ MEM_ALIAS1;
MEM_ALIASDOTS; MEM_ALIASN;}
- {rank=same; PTR_S1OPT; PTR_SOPTDOTS; PTR_SNOPT; }
- {rank=same; INT_BOT; CTRL; STRUCT_BOT; PTR_BOT; MEM_BOT;}
+ {rank=same; INT_BOT; CTRL; STRUCT_BOT; MEM_BOT; TUPLE_BOT}
{rank=same; BOT;}
}
diff --git a/chapter10/docs/lattice.svg b/chapter10/docs/lattice.svg
index 2fe05bbf..02f3ce69 100644
--- a/chapter10/docs/lattice.svg
+++ b/chapter10/docs/lattice.svg
@@ -1,498 +1,554 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
- "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<!-- Generated by graphviz version 2.43.0 (0)
- -->
-<!-- Title: Lattice Pages: 1 -->
-<svg width="1694pt" height="771pt"
- viewBox="0.00 0.00 1694.09 771.25" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 767.25)">
-<title>Lattice</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-767.25 1690.09,-767.25 1690.09,4 -4,4"/>
-<!-- TOP -->
-<g id="node1" class="node">
-<title>TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="582.4" cy="-743.75" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="582.4" y="-740.05" font-family="Times,serif" font-size="14.00">⊤</text>
-</g>
-<!-- XCTRL -->
-<g id="node3" class="node">
-<title>XCTRL</title>
-<ellipse fill="lightblue" stroke="black" cx="36.4" cy="-624.56" rx="36.29" ry="36.29"/>
-<text text-anchor="middle" x="36.4" y="-620.86" font-family="Times,serif" font-size="14.00">~Ctrl</text>
-</g>
-<!-- TOP&#45;&gt;XCTRL -->
-<g id="edge1" class="edge">
-<title>TOP&#45;&gt;XCTRL</title>
-<path fill="none" stroke="black" d="M563.28,-738.65C483.63,-721.55 177.35,-655.81 72.13,-633.23"/>
-</g>
-<!-- INT_TOP -->
-<g id="node5" class="node">
-<title>INT_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="270.4" cy="-624.56" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="270.4" y="-620.86" font-family="Times,serif" font-size="14.00">IntTop</text>
-</g>
-<!-- TOP&#45;&gt;INT_TOP -->
-<g id="edge4" class="edge">
-<title>TOP&#45;&gt;INT_TOP</title>
-<path fill="none" stroke="black" d="M564.27,-735.95C514.59,-717.28 375.46,-665.02 308,-639.69"/>
-</g>
-<!-- TUPLE -->
-<g id="node12" class="node">
-<title>TUPLE</title>
-<ellipse fill="lightblue" stroke="black" cx="520.4" cy="-386.83" rx="43.59" ry="43.59"/>
-<text text-anchor="middle" x="520.4" y="-383.13" font-family="Times,serif" font-size="14.00">TUPLE</text>
-</g>
-<!-- TOP&#45;&gt;TUPLE -->
-<g id="edge20" class="edge">
-<title>TOP&#45;&gt;TUPLE</title>
-<path fill="none" stroke="black" d="M579.02,-724.31C569.35,-668.67 541.41,-507.81 527.9,-429.99"/>
-</g>
-<!-- STRUCT_TOP -->
-<g id="node13" class="node">
-<title>STRUCT_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="676.4" cy="-624.56" rx="36.29" ry="36.29"/>
-<text text-anchor="middle" x="676.4" y="-620.86" font-family="Times,serif" font-size="14.00">$TOP</text>
-</g>
-<!-- TOP&#45;&gt;STRUCT_TOP -->
-<g id="edge22" class="edge">
-<title>TOP&#45;&gt;STRUCT_TOP</title>
-<path fill="none" stroke="black" d="M594.3,-727.91C609.22,-709.31 635.1,-677.04 653.82,-653.7"/>
-</g>
-<!-- PTR_TOP -->
-<g id="node18" class="node">
-<title>PTR_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="1045.4" cy="-624.56" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="1045.4" y="-620.86" font-family="Times,serif" font-size="14.00">*$TOP</text>
-</g>
-<!-- TOP&#45;&gt;PTR_TOP -->
-<g id="edge32" class="edge">
-<title>TOP&#45;&gt;PTR_TOP</title>
-<path fill="none" stroke="black" d="M601.12,-738.01C670.15,-720.54 911.28,-659.51 1006.4,-635.43"/>
-</g>
-<!-- MEM_TOP -->
-<g id="node28" class="node">
-<title>MEM_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="1471.4" cy="-624.56" rx="63.89" ry="63.89"/>
-<text text-anchor="middle" x="1471.4" y="-620.86" font-family="Times,serif" font-size="14.00">MEM#TOP</text>
-</g>
-<!-- TOP&#45;&gt;MEM_TOP -->
-<g id="edge57" class="edge">
-<title>TOP&#45;&gt;MEM_TOP</title>
-<path fill="none" stroke="black" d="M601.79,-740.2C708.57,-726.12 1226.52,-657.84 1408.23,-633.89"/>
-</g>
-<!-- BOT -->
-<g id="node2" class="node">
-<title>BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="607.4" cy="-19.5" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="607.4" y="-15.8" font-family="Times,serif" font-size="14.00">⊥</text>
-</g>
-<!-- CTRL -->
-<g id="node4" class="node">
-<title>CTRL</title>
-<ellipse fill="lightblue" stroke="black" cx="41.4" cy="-138.69" rx="28.7" ry="28.7"/>
-<text text-anchor="middle" x="41.4" y="-134.99" font-family="Times,serif" font-size="14.00">Ctrl</text>
-</g>
-<!-- XCTRL&#45;&gt;CTRL -->
-<g id="edge2" class="edge">
-<title>XCTRL&#45;&gt;CTRL</title>
-<path fill="none" stroke="black" d="M36.77,-588.04C37.73,-495.13 40.24,-251.2 41.1,-167.42"/>
-</g>
-<!-- CTRL&#45;&gt;BOT -->
-<g id="edge3" class="edge">
-<title>CTRL&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M69.46,-131.88C169.17,-111.23 504.8,-41.74 588.41,-24.43"/>
-</g>
-<!-- INT_MIN -->
-<g id="node7" class="node">
-<title>INT_MIN</title>
-<ellipse fill="lightblue" stroke="black" cx="49.4" cy="-386.83" rx="19.5" ry="19.5"/>
-<text text-anchor="middle" x="49.4" y="-383.13" font-family="Times,serif" font-size="14.00">&#45;n</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MIN -->
-<g id="edge5" class="edge">
-<title>INT_TOP&#45;&gt;INT_MIN</title>
-<path fill="none" stroke="black" d="M242.85,-594.93C194.95,-543.4 98.03,-439.14 62.68,-401.12"/>
-</g>
-<!-- INT_MINDOTS -->
-<g id="node8" class="node">
-<title>INT_MINDOTS</title>
-<text text-anchor="middle" x="138.4" y="-383.13" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
-<g id="edge6" class="edge">
-<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
-<path fill="none" stroke="black" d="M250.78,-589.23C222.27,-537.88 170.4,-444.47 148.54,-405.1"/>
-</g>
-<!-- INT_ZERO -->
-<g id="node9" class="node">
-<title>INT_ZERO</title>
-<ellipse fill="lightblue" stroke="black" cx="226.4" cy="-386.83" rx="18" ry="18"/>
-<text text-anchor="middle" x="226.4" y="-383.13" font-family="Times,serif" font-size="14.00">0</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_ZERO -->
-<g id="edge7" class="edge">
-<title>INT_TOP&#45;&gt;INT_ZERO</title>
-<path fill="none" stroke="black" d="M263.03,-584.77C253.34,-532.42 236.73,-442.64 229.69,-404.64"/>
-</g>
-<!-- INT_MAXDOTS -->
-<g id="node10" class="node">
-<title>INT_MAXDOTS</title>
-<text text-anchor="middle" x="314.4" y="-383.13" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
-<g id="edge8" class="edge">
-<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M277.76,-584.77C287.42,-532.56 303.98,-443.09 311.05,-404.93"/>
-</g>
-<!-- INT_MAX -->
-<g id="node11" class="node">
-<title>INT_MAX</title>
-<ellipse fill="lightblue" stroke="black" cx="409.4" cy="-386.83" rx="24.9" ry="24.9"/>
-<text text-anchor="middle" x="409.4" y="-383.13" font-family="Times,serif" font-size="14.00">+n</text>
-</g>
-<!-- INT_TOP&#45;&gt;INT_MAX -->
-<g id="edge9" class="edge">
-<title>INT_TOP&#45;&gt;INT_MAX</title>
-<path fill="none" stroke="black" d="M290.76,-589.74C319.94,-539.83 372.79,-449.44 396.85,-408.28"/>
-</g>
-<!-- INT_BOT -->
-<g id="node6" class="node">
-<title>INT_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="271.4" cy="-138.69" rx="40.09" ry="40.09"/>
-<text text-anchor="middle" x="271.4" y="-134.99" font-family="Times,serif" font-size="14.00">IntBot</text>
-</g>
-<!-- INT_BOT&#45;&gt;BOT -->
-<g id="edge15" class="edge">
-<title>INT_BOT&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M309.29,-124.48C381.37,-99.33 535.79,-45.47 588.96,-26.93"/>
-</g>
-<!-- INT_MIN&#45;&gt;INT_BOT -->
-<g id="edge10" class="edge">
-<title>INT_MIN&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M62.62,-372.05C98.18,-332.3 196.43,-222.49 244.37,-168.9"/>
-</g>
-<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
-<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
-<g id="edge11" class="edge">
-<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M148.18,-368.58C170.07,-327.73 223.37,-228.29 252.17,-174.56"/>
-</g>
-<!-- INT_MINDOTS&#45;&gt;INT_ZERO -->
-<!-- INT_ZERO&#45;&gt;INT_BOT -->
-<g id="edge12" class="edge">
-<title>INT_ZERO&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M229.63,-368.98C236.81,-329.42 254.2,-233.54 264.13,-178.78"/>
-</g>
-<!-- INT_ZERO&#45;&gt;INT_MAXDOTS -->
-<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
-<g id="edge13" class="edge">
-<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M311.23,-368.58C304.33,-328.74 287.77,-233.16 278.32,-178.61"/>
-</g>
-<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
-<!-- INT_MAX&#45;&gt;INT_BOT -->
-<g id="edge14" class="edge">
-<title>INT_MAX&#45;&gt;INT_BOT</title>
-<path fill="none" stroke="black" d="M397.39,-365.24C373.59,-322.44 320.2,-226.45 291.15,-174.21"/>
-</g>
-<!-- TUPLE&#45;&gt;BOT -->
-<g id="edge21" class="edge">
-<title>TUPLE&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M530.46,-344.33C549.34,-264.63 589.36,-95.64 602.85,-38.69"/>
-</g>
-<!-- STRUCT_S1 -->
-<g id="node14" class="node">
-<title>STRUCT_S1</title>
-<ellipse fill="lightblue" stroke="black" cx="629.4" cy="-386.83" rx="23" ry="23"/>
-<text text-anchor="middle" x="629.4" y="-383.13" font-family="Times,serif" font-size="14.00">S1</text>
-</g>
-<!-- STRUCT_TOP&#45;&gt;STRUCT_S1 -->
-<g id="edge23" class="edge">
-<title>STRUCT_TOP&#45;&gt;STRUCT_S1</title>
-<path fill="none" stroke="black" d="M669.31,-588.71C659.49,-539.03 642.03,-450.71 633.85,-409.35"/>
-</g>
-<!-- STRUCT_DOTS -->
-<g id="node15" class="node">
-<title>STRUCT_DOTS</title>
-<text text-anchor="middle" x="722.4" y="-383.13" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- STRUCT_TOP&#45;&gt;STRUCT_DOTS -->
-<g id="edge24" class="edge">
-<title>STRUCT_TOP&#45;&gt;STRUCT_DOTS</title>
-<path fill="none" stroke="black" d="M683.33,-588.71C693.3,-537.22 711.3,-444.2 718.88,-405.01"/>
-</g>
-<!-- STRUCT_SN -->
-<g id="node16" class="node">
-<title>STRUCT_SN</title>
-<ellipse fill="lightblue" stroke="black" cx="815.4" cy="-386.83" rx="23" ry="23"/>
-<text text-anchor="middle" x="815.4" y="-383.13" font-family="Times,serif" font-size="14.00">Sn</text>
-</g>
-<!-- STRUCT_TOP&#45;&gt;STRUCT_SN -->
-<g id="edge25" class="edge">
-<title>STRUCT_TOP&#45;&gt;STRUCT_SN</title>
-<path fill="none" stroke="black" d="M694.85,-592.99C723.95,-543.23 779.65,-447.97 803.78,-406.7"/>
-</g>
-<!-- STRUCT_S1&#45;&gt;STRUCT_DOTS -->
-<!-- STRUCT_BOT -->
-<g id="node17" class="node">
-<title>STRUCT_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="673.4" cy="-138.69" rx="36.29" ry="36.29"/>
-<text text-anchor="middle" x="673.4" y="-134.99" font-family="Times,serif" font-size="14.00">$BOT</text>
-</g>
-<!-- STRUCT_S1&#45;&gt;STRUCT_BOT -->
-<g id="edge26" class="edge">
-<title>STRUCT_S1&#45;&gt;STRUCT_BOT</title>
-<path fill="none" stroke="black" d="M633.38,-364.37C641.02,-321.3 657.78,-226.77 667,-174.76"/>
-</g>
-<!-- STRUCT_DOTS&#45;&gt;STRUCT_SN -->
-<!-- STRUCT_DOTS&#45;&gt;STRUCT_BOT -->
-<g id="edge27" class="edge">
-<title>STRUCT_DOTS&#45;&gt;STRUCT_BOT</title>
-<path fill="none" stroke="black" d="M718.79,-368.58C710.73,-327.73 691.09,-228.29 680.48,-174.56"/>
-</g>
-<!-- STRUCT_SN&#45;&gt;STRUCT_BOT -->
-<g id="edge28" class="edge">
-<title>STRUCT_SN&#45;&gt;STRUCT_BOT</title>
-<path fill="none" stroke="black" d="M804.02,-366.94C779.47,-324.04 721.36,-222.51 691.62,-170.54"/>
-</g>
-<!-- STRUCT_BOT&#45;&gt;BOT -->
-<g id="edge29" class="edge">
-<title>STRUCT_BOT&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M655.88,-106.59C643.28,-84.22 626.78,-54.92 616.64,-36.92"/>
-</g>
-<!-- PTR_NULL -->
-<g id="node19" class="node">
-<title>PTR_NULL</title>
-<ellipse fill="lightblue" stroke="black" cx="997.4" cy="-386.83" rx="28.7" ry="28.7"/>
-<text text-anchor="middle" x="997.4" y="-383.13" font-family="Times,serif" font-size="14.00">null</text>
-</g>
-<!-- PTR_TOP&#45;&gt;PTR_NULL -->
-<g id="edge36" class="edge">
-<title>PTR_TOP&#45;&gt;PTR_NULL</title>
-<path fill="none" stroke="black" d="M1037.42,-585.04C1027.71,-536.98 1011.58,-457.07 1003.06,-414.89"/>
-</g>
-<!-- PTR_VOIDPTR -->
-<g id="node20" class="node">
-<title>PTR_VOIDPTR</title>
-<ellipse fill="lightblue" stroke="black" cx="1190.4" cy="-386.83" rx="34.39" ry="34.39"/>
-<text text-anchor="middle" x="1190.4" y="-383.13" font-family="Times,serif" font-size="14.00">*void</text>
-</g>
-<!-- PTR_TOP&#45;&gt;PTR_VOIDPTR -->
-<g id="edge37" class="edge">
-<title>PTR_TOP&#45;&gt;PTR_VOIDPTR</title>
-<path fill="none" stroke="black" d="M1066.48,-589.99C1094.99,-543.24 1145.36,-460.66 1172.27,-416.55"/>
-</g>
-<!-- PTR_S1 -->
-<g id="node21" class="node">
-<title>PTR_S1</title>
-<ellipse fill="lightblue" stroke="black" cx="907.4" cy="-495.62" rx="27.1" ry="27.1"/>
-<text text-anchor="middle" x="907.4" y="-491.92" font-family="Times,serif" font-size="14.00">*S1</text>
-</g>
-<!-- PTR_TOP&#45;&gt;PTR_S1 -->
-<g id="edge33" class="edge">
-<title>PTR_TOP&#45;&gt;PTR_S1</title>
-<path fill="none" stroke="black" d="M1016.13,-596.64C989.39,-572.04 950.57,-536.33 927.27,-514.9"/>
-</g>
-<!-- PTR_SDOTS -->
-<g id="node22" class="node">
-<title>PTR_SDOTS</title>
-<text text-anchor="middle" x="1091.4" y="-491.92" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- PTR_TOP&#45;&gt;PTR_SDOTS -->
-<g id="edge34" class="edge">
-<title>PTR_TOP&#45;&gt;PTR_SDOTS</title>
-<path fill="none" stroke="black" d="M1058.83,-586.5C1067.52,-562.5 1078.44,-532.36 1085.17,-513.8"/>
-</g>
-<!-- PTR_SN -->
-<g id="node23" class="node">
-<title>PTR_SN</title>
-<ellipse fill="lightblue" stroke="black" cx="1277.4" cy="-495.62" rx="29.5" ry="29.5"/>
-<text text-anchor="middle" x="1277.4" y="-491.92" font-family="Times,serif" font-size="14.00">*SN</text>
-</g>
-<!-- PTR_TOP&#45;&gt;PTR_SN -->
-<g id="edge35" class="edge">
-<title>PTR_TOP&#45;&gt;PTR_SN</title>
-<path fill="none" stroke="black" d="M1080.38,-604.42C1127.6,-578.58 1210.58,-533.18 1252.16,-510.43"/>
-</g>
-<!-- PTR_S1OPT -->
-<g id="node24" class="node">
-<title>PTR_S1OPT</title>
-<ellipse fill="lightblue" stroke="black" cx="900.4" cy="-272.83" rx="32.49" ry="32.49"/>
-<text text-anchor="middle" x="900.4" y="-269.13" font-family="Times,serif" font-size="14.00">*S1?</text>
-</g>
-<!-- PTR_NULL&#45;&gt;PTR_S1OPT -->
-<g id="edge39" class="edge">
-<title>PTR_NULL&#45;&gt;PTR_S1OPT</title>
-<path fill="none" stroke="black" d="M979.15,-364.76C962.69,-345.75 938.48,-317.8 921.25,-297.91"/>
-</g>
-<!-- PTR_SOPTDOTS -->
-<g id="node25" class="node">
-<title>PTR_SOPTDOTS</title>
-<text text-anchor="middle" x="1089.4" y="-269.13" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- PTR_NULL&#45;&gt;PTR_SOPTDOTS -->
-<g id="edge40" class="edge">
-<title>PTR_NULL&#45;&gt;PTR_SOPTDOTS</title>
-<path fill="none" stroke="black" d="M1015.14,-364.23C1032.68,-342.87 1059.18,-310.62 1075.32,-290.96"/>
-</g>
-<!-- PTR_SNOPT -->
-<g id="node26" class="node">
-<title>PTR_SNOPT</title>
-<ellipse fill="lightblue" stroke="black" cx="1193.4" cy="-272.83" rx="34.39" ry="34.39"/>
-<text text-anchor="middle" x="1193.4" y="-269.13" font-family="Times,serif" font-size="14.00">*SN?</text>
-</g>
-<!-- PTR_NULL&#45;&gt;PTR_SNOPT -->
-<g id="edge41" class="edge">
-<title>PTR_NULL&#45;&gt;PTR_SNOPT</title>
-<path fill="none" stroke="black" d="M1021.82,-371.87C1057.84,-351.29 1125.11,-312.85 1163.86,-290.71"/>
-</g>
-<!-- PTR_BOT -->
-<g id="node27" class="node">
-<title>PTR_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="1043.4" cy="-138.69" rx="46.29" ry="46.29"/>
-<text text-anchor="middle" x="1043.4" y="-134.99" font-family="Times,serif" font-size="14.00">*$BOT?</text>
-</g>
-<!-- PTR_NULL&#45;&gt;PTR_BOT -->
-<g id="edge38" class="edge">
-<title>PTR_NULL&#45;&gt;PTR_BOT</title>
-<path fill="none" stroke="black" d="M1002.67,-358.36C1010.56,-315.84 1025.48,-235.32 1034.91,-184.46"/>
-</g>
-<!-- PTR_VOIDPTR&#45;&gt;PTR_BOT -->
-<g id="edge48" class="edge">
-<title>PTR_VOIDPTR&#45;&gt;PTR_BOT</title>
-<path fill="none" stroke="black" d="M1172.67,-356.89C1146.24,-312.3 1096.5,-228.33 1067.02,-178.56"/>
-</g>
-<!-- PTR_S1&#45;&gt;PTR_VOIDPTR -->
-<g id="edge43" class="edge">
-<title>PTR_S1&#45;&gt;PTR_VOIDPTR</title>
-<path fill="none" stroke="black" d="M933.01,-484.95C984.71,-465.44 1101.45,-421.39 1158.2,-399.97"/>
-</g>
-<!-- PTR_S1&#45;&gt;PTR_SDOTS -->
-<!-- PTR_S1&#45;&gt;PTR_S1OPT -->
-<g id="edge42" class="edge">
-<title>PTR_S1&#45;&gt;PTR_S1OPT</title>
-<path fill="none" stroke="black" d="M906.54,-468.3C905.25,-427.17 902.8,-349.47 901.42,-305.44"/>
-</g>
-<!-- PTR_SDOTS&#45;&gt;PTR_VOIDPTR -->
-<g id="edge45" class="edge">
-<title>PTR_SDOTS&#45;&gt;PTR_VOIDPTR</title>
-<path fill="none" stroke="black" d="M1107.3,-477.46C1123.48,-460.01 1148.73,-432.78 1167.15,-412.91"/>
-</g>
-<!-- PTR_SDOTS&#45;&gt;PTR_SN -->
-<!-- PTR_SDOTS&#45;&gt;PTR_SOPTDOTS -->
-<g id="edge44" class="edge">
-<title>PTR_SDOTS&#45;&gt;PTR_SOPTDOTS</title>
-<path fill="none" stroke="black" d="M1091.23,-477.39C1090.86,-435.51 1089.94,-332.83 1089.56,-291"/>
-</g>
-<!-- PTR_SN&#45;&gt;PTR_VOIDPTR -->
-<g id="edge47" class="edge">
-<title>PTR_SN&#45;&gt;PTR_VOIDPTR</title>
-<path fill="none" stroke="black" d="M1259.37,-472.49C1245.53,-455.51 1226.39,-432.01 1211.78,-414.07"/>
-</g>
-<!-- PTR_SN&#45;&gt;PTR_SNOPT -->
-<g id="edge46" class="edge">
-<title>PTR_SN&#45;&gt;PTR_SNOPT</title>
-<path fill="none" stroke="black" d="M1266.93,-467.85C1251.36,-426.56 1222.17,-349.14 1205.63,-305.29"/>
-</g>
-<!-- PTR_S1OPT&#45;&gt;PTR_SOPTDOTS -->
-<!-- PTR_S1OPT&#45;&gt;PTR_BOT -->
-<g id="edge49" class="edge">
-<title>PTR_S1OPT&#45;&gt;PTR_BOT</title>
-<path fill="none" stroke="black" d="M924.01,-250.01C947.41,-228.39 983.48,-195.06 1009.85,-170.69"/>
-</g>
-<!-- PTR_SOPTDOTS&#45;&gt;PTR_SNOPT -->
-<!-- PTR_SOPTDOTS&#45;&gt;PTR_BOT -->
-<g id="edge50" class="edge">
-<title>PTR_SOPTDOTS&#45;&gt;PTR_BOT</title>
-<path fill="none" stroke="black" d="M1083.48,-254.83C1077.14,-236.63 1066.85,-207.07 1058.28,-182.46"/>
-</g>
-<!-- PTR_SNOPT&#45;&gt;PTR_BOT -->
-<g id="edge51" class="edge">
-<title>PTR_SNOPT&#45;&gt;PTR_BOT</title>
-<path fill="none" stroke="black" d="M1167.95,-249.42C1143.13,-227.55 1105.19,-194.13 1077.71,-169.92"/>
-</g>
-<!-- PTR_BOT&#45;&gt;BOT -->
-<g id="edge52" class="edge">
-<title>PTR_BOT&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M998.79,-125.7C905.03,-100.5 690.85,-42.93 626.21,-25.56"/>
-</g>
-<!-- MEM_ALIAS1 -->
-<g id="node29" class="node">
-<title>MEM_ALIAS1</title>
-<ellipse fill="lightblue" stroke="black" cx="1379.4" cy="-386.83" rx="24.9" ry="24.9"/>
-<text text-anchor="middle" x="1379.4" y="-383.13" font-family="Times,serif" font-size="14.00">#1</text>
-</g>
-<!-- MEM_TOP&#45;&gt;MEM_ALIAS1 -->
-<g id="edge58" class="edge">
-<title>MEM_TOP&#45;&gt;MEM_ALIAS1</title>
-<path fill="none" stroke="black" d="M1448.3,-564.88C1428.87,-514.67 1402.13,-445.56 1388.37,-410.01"/>
-</g>
-<!-- MEM_ALIAS2 -->
-<g id="node30" class="node">
-<title>MEM_ALIAS2</title>
-<ellipse fill="lightblue" stroke="black" cx="1471.4" cy="-386.83" rx="24.9" ry="24.9"/>
-<text text-anchor="middle" x="1471.4" y="-383.13" font-family="Times,serif" font-size="14.00">#2</text>
-</g>
-<!-- MEM_TOP&#45;&gt;MEM_ALIAS2 -->
-<g id="edge59" class="edge">
-<title>MEM_TOP&#45;&gt;MEM_ALIAS2</title>
-<path fill="none" stroke="black" d="M1471.4,-560.85C1471.4,-511.89 1471.4,-446.88 1471.4,-411.81"/>
-</g>
-<!-- MEM_ALIASDOTS -->
-<g id="node31" class="node">
-<title>MEM_ALIASDOTS</title>
-<text text-anchor="middle" x="1566.4" y="-383.13" font-family="Times,serif" font-size="14.00">...</text>
-</g>
-<!-- MEM_TOP&#45;&gt;MEM_ALIASDOTS -->
-<g id="edge60" class="edge">
-<title>MEM_TOP&#45;&gt;MEM_ALIASDOTS</title>
-<path fill="none" stroke="black" d="M1495.12,-565.18C1516.17,-512.51 1545.61,-438.84 1559.11,-405.06"/>
-</g>
-<!-- MEM_ALIASN -->
-<g id="node32" class="node">
-<title>MEM_ALIASN</title>
-<ellipse fill="lightblue" stroke="black" cx="1661.4" cy="-386.83" rx="24.9" ry="24.9"/>
-<text text-anchor="middle" x="1661.4" y="-383.13" font-family="Times,serif" font-size="14.00">#n</text>
-</g>
-<!-- MEM_TOP&#45;&gt;MEM_ALIASN -->
-<g id="edge61" class="edge">
-<title>MEM_TOP&#45;&gt;MEM_ALIASN</title>
-<path fill="none" stroke="black" d="M1511.23,-574.72C1553.01,-522.44 1616.59,-442.89 1645.77,-406.38"/>
-</g>
-<!-- MEM_ALIAS1&#45;&gt;MEM_ALIAS2 -->
-<!-- MEM_BOT -->
-<g id="node33" class="node">
-<title>MEM_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="1471.4" cy="-138.69" rx="63.89" ry="63.89"/>
-<text text-anchor="middle" x="1471.4" y="-134.99" font-family="Times,serif" font-size="14.00">MEM#BOT</text>
-</g>
-<!-- MEM_ALIAS1&#45;&gt;MEM_BOT -->
-<g id="edge62" class="edge">
-<title>MEM_ALIAS1&#45;&gt;MEM_BOT</title>
-<path fill="none" stroke="black" d="M1388.05,-363.48C1401.92,-326.08 1429.55,-251.56 1449.19,-198.59"/>
-</g>
-<!-- MEM_ALIAS2&#45;&gt;MEM_ALIASDOTS -->
-<!-- MEM_ALIAS2&#45;&gt;MEM_BOT -->
-<g id="edge63" class="edge">
-<title>MEM_ALIAS2&#45;&gt;MEM_BOT</title>
-<path fill="none" stroke="black" d="M1471.4,-362.13C1471.4,-325.23 1471.4,-254.49 1471.4,-202.46"/>
-</g>
-<!-- MEM_ALIASDOTS&#45;&gt;MEM_ALIASN -->
-<!-- MEM_ALIASDOTS&#45;&gt;MEM_BOT -->
-<g id="edge64" class="edge">
-<title>MEM_ALIASDOTS&#45;&gt;MEM_BOT</title>
-<path fill="none" stroke="black" d="M1559.41,-368.58C1545.87,-333.21 1515.52,-253.93 1494.26,-198.42"/>
-</g>
-<!-- MEM_ALIASN&#45;&gt;MEM_BOT -->
-<g id="edge65" class="edge">
-<title>MEM_ALIASN&#45;&gt;MEM_BOT</title>
-<path fill="none" stroke="black" d="M1646.17,-366.94C1616.93,-328.76 1552.13,-244.12 1510.17,-189.33"/>
-</g>
-<!-- MEM_BOT&#45;&gt;BOT -->
-<g id="edge66" class="edge">
-<title>MEM_BOT&#45;&gt;BOT</title>
-<path fill="none" stroke="black" d="M1408.21,-129.12C1230.24,-104.98 730.92,-37.25 626.64,-23.11"/>
-</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 12.2.0 (20241103.1931)
+ -->
+<!-- Title: Lattice Pages: 1 -->
+<svg width="1465pt" height="447pt"
+ viewBox="0.00 0.00 1465.07 446.70" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 442.7)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-442.7 1461.07,-442.7 1461.07,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="581.07" cy="-414.47" rx="24.23" ry="24.23"/>
+<text text-anchor="start" x="571.32" y="-410.42" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤ </text>
+</g>
+<!-- XCTRL -->
+<g id="node3" class="node">
+<title>XCTRL</title>
+<ellipse fill="yellow" stroke="black" cx="39.07" cy="-327.75" rx="39.07" ry="18"/>
+<text text-anchor="start" x="18.44" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤ </text>
+<text text-anchor="start" x="37.94" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- TOP&#45;&gt;XCTRL -->
+<g id="edge1" class="edge">
+<title>TOP&#45;&gt;XCTRL</title>
+<path fill="none" stroke="black" d="M557.08,-409.72C474.17,-396.76 198.71,-353.7 86.88,-336.22"/>
+<polygon fill="black" stroke="black" points="87.55,-332.78 77.13,-334.7 86.47,-339.7 87.55,-332.78"/>
+</g>
+<!-- INT_TOP -->
+<g id="node5" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="273.07" cy="-327.75" rx="36.51" ry="18"/>
+<text text-anchor="start" x="254.32" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤ </text>
+<text text-anchor="start" x="273.82" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- TOP&#45;&gt;INT_TOP -->
+<g id="edge4" class="edge">
+<title>TOP&#45;&gt;INT_TOP</title>
+<path fill="none" stroke="black" d="M557.67,-407.04C505.91,-392.8 381.13,-358.47 315.32,-340.37"/>
+<polygon fill="black" stroke="black" points="316.55,-337.08 305.98,-337.8 314.69,-343.83 316.55,-337.08"/>
+</g>
+<!-- PTR -->
+<g id="node12" class="node">
+<title>PTR</title>
+<polygon fill="none" stroke="none" points="551.07,-354.25 497.07,-354.25 497.07,-301.25 551.07,-301.25 551.07,-354.25"/>
+<polygon fill="green" stroke="none" points="506.07,-327.75 506.07,-350.25 542.07,-350.25 542.07,-327.75 506.07,-327.75"/>
+<polygon fill="none" stroke="black" points="506.07,-327.75 506.07,-350.25 542.07,-350.25 542.07,-327.75 506.07,-327.75"/>
+<text text-anchor="start" x="513.19" y="-333.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">*ptr</text>
+<polygon fill="lightgreen" stroke="none" points="506.07,-305.25 506.07,-327.75 542.07,-327.75 542.07,-305.25 506.07,-305.25"/>
+<polygon fill="none" stroke="black" points="506.07,-305.25 506.07,-327.75 542.07,-327.75 542.07,-305.25 506.07,-305.25"/>
+<text text-anchor="start" x="509.07" y="-311.45" font-family="Times New Roman,serif" font-size="14.00">struct</text>
+</g>
+<!-- TOP&#45;&gt;PTR -->
+<g id="edge20" class="edge">
+<title>TOP&#45;&gt;PTR</title>
+<path fill="none" stroke="black" d="M567.85,-393.82C561.75,-384.77 554.34,-373.74 547.35,-363.36"/>
+<polygon fill="black" stroke="black" points="550.44,-361.68 541.96,-355.34 544.63,-365.59 550.44,-361.68"/>
+</g>
+<!-- STRUCT_TOP -->
+<g id="node14" class="node">
+<title>STRUCT_TOP</title>
+<ellipse fill="lightgreen" stroke="black" cx="700.07" cy="-327.75" rx="44.7" ry="18"/>
+<text text-anchor="start" x="675.32" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="691.07" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:struct</text>
+</g>
+<!-- TOP&#45;&gt;STRUCT_TOP -->
+<g id="edge23" class="edge">
+<title>TOP&#45;&gt;STRUCT_TOP</title>
+<path fill="none" stroke="black" d="M600.72,-399.48C619.46,-386.14 647.98,-365.83 669.66,-350.4"/>
+<polygon fill="black" stroke="black" points="671.43,-353.43 677.55,-344.78 667.37,-347.73 671.43,-353.43"/>
+</g>
+<!-- MEM_TOP -->
+<g id="node19" class="node">
+<title>MEM_TOP</title>
+<ellipse fill="blue" stroke="black" cx="1011.07" cy="-327.75" rx="43.67" ry="18"/>
+<text text-anchor="start" x="987.07" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text>
+<text text-anchor="start" x="1002.82" y="-323.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">:mem</text>
+</g>
+<!-- TOP&#45;&gt;MEM_TOP -->
+<g id="edge33" class="edge">
+<title>TOP&#45;&gt;MEM_TOP</title>
+<path fill="none" stroke="black" d="M605.11,-408.74C673.19,-395.32 868.38,-356.86 961.06,-338.6"/>
+<polygon fill="black" stroke="black" points="961.48,-342.09 970.62,-336.72 960.13,-335.22 961.48,-342.09"/>
+</g>
+<!-- TUPLE_TOP -->
+<g id="node24" class="node">
+<title>TUPLE_TOP</title>
+<ellipse fill="pink" stroke="black" cx="1284.07" cy="-327.75" rx="42.65" ry="18"/>
+<text text-anchor="start" x="1260.82" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="1276.57" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
+</g>
+<!-- TOP&#45;&gt;TUPLE_TOP -->
+<g id="edge43" class="edge">
+<title>TOP&#45;&gt;TUPLE_TOP</title>
+<path fill="none" stroke="black" d="M605.27,-410.56C705.78,-398.44 1091.6,-351.95 1232.32,-334.99"/>
+<polygon fill="black" stroke="black" points="1232.58,-338.48 1242.09,-333.81 1231.74,-331.53 1232.58,-338.48"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="612.07" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="604.19" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
+</g>
+<!-- CTRL -->
+<g id="node4" class="node">
+<title>CTRL</title>
+<ellipse fill="yellow" stroke="black" cx="42.07" cy="-104.75" rx="36.51" ry="18"/>
+<text text-anchor="start" x="23.32" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="39.07" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- XCTRL&#45;&gt;CTRL -->
+<g id="edge2" class="edge">
+<title>XCTRL&#45;&gt;CTRL</title>
+<path fill="none" stroke="black" d="M39.31,-309.5C39.83,-271.02 41.04,-181.25 41.67,-134.4"/>
+<polygon fill="black" stroke="black" points="45.17,-134.5 41.8,-124.45 38.17,-134.4 45.17,-134.5"/>
+</g>
+<!-- CTRL&#45;&gt;BOT -->
+<g id="edge3" class="edge">
+<title>CTRL&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M76.87,-98.77C179.54,-84.06 480.24,-41 579.71,-26.76"/>
+<polygon fill="black" stroke="black" points="580.17,-30.23 589.57,-25.35 579.18,-23.3 580.17,-30.23"/>
+</g>
+<!-- INT_MIN -->
+<g id="node7" class="node">
+<title>INT_MIN</title>
+<ellipse fill="lightblue" stroke="black" cx="52.07" cy="-216.25" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="52.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">&#45;n</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MIN -->
+<g id="edge5" class="edge">
+<title>INT_TOP&#45;&gt;INT_MIN</title>
+<path fill="none" stroke="black" d="M248.15,-314.4C206.3,-293.66 122.25,-252.02 79.06,-230.62"/>
+<polygon fill="black" stroke="black" points="80.63,-227.49 70.12,-226.19 77.52,-233.77 80.63,-227.49"/>
+</g>
+<!-- INT_MINDOTS -->
+<g id="node8" class="node">
+<title>INT_MINDOTS</title>
+<ellipse fill="lightblue" stroke="black" cx="141.07" cy="-216.25" rx="27" ry="18"/>
+<text text-anchor="middle" x="141.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
+<g id="edge6" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
+<path fill="none" stroke="black" d="M254.99,-311.75C231.87,-292.58 191.74,-259.28 165.8,-237.77"/>
+<polygon fill="black" stroke="black" points="168.37,-235.35 158.44,-231.66 163.9,-240.73 168.37,-235.35"/>
+</g>
+<!-- INT_ZERO -->
+<g id="node9" class="node">
+<title>INT_ZERO</title>
+<ellipse fill="lightblue" stroke="black" cx="229.07" cy="-216.25" rx="18" ry="18"/>
+<text text-anchor="middle" x="229.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_ZERO -->
+<g id="edge7" class="edge">
+<title>INT_TOP&#45;&gt;INT_ZERO</title>
+<path fill="none" stroke="black" d="M266.19,-309.64C259.14,-292.08 248.06,-264.51 239.84,-244.05"/>
+<polygon fill="black" stroke="black" points="243.15,-242.9 236.17,-234.93 236.65,-245.51 243.15,-242.9"/>
+</g>
+<!-- INT_MAXDOTS -->
+<g id="node10" class="node">
+<title>INT_MAXDOTS</title>
+<ellipse fill="lightblue" stroke="black" cx="317.07" cy="-216.25" rx="27" ry="18"/>
+<text text-anchor="middle" x="317.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
+<g id="edge8" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
+<path fill="none" stroke="black" d="M279.94,-309.64C286.96,-292.18 297.95,-264.82 306.16,-244.4"/>
+<polygon fill="black" stroke="black" points="309.34,-245.87 309.82,-235.28 302.84,-243.26 309.34,-245.87"/>
+</g>
+<!-- INT_MAX -->
+<g id="node11" class="node">
+<title>INT_MAX</title>
+<ellipse fill="lightblue" stroke="black" cx="408.07" cy="-216.25" rx="21.15" ry="21.15"/>
+<text text-anchor="middle" x="408.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">+n</text>
+</g>
+<!-- INT_TOP&#45;&gt;INT_MAX -->
+<g id="edge9" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAX</title>
+<path fill="none" stroke="black" d="M291.56,-311.75C315.33,-292.47 356.7,-258.92 383.21,-237.41"/>
+<polygon fill="black" stroke="black" points="385.17,-240.33 390.73,-231.31 380.76,-234.89 385.17,-240.33"/>
+</g>
+<!-- INT_BOT -->
+<g id="node6" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="273.07" cy="-104.75" rx="33.95" ry="18"/>
+<text text-anchor="start" x="256.19" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="271.94" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT&#45;&gt;BOT -->
+<g id="edge15" class="edge">
+<title>INT_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M303.75,-96.36C367.89,-80.92 515.56,-45.36 580.48,-29.73"/>
+<polygon fill="black" stroke="black" points="581.22,-33.15 590.12,-27.41 579.58,-26.35 581.22,-33.15"/>
+</g>
+<!-- INT_MIN&#45;&gt;INT_BOT -->
+<g id="edge10" class="edge">
+<title>INT_MIN&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M68.68,-207.02C104.61,-189.22 190.19,-146.81 238.44,-122.9"/>
+<polygon fill="black" stroke="black" points="239.95,-126.06 247.36,-118.49 236.84,-119.79 239.95,-126.06"/>
+</g>
+<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
+<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
+<g id="edge11" class="edge">
+<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M157.52,-201.6C179.9,-183.04 220.19,-149.61 246.78,-127.55"/>
+<polygon fill="black" stroke="black" points="248.94,-130.31 254.4,-121.23 244.47,-124.92 248.94,-130.31"/>
+</g>
+<!-- INT_MINDOTS&#45;&gt;INT_ZERO -->
+<!-- INT_ZERO&#45;&gt;INT_BOT -->
+<g id="edge12" class="edge">
+<title>INT_ZERO&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M235.56,-199.09C242.53,-181.74 253.73,-153.88 262.08,-133.1"/>
+<polygon fill="black" stroke="black" points="265.21,-134.68 265.7,-124.1 258.72,-132.07 265.21,-134.68"/>
+</g>
+<!-- INT_ZERO&#45;&gt;INT_MAXDOTS -->
+<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
+<g id="edge13" class="edge">
+<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M310.39,-198.62C303.41,-181.25 292.35,-153.73 284.08,-133.15"/>
+<polygon fill="black" stroke="black" points="287.35,-131.91 280.38,-123.94 280.86,-134.52 287.35,-131.91"/>
+</g>
+<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
+<!-- INT_MAX&#45;&gt;INT_BOT -->
+<g id="edge14" class="edge">
+<title>INT_MAX&#45;&gt;INT_BOT</title>
+<path fill="none" stroke="black" d="M391.78,-202.04C368.98,-183.54 327.24,-149.69 299.83,-127.45"/>
+<polygon fill="black" stroke="black" points="302.28,-124.93 292.3,-121.35 297.87,-130.37 302.28,-124.93"/>
+</g>
+<!-- PTR0 -->
+<g id="node13" class="node">
+<title>PTR0</title>
+<polygon fill="none" stroke="none" points="551.07,-131.25 497.07,-131.25 497.07,-78.25 551.07,-78.25 551.07,-131.25"/>
+<polygon fill="green" stroke="none" points="506.07,-104.75 506.07,-127.25 542.07,-127.25 542.07,-104.75 506.07,-104.75"/>
+<polygon fill="none" stroke="black" points="506.07,-104.75 506.07,-127.25 542.07,-127.25 542.07,-104.75 506.07,-104.75"/>
+<text text-anchor="start" x="510.19" y="-110.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">*ptr?</text>
+<polygon fill="lightgreen" stroke="none" points="506.07,-82.25 506.07,-104.75 542.07,-104.75 542.07,-82.25 506.07,-82.25"/>
+<polygon fill="none" stroke="black" points="506.07,-82.25 506.07,-104.75 542.07,-104.75 542.07,-82.25 506.07,-82.25"/>
+<text text-anchor="start" x="509.07" y="-88.45" font-family="Times New Roman,serif" font-size="14.00">struct</text>
+</g>
+<!-- PTR&#45;&gt;PTR0 -->
+<g id="edge21" class="edge">
+<title>PTR&#45;&gt;PTR0</title>
+<path fill="none" stroke="black" d="M524.07,-301.29C524.07,-261.89 524.07,-187.62 524.07,-142.52"/>
+<polygon fill="black" stroke="black" points="527.57,-142.68 524.07,-132.68 520.57,-142.68 527.57,-142.68"/>
+</g>
+<!-- PTR0&#45;&gt;BOT -->
+<g id="edge22" class="edge">
+<title>PTR0&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M550.95,-78.81C562.95,-67.68 576.97,-54.68 588.55,-43.94"/>
+<polygon fill="black" stroke="black" points="590.79,-46.63 595.75,-37.26 586.03,-41.5 590.79,-46.63"/>
+</g>
+<!-- STRUCT_S1 -->
+<g id="node15" class="node">
+<title>STRUCT_S1</title>
+<polygon fill="none" stroke="none" points="644.94,-234.25 559.19,-234.25 559.19,-198.25 644.94,-198.25 644.94,-234.25"/>
+<polygon fill="lightgreen" stroke="none" points="567.19,-205 567.19,-227.5 597.94,-227.5 597.94,-205 567.19,-205"/>
+<polygon fill="none" stroke="black" points="567.19,-205 567.19,-227.5 597.94,-227.5 597.94,-205 567.19,-205"/>
+<text text-anchor="start" x="570.19" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_0" gradientUnits="userSpaceOnUse" x1="603.65" y1="-224.2" x2="631.23" y2="-208.29" >
+<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
+<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
+</linearGradient>
+</defs>
+<polygon fill="url(#l_0)" stroke="none" points="597.94,-205 597.94,-227.5 636.94,-227.5 636.94,-205 597.94,-205"/>
+<polygon fill="none" stroke="black" points="597.94,-205 597.94,-227.5 636.94,-227.5 636.94,-205 597.94,-205"/>
+<text text-anchor="start" x="600.94" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">int:ptr</text>
+</g>
+<!-- STRUCT_TOP&#45;&gt;STRUCT_S1 -->
+<g id="edge24" class="edge">
+<title>STRUCT_TOP&#45;&gt;STRUCT_S1</title>
+<path fill="none" stroke="black" d="M685.61,-310.59C669.58,-292.68 643.53,-263.57 624.77,-242.62"/>
+<polygon fill="black" stroke="black" points="627.52,-240.44 618.24,-235.32 622.3,-245.11 627.52,-240.44"/>
+</g>
+<!-- STRUCT_S2 -->
+<g id="node16" class="node">
+<title>STRUCT_S2</title>
+<polygon fill="none" stroke="none" points="773.94,-242.75 688.19,-242.75 688.19,-189.75 773.94,-189.75 773.94,-242.75"/>
+<polygon fill="lightgreen" stroke="none" points="696.19,-216.25 696.19,-238.75 726.94,-238.75 726.94,-216.25 696.19,-216.25"/>
+<polygon fill="none" stroke="black" points="696.19,-216.25 696.19,-238.75 726.94,-238.75 726.94,-216.25 696.19,-216.25"/>
+<text text-anchor="start" x="699.19" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_1" gradientUnits="userSpaceOnUse" x1="732.65" y1="-235.45" x2="760.23" y2="-219.54" >
+<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
+<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
+</linearGradient>
+</defs>
+<polygon fill="url(#l_1)" stroke="none" points="726.94,-216.25 726.94,-238.75 765.94,-238.75 765.94,-216.25 726.94,-216.25"/>
+<polygon fill="none" stroke="black" points="726.94,-216.25 726.94,-238.75 765.94,-238.75 765.94,-216.25 726.94,-216.25"/>
+<text text-anchor="start" x="729.94" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">int:ptr</text>
+<polygon fill="lightgreen" stroke="none" points="696.19,-193.75 696.19,-216.25 726.94,-216.25 726.94,-193.75 696.19,-193.75"/>
+<polygon fill="none" stroke="black" points="696.19,-193.75 696.19,-216.25 726.94,-216.25 726.94,-193.75 696.19,-193.75"/>
+<text text-anchor="start" x="699.19" y="-199.95" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_2" gradientUnits="userSpaceOnUse" x1="732.65" y1="-212.95" x2="760.23" y2="-197.04" >
+<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
+<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
+</linearGradient>
+</defs>
+<polygon fill="url(#l_2)" stroke="none" points="726.94,-193.75 726.94,-216.25 765.94,-216.25 765.94,-193.75 726.94,-193.75"/>
+<polygon fill="none" stroke="black" points="726.94,-193.75 726.94,-216.25 765.94,-216.25 765.94,-193.75 726.94,-193.75"/>
+<text text-anchor="start" x="729.94" y="-199.95" font-family="Times New Roman,serif" font-size="14.00">int:ptr</text>
+</g>
+<!-- STRUCT_TOP&#45;&gt;STRUCT_S2 -->
+<g id="edge25" class="edge">
+<title>STRUCT_TOP&#45;&gt;STRUCT_S2</title>
+<path fill="none" stroke="black" d="M704.91,-309.64C709.16,-294.62 715.49,-272.29 720.85,-253.34"/>
+<polygon fill="black" stroke="black" points="724.19,-254.4 723.54,-243.83 717.45,-252.49 724.19,-254.4"/>
+</g>
+<!-- STRUCT_SN -->
+<g id="node17" class="node">
+<title>STRUCT_SN</title>
+<polygon fill="none" stroke="none" points="902.94,-254 817.19,-254 817.19,-178.5 902.94,-178.5 902.94,-254"/>
+<polygon fill="lightgreen" stroke="none" points="825.19,-227.5 825.19,-250 855.94,-250 855.94,-227.5 825.19,-227.5"/>
+<polygon fill="none" stroke="black" points="825.19,-227.5 825.19,-250 855.94,-250 855.94,-227.5 825.19,-227.5"/>
+<text text-anchor="start" x="828.19" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_3" gradientUnits="userSpaceOnUse" x1="861.65" y1="-246.7" x2="889.23" y2="-230.79" >
+<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
+<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
+</linearGradient>
+</defs>
+<polygon fill="url(#l_3)" stroke="none" points="855.94,-227.5 855.94,-250 894.94,-250 894.94,-227.5 855.94,-227.5"/>
+<polygon fill="none" stroke="black" points="855.94,-227.5 855.94,-250 894.94,-250 894.94,-227.5 855.94,-227.5"/>
+<text text-anchor="start" x="858.94" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">int:ptr</text>
+<polygon fill="lightgreen" stroke="none" points="825.19,-205 825.19,-227.5 855.94,-227.5 855.94,-205 825.19,-205"/>
+<polygon fill="none" stroke="black" points="825.19,-205 825.19,-227.5 855.94,-227.5 855.94,-205 825.19,-205"/>
+<text text-anchor="start" x="831.19" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">... &#160;</text>
+<defs>
+<linearGradient id="l_4" gradientUnits="userSpaceOnUse" x1="861.65" y1="-224.2" x2="889.23" y2="-208.29" >
+<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
+<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
+</linearGradient>
+</defs>
+<polygon fill="url(#l_4)" stroke="none" points="855.94,-205 855.94,-227.5 894.94,-227.5 894.94,-205 855.94,-205"/>
+<polygon fill="none" stroke="black" points="855.94,-205 855.94,-227.5 894.94,-227.5 894.94,-205 855.94,-205"/>
+<text text-anchor="start" x="858.94" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">int:ptr</text>
+<polygon fill="lightgreen" stroke="none" points="825.19,-182.5 825.19,-205 855.94,-205 855.94,-182.5 825.19,-182.5"/>
+<polygon fill="none" stroke="black" points="825.19,-182.5 825.19,-205 855.94,-205 855.94,-182.5 825.19,-182.5"/>
+<text text-anchor="start" x="828.19" y="-188.7" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_5" gradientUnits="userSpaceOnUse" x1="861.65" y1="-201.7" x2="889.23" y2="-185.79" >
+<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
+<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
+</linearGradient>
+</defs>
+<polygon fill="url(#l_5)" stroke="none" points="855.94,-182.5 855.94,-205 894.94,-205 894.94,-182.5 855.94,-182.5"/>
+<polygon fill="none" stroke="black" points="855.94,-182.5 855.94,-205 894.94,-205 894.94,-182.5 855.94,-182.5"/>
+<text text-anchor="start" x="858.94" y="-188.7" font-family="Times New Roman,serif" font-size="14.00">int:ptr</text>
+</g>
+<!-- STRUCT_TOP&#45;&gt;STRUCT_SN -->
+<g id="edge26" class="edge">
+<title>STRUCT_TOP&#45;&gt;STRUCT_SN</title>
+<path fill="none" stroke="black" d="M721.98,-311.75C744.07,-296.64 778.97,-272.75 808.16,-252.77"/>
+<polygon fill="black" stroke="black" points="809.89,-255.83 816.16,-247.3 805.93,-250.05 809.89,-255.83"/>
+</g>
+<!-- STRUCT_S1&#45;&gt;STRUCT_S2 -->
+<!-- STRUCT_BOT -->
+<g id="node18" class="node">
+<title>STRUCT_BOT</title>
+<ellipse fill="lightgreen" stroke="black" cx="700.07" cy="-104.75" rx="44.7" ry="18"/>
+<text text-anchor="start" x="675.32" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="691.07" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:struct</text>
+</g>
+<!-- STRUCT_S1&#45;&gt;STRUCT_BOT -->
+<g id="edge27" class="edge">
+<title>STRUCT_S1&#45;&gt;STRUCT_BOT</title>
+<path fill="none" stroke="black" d="M616.95,-198.62C633.16,-180.5 659.26,-151.34 677.89,-130.53"/>
+<polygon fill="black" stroke="black" points="680.29,-133.09 684.36,-123.3 675.08,-128.42 680.29,-133.09"/>
+</g>
+<!-- STRUCT_S2&#45;&gt;STRUCT_SN -->
+<!-- STRUCT_S2&#45;&gt;STRUCT_BOT -->
+<g id="edge28" class="edge">
+<title>STRUCT_S2&#45;&gt;STRUCT_BOT</title>
+<path fill="none" stroke="black" d="M723.88,-189.85C719.09,-172.96 712.81,-150.77 707.9,-133.42"/>
+<polygon fill="black" stroke="black" points="711.41,-132.95 705.32,-124.28 704.67,-134.86 711.41,-132.95"/>
+</g>
+<!-- STRUCT_SN&#45;&gt;STRUCT_BOT -->
+<g id="edge29" class="edge">
+<title>STRUCT_SN&#45;&gt;STRUCT_BOT</title>
+<path fill="none" stroke="black" d="M817.61,-186.19C790.48,-167.62 755.89,-143.95 731.27,-127.11"/>
+<polygon fill="black" stroke="black" points="733.52,-124.4 723.29,-121.64 729.56,-130.18 733.52,-124.4"/>
+</g>
+<!-- STRUCT_BOT&#45;&gt;BOT -->
+<g id="edge30" class="edge">
+<title>STRUCT_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M683.1,-88.01C669.57,-75.46 650.48,-57.75 635.5,-43.85"/>
+<polygon fill="black" stroke="black" points="638.04,-41.44 628.33,-37.21 633.28,-46.57 638.04,-41.44"/>
+</g>
+<!-- MEM_ALIAS1 -->
+<g id="node20" class="node">
+<title>MEM_ALIAS1</title>
+<ellipse fill="blue" stroke="black" cx="966.07" cy="-216.25" rx="20.13" ry="20.13"/>
+<text text-anchor="middle" x="966.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">#1</text>
+</g>
+<!-- MEM_TOP&#45;&gt;MEM_ALIAS1 -->
+<g id="edge34" class="edge">
+<title>MEM_TOP&#45;&gt;MEM_ALIAS1</title>
+<path fill="none" stroke="black" d="M1004.04,-309.64C997.03,-292.59 986.14,-266.09 977.82,-245.84"/>
+<polygon fill="black" stroke="black" points="981.11,-244.65 974.07,-236.73 974.64,-247.31 981.11,-244.65"/>
+</g>
+<!-- MEM_ALIASDOTS -->
+<g id="node21" class="node">
+<title>MEM_ALIASDOTS</title>
+<ellipse fill="blue" stroke="black" cx="1056.07" cy="-216.25" rx="27" ry="18"/>
+<text text-anchor="middle" x="1056.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text>
+</g>
+<!-- MEM_TOP&#45;&gt;MEM_ALIASDOTS -->
+<g id="edge35" class="edge">
+<title>MEM_TOP&#45;&gt;MEM_ALIASDOTS</title>
+<path fill="none" stroke="black" d="M1018.1,-309.64C1025.27,-292.18 1036.52,-264.82 1044.91,-244.4"/>
+<polygon fill="black" stroke="black" points="1048.09,-245.86 1048.66,-235.28 1041.62,-243.2 1048.09,-245.86"/>
+</g>
+<!-- MEM_ALIASN -->
+<g id="node22" class="node">
+<title>MEM_ALIASN</title>
+<ellipse fill="blue" stroke="black" cx="1146.07" cy="-216.25" rx="20.13" ry="20.13"/>
+<text text-anchor="middle" x="1146.07" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">#n</text>
+</g>
+<!-- MEM_TOP&#45;&gt;MEM_ALIASN -->
+<g id="edge36" class="edge">
+<title>MEM_TOP&#45;&gt;MEM_ALIASN</title>
+<path fill="none" stroke="black" d="M1030.12,-311.29C1054.2,-291.76 1095.67,-258.13 1121.94,-236.82"/>
+<polygon fill="black" stroke="black" points="1124.13,-239.55 1129.69,-230.53 1119.72,-234.11 1124.13,-239.55"/>
+</g>
+<!-- MEM_ALIAS1&#45;&gt;MEM_ALIASDOTS -->
+<!-- MEM_BOT -->
+<g id="node23" class="node">
+<title>MEM_BOT</title>
+<ellipse fill="blue" stroke="black" cx="1011.07" cy="-104.75" rx="43.67" ry="18"/>
+<text text-anchor="start" x="987.07" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
+<text text-anchor="start" x="1002.82" y="-100.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">:mem</text>
+</g>
+<!-- MEM_ALIAS1&#45;&gt;MEM_BOT -->
+<g id="edge37" class="edge">
+<title>MEM_ALIAS1&#45;&gt;MEM_BOT</title>
+<path fill="none" stroke="black" d="M973.5,-197.17C980.63,-179.82 991.49,-153.39 999.7,-133.4"/>
+<polygon fill="black" stroke="black" points="1002.93,-134.75 1003.5,-124.17 996.46,-132.09 1002.93,-134.75"/>
+</g>
+<!-- MEM_ALIASDOTS&#45;&gt;MEM_ALIASN -->
+<!-- MEM_ALIASDOTS&#45;&gt;MEM_BOT -->
+<g id="edge38" class="edge">
+<title>MEM_ALIASDOTS&#45;&gt;MEM_BOT</title>
+<path fill="none" stroke="black" d="M1049.23,-198.62C1042.14,-181.35 1030.92,-154.05 1022.48,-133.51"/>
+<polygon fill="black" stroke="black" points="1025.73,-132.22 1018.69,-124.3 1019.25,-134.88 1025.73,-132.22"/>
+</g>
+<!-- MEM_ALIASN&#45;&gt;MEM_BOT -->
+<g id="edge39" class="edge">
+<title>MEM_ALIASN&#45;&gt;MEM_BOT</title>
+<path fill="none" stroke="black" d="M1130.58,-202.69C1108.31,-184.62 1066.85,-151 1039.11,-128.49"/>
+<polygon fill="black" stroke="black" points="1041.42,-125.86 1031.45,-122.28 1037.01,-131.3 1041.42,-125.86"/>
+</g>
+<!-- MEM_BOT&#45;&gt;BOT -->
+<g id="edge40" class="edge">
+<title>MEM_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M972.45,-95.85C893.9,-79.78 716.82,-43.55 644.13,-28.68"/>
+<polygon fill="black" stroke="black" points="644.98,-25.28 634.48,-26.71 643.58,-32.14 644.98,-25.28"/>
+</g>
+<!-- TUPLE1 -->
+<g id="node25" class="node">
+<title>TUPLE1</title>
+<polygon fill="none" stroke="none" points="1263.07,-242.75 1209.07,-242.75 1209.07,-189.75 1263.07,-189.75 1263.07,-242.75"/>
+<polygon fill="pink" stroke="none" points="1217.32,-216.25 1217.32,-238.75 1254.82,-238.75 1254.82,-216.25 1217.32,-216.25"/>
+<polygon fill="none" stroke="black" points="1217.32,-216.25 1217.32,-238.75 1254.82,-238.75 1254.82,-216.25 1217.32,-216.25"/>
+<text text-anchor="start" x="1220.32" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
+<polygon fill="black" stroke="none" points="1217.32,-193.75 1217.32,-216.25 1254.82,-216.25 1254.82,-193.75 1217.32,-193.75"/>
+<polygon fill="none" stroke="black" points="1217.32,-193.75 1217.32,-216.25 1254.82,-216.25 1254.82,-193.75 1217.32,-193.75"/>
+<text text-anchor="start" x="1224.44" y="-199.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP&#45;&gt;TUPLE1 -->
+<g id="edge44" class="edge">
+<title>TUPLE_TOP&#45;&gt;TUPLE1</title>
+<path fill="none" stroke="black" d="M1276.57,-309.64C1269.92,-294.48 1260.01,-271.87 1251.66,-252.81"/>
+<polygon fill="black" stroke="black" points="1254.91,-251.51 1247.69,-243.76 1248.5,-254.32 1254.91,-251.51"/>
+</g>
+<!-- TUPLE2 -->
+<g id="node26" class="node">
+<title>TUPLE2</title>
+<polygon fill="none" stroke="none" points="1360.07,-254 1306.07,-254 1306.07,-178.5 1360.07,-178.5 1360.07,-254"/>
+<polygon fill="pink" stroke="none" points="1314.32,-227.5 1314.32,-250 1351.82,-250 1351.82,-227.5 1314.32,-227.5"/>
+<polygon fill="none" stroke="black" points="1314.32,-227.5 1314.32,-250 1351.82,-250 1351.82,-227.5 1314.32,-227.5"/>
+<text text-anchor="start" x="1317.32" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
+<polygon fill="black" stroke="none" points="1314.32,-205 1314.32,-227.5 1351.82,-227.5 1351.82,-205 1314.32,-205"/>
+<polygon fill="none" stroke="black" points="1314.32,-205 1314.32,-227.5 1351.82,-227.5 1351.82,-205 1314.32,-205"/>
+<text text-anchor="start" x="1321.44" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+<polygon fill="black" stroke="none" points="1314.32,-182.5 1314.32,-205 1351.82,-205 1351.82,-182.5 1314.32,-182.5"/>
+<polygon fill="none" stroke="black" points="1314.32,-182.5 1314.32,-205 1351.82,-205 1351.82,-182.5 1314.32,-182.5"/>
+<text text-anchor="start" x="1321.44" y="-188.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP&#45;&gt;TUPLE2 -->
+<g id="edge45" class="edge">
+<title>TUPLE_TOP&#45;&gt;TUPLE2</title>
+<path fill="none" stroke="black" d="M1291.72,-309.64C1297.2,-297.4 1304.85,-280.3 1312.09,-264.14"/>
+<polygon fill="black" stroke="black" points="1315.24,-265.65 1316.13,-255.09 1308.85,-262.79 1315.24,-265.65"/>
+</g>
+<!-- TUPLEN -->
+<g id="node27" class="node">
+<title>TUPLEN</title>
+<polygon fill="none" stroke="none" points="1457.07,-265.25 1403.07,-265.25 1403.07,-167.25 1457.07,-167.25 1457.07,-265.25"/>
+<polygon fill="pink" stroke="none" points="1411.32,-238.75 1411.32,-261.25 1448.82,-261.25 1448.82,-238.75 1411.32,-238.75"/>
+<polygon fill="none" stroke="black" points="1411.32,-238.75 1411.32,-261.25 1448.82,-261.25 1448.82,-238.75 1411.32,-238.75"/>
+<text text-anchor="start" x="1414.32" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
+<polygon fill="black" stroke="none" points="1411.32,-216.25 1411.32,-238.75 1448.82,-238.75 1448.82,-216.25 1411.32,-216.25"/>
+<polygon fill="none" stroke="black" points="1411.32,-216.25 1411.32,-238.75 1448.82,-238.75 1448.82,-216.25 1411.32,-216.25"/>
+<text text-anchor="start" x="1418.44" y="-222.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+<polygon fill="black" stroke="none" points="1411.32,-193.75 1411.32,-216.25 1448.82,-216.25 1448.82,-193.75 1411.32,-193.75"/>
+<polygon fill="none" stroke="black" points="1411.32,-193.75 1411.32,-216.25 1448.82,-216.25 1448.82,-193.75 1411.32,-193.75"/>
+<text text-anchor="start" x="1424.44" y="-199.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text>
+<polygon fill="black" stroke="none" points="1411.32,-171.25 1411.32,-193.75 1448.82,-193.75 1448.82,-171.25 1411.32,-171.25"/>
+<polygon fill="none" stroke="black" points="1411.32,-171.25 1411.32,-193.75 1448.82,-193.75 1448.82,-171.25 1411.32,-171.25"/>
+<text text-anchor="start" x="1418.44" y="-177.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP&#45;&gt;TUPLEN -->
+<g id="edge46" class="edge">
+<title>TUPLE_TOP&#45;&gt;TUPLEN</title>
+<path fill="none" stroke="black" d="M1304.37,-311.52C1327.53,-294.15 1365.84,-265.42 1394.09,-244.23"/>
+<polygon fill="black" stroke="black" points="1396.14,-247.07 1402.04,-238.27 1391.94,-241.47 1396.14,-247.07"/>
+</g>
+<!-- TUPLE_BOT -->
+<g id="node28" class="node">
+<title>TUPLE_BOT</title>
+<ellipse fill="pink" stroke="black" cx="1284.07" cy="-104.75" rx="42.65" ry="18"/>
+<text text-anchor="start" x="1260.82" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="1276.57" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
+</g>
+<!-- TUPLE1&#45;&gt;TUPLE_BOT -->
+<g id="edge47" class="edge">
+<title>TUPLE1&#45;&gt;TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M1247.2,-189.85C1254.68,-172.8 1264.52,-150.34 1272.15,-132.93"/>
+<polygon fill="black" stroke="black" points="1275.16,-134.78 1275.97,-124.21 1268.75,-131.97 1275.16,-134.78"/>
+</g>
+<!-- TUPLE2&#45;&gt;TUPLE_BOT -->
+<g id="edge48" class="edge">
+<title>TUPLE2&#45;&gt;TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M1316.75,-178.79C1310.07,-163.86 1302.48,-146.89 1296.29,-133.07"/>
+<polygon fill="black" stroke="black" points="1299.57,-131.83 1292.3,-124.13 1293.19,-134.69 1299.57,-131.83"/>
+</g>
+<!-- TUPLEN&#45;&gt;TUPLE_BOT -->
+<g id="edge49" class="edge">
+<title>TUPLEN&#45;&gt;TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M1403.29,-195.16C1377.77,-176.03 1339.46,-147.29 1313.2,-127.59"/>
+<polygon fill="black" stroke="black" points="1315.42,-124.89 1305.32,-121.69 1311.22,-130.49 1315.42,-124.89"/>
+</g>
+<!-- TUPLE_BOT&#45;&gt;BOT -->
+<g id="edge50" class="edge">
+<title>TUPLE_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M1243.29,-98.8C1120.5,-83.88 755.84,-39.59 644.63,-26.08"/>
+<polygon fill="black" stroke="black" points="645.07,-22.61 634.72,-24.88 644.23,-29.56 645.07,-22.61"/>
+</g>
+</g>
+</svg>