summaryrefslogtreecommitdiff
path: root/docs/chapter04/lattice.svg
diff options
context:
space:
mode:
Diffstat (limited to 'docs/chapter04/lattice.svg')
-rw-r--r--docs/chapter04/lattice.svg305
1 files changed, 305 insertions, 0 deletions
diff --git a/docs/chapter04/lattice.svg b/docs/chapter04/lattice.svg
new file mode 100644
index 00000000..35cb9296
--- /dev/null
+++ b/docs/chapter04/lattice.svg
@@ -0,0 +1,305 @@
+<?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="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,-402.5 948,-402.5 948,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<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="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="edge1" class="edge">
+<title>TOP&#45;&gt;CTRL</title>
+<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="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="edge3" class="edge">
+<title>TOP&#45;&gt;INT_TOP</title>
+<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_TOP -->
+<g id="node13" class="node">
+<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_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="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="edge2" class="edge">
+<title>CTRL&#45;&gt;BOT</title>
+<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="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="edge4" class="edge">
+<title>INT_TOP&#45;&gt;INT_MIN</title>
+<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>
+<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="edge5" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINDOTS</title>
+<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="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="edge6" class="edge">
+<title>INT_TOP&#45;&gt;INT_MINUS</title>
+<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="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="edge7" class="edge">
+<title>INT_TOP&#45;&gt;INT_ZERO</title>
+<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="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="edge8" class="edge">
+<title>INT_TOP&#45;&gt;INT_PLUS</title>
+<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>
+<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="edge9" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAXDOTS</title>
+<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="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="edge10" class="edge">
+<title>INT_TOP&#45;&gt;INT_MAX</title>
+<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="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="edge18" class="edge">
+<title>INT_BOT&#45;&gt;BOT</title>
+<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="edge11" class="edge">
+<title>INT_MIN&#45;&gt;INT_BOT</title>
+<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="edge12" class="edge">
+<title>INT_MINDOTS&#45;&gt;INT_BOT</title>
+<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="edge13" class="edge">
+<title>INT_MINUS&#45;&gt;INT_BOT</title>
+<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="edge14" class="edge">
+<title>INT_ZERO&#45;&gt;INT_BOT</title>
+<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="edge15" class="edge">
+<title>INT_PLUS&#45;&gt;INT_BOT</title>
+<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="edge16" class="edge">
+<title>INT_MAXDOTS&#45;&gt;INT_BOT</title>
+<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="edge17" class="edge">
+<title>INT_MAX&#45;&gt;INT_BOT</title>
+<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>