summaryrefslogtreecommitdiff
path: root/chapter04/docs
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2024-11-27 11:29:33 -0800
committerCliff Click <cliffc@acm.org>2025-01-15 15:07:30 -0800
commit65454d77eba95d7f814336377f78d9f42c7455f9 (patch)
tree976efed369498c7e976fe5098f6a406fed81cb53 /chapter04/docs
parent34766f1a2e9e60626eb1bd5a08140fc41a3770c8 (diff)
downloadSimple-65454d77eba95d7f814336377f78d9f42c7455f9.tar.gz
Simple-65454d77eba95d7f814336377f78d9f42c7455f9.zip
More lattice docs reworks
Diffstat (limited to 'chapter04/docs')
-rw-r--r--chapter04/docs/lattice.gv81
-rw-r--r--chapter04/docs/lattice.svg260
2 files changed, 242 insertions, 99 deletions
diff --git a/chapter04/docs/lattice.gv b/chapter04/docs/lattice.gv
index 29a53b0a..6efef107 100644
--- a/chapter04/docs/lattice.gv
+++ b/chapter04/docs/lattice.gv
@@ -1,29 +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="⊤" , fillcolor=black, fontcolor=white];
- BOT [label="⊥", fillcolor=black, fontcolor=white];
+ TOP [label=<<B>⊤</B >>, fillcolor=black, fontcolor=white];
+ BOT [label=<<B>⊥</B>>, fillcolor=black, fontcolor=white];
- CTRL [label="Ctrl", fillcolor=yellow];
+ // ----------------------
+ // Control
+ CTRL [label="ctrl", fillcolor=yellow, shape=oval];
- INT_TOP [label="⊤ :Int"];
- INT_BOT [label="⊥ :Int"];
-
- INT_MIN [label="-n"];
- INT_MINDOTS [label="..." shape=none style=none];
- INT_MINUS [label="-1"];
- INT_ZERO [label="0"];
- INT_PLUS [label="1"];
- INT_MAXDOTS [label="..." shape=none style=none];
- INT_MAX [label="+n"];
+ TOP -> CTRL;
+ CTRL -> BOT;
- TUPLE [label="TUPLE", fillcolor=pink];
+ // ----------------------
+ // Integers
+ INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval];
+ INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval];
- // Define edges
- edge [arrowhead=none];
+ INT_MIN [label="-n" , fillcolor=lightblue];
+ INT_MINDOTS [label="...", fillcolor=lightblue shape=oval];
+ INT_MINUS [label="-1" , fillcolor=lightblue];
+ INT_ZERO [label="0" , fillcolor=lightblue];
+ INT_PLUS [label="1" , fillcolor=lightblue];
+ INT_MAXDOTS [label="...", fillcolor=lightblue, shape=oval];
+ INT_MAX [label="+n" , fillcolor=lightblue];
TOP -> INT_TOP;
INT_TOP -> INT_MIN;
@@ -43,22 +46,52 @@ digraph Lattice {
INT_BOT -> BOT;
INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis];
+
+ // ----------------------
+ // Tuples
- TOP -> TUPLE;
- TUPLE -> BOT;
+ TUPLE_TOP [label=<<B>⊤</B >:tuple>, fillcolor=pink, shape=oval];
+ TUPLE_BOT [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>
+ >];
- TOP -> CTRL;
- CTRL -> BOT;
+ 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}
+ {rank=same; INT_TOP; TUPLE_TOP}
{rank=same;
CTRL;
INT_MIN; INT_MINDOTS; INT_MINUS; INT_ZERO; INT_PLUS; INT_MAXDOTS; INT_MAX;
- TUPLE
}
- {rank=same; INT_BOT}
+ {rank=same; INT_BOT, TUPLE_BOT}
{rank=same; BOT;}
}
diff --git a/chapter04/docs/lattice.svg b/chapter04/docs/lattice.svg
index 1cab7681..35cb9296 100644
--- a/chapter04/docs/lattice.svg
+++ b/chapter04/docs/lattice.svg
@@ -4,192 +4,302 @@
<!-- 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)">
+<svg width="952pt" height="406pt"
+ viewBox="0.00 0.00 952.00 406.50" 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 402.5)">
<title>Lattice</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-463.88 775.83,-463.88 775.83,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-402.5 948,-402.5 948,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>
+<ellipse fill="black" stroke="black" cx="374" cy="-377.37" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="366.12" y="-372.95" font-family="Times New Roman,serif" font-weight="bold" 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>
+<ellipse fill="yellow" stroke="black" cx="27" cy="-199.25" rx="27" ry="18"/>
+<text text-anchor="middle" x="27" y="-194.2" font-family="Times New Roman,serif" font-size="14.00">ctrl</text>
</g>
<!-- TOP&#45;&gt;CTRL -->
-<g id="edge25" class="edge">
+<g id="edge1" 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"/>
+<path fill="none" stroke="black" d="M354.85,-367.54C297.95,-338.34 129.51,-251.87 58.81,-215.58"/>
+<polygon fill="black" stroke="black" points="60.56,-212.54 50.07,-211.09 57.36,-218.77 60.56,-212.54"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="374" cy="-302.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="357.12" y="-298.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="372.88" y="-298.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
</g>
<!-- TOP&#45;&gt;INT_TOP -->
-<g id="edge1" class="edge">
+<g id="edge3" 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"/>
+<path fill="none" stroke="black" d="M374,-356C374,-348.51 374,-339.87 374,-331.79"/>
+<polygon fill="black" stroke="black" points="377.5,-332.05 374,-322.05 370.5,-332.05 377.5,-332.05"/>
</g>
-<!-- TUPLE -->
+<!-- TUPLE_TOP -->
<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>
+<title>TUPLE_TOP</title>
+<ellipse fill="pink" stroke="black" cx="771" cy="-302.25" rx="42.65" ry="18"/>
+<text text-anchor="start" x="747.75" y="-298.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="763.5" y="-298.2" 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"/>
+<!-- TOP&#45;&gt;TUPLE_TOP -->
+<g id="edge25" class="edge">
+<title>TOP&#45;&gt;TUPLE_TOP</title>
+<path fill="none" stroke="black" d="M395.06,-372.49C455.97,-361.27 633.5,-328.57 721.03,-312.45"/>
+<polygon fill="black" stroke="black" points="721.57,-315.91 730.77,-310.66 720.3,-309.03 721.57,-315.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>
+<ellipse fill="black" stroke="black" cx="374" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="366.12" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
</g>
<!-- CTRL&#45;&gt;BOT -->
-<g id="edge26" class="edge">
+<g id="edge2" 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"/>
+<path fill="none" stroke="black" d="M48.71,-188.11C108.7,-157.31 276.83,-71 344.87,-36.08"/>
+<polygon fill="black" stroke="black" points="346.26,-39.3 353.55,-31.62 343.06,-33.07 346.26,-39.3"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="116" cy="-199.25" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="116" y="-194.2" 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">
+<g id="edge4" 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"/>
+<path fill="none" stroke="black" d="M347.36,-290.82C298.27,-271.6 193.98,-230.78 143.94,-211.18"/>
+<polygon fill="black" stroke="black" points="145.28,-207.95 134.69,-207.56 142.73,-214.47 145.28,-207.95"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="205" cy="-199.25" rx="27" ry="18"/>
+<text text-anchor="middle" x="205" y="-194.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
</g>
<!-- INT_TOP&#45;&gt;INT_MINDOTS -->
-<g id="edge3" class="edge">
+<g id="edge5" 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"/>
+<path fill="none" stroke="black" d="M352.25,-288.25C322.2,-270.29 267.88,-237.83 234.28,-217.75"/>
+<polygon fill="black" stroke="black" points="236.25,-214.85 225.87,-212.72 232.66,-220.85 236.25,-214.85"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="294" cy="-199.25" rx="18.6" ry="18.6"/>
+<text text-anchor="middle" x="294" y="-194.2" 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">
+<g id="edge6" 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"/>
+<path fill="none" stroke="black" d="M361.5,-285.47C348.27,-268.76 327.25,-242.23 312.18,-223.21"/>
+<polygon fill="black" stroke="black" points="315.02,-221.14 306.06,-215.48 309.53,-225.49 315.02,-221.14"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="374" cy="-199.25" rx="18" ry="18"/>
+<text text-anchor="middle" x="374" y="-194.2" font-family="Times New Roman,serif" font-size="14.00">0</text>
</g>
<!-- INT_TOP&#45;&gt;INT_ZERO -->
-<g id="edge5" class="edge">
+<g id="edge7" 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"/>
+<path fill="none" stroke="black" d="M374,-284.12C374,-269.02 374,-246.74 374,-228.93"/>
+<polygon fill="black" stroke="black" points="377.5,-228.98 374,-218.98 370.5,-228.98 377.5,-228.98"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="453" cy="-199.25" rx="18" ry="18"/>
+<text text-anchor="middle" x="453" y="-194.2" font-family="Times New Roman,serif" font-size="14.00">1</text>
</g>
<!-- INT_TOP&#45;&gt;INT_PLUS -->
-<g id="edge6" class="edge">
+<g id="edge8" 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"/>
+<path fill="none" stroke="black" d="M386.34,-285.47C399.49,-268.67 420.4,-241.93 435.3,-222.88"/>
+<polygon fill="black" stroke="black" points="437.93,-225.2 441.33,-215.17 432.41,-220.89 437.93,-225.2"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="541" cy="-199.25" rx="27" ry="18"/>
+<text text-anchor="middle" x="541" y="-194.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
</g>
<!-- INT_TOP&#45;&gt;INT_MAXDOTS -->
-<g id="edge7" class="edge">
+<g id="edge9" 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"/>
+<path fill="none" stroke="black" d="M395.83,-288.04C425.56,-270.07 478.84,-237.84 511.93,-217.83"/>
+<polygon fill="black" stroke="black" points="513.46,-221 520.2,-212.83 509.84,-215.01 513.46,-221"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="632" cy="-199.25" rx="21.15" ry="21.15"/>
+<text text-anchor="middle" x="632" y="-194.2" font-family="Times New Roman,serif" font-size="14.00">+n</text>
</g>
<!-- INT_TOP&#45;&gt;INT_MAX -->
-<g id="edge8" class="edge">
+<g id="edge10" 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"/>
+<path fill="none" stroke="black" d="M400.64,-290.82C449,-271.89 550.91,-231.99 601.78,-212.08"/>
+<polygon fill="black" stroke="black" points="602.96,-215.38 610.99,-208.47 600.41,-208.86 602.96,-215.38"/>
</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>
+<ellipse fill="lightblue" stroke="black" cx="374" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="357.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="372.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
</g>
<!-- INT_BOT&#45;&gt;BOT -->
-<g id="edge16" class="edge">
+<g id="edge18" 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"/>
+<path fill="none" stroke="black" d="M374,-77.92C374,-70.74 374,-62.18 374,-53.95"/>
+<polygon fill="black" stroke="black" points="377.5,-54.22 374,-44.22 370.5,-54.22 377.5,-54.22"/>
</g>
<!-- INT_MIN&#45;&gt;INT_BOT -->
-<g id="edge9" class="edge">
+<g id="edge11" 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"/>
+<path fill="none" stroke="black" d="M133.33,-191.46C174.74,-175.25 280.22,-133.96 336.8,-111.81"/>
+<polygon fill="black" stroke="black" points="337.98,-115.11 346.02,-108.2 335.43,-108.59 337.98,-115.11"/>
</g>
<!-- INT_MIN&#45;&gt;INT_MINDOTS -->
<!-- INT_MINDOTS&#45;&gt;INT_BOT -->
-<g id="edge10" class="edge">
+<g id="edge12" 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"/>
+<path fill="none" stroke="black" d="M224.72,-186.46C253.64,-169.18 307.88,-136.76 342.4,-116.13"/>
+<polygon fill="black" stroke="black" points="343.92,-119.3 350.71,-111.17 340.33,-113.29 343.92,-119.3"/>
</g>
<!-- INT_MINDOTS&#45;&gt;INT_MINUS -->
<!-- INT_MINUS&#45;&gt;INT_BOT -->
-<g id="edge11" class="edge">
+<g id="edge13" 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"/>
+<path fill="none" stroke="black" d="M305.12,-184.2C317.82,-168.18 338.81,-141.67 354.29,-122.13"/>
+<polygon fill="black" stroke="black" points="356.98,-124.37 360.45,-114.35 351.5,-120.02 356.98,-124.37"/>
</g>
<!-- INT_MINUS&#45;&gt;INT_ZERO -->
<!-- INT_ZERO&#45;&gt;INT_BOT -->
-<g id="edge12" class="edge">
+<g id="edge14" 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"/>
+<path fill="none" stroke="black" d="M374,-181.12C374,-166.02 374,-143.74 374,-125.93"/>
+<polygon fill="black" stroke="black" points="377.5,-125.98 374,-115.98 370.5,-125.98 377.5,-125.98"/>
</g>
<!-- INT_ZERO&#45;&gt;INT_PLUS -->
<!-- INT_PLUS&#45;&gt;INT_BOT -->
-<g id="edge13" class="edge">
+<g id="edge15" 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"/>
+<path fill="none" stroke="black" d="M442.35,-184.63C429.9,-168.71 409.04,-142.04 393.63,-122.35"/>
+<polygon fill="black" stroke="black" points="396.42,-120.23 387.5,-114.51 390.9,-124.54 396.42,-120.23"/>
</g>
<!-- INT_PLUS&#45;&gt;INT_MAXDOTS -->
<!-- INT_MAXDOTS&#45;&gt;INT_BOT -->
-<g id="edge14" class="edge">
+<g id="edge16" 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"/>
+<path fill="none" stroke="black" d="M521.52,-186.46C492.93,-169.18 439.34,-136.76 405.22,-116.13"/>
+<polygon fill="black" stroke="black" points="407.39,-113.35 397.03,-111.17 403.77,-119.34 407.39,-113.35"/>
</g>
<!-- INT_MAXDOTS&#45;&gt;INT_MAX -->
<!-- INT_MAX&#45;&gt;INT_BOT -->
-<g id="edge15" class="edge">
+<g id="edge17" 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"/>
+<path fill="none" stroke="black" d="M612.61,-190.66C569.87,-173.93 466.96,-133.64 411.28,-111.84"/>
+<polygon fill="black" stroke="black" points="412.8,-108.68 402.21,-108.29 410.25,-115.2 412.8,-108.68"/>
+</g>
+<!-- TUPLE1 -->
+<g id="node15" class="node">
+<title>TUPLE1</title>
+<polygon fill="none" stroke="none" points="750,-225.75 696,-225.75 696,-172.75 750,-172.75 750,-225.75"/>
+<polygon fill="pink" stroke="none" points="706.5,-199.25 706.5,-221.75 739.5,-221.75 739.5,-199.25 706.5,-199.25"/>
+<polygon fill="none" stroke="black" points="706.5,-199.25 706.5,-221.75 739.5,-221.75 739.5,-199.25 706.5,-199.25"/>
+<text text-anchor="start" x="709.5" y="-205.45" font-family="Times New Roman,serif" font-size="14.00">tuple</text>
+<polygon fill="black" stroke="none" points="706.5,-176.75 706.5,-199.25 739.5,-199.25 739.5,-176.75 706.5,-176.75"/>
+<polygon fill="none" stroke="black" points="706.5,-176.75 706.5,-199.25 739.5,-199.25 739.5,-176.75 706.5,-176.75"/>
+<text text-anchor="start" x="711.38" y="-182.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP&#45;&gt;TUPLE1 -->
+<g id="edge26" class="edge">
+<title>TUPLE_TOP&#45;&gt;TUPLE1</title>
+<path fill="none" stroke="black" d="M762.86,-284.12C756.58,-270.91 747.69,-252.2 739.89,-235.8"/>
+<polygon fill="black" stroke="black" points="743.07,-234.33 735.62,-226.8 736.75,-237.34 743.07,-234.33"/>
+</g>
+<!-- TUPLE2 -->
+<g id="node16" class="node">
+<title>TUPLE2</title>
+<polygon fill="none" stroke="none" points="847,-237 793,-237 793,-161.5 847,-161.5 847,-237"/>
+<polygon fill="pink" stroke="none" points="803.5,-210.5 803.5,-233 836.5,-233 836.5,-210.5 803.5,-210.5"/>
+<polygon fill="none" stroke="black" points="803.5,-210.5 803.5,-233 836.5,-233 836.5,-210.5 803.5,-210.5"/>
+<text text-anchor="start" x="806.5" y="-216.7" font-family="Times New Roman,serif" font-size="14.00">tuple</text>
+<polygon fill="black" stroke="none" points="803.5,-188 803.5,-210.5 836.5,-210.5 836.5,-188 803.5,-188"/>
+<polygon fill="none" stroke="black" points="803.5,-188 803.5,-210.5 836.5,-210.5 836.5,-188 803.5,-188"/>
+<text text-anchor="start" x="808.38" y="-194.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+<polygon fill="black" stroke="none" points="803.5,-165.5 803.5,-188 836.5,-188 836.5,-165.5 803.5,-165.5"/>
+<polygon fill="none" stroke="black" points="803.5,-165.5 803.5,-188 836.5,-188 836.5,-165.5 803.5,-165.5"/>
+<text text-anchor="start" x="808.38" y="-171.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP&#45;&gt;TUPLE2 -->
+<g id="edge27" class="edge">
+<title>TUPLE_TOP&#45;&gt;TUPLE2</title>
+<path fill="none" stroke="black" d="M779.31,-284.12C784.32,-273.8 790.95,-260.12 797.41,-246.81"/>
+<polygon fill="black" stroke="black" points="800.41,-248.65 801.62,-238.13 794.11,-245.6 800.41,-248.65"/>
+</g>
+<!-- TUPLEN -->
+<g id="node17" class="node">
+<title>TUPLEN</title>
+<polygon fill="none" stroke="none" points="944,-248.25 890,-248.25 890,-150.25 944,-150.25 944,-248.25"/>
+<polygon fill="pink" stroke="none" points="900.5,-221.75 900.5,-244.25 933.5,-244.25 933.5,-221.75 900.5,-221.75"/>
+<polygon fill="none" stroke="black" points="900.5,-221.75 900.5,-244.25 933.5,-244.25 933.5,-221.75 900.5,-221.75"/>
+<text text-anchor="start" x="903.5" y="-227.95" font-family="Times New Roman,serif" font-size="14.00">tuple</text>
+<polygon fill="black" stroke="none" points="900.5,-199.25 900.5,-221.75 933.5,-221.75 933.5,-199.25 900.5,-199.25"/>
+<polygon fill="none" stroke="black" points="900.5,-199.25 900.5,-221.75 933.5,-221.75 933.5,-199.25 900.5,-199.25"/>
+<text text-anchor="start" x="905.38" y="-205.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+<polygon fill="black" stroke="none" points="900.5,-176.75 900.5,-199.25 933.5,-199.25 933.5,-176.75 900.5,-176.75"/>
+<polygon fill="none" stroke="black" points="900.5,-176.75 900.5,-199.25 933.5,-199.25 933.5,-176.75 900.5,-176.75"/>
+<text text-anchor="start" x="911.38" y="-182.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text>
+<polygon fill="black" stroke="none" points="900.5,-154.25 900.5,-176.75 933.5,-176.75 933.5,-154.25 900.5,-154.25"/>
+<polygon fill="none" stroke="black" points="900.5,-154.25 900.5,-176.75 933.5,-176.75 933.5,-154.25 900.5,-154.25"/>
+<text text-anchor="start" x="905.38" y="-160.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP&#45;&gt;TUPLEN -->
+<g id="edge28" class="edge">
+<title>TUPLE_TOP&#45;&gt;TUPLEN</title>
+<path fill="none" stroke="black" d="M792.54,-286.35C815.75,-270.29 853.06,-244.48 880.79,-225.3"/>
+<polygon fill="black" stroke="black" points="882.68,-228.25 888.91,-219.68 878.7,-222.49 882.68,-228.25"/>
+</g>
+<!-- TUPLE_BOT -->
+<g id="node14" class="node">
+<title>TUPLE_BOT</title>
+<ellipse fill="pink" stroke="black" cx="771" cy="-96.25" rx="42.65" ry="18"/>
+<text text-anchor="start" x="747.75" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="763.5" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
+</g>
+<!-- TUPLE_BOT&#45;&gt;BOT -->
+<g id="edge32" class="edge">
+<title>TUPLE_BOT&#45;&gt;BOT</title>
+<path fill="none" stroke="black" d="M732.57,-88.17C654.42,-73.77 478.23,-41.32 405.9,-28"/>
+<polygon fill="black" stroke="black" points="406.78,-24.6 396.31,-26.23 405.51,-31.49 406.78,-24.6"/>
+</g>
+<!-- TUPLE1&#45;&gt;TUPLE_BOT -->
+<g id="edge29" class="edge">
+<title>TUPLE1&#45;&gt;TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M735.11,-172.76C742.13,-158 750.96,-139.41 758.11,-124.38"/>
+<polygon fill="black" stroke="black" points="761.18,-126.06 762.31,-115.53 754.86,-123.06 761.18,-126.06"/>
+</g>
+<!-- TUPLE2&#45;&gt;TUPLE_BOT -->
+<g id="edge30" class="edge">
+<title>TUPLE2&#45;&gt;TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M802.17,-161.5C796.24,-149.27 789.75,-135.89 784.23,-124.51"/>
+<polygon fill="black" stroke="black" points="787.46,-123.15 779.94,-115.69 781.16,-126.21 787.46,-123.15"/>
+</g>
+<!-- TUPLEN&#45;&gt;TUPLE_BOT -->
+<g id="edge31" class="edge">
+<title>TUPLEN&#45;&gt;TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M890.22,-179.72C865.26,-162.45 828.04,-136.71 801.84,-118.58"/>
+<polygon fill="black" stroke="black" points="803.85,-115.72 793.64,-112.91 799.87,-121.47 803.85,-115.72"/>
</g>
</g>
</svg>