diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/lattice_i2.gv | 47 | ||||
| -rw-r--r-- | docs/lattice_i2.svg | 155 | ||||
| -rw-r--r-- | docs/lattice_if.gv | 81 | ||||
| -rw-r--r-- | docs/lattice_if.svg | 405 | ||||
| -rw-r--r-- | docs/lattice_iff.gv | 97 | ||||
| -rw-r--r-- | docs/lattice_iff.svg | 364 | ||||
| -rw-r--r-- | docs/lattice_iffc.gv | 106 | ||||
| -rw-r--r-- | docs/lattice_iffc.svg | 396 | ||||
| -rw-r--r-- | docs/lattice_iffcs.gv | 143 | ||||
| -rw-r--r-- | docs/lattice_iffcs.svg | 547 | ||||
| -rw-r--r-- | docs/lattice_iffct.gv | 145 | ||||
| -rw-r--r-- | docs/lattice_iffct.svg | 500 |
12 files changed, 2754 insertions, 232 deletions
diff --git a/docs/lattice_i2.gv b/docs/lattice_i2.gv new file mode 100644 index 00000000..f7eed48c --- /dev/null +++ b/docs/lattice_i2.gv @@ -0,0 +1,47 @@ +digraph Lattice { + compound = true; + // Define nodes + splines=false; + node [shape=circle, style=filled]; + nodesep=0.6; + + TOP [label=<<B>⊤</B >>, fillcolor=black, fontcolor=white]; + BOT [label=<<B>⊥</B>>, fillcolor=black, fontcolor=white]; + + // ---------------------- + // Integers + INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval]; + + INT_HI [label="max < min" , fillcolor=lightblue, shape=oval]; + INT_XBOOL [label="1...0", fillcolor=lightblue, shape=oval]; + INT_CON [label="constants...", fillcolor=lightblue, shape=oval]; + INT_CON0 [label="0", fillcolor=lightblue]; + INT_CON1 [label="1", fillcolor=lightblue]; + INT_BOOL [label="0...1", fillcolor=lightblue,shape=oval]; + INT_LO [label="max > min" , fillcolor=lightblue, shape=oval]; + + TOP -> INT_TOP; + INT_TOP -> INT_HI; + INT_HI -> INT_XBOOL; + INT_XBOOL -> INT_CON0; + INT_XBOOL -> INT_CON1; + INT_HI -> INT_CON; + INT_CON0 -> INT_BOOL; + INT_CON1 -> INT_BOOL; + INT_BOOL -> INT_LO; + INT_CON -> INT_LO; + INT_LO -> INT_BOT; + INT_BOT -> BOT; + + INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; + + + // Additional customization + {rank=same; TOP} + {rank=same; INT_TOP; } + {rank=same; INT_CON; INT_CON0; INT_CON1; + } + {rank=same; INT_BOT; } + {rank=same; BOT;} +} diff --git a/docs/lattice_i2.svg b/docs/lattice_i2.svg new file mode 100644 index 00000000..ab10c485 --- /dev/null +++ b/docs/lattice_i2.svg @@ -0,0 +1,155 @@ +<?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="272pt" height="632pt"
+ viewBox="0.00 0.00 271.89 632.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 628.5)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-628.5 267.89,-628.5 267.89,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="143" cy="-603.37" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="135.12" y="-598.95" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text>
+</g>
+<!-- INT_TOP -->
+<g id="node3" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="143" cy="-528.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="126.12" y="-524.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="141.88" y="-524.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- TOP->INT_TOP -->
+<g id="edge1" class="edge">
+<title>TOP->INT_TOP</title>
+<path fill="none" stroke="black" d="M143,-582C143,-574.51 143,-565.87 143,-557.79"/>
+<polygon fill="black" stroke="black" points="146.5,-558.05 143,-548.05 139.5,-558.05 146.5,-558.05"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="143" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="135.12" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
+</g>
+<!-- INT_HI -->
+<g id="node5" class="node">
+<title>INT_HI</title>
+<ellipse fill="lightblue" stroke="black" cx="143" cy="-456.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="143" y="-451.2" font-family="Times New Roman,serif" font-size="14.00">max < min</text>
+</g>
+<!-- INT_TOP->INT_HI -->
+<g id="edge2" class="edge">
+<title>INT_TOP->INT_HI</title>
+<path fill="none" stroke="black" d="M143,-509.94C143,-502.65 143,-493.97 143,-485.78"/>
+<polygon fill="black" stroke="black" points="146.5,-485.87 143,-475.87 139.5,-485.87 146.5,-485.87"/>
+</g>
+<!-- INT_BOT -->
+<g id="node4" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="143" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="126.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="141.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT->BOT -->
+<g id="edge12" class="edge">
+<title>INT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M143,-77.92C143,-70.74 143,-62.18 143,-53.95"/>
+<polygon fill="black" stroke="black" points="146.5,-54.22 143,-44.22 139.5,-54.22 146.5,-54.22"/>
+</g>
+<!-- INT_XBOOL -->
+<g id="node6" class="node">
+<title>INT_XBOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-384.25" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-379.2" font-family="Times New Roman,serif" font-size="14.00">1...0</text>
+</g>
+<!-- INT_HI->INT_XBOOL -->
+<g id="edge3" class="edge">
+<title>INT_HI->INT_XBOOL</title>
+<path fill="none" stroke="black" d="M131.86,-438.3C126.4,-429.98 119.7,-419.79 113.64,-410.57"/>
+<polygon fill="black" stroke="black" points="116.65,-408.78 108.23,-402.34 110.8,-412.62 116.65,-408.78"/>
+</g>
+<!-- INT_CON -->
+<g id="node7" class="node">
+<title>INT_CON</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-312.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-307.2" font-family="Times New Roman,serif" font-size="14.00">constants...</text>
+</g>
+<!-- INT_HI->INT_CON -->
+<g id="edge6" class="edge">
+<title>INT_HI->INT_CON</title>
+<path fill="none" stroke="black" d="M151.61,-438.01C163.21,-413.45 183.97,-369.5 197.61,-340.6"/>
+<polygon fill="black" stroke="black" points="200.71,-342.24 201.81,-331.71 194.38,-339.25 200.71,-342.24"/>
+</g>
+<!-- INT_CON0 -->
+<g id="node8" class="node">
+<title>INT_CON0</title>
+<ellipse fill="lightblue" stroke="black" cx="18" cy="-312.25" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-307.2" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_XBOOL->INT_CON0 -->
+<g id="edge4" class="edge">
+<title>INT_XBOOL->INT_CON0</title>
+<path fill="none" stroke="black" d="M81.01,-369.08C69.07,-358.5 52.62,-343.92 39.52,-332.32"/>
+<polygon fill="black" stroke="black" points="42.03,-329.86 32.22,-325.85 37.38,-335.1 42.03,-329.86"/>
+</g>
+<!-- INT_CON1 -->
+<g id="node9" class="node">
+<title>INT_CON1</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-312.25" rx="18" ry="18"/>
+<text text-anchor="middle" x="97" y="-307.2" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_XBOOL->INT_CON1 -->
+<g id="edge5" class="edge">
+<title>INT_XBOOL->INT_CON1</title>
+<path fill="none" stroke="black" d="M97,-365.94C97,-358.65 97,-349.97 97,-341.78"/>
+<polygon fill="black" stroke="black" points="100.5,-341.87 97,-331.87 93.5,-341.87 100.5,-341.87"/>
+</g>
+<!-- INT_LO -->
+<g id="node11" class="node">
+<title>INT_LO</title>
+<ellipse fill="lightblue" stroke="black" cx="143" cy="-168.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="143" y="-163.2" font-family="Times New Roman,serif" font-size="14.00">max > min</text>
+</g>
+<!-- INT_CON->INT_LO -->
+<g id="edge10" class="edge">
+<title>INT_CON->INT_LO</title>
+<path fill="none" stroke="black" d="M202.39,-294.01C190.79,-269.45 170.03,-225.5 156.39,-196.6"/>
+<polygon fill="black" stroke="black" points="159.62,-195.25 152.19,-187.71 153.29,-198.24 159.62,-195.25"/>
+</g>
+<!-- INT_CON0->INT_CON1 -->
+<!-- INT_BOOL -->
+<g id="node10" class="node">
+<title>INT_BOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-240.25" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-235.2" font-family="Times New Roman,serif" font-size="14.00">0...1</text>
+</g>
+<!-- INT_CON0->INT_BOOL -->
+<g id="edge7" class="edge">
+<title>INT_CON0->INT_BOOL</title>
+<path fill="none" stroke="black" d="M31.05,-299.69C42.33,-289.69 58.96,-274.96 72.69,-262.79"/>
+<polygon fill="black" stroke="black" points="74.92,-265.49 80.08,-256.24 70.27,-260.25 74.92,-265.49"/>
+</g>
+<!-- INT_CON1->INT_CON -->
+<!-- INT_CON1->INT_BOOL -->
+<g id="edge8" class="edge">
+<title>INT_CON1->INT_BOOL</title>
+<path fill="none" stroke="black" d="M97,-293.94C97,-286.65 97,-277.97 97,-269.78"/>
+<polygon fill="black" stroke="black" points="100.5,-269.87 97,-259.87 93.5,-269.87 100.5,-269.87"/>
+</g>
+<!-- INT_BOOL->INT_LO -->
+<g id="edge9" class="edge">
+<title>INT_BOOL->INT_LO</title>
+<path fill="none" stroke="black" d="M107.44,-223.36C112.87,-215.1 119.65,-204.79 125.82,-195.39"/>
+<polygon fill="black" stroke="black" points="128.56,-197.59 131.13,-187.31 122.71,-193.75 128.56,-197.59"/>
+</g>
+<!-- INT_LO->INT_BOT -->
+<g id="edge11" class="edge">
+<title>INT_LO->INT_BOT</title>
+<path fill="none" stroke="black" d="M143,-149.94C143,-142.65 143,-133.97 143,-125.78"/>
+<polygon fill="black" stroke="black" points="146.5,-125.87 143,-115.87 139.5,-125.87 146.5,-125.87"/>
+</g>
+</g>
+</svg>
diff --git a/docs/lattice_if.gv b/docs/lattice_if.gv index feb53dfe..445afd62 100644 --- a/docs/lattice_if.gv +++ b/docs/lattice_if.gv @@ -13,58 +13,63 @@ digraph Lattice { 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_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]; + INT_HI [label="max < min" , fillcolor=lightblue, shape=oval]; + INT_XBOOL [label="1...0", fillcolor=lightblue, shape=oval]; + INT_CON [label="constants...", fillcolor=lightblue, shape=oval]; + INT_CON0 [label="0", fillcolor=lightblue]; + INT_CON1 [label="1", fillcolor=lightblue]; + INT_BOOL [label="0...1", fillcolor=lightblue,shape=oval]; + INT_LO [label="max > min" , fillcolor=lightblue, shape=oval]; - TOP -> INT_TOP; - INT_TOP -> INT_MIN; - INT_TOP -> INT_MINDOTS; - INT_TOP -> INT_MINUS; - INT_TOP -> INT_ZERO; - INT_TOP -> INT_PLUS; - INT_TOP -> INT_MAXDOTS; - INT_TOP -> INT_MAX; - INT_MIN -> INT_BOT; - INT_MINDOTS -> INT_BOT; - INT_MINUS -> INT_BOT; - INT_ZERO -> INT_BOT; - INT_PLUS -> INT_BOT; - INT_MAXDOTS -> INT_BOT; - INT_MAX -> INT_BOT; - INT_BOT -> BOT; + TOP -> INT_TOP; + INT_TOP -> INT_HI; + INT_HI -> INT_XBOOL; + INT_XBOOL -> INT_CON0; + INT_XBOOL -> INT_CON1; + INT_HI -> INT_CON; + INT_CON0 -> INT_BOOL; + INT_CON1 -> INT_BOOL; + INT_BOOL -> INT_LO; + INT_CON -> INT_LO; + INT_LO -> INT_BOT; + INT_BOT -> BOT; - INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis]; + INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; // ---------------------- // Floats FLT_TOP [label=<<B>⊤</B >:flt>, fillcolor=aqua, shape=oval]; FLT_BOT [label=<<B>⊥</B>:flt>, fillcolor=aqua, shape=oval]; - FLT_MINDOTS [label="...", fillcolor=aqua, shape=oval]; - FLT_ZERO [label="0" , fillcolor=aqua]; - FLT_MAXDOTS [label="...", fillcolor=aqua, shape=oval]; + FLT_CON64 [label="64b consts\n[excludes\n32b consts]" , fillcolor=aqua, shape=oval]; + FLT_CON32 [label="32b consts", fillcolor=aqua, shape=oval]; + FLT_CONPI [label="3.14159...", fillcolor=aqua, shape=oval]; + FLT_X32 [label="~f32", fillcolor=aqua]; + FLT_CON0 [label="0." , fillcolor=aqua]; + FLT_32 [label="f32" , fillcolor=aqua]; - TOP -> FLT_TOP; - FLT_TOP -> FLT_MINDOTS; - FLT_TOP -> FLT_ZERO; - FLT_TOP -> FLT_MAXDOTS; - FLT_MINDOTS -> FLT_BOT; - FLT_ZERO -> FLT_BOT; - FLT_MAXDOTS -> FLT_BOT; - FLT_BOT -> BOT; + TOP -> FLT_TOP; + FLT_TOP -> FLT_CON64 + FLT_TOP -> FLT_CONPI + FLT_CON64 -> FLT_BOT + FLT_CONPI -> FLT_BOT + + FLT_TOP -> FLT_X32; + FLT_X32 -> FLT_CON0; + FLT_X32 -> FLT_CON32; + FLT_CON0 -> FLT_32; + FLT_CON32 -> FLT_32; + FLT_32 -> FLT_BOT + + FLT_BOT -> BOT; - FLT_MINDOTS -> FLT_ZERO -> FLT_MAXDOTS [style=invis]; + FLT_CON0 -> FLT_CON32 -> FLT_CONPI -> FLT_CON64 [style=invis]; // Additional customization {rank=same; TOP} {rank=same; INT_TOP; FLT_TOP; } - {rank=same; INT_MIN; INT_MINDOTS; INT_MINUS; INT_ZERO; INT_PLUS; INT_MAXDOTS; INT_MAX; - FLT_MINDOTS; FLT_ZERO; FLT_MAXDOTS; + {rank=same; INT_CON; INT_CON0; INT_CON1; + FLT_CON32; FLT_CON64; FLT_CON0; FLT_CONPI; } {rank=same; INT_BOT; FLT_BOT; } {rank=same; BOT;} diff --git a/docs/lattice_if.svg b/docs/lattice_if.svg index 1f6af94a..7e2e8fc1 100644 --- a/docs/lattice_if.svg +++ b/docs/lattice_if.svg @@ -4,262 +4,279 @@ <!-- Generated by graphviz version 12.2.0 (20241103.1931)
-->
<!-- Title: Lattice Pages: 1 -->
-<svg width="837pt" height="351pt"
- viewBox="0.00 0.00 836.60 350.81" 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 346.81)">
+<svg width="788pt" height="709pt"
+ viewBox="0.00 0.00 788.33 708.86" 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 704.86)">
<title>Lattice</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-346.81 832.6,-346.81 832.6,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-704.86 784.33,-704.86 784.33,4 -4,4"/>
<!-- TOP -->
<g id="node1" class="node">
<title>TOP</title>
-<ellipse fill="black" stroke="black" cx="451.6" cy="-321.68" rx="21.12" ry="21.12"/>
-<text text-anchor="start" x="443.72" y="-317.26" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text>
+<ellipse fill="black" stroke="black" cx="389" cy="-679.73" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="381.12" y="-675.31" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text>
</g>
<!-- INT_TOP -->
<g id="node3" class="node">
<title>INT_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="316.6" cy="-246.56" rx="33.95" ry="18"/>
-<text text-anchor="start" x="299.72" y="-242.51" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="315.47" y="-242.51" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+<ellipse fill="lightblue" stroke="black" cx="335" cy="-604.61" rx="33.95" ry="18"/>
+<text text-anchor="start" x="318.12" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="333.88" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:int</text>
</g>
<!-- TOP->INT_TOP -->
<g id="edge1" class="edge">
<title>TOP->INT_TOP</title>
-<path fill="none" stroke="black" d="M433.11,-310.67C411.69,-299.07 375.98,-279.72 349.73,-265.51"/>
-<polygon fill="black" stroke="black" points="351.62,-262.55 341.16,-260.86 348.29,-268.71 351.62,-262.55"/>
+<path fill="none" stroke="black" d="M376.75,-662.14C369.93,-652.91 361.31,-641.24 353.68,-630.9"/>
+<polygon fill="black" stroke="black" points="356.67,-629.07 347.92,-623.1 351.04,-633.23 356.67,-629.07"/>
</g>
<!-- FLT_TOP -->
<g id="node12" class="node">
<title>FLT_TOP</title>
-<ellipse fill="aqua" stroke="black" cx="669.6" cy="-246.56" rx="32.41" ry="18"/>
-<text text-anchor="start" x="653.85" y="-242.51" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="669.6" y="-242.51" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+<ellipse fill="aqua" stroke="black" cx="502" cy="-604.61" rx="32.41" ry="18"/>
+<text text-anchor="start" x="486.25" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="502" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
</g>
<!-- TOP->FLT_TOP -->
-<g id="edge23" class="edge">
+<g id="edge15" class="edge">
<title>TOP->FLT_TOP</title>
-<path fill="none" stroke="black" d="M471.71,-313.93C508.04,-301.75 585.1,-275.9 631.61,-260.3"/>
-<polygon fill="black" stroke="black" points="632.65,-263.64 641.02,-257.14 630.43,-257.01 632.65,-263.64"/>
+<path fill="none" stroke="black" d="M406.66,-667.31C424.05,-656.05 450.95,-638.64 471.75,-625.18"/>
+<polygon fill="black" stroke="black" points="473.64,-628.13 480.13,-619.76 469.84,-622.25 473.64,-628.13"/>
</g>
<!-- BOT -->
<g id="node2" class="node">
<title>BOT</title>
-<ellipse fill="black" stroke="black" cx="451.6" cy="-21.12" rx="21.12" ry="21.12"/>
-<text text-anchor="start" x="443.72" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
+<ellipse fill="black" stroke="black" cx="394" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="386.12" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
</g>
-<!-- INT_MIN -->
+<!-- INT_HI -->
<g id="node5" class="node">
-<title>INT_MIN</title>
-<ellipse fill="lightblue" stroke="black" cx="18.6" cy="-171.4" rx="18.6" ry="18.6"/>
-<text text-anchor="middle" x="18.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">-n</text>
+<title>INT_HI</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-532.61" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-527.56" font-family="Times New Roman,serif" font-size="14.00">max < min</text>
</g>
-<!-- INT_TOP->INT_MIN -->
+<!-- INT_TOP->INT_HI -->
<g id="edge2" class="edge">
-<title>INT_TOP->INT_MIN</title>
-<path fill="none" stroke="black" d="M286.1,-238.07C228.49,-223.93 104.36,-193.46 47.78,-179.57"/>
-<polygon fill="black" stroke="black" points="48.79,-176.21 38.24,-177.23 47.12,-183.01 48.79,-176.21"/>
+<title>INT_TOP->INT_HI</title>
+<path fill="none" stroke="black" d="M312.26,-590.77C294.11,-580.53 268.34,-565.98 247.34,-554.13"/>
+<polygon fill="black" stroke="black" points="249.22,-551.17 238.79,-549.3 245.78,-557.26 249.22,-551.17"/>
</g>
-<!-- INT_MINDOTS -->
+<!-- INT_BOT -->
+<g id="node4" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="340" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="323.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="338.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT->BOT -->
+<g id="edge12" class="edge">
+<title>INT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M351.98,-79.02C358.74,-69.87 367.34,-58.23 374.99,-47.87"/>
+<polygon fill="black" stroke="black" points="377.65,-50.16 380.78,-40.03 372.02,-46 377.65,-50.16"/>
+</g>
+<!-- INT_XBOOL -->
<g id="node6" class="node">
-<title>INT_MINDOTS</title>
-<ellipse fill="lightblue" stroke="black" cx="107.6" cy="-171.4" rx="27" ry="18"/>
-<text text-anchor="middle" x="107.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">...</text>
+<title>INT_XBOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-450.29" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">1...0</text>
</g>
-<!-- INT_TOP->INT_MINDOTS -->
+<!-- INT_HI->INT_XBOOL -->
<g id="edge3" class="edge">
-<title>INT_TOP->INT_MINDOTS</title>
-<path fill="none" stroke="black" d="M288.84,-235.84C250.98,-222.59 183.17,-198.86 142.09,-184.48"/>
-<polygon fill="black" stroke="black" points="143.28,-181.19 132.69,-181.19 140.97,-187.79 143.28,-181.19"/>
+<title>INT_HI->INT_XBOOL</title>
+<path fill="none" stroke="black" d="M188.75,-515.93C170.46,-503.04 144.44,-484.72 124.78,-470.87"/>
+<polygon fill="black" stroke="black" points="126.86,-468.05 116.67,-465.15 122.83,-473.77 126.86,-468.05"/>
</g>
-<!-- INT_MINUS -->
+<!-- INT_CON -->
<g id="node7" class="node">
-<title>INT_MINUS</title>
-<ellipse fill="lightblue" stroke="black" cx="196.6" cy="-171.4" rx="18.6" ry="18.6"/>
-<text text-anchor="middle" x="196.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">-1</text>
+<title>INT_CON</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-345.31" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">constants...</text>
</g>
-<!-- INT_TOP->INT_MINUS -->
-<g id="edge4" class="edge">
-<title>INT_TOP->INT_MINUS</title>
-<path fill="none" stroke="black" d="M294.86,-232.31C274.43,-219.85 243.84,-201.21 222.23,-188.03"/>
-<polygon fill="black" stroke="black" points="224.08,-185.06 213.71,-182.84 220.43,-191.03 224.08,-185.06"/>
+<!-- INT_HI->INT_CON -->
+<g id="edge6" class="edge">
+<title>INT_HI->INT_CON</title>
+<path fill="none" stroke="black" d="M211,-514.31C211,-481.93 211,-414.27 211,-375.09"/>
+<polygon fill="black" stroke="black" points="214.5,-375.2 211,-365.2 207.5,-375.2 214.5,-375.2"/>
</g>
-<!-- INT_ZERO -->
+<!-- INT_CON0 -->
<g id="node8" class="node">
-<title>INT_ZERO</title>
-<ellipse fill="lightblue" stroke="black" cx="276.6" cy="-171.4" rx="18" ry="18"/>
-<text text-anchor="middle" x="276.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">0</text>
+<title>INT_CON0</title>
+<ellipse fill="lightblue" stroke="black" cx="18" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
</g>
-<!-- INT_TOP->INT_ZERO -->
-<g id="edge5" class="edge">
-<title>INT_TOP->INT_ZERO</title>
-<path fill="none" stroke="black" d="M307.52,-228.96C302.4,-219.6 295.91,-207.72 290.19,-197.27"/>
-<polygon fill="black" stroke="black" points="293.41,-195.87 285.55,-188.77 287.27,-199.23 293.41,-195.87"/>
+<!-- INT_XBOOL->INT_CON0 -->
+<g id="edge4" class="edge">
+<title>INT_XBOOL->INT_CON0</title>
+<path fill="none" stroke="black" d="M85,-433.65C71.8,-416.44 50.45,-388.61 35.41,-369"/>
+<polygon fill="black" stroke="black" points="38.38,-367.12 29.51,-361.32 32.82,-371.38 38.38,-367.12"/>
</g>
-<!-- INT_PLUS -->
+<!-- INT_CON1 -->
<g id="node9" class="node">
-<title>INT_PLUS</title>
-<ellipse fill="lightblue" stroke="black" cx="355.6" cy="-171.4" rx="18" ry="18"/>
-<text text-anchor="middle" x="355.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">1</text>
+<title>INT_CON1</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="97" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">1</text>
</g>
-<!-- INT_TOP->INT_PLUS -->
-<g id="edge6" class="edge">
-<title>INT_TOP->INT_PLUS</title>
-<path fill="none" stroke="black" d="M325.45,-228.96C330.32,-219.82 336.47,-208.29 341.94,-198.02"/>
-<polygon fill="black" stroke="black" points="344.99,-199.74 346.6,-189.27 338.81,-196.45 344.99,-199.74"/>
+<!-- INT_XBOOL->INT_CON1 -->
+<g id="edge5" class="edge">
+<title>INT_XBOOL->INT_CON1</title>
+<path fill="none" stroke="black" d="M97,-431.82C97,-416.27 97,-393.22 97,-374.97"/>
+<polygon fill="black" stroke="black" points="100.5,-375.04 97,-365.04 93.5,-375.04 100.5,-375.04"/>
+</g>
+<!-- INT_LO -->
+<g id="node11" class="node">
+<title>INT_LO</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-168.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-163.2" font-family="Times New Roman,serif" font-size="14.00">max > min</text>
+</g>
+<!-- INT_CON->INT_LO -->
+<g id="edge10" class="edge">
+<title>INT_CON->INT_LO</title>
+<path fill="none" stroke="black" d="M211,-327.03C211,-296.55 211,-235.05 211,-198.18"/>
+<polygon fill="black" stroke="black" points="214.5,-198.21 211,-188.21 207.5,-198.21 214.5,-198.21"/>
</g>
-<!-- INT_MAXDOTS -->
+<!-- INT_CON0->INT_CON1 -->
+<!-- INT_BOOL -->
<g id="node10" class="node">
-<title>INT_MAXDOTS</title>
-<ellipse fill="lightblue" stroke="black" cx="443.6" cy="-171.4" rx="27" ry="18"/>
-<text text-anchor="middle" x="443.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">...</text>
+<title>INT_BOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-245.45" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">0...1</text>
</g>
-<!-- INT_TOP->INT_MAXDOTS -->
+<!-- INT_CON0->INT_BOOL -->
<g id="edge7" class="edge">
-<title>INT_TOP->INT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M339.01,-232.65C359.76,-220.7 390.76,-202.84 413.63,-189.66"/>
-<polygon fill="black" stroke="black" points="415.27,-192.76 422.19,-184.73 411.77,-186.69 415.27,-192.76"/>
+<title>INT_CON0->INT_BOOL</title>
+<path fill="none" stroke="black" d="M28.98,-330.7C41.46,-315.25 62.06,-289.73 77.33,-270.81"/>
+<polygon fill="black" stroke="black" points="80.04,-273.03 83.6,-263.05 74.59,-268.64 80.04,-273.03"/>
</g>
-<!-- INT_MAX -->
-<g id="node11" class="node">
-<title>INT_MAX</title>
-<ellipse fill="lightblue" stroke="black" cx="534.6" cy="-171.4" rx="21.15" ry="21.15"/>
-<text text-anchor="middle" x="534.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">+n</text>
-</g>
-<!-- INT_TOP->INT_MAX -->
+<!-- INT_CON1->INT_CON -->
+<!-- INT_CON1->INT_BOOL -->
<g id="edge8" class="edge">
-<title>INT_TOP->INT_MAX</title>
-<path fill="none" stroke="black" d="M344.65,-236.14C385.52,-222.43 461.18,-197.04 503.63,-182.79"/>
-<polygon fill="black" stroke="black" points="504.62,-186.15 512.98,-179.66 502.39,-179.52 504.62,-186.15"/>
-</g>
-<!-- INT_BOT -->
-<g id="node4" class="node">
-<title>INT_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="316.6" cy="-96.25" rx="33.95" ry="18"/>
-<text text-anchor="start" x="299.72" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="315.47" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+<title>INT_CON1->INT_BOOL</title>
+<path fill="none" stroke="black" d="M97,-326.82C97,-312.48 97,-291.91 97,-275.16"/>
+<polygon fill="black" stroke="black" points="100.5,-275.31 97,-265.31 93.5,-275.31 100.5,-275.31"/>
</g>
-<!-- INT_BOT->BOT -->
-<g id="edge16" class="edge">
-<title>INT_BOT->BOT</title>
-<path fill="none" stroke="black" d="M339.8,-82.68C362.89,-70.17 398.36,-50.96 423.13,-37.54"/>
-<polygon fill="black" stroke="black" points="424.57,-40.74 431.7,-32.9 421.24,-34.59 424.57,-40.74"/>
-</g>
-<!-- INT_MIN->INT_BOT -->
+<!-- INT_BOOL->INT_LO -->
<g id="edge9" class="edge">
-<title>INT_MIN->INT_BOT</title>
-<path fill="none" stroke="black" d="M36.79,-165.94C83.64,-154.44 209.35,-123.58 275.15,-107.42"/>
-<polygon fill="black" stroke="black" points="275.98,-110.82 284.85,-105.04 274.31,-104.03 275.98,-110.82"/>
+<title>INT_BOOL->INT_LO</title>
+<path fill="none" stroke="black" d="M116.08,-231.86C132.97,-220.72 157.98,-204.22 178.09,-190.96"/>
+<polygon fill="black" stroke="black" points="179.83,-194.01 186.25,-185.58 175.97,-188.16 179.83,-194.01"/>
</g>
-<!-- INT_MIN->INT_MINDOTS -->
-<!-- INT_MINDOTS->INT_BOT -->
-<g id="edge10" class="edge">
-<title>INT_MINDOTS->INT_BOT</title>
-<path fill="none" stroke="black" d="M131.16,-162.15C166.91,-149.64 235.21,-125.73 278.2,-110.69"/>
-<polygon fill="black" stroke="black" points="279.1,-114.08 287.38,-107.47 276.79,-107.47 279.1,-114.08"/>
-</g>
-<!-- INT_MINDOTS->INT_MINUS -->
-<!-- INT_MINUS->INT_BOT -->
+<!-- INT_LO->INT_BOT -->
<g id="edge11" class="edge">
-<title>INT_MINUS->INT_BOT</title>
-<path fill="none" stroke="black" d="M212.28,-160.84C230.74,-149.59 261.83,-130.63 285.28,-116.34"/>
-<polygon fill="black" stroke="black" points="286.79,-119.51 293.51,-111.32 283.15,-113.54 286.79,-119.51"/>
+<title>INT_LO->INT_BOT</title>
+<path fill="none" stroke="black" d="M238.36,-152.4C258.44,-141.5 285.81,-126.65 307.09,-115.1"/>
+<polygon fill="black" stroke="black" points="308.54,-118.3 315.66,-110.45 305.2,-112.15 308.54,-118.3"/>
</g>
-<!-- INT_MINUS->INT_ZERO -->
-<!-- INT_ZERO->INT_BOT -->
-<g id="edge12" class="edge">
-<title>INT_ZERO->INT_BOT</title>
-<path fill="none" stroke="black" d="M284.88,-155.25C289.83,-146.21 296.24,-134.47 302.01,-123.92"/>
-<polygon fill="black" stroke="black" points="305.03,-125.7 306.76,-115.24 298.89,-122.34 305.03,-125.7"/>
-</g>
-<!-- INT_ZERO->INT_PLUS -->
-<!-- INT_PLUS->INT_BOT -->
-<g id="edge13" class="edge">
-<title>INT_PLUS->INT_BOT</title>
-<path fill="none" stroke="black" d="M347.32,-154.89C342.53,-145.89 336.36,-134.32 330.81,-123.9"/>
-<polygon fill="black" stroke="black" points="334.04,-122.53 326.25,-115.35 327.86,-125.82 334.04,-122.53"/>
-</g>
-<!-- INT_PLUS->INT_MAXDOTS -->
-<!-- INT_MAXDOTS->INT_BOT -->
-<g id="edge14" class="edge">
-<title>INT_MAXDOTS->INT_BOT</title>
-<path fill="none" stroke="black" d="M423.47,-158.81C403.37,-147.23 372.15,-129.25 348.63,-115.7"/>
-<polygon fill="black" stroke="black" points="350.48,-112.73 340.07,-110.77 346.99,-118.79 350.48,-112.73"/>
-</g>
-<!-- INT_MAXDOTS->INT_MAX -->
-<!-- INT_MAX->INT_BOT -->
-<g id="edge15" class="edge">
-<title>INT_MAX->INT_BOT</title>
-<path fill="none" stroke="black" d="M514.48,-163.65C478.45,-151.56 402.33,-126.02 355.71,-110.37"/>
-<polygon fill="black" stroke="black" points="356.84,-107.06 346.25,-107.2 354.62,-113.7 356.84,-107.06"/>
-</g>
-<!-- FLT_MINDOTS -->
+<!-- FLT_CON64 -->
<g id="node14" class="node">
-<title>FLT_MINDOTS</title>
-<ellipse fill="aqua" stroke="black" cx="625.6" cy="-171.4" rx="27" ry="18"/>
-<text text-anchor="middle" x="625.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">...</text>
-</g>
-<!-- FLT_TOP->FLT_MINDOTS -->
-<g id="edge24" class="edge">
-<title>FLT_TOP->FLT_MINDOTS</title>
-<path fill="none" stroke="black" d="M659.61,-228.96C654.17,-219.92 647.32,-208.52 641.19,-198.34"/>
-<polygon fill="black" stroke="black" points="644.32,-196.75 636.17,-189.98 638.32,-200.36 644.32,-196.75"/>
-</g>
-<!-- FLT_ZERO -->
-<g id="node15" class="node">
-<title>FLT_ZERO</title>
-<ellipse fill="aqua" stroke="black" cx="713.6" cy="-171.4" rx="18" ry="18"/>
-<text text-anchor="middle" x="713.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">0</text>
+<title>FLT_CON64</title>
+<ellipse fill="aqua" stroke="black" cx="725" cy="-345.31" rx="55.33" ry="40.66"/>
+<text text-anchor="middle" x="725" y="-356.76" font-family="Times New Roman,serif" font-size="14.00">64b consts</text>
+<text text-anchor="middle" x="725" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">[excludes</text>
+<text text-anchor="middle" x="725" y="-323.76" font-family="Times New Roman,serif" font-size="14.00">32b consts]</text>
</g>
-<!-- FLT_TOP->FLT_ZERO -->
-<g id="edge25" class="edge">
-<title>FLT_TOP->FLT_ZERO</title>
-<path fill="none" stroke="black" d="M679.58,-228.96C685.21,-219.6 692.35,-207.72 698.64,-197.27"/>
-<polygon fill="black" stroke="black" points="701.61,-199.11 703.77,-188.74 695.62,-195.51 701.61,-199.11"/>
+<!-- FLT_TOP->FLT_CON64 -->
+<g id="edge16" class="edge">
+<title>FLT_TOP->FLT_CON64</title>
+<path fill="none" stroke="black" d="M516.29,-587.99C550.39,-548.34 637.45,-447.11 687.7,-388.69"/>
+<polygon fill="black" stroke="black" points="690.28,-391.05 694.15,-381.19 684.97,-386.49 690.28,-391.05"/>
</g>
-<!-- FLT_MAXDOTS -->
+<!-- FLT_CONPI -->
<g id="node16" class="node">
-<title>FLT_MAXDOTS</title>
-<ellipse fill="aqua" stroke="black" cx="801.6" cy="-171.4" rx="27" ry="18"/>
-<text text-anchor="middle" x="801.6" y="-166.35" font-family="Times New Roman,serif" font-size="14.00">...</text>
-</g>
-<!-- FLT_TOP->FLT_MAXDOTS -->
-<g id="edge26" class="edge">
-<title>FLT_TOP->FLT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M691.99,-233.15C713.77,-221.07 747.03,-202.64 771.2,-189.25"/>
-<polygon fill="black" stroke="black" points="772.89,-192.31 779.94,-184.4 769.5,-186.19 772.89,-192.31"/>
+<title>FLT_CONPI</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-345.31" rx="48.79" ry="18"/>
+<text text-anchor="middle" x="578" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">3.14159...</text>
+</g>
+<!-- FLT_TOP->FLT_CONPI -->
+<g id="edge17" class="edge">
+<title>FLT_TOP->FLT_CONPI</title>
+<path fill="none" stroke="black" d="M507.34,-586.38C520.34,-542.02 553.71,-428.19 569.49,-374.35"/>
+<polygon fill="black" stroke="black" points="572.78,-375.56 572.24,-364.98 566.06,-373.59 572.78,-375.56"/>
+</g>
+<!-- FLT_X32 -->
+<g id="node17" class="node">
+<title>FLT_X32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-450.29" rx="28.32" ry="28.32"/>
+<text text-anchor="middle" x="436" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">~f32</text>
+</g>
+<!-- FLT_TOP->FLT_X32 -->
+<g id="edge20" class="edge">
+<title>FLT_TOP->FLT_X32</title>
+<path fill="none" stroke="black" d="M494.43,-586.91C484.07,-562.69 465.23,-518.63 451.74,-487.1"/>
+<polygon fill="black" stroke="black" points="454.96,-485.73 447.81,-477.91 448.53,-488.48 454.96,-485.73"/>
</g>
<!-- FLT_BOT -->
<g id="node13" class="node">
<title>FLT_BOT</title>
-<ellipse fill="aqua" stroke="black" cx="669.6" cy="-96.25" rx="32.41" ry="18"/>
-<text text-anchor="start" x="653.85" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="669.6" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+<ellipse fill="aqua" stroke="black" cx="507" cy="-96.25" rx="32.41" ry="18"/>
+<text text-anchor="start" x="491.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="507" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
</g>
<!-- FLT_BOT->BOT -->
-<g id="edge30" class="edge">
+<g id="edge26" class="edge">
<title>FLT_BOT->BOT</title>
-<path fill="none" stroke="black" d="M642.43,-86.13C601.76,-72.49 525.27,-46.84 482.51,-32.49"/>
-<polygon fill="black" stroke="black" points="483.69,-29.2 473.09,-29.33 481.46,-35.83 483.69,-29.2"/>
-</g>
-<!-- FLT_MINDOTS->FLT_BOT -->
-<g id="edge27" class="edge">
-<title>FLT_MINDOTS->FLT_BOT</title>
-<path fill="none" stroke="black" d="M635.36,-154.17C640.79,-145.14 647.68,-133.68 653.85,-123.42"/>
-<polygon fill="black" stroke="black" points="656.77,-125.36 658.93,-114.99 650.77,-121.75 656.77,-125.36"/>
-</g>
-<!-- FLT_MINDOTS->FLT_ZERO -->
-<!-- FLT_ZERO->FLT_BOT -->
-<g id="edge28" class="edge">
-<title>FLT_ZERO->FLT_BOT</title>
-<path fill="none" stroke="black" d="M704.69,-155.6C699.17,-146.42 691.93,-134.37 685.45,-123.61"/>
-<polygon fill="black" stroke="black" points="688.49,-121.88 680.34,-115.11 682.5,-125.49 688.49,-121.88"/>
-</g>
-<!-- FLT_ZERO->FLT_MAXDOTS -->
-<!-- FLT_MAXDOTS->FLT_BOT -->
-<g id="edge29" class="edge">
-<title>FLT_MAXDOTS->FLT_BOT</title>
-<path fill="none" stroke="black" d="M781.26,-159.13C760.12,-147.42 726.74,-128.92 701.97,-115.19"/>
-<polygon fill="black" stroke="black" points="703.71,-112.15 693.27,-110.37 700.32,-118.28 703.71,-112.15"/>
+<path fill="none" stroke="black" d="M486.54,-82.01C468.15,-70.11 441.01,-52.55 420.88,-39.52"/>
+<polygon fill="black" stroke="black" points="422.92,-36.67 412.62,-34.17 419.11,-42.55 422.92,-36.67"/>
+</g>
+<!-- FLT_CON64->FLT_BOT -->
+<g id="edge18" class="edge">
+<title>FLT_CON64->FLT_BOT</title>
+<path fill="none" stroke="black" d="M694.92,-310.94C650.44,-260.13 568.19,-166.15 528.94,-121.32"/>
+<polygon fill="black" stroke="black" points="531.69,-119.14 522.47,-113.92 526.42,-123.75 531.69,-119.14"/>
+</g>
+<!-- FLT_CON32 -->
+<g id="node15" class="node">
+<title>FLT_CON32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-345.31" rx="50.33" ry="18"/>
+<text text-anchor="middle" x="436" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">32b consts</text>
+</g>
+<!-- FLT_CON32->FLT_CONPI -->
+<!-- FLT_32 -->
+<g id="node19" class="node">
+<title>FLT_32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-245.45" rx="23.2" ry="23.2"/>
+<text text-anchor="middle" x="436" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">f32</text>
+</g>
+<!-- FLT_CON32->FLT_32 -->
+<g id="edge24" class="edge">
+<title>FLT_CON32->FLT_32</title>
+<path fill="none" stroke="black" d="M436,-326.82C436,-313.94 436,-296.02 436,-280.37"/>
+<polygon fill="black" stroke="black" points="439.5,-280.47 436,-270.47 432.5,-280.47 439.5,-280.47"/>
+</g>
+<!-- FLT_CONPI->FLT_BOT -->
+<g id="edge19" class="edge">
+<title>FLT_CONPI->FLT_BOT</title>
+<path fill="none" stroke="black" d="M572.78,-327C560.57,-284.16 530.06,-177.15 515.28,-125.31"/>
+<polygon fill="black" stroke="black" points="518.66,-124.37 512.55,-115.71 511.92,-126.29 518.66,-124.37"/>
+</g>
+<!-- FLT_CONPI->FLT_CON64 -->
+<!-- FLT_X32->FLT_CON32 -->
+<g id="edge22" class="edge">
+<title>FLT_X32->FLT_CON32</title>
+<path fill="none" stroke="black" d="M436,-421.69C436,-407.26 436,-389.62 436,-375.03"/>
+<polygon fill="black" stroke="black" points="439.5,-375.14 436,-365.14 432.5,-375.14 439.5,-375.14"/>
+</g>
+<!-- FLT_CON0 -->
+<g id="node18" class="node">
+<title>FLT_CON0</title>
+<ellipse fill="aqua" stroke="black" cx="325" cy="-345.31" rx="18.08" ry="18.08"/>
+<text text-anchor="middle" x="325" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0.</text>
+</g>
+<!-- FLT_X32->FLT_CON0 -->
+<g id="edge21" class="edge">
+<title>FLT_X32->FLT_CON0</title>
+<path fill="none" stroke="black" d="M415.38,-430.16C395.7,-411.9 366.18,-384.51 346.28,-366.05"/>
+<polygon fill="black" stroke="black" points="348.7,-363.53 338.99,-359.29 343.94,-368.66 348.7,-363.53"/>
+</g>
+<!-- FLT_CON0->FLT_CON32 -->
+<!-- FLT_CON0->FLT_32 -->
+<g id="edge23" class="edge">
+<title>FLT_CON0->FLT_32</title>
+<path fill="none" stroke="black" d="M338.17,-332.7C355.91,-317.06 387.87,-288.88 410.42,-269"/>
+<polygon fill="black" stroke="black" points="412.53,-271.81 417.72,-262.57 407.9,-266.56 412.53,-271.81"/>
+</g>
+<!-- FLT_32->FLT_BOT -->
+<g id="edge25" class="edge">
+<title>FLT_32->FLT_BOT</title>
+<path fill="none" stroke="black" d="M446.17,-224.07C458.68,-197.78 479.96,-153.08 493.74,-124.12"/>
+<polygon fill="black" stroke="black" points="496.83,-125.76 497.97,-115.22 490.51,-122.75 496.83,-125.76"/>
</g>
</g>
</svg>
diff --git a/docs/lattice_iff.gv b/docs/lattice_iff.gv new file mode 100644 index 00000000..61e857b1 --- /dev/null +++ b/docs/lattice_iff.gv @@ -0,0 +1,97 @@ +digraph Lattice { + compound = true; + // Define nodes + splines=false; + node [shape=circle, style=filled]; + nodesep=0.6; + + TOP [label=<<B>⊤</B >>, fillcolor=black, fontcolor=white]; + BOT [label=<<B>⊥</B>>, fillcolor=black, fontcolor=white]; + + // ---------------------- + // Integers + INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval]; + + INT_HI [label="max < min" , fillcolor=lightblue, shape=oval]; + INT_XBOOL [label="1...0", fillcolor=lightblue, shape=oval]; + INT_CON [label="constants...", fillcolor=lightblue, shape=oval]; + INT_CON0 [label="0", fillcolor=lightblue]; + INT_CON1 [label="1", fillcolor=lightblue]; + INT_BOOL [label="0...1", fillcolor=lightblue,shape=oval]; + INT_LO [label="max > min" , fillcolor=lightblue, shape=oval]; + + TOP -> INT_TOP; + INT_TOP -> INT_HI; + INT_HI -> INT_XBOOL; + INT_XBOOL -> INT_CON0; + INT_XBOOL -> INT_CON1; + INT_HI -> INT_CON; + INT_CON0 -> INT_BOOL; + INT_CON1 -> INT_BOOL; + INT_BOOL -> INT_LO; + INT_CON -> INT_LO; + INT_LO -> INT_BOT; + INT_BOT -> BOT; + + INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; + + // ---------------------- + // Floats + FLT_TOP [label=<<B>⊤</B >:flt>, fillcolor=aqua, shape=oval]; + FLT_BOT [label=<<B>⊥</B>:flt>, fillcolor=aqua, shape=oval]; + + FLT_CON64 [label="64b consts\n[excludes\n32b consts]" , fillcolor=aqua, shape=oval]; + FLT_CON32 [label="32b consts", fillcolor=aqua, shape=oval]; + FLT_CONPI [label="3.14159...", fillcolor=aqua, shape=oval]; + FLT_X32 [label="~f32", fillcolor=aqua]; + FLT_CON0 [label="0." , fillcolor=aqua]; + FLT_32 [label="f32" , fillcolor=aqua]; + + TOP -> FLT_TOP; + FLT_TOP -> FLT_CON64 + FLT_TOP -> FLT_CONPI + FLT_CON64 -> FLT_BOT + FLT_CONPI -> FLT_BOT + + FLT_TOP -> FLT_X32; + FLT_X32 -> FLT_CON0; + FLT_X32 -> FLT_CON32; + FLT_CON0 -> FLT_32; + FLT_CON32 -> FLT_32; + FLT_32 -> FLT_BOT + + FLT_BOT -> BOT; + + FLT_CON0 -> FLT_CON32 -> FLT_CONPI -> FLT_CON64 [style=invis]; + + // ---------------------- + // sub-Floats + FL8_TOP [label=<<B>⊤</B >:FP8>, fillcolor=aqua, shape=oval]; + FL8_BOT [label=<<B>⊥</B>:FP8>, fillcolor=aqua, shape=oval]; + + FL8_MINDOTS [label="...", fillcolor=aqua, shape=oval]; + FL8_ZERO [label="0" , fillcolor=aqua]; + FL8_MAXDOTS [label="...", fillcolor=aqua, shape=oval]; + + TOP -> FL8_TOP; + FL8_TOP -> FL8_MINDOTS; + FL8_TOP -> FL8_ZERO; + FL8_TOP -> FL8_MAXDOTS; + FL8_MINDOTS -> FL8_BOT; + FL8_ZERO -> FL8_BOT; + FL8_MAXDOTS -> FL8_BOT; + FL8_BOT -> BOT; + + FL8_MINDOTS -> FL8_ZERO -> FL8_MAXDOTS [style=invis]; + + // Additional customization + {rank=same; TOP} + {rank=same; INT_TOP; FLT_TOP; FL8_TOP; } + {rank=same; INT_CON; INT_CON0; INT_CON1; + FLT_CON32; FLT_CON64; FLT_CON0; FLT_CONPI; + FL8_MINDOTS; FL8_ZERO; FL8_MAXDOTS; + } + {rank=same; INT_BOT; FLT_BOT; FL8_BOT; } + {rank=same; BOT;} +} diff --git a/docs/lattice_iff.svg b/docs/lattice_iff.svg new file mode 100644 index 00000000..dbe60f0d --- /dev/null +++ b/docs/lattice_iff.svg @@ -0,0 +1,364 @@ +<?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="1061pt" height="709pt"
+ viewBox="0.00 0.00 1061.00 708.86" 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 704.86)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-704.86 1057,-704.86 1057,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="578" cy="-679.73" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="570.12" y="-675.31" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text>
+</g>
+<!-- INT_TOP -->
+<g id="node3" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="340" cy="-604.61" rx="33.95" ry="18"/>
+<text text-anchor="start" x="323.12" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="338.88" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- TOP->INT_TOP -->
+<g id="edge1" class="edge">
+<title>TOP->INT_TOP</title>
+<path fill="none" stroke="black" d="M557.71,-672.5C518.41,-660.43 431.29,-633.66 379.97,-617.89"/>
+<polygon fill="black" stroke="black" points="381.01,-614.55 370.42,-614.96 378.95,-621.24 381.01,-614.55"/>
+</g>
+<!-- FLT_TOP -->
+<g id="node12" class="node">
+<title>FLT_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-604.61" rx="32.41" ry="18"/>
+<text text-anchor="start" x="562.25" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="578" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- TOP->FLT_TOP -->
+<g id="edge15" class="edge">
+<title>TOP->FLT_TOP</title>
+<path fill="none" stroke="black" d="M578,-658.36C578,-650.87 578,-642.24 578,-634.15"/>
+<polygon fill="black" stroke="black" points="581.5,-634.41 578,-624.41 574.5,-634.41 581.5,-634.41"/>
+</g>
+<!-- FL8_TOP -->
+<g id="node20" class="node">
+<title>FL8_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-604.61" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="888.12" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- TOP->FL8_TOP -->
+<g id="edge30" class="edge">
+<title>TOP->FL8_TOP</title>
+<path fill="none" stroke="black" d="M598.67,-673.94C648.91,-662.27 778.39,-632.21 847.67,-616.13"/>
+<polygon fill="black" stroke="black" points="848.24,-619.59 857.19,-613.92 846.65,-612.78 848.24,-619.59"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="578" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="570.12" y="-16.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
+</g>
+<!-- INT_HI -->
+<g id="node5" class="node">
+<title>INT_HI</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-532.61" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-527.56" font-family="Times New Roman,serif" font-size="14.00">max < min</text>
+</g>
+<!-- INT_TOP->INT_HI -->
+<g id="edge2" class="edge">
+<title>INT_TOP->INT_HI</title>
+<path fill="none" stroke="black" d="M316.94,-591.1C297.92,-580.77 270.56,-565.93 248.42,-553.91"/>
+<polygon fill="black" stroke="black" points="250.13,-550.86 239.67,-549.17 246.79,-557.01 250.13,-550.86"/>
+</g>
+<!-- INT_BOT -->
+<g id="node4" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="340" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="323.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="338.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT->BOT -->
+<g id="edge12" class="edge">
+<title>INT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M368.71,-86.43C413.73,-72.6 500.58,-45.91 546.98,-31.65"/>
+<polygon fill="black" stroke="black" points="547.88,-35.04 556.41,-28.76 545.82,-28.35 547.88,-35.04"/>
+</g>
+<!-- INT_XBOOL -->
+<g id="node6" class="node">
+<title>INT_XBOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-450.29" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">1...0</text>
+</g>
+<!-- INT_HI->INT_XBOOL -->
+<g id="edge3" class="edge">
+<title>INT_HI->INT_XBOOL</title>
+<path fill="none" stroke="black" d="M188.75,-515.93C170.46,-503.04 144.44,-484.72 124.78,-470.87"/>
+<polygon fill="black" stroke="black" points="126.86,-468.05 116.67,-465.15 122.83,-473.77 126.86,-468.05"/>
+</g>
+<!-- INT_CON -->
+<g id="node7" class="node">
+<title>INT_CON</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-345.31" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">constants...</text>
+</g>
+<!-- INT_HI->INT_CON -->
+<g id="edge6" class="edge">
+<title>INT_HI->INT_CON</title>
+<path fill="none" stroke="black" d="M211,-514.31C211,-481.93 211,-414.27 211,-375.09"/>
+<polygon fill="black" stroke="black" points="214.5,-375.2 211,-365.2 207.5,-375.2 214.5,-375.2"/>
+</g>
+<!-- INT_CON0 -->
+<g id="node8" class="node">
+<title>INT_CON0</title>
+<ellipse fill="lightblue" stroke="black" cx="18" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_XBOOL->INT_CON0 -->
+<g id="edge4" class="edge">
+<title>INT_XBOOL->INT_CON0</title>
+<path fill="none" stroke="black" d="M85,-433.65C71.8,-416.44 50.45,-388.61 35.41,-369"/>
+<polygon fill="black" stroke="black" points="38.38,-367.12 29.51,-361.32 32.82,-371.38 38.38,-367.12"/>
+</g>
+<!-- INT_CON1 -->
+<g id="node9" class="node">
+<title>INT_CON1</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="97" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_XBOOL->INT_CON1 -->
+<g id="edge5" class="edge">
+<title>INT_XBOOL->INT_CON1</title>
+<path fill="none" stroke="black" d="M97,-431.82C97,-416.27 97,-393.22 97,-374.97"/>
+<polygon fill="black" stroke="black" points="100.5,-375.04 97,-365.04 93.5,-375.04 100.5,-375.04"/>
+</g>
+<!-- INT_LO -->
+<g id="node11" class="node">
+<title>INT_LO</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-168.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-163.2" font-family="Times New Roman,serif" font-size="14.00">max > min</text>
+</g>
+<!-- INT_CON->INT_LO -->
+<g id="edge10" class="edge">
+<title>INT_CON->INT_LO</title>
+<path fill="none" stroke="black" d="M211,-327.03C211,-296.55 211,-235.05 211,-198.18"/>
+<polygon fill="black" stroke="black" points="214.5,-198.21 211,-188.21 207.5,-198.21 214.5,-198.21"/>
+</g>
+<!-- INT_CON0->INT_CON1 -->
+<!-- INT_BOOL -->
+<g id="node10" class="node">
+<title>INT_BOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-245.45" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">0...1</text>
+</g>
+<!-- INT_CON0->INT_BOOL -->
+<g id="edge7" class="edge">
+<title>INT_CON0->INT_BOOL</title>
+<path fill="none" stroke="black" d="M28.98,-330.7C41.46,-315.25 62.06,-289.73 77.33,-270.81"/>
+<polygon fill="black" stroke="black" points="80.04,-273.03 83.6,-263.05 74.59,-268.64 80.04,-273.03"/>
+</g>
+<!-- INT_CON1->INT_CON -->
+<!-- INT_CON1->INT_BOOL -->
+<g id="edge8" class="edge">
+<title>INT_CON1->INT_BOOL</title>
+<path fill="none" stroke="black" d="M97,-326.82C97,-312.48 97,-291.91 97,-275.16"/>
+<polygon fill="black" stroke="black" points="100.5,-275.31 97,-265.31 93.5,-275.31 100.5,-275.31"/>
+</g>
+<!-- INT_BOOL->INT_LO -->
+<g id="edge9" class="edge">
+<title>INT_BOOL->INT_LO</title>
+<path fill="none" stroke="black" d="M116.08,-231.86C132.97,-220.72 157.98,-204.22 178.09,-190.96"/>
+<polygon fill="black" stroke="black" points="179.83,-194.01 186.25,-185.58 175.97,-188.16 179.83,-194.01"/>
+</g>
+<!-- INT_LO->INT_BOT -->
+<g id="edge11" class="edge">
+<title>INT_LO->INT_BOT</title>
+<path fill="none" stroke="black" d="M238.36,-152.4C258.44,-141.5 285.81,-126.65 307.09,-115.1"/>
+<polygon fill="black" stroke="black" points="308.54,-118.3 315.66,-110.45 305.2,-112.15 308.54,-118.3"/>
+</g>
+<!-- FLT_CON64 -->
+<g id="node14" class="node">
+<title>FLT_CON64</title>
+<ellipse fill="aqua" stroke="black" cx="725" cy="-345.31" rx="55.33" ry="40.66"/>
+<text text-anchor="middle" x="725" y="-356.76" font-family="Times New Roman,serif" font-size="14.00">64b consts</text>
+<text text-anchor="middle" x="725" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">[excludes</text>
+<text text-anchor="middle" x="725" y="-323.76" font-family="Times New Roman,serif" font-size="14.00">32b consts]</text>
+</g>
+<!-- FLT_TOP->FLT_CON64 -->
+<g id="edge16" class="edge">
+<title>FLT_TOP->FLT_CON64</title>
+<path fill="none" stroke="black" d="M587.87,-587.19C610.15,-547.91 664.93,-451.26 698.12,-392.72"/>
+<polygon fill="black" stroke="black" points="701.02,-394.7 702.91,-384.28 694.93,-391.25 701.02,-394.7"/>
+</g>
+<!-- FLT_CONPI -->
+<g id="node16" class="node">
+<title>FLT_CONPI</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-345.31" rx="48.79" ry="18"/>
+<text text-anchor="middle" x="578" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">3.14159...</text>
+</g>
+<!-- FLT_TOP->FLT_CONPI -->
+<g id="edge17" class="edge">
+<title>FLT_TOP->FLT_CONPI</title>
+<path fill="none" stroke="black" d="M578,-586.38C578,-542.21 578,-429.14 578,-375.03"/>
+<polygon fill="black" stroke="black" points="581.5,-375.04 578,-365.04 574.5,-375.04 581.5,-375.04"/>
+</g>
+<!-- FLT_X32 -->
+<g id="node17" class="node">
+<title>FLT_X32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-450.29" rx="28.32" ry="28.32"/>
+<text text-anchor="middle" x="436" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">~f32</text>
+</g>
+<!-- FLT_TOP->FLT_X32 -->
+<g id="edge20" class="edge">
+<title>FLT_TOP->FLT_X32</title>
+<path fill="none" stroke="black" d="M563.07,-588.39C539.34,-562.6 492.68,-511.88 462.98,-479.61"/>
+<polygon fill="black" stroke="black" points="465.83,-477.53 456.48,-472.55 460.67,-482.27 465.83,-477.53"/>
+</g>
+<!-- FLT_BOT -->
+<g id="node13" class="node">
+<title>FLT_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-96.25" rx="32.41" ry="18"/>
+<text text-anchor="start" x="562.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="578" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- FLT_BOT->BOT -->
+<g id="edge26" class="edge">
+<title>FLT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M578,-77.92C578,-70.74 578,-62.18 578,-53.95"/>
+<polygon fill="black" stroke="black" points="581.5,-54.22 578,-44.22 574.5,-54.22 581.5,-54.22"/>
+</g>
+<!-- FLT_CON64->FLT_BOT -->
+<g id="edge18" class="edge">
+<title>FLT_CON64->FLT_BOT</title>
+<path fill="none" stroke="black" d="M702.83,-307.75C672.98,-257.18 620.57,-168.38 594.17,-123.64"/>
+<polygon fill="black" stroke="black" points="597.21,-121.91 589.11,-115.08 591.18,-125.47 597.21,-121.91"/>
+</g>
+<!-- FLT_CON32 -->
+<g id="node15" class="node">
+<title>FLT_CON32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-345.31" rx="50.33" ry="18"/>
+<text text-anchor="middle" x="436" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">32b consts</text>
+</g>
+<!-- FLT_CON32->FLT_CONPI -->
+<!-- FLT_32 -->
+<g id="node19" class="node">
+<title>FLT_32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-245.45" rx="23.2" ry="23.2"/>
+<text text-anchor="middle" x="436" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">f32</text>
+</g>
+<!-- FLT_CON32->FLT_32 -->
+<g id="edge24" class="edge">
+<title>FLT_CON32->FLT_32</title>
+<path fill="none" stroke="black" d="M436,-326.82C436,-313.94 436,-296.02 436,-280.37"/>
+<polygon fill="black" stroke="black" points="439.5,-280.47 436,-270.47 432.5,-280.47 439.5,-280.47"/>
+</g>
+<!-- FLT_CONPI->FLT_BOT -->
+<g id="edge19" class="edge">
+<title>FLT_CONPI->FLT_BOT</title>
+<path fill="none" stroke="black" d="M578,-327C578,-284.36 578,-178.12 578,-126.02"/>
+<polygon fill="black" stroke="black" points="581.5,-126.1 578,-116.1 574.5,-126.1 581.5,-126.1"/>
+</g>
+<!-- FLT_CONPI->FLT_CON64 -->
+<!-- FLT_X32->FLT_CON32 -->
+<g id="edge22" class="edge">
+<title>FLT_X32->FLT_CON32</title>
+<path fill="none" stroke="black" d="M436,-421.69C436,-407.26 436,-389.62 436,-375.03"/>
+<polygon fill="black" stroke="black" points="439.5,-375.14 436,-365.14 432.5,-375.14 439.5,-375.14"/>
+</g>
+<!-- FLT_CON0 -->
+<g id="node18" class="node">
+<title>FLT_CON0</title>
+<ellipse fill="aqua" stroke="black" cx="325" cy="-345.31" rx="18.08" ry="18.08"/>
+<text text-anchor="middle" x="325" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0.</text>
+</g>
+<!-- FLT_X32->FLT_CON0 -->
+<g id="edge21" class="edge">
+<title>FLT_X32->FLT_CON0</title>
+<path fill="none" stroke="black" d="M415.38,-430.16C395.7,-411.9 366.18,-384.51 346.28,-366.05"/>
+<polygon fill="black" stroke="black" points="348.7,-363.53 338.99,-359.29 343.94,-368.66 348.7,-363.53"/>
+</g>
+<!-- FLT_CON0->FLT_CON32 -->
+<!-- FLT_CON0->FLT_32 -->
+<g id="edge23" class="edge">
+<title>FLT_CON0->FLT_32</title>
+<path fill="none" stroke="black" d="M338.17,-332.7C355.91,-317.06 387.87,-288.88 410.42,-269"/>
+<polygon fill="black" stroke="black" points="412.53,-271.81 417.72,-262.57 407.9,-266.56 412.53,-271.81"/>
+</g>
+<!-- FLT_32->FLT_BOT -->
+<g id="edge25" class="edge">
+<title>FLT_32->FLT_BOT</title>
+<path fill="none" stroke="black" d="M452.29,-228.33C477.48,-201.86 526,-150.88 554.84,-120.58"/>
+<polygon fill="black" stroke="black" points="557.36,-123.01 561.72,-113.36 552.29,-118.19 557.36,-123.01"/>
+</g>
+<!-- FL8_MINDOTS -->
+<g id="node22" class="node">
+<title>FL8_MINDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="850" cy="-345.31" rx="27" ry="18"/>
+<text text-anchor="middle" x="850" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MINDOTS -->
+<g id="edge31" class="edge">
+<title>FL8_TOP->FL8_MINDOTS</title>
+<path fill="none" stroke="black" d="M889.98,-586.38C882.64,-542.11 863.82,-428.67 854.87,-374.69"/>
+<polygon fill="black" stroke="black" points="858.36,-374.31 853.27,-365.02 851.45,-375.46 858.36,-374.31"/>
+</g>
+<!-- FL8_ZERO -->
+<g id="node23" class="node">
+<title>FL8_ZERO</title>
+<ellipse fill="aqua" stroke="black" cx="938" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="938" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- FL8_TOP->FL8_ZERO -->
+<g id="edge32" class="edge">
+<title>FL8_TOP->FL8_ZERO</title>
+<path fill="none" stroke="black" d="M896.16,-586.38C903.85,-542.11 923.53,-428.67 932.9,-374.69"/>
+<polygon fill="black" stroke="black" points="936.32,-375.47 934.58,-365.02 929.42,-374.27 936.32,-375.47"/>
+</g>
+<!-- FL8_MAXDOTS -->
+<g id="node24" class="node">
+<title>FL8_MAXDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="1026" cy="-345.31" rx="27" ry="18"/>
+<text text-anchor="middle" x="1026" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MAXDOTS -->
+<g id="edge33" class="edge">
+<title>FL8_TOP->FL8_MAXDOTS</title>
+<path fill="none" stroke="black" d="M902.14,-586.79C924.98,-542.26 984.66,-425.9 1011.98,-372.64"/>
+<polygon fill="black" stroke="black" points="1015,-374.42 1016.45,-363.92 1008.78,-371.22 1015,-374.42"/>
+</g>
+<!-- FL8_BOT -->
+<g id="node21" class="node">
+<title>FL8_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-96.25" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="888.12" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- FL8_BOT->BOT -->
+<g id="edge37" class="edge">
+<title>FL8_BOT->BOT</title>
+<path fill="none" stroke="black" d="M858.69,-87.28C797.25,-73.02 669.32,-43.32 609.77,-29.5"/>
+<polygon fill="black" stroke="black" points="610.81,-26.15 600.28,-27.3 609.23,-32.97 610.81,-26.15"/>
+</g>
+<!-- FL8_MINDOTS->FL8_BOT -->
+<g id="edge34" class="edge">
+<title>FL8_MINDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M853.16,-327C860.54,-284.27 878.94,-177.67 887.92,-125.69"/>
+<polygon fill="black" stroke="black" points="891.32,-126.53 889.58,-116.08 884.43,-125.34 891.32,-126.53"/>
+</g>
+<!-- FL8_MINDOTS->FL8_ZERO -->
+<!-- FL8_ZERO->FL8_BOT -->
+<g id="edge35" class="edge">
+<title>FL8_ZERO->FL8_BOT</title>
+<path fill="none" stroke="black" d="M934.76,-327.4C927.1,-284.97 907.77,-178.01 898.34,-125.81"/>
+<polygon fill="black" stroke="black" points="901.82,-125.38 896.6,-116.16 894.93,-126.62 901.82,-125.38"/>
+</g>
+<!-- FL8_ZERO->FL8_MAXDOTS -->
+<!-- FL8_MAXDOTS->FL8_BOT -->
+<g id="edge36" class="edge">
+<title>FL8_MAXDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M1016.86,-328.19C994.24,-285.83 935.48,-175.8 907.81,-123.99"/>
+<polygon fill="black" stroke="black" points="911.07,-122.66 903.27,-115.49 904.9,-125.96 911.07,-122.66"/>
+</g>
+</g>
+</svg>
diff --git a/docs/lattice_iffc.gv b/docs/lattice_iffc.gv new file mode 100644 index 00000000..483d2026 --- /dev/null +++ b/docs/lattice_iffc.gv @@ -0,0 +1,106 @@ +digraph Lattice { + compound = true; + // Define nodes + splines=false; + node [shape=circle, style=filled]; + nodesep=0.6; + + 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; + + // ---------------------- + // Integers + INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval]; + + INT_HI [label="max < min" , fillcolor=lightblue, shape=oval]; + INT_XBOOL [label="1...0", fillcolor=lightblue, shape=oval]; + INT_CON [label="constants...", fillcolor=lightblue, shape=oval]; + INT_CON0 [label="0", fillcolor=lightblue]; + INT_CON1 [label="1", fillcolor=lightblue]; + INT_BOOL [label="0...1", fillcolor=lightblue,shape=oval]; + INT_LO [label="max > min" , fillcolor=lightblue, shape=oval]; + + TOP -> INT_TOP; + INT_TOP -> INT_HI; + INT_HI -> INT_XBOOL; + INT_XBOOL -> INT_CON0; + INT_XBOOL -> INT_CON1; + INT_HI -> INT_CON; + INT_CON0 -> INT_BOOL; + INT_CON1 -> INT_BOOL; + INT_BOOL -> INT_LO; + INT_CON -> INT_LO; + INT_LO -> INT_BOT; + INT_BOT -> BOT; + + INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; + + // ---------------------- + // Floats + FLT_TOP [label=<<B>⊤</B >:flt>, fillcolor=aqua, shape=oval]; + FLT_BOT [label=<<B>⊥</B>:flt>, fillcolor=aqua, shape=oval]; + + FLT_CON64 [label="64b consts\n[excludes\n32b consts]" , fillcolor=aqua, shape=oval]; + FLT_CON32 [label="32b consts", fillcolor=aqua, shape=oval]; + FLT_CONPI [label="3.14159...", fillcolor=aqua, shape=oval]; + FLT_X32 [label="~f32", fillcolor=aqua]; + FLT_CON0 [label="0." , fillcolor=aqua]; + FLT_32 [label="f32" , fillcolor=aqua]; + + TOP -> FLT_TOP; + FLT_TOP -> FLT_CON64 + FLT_TOP -> FLT_CONPI + FLT_CON64 -> FLT_BOT + FLT_CONPI -> FLT_BOT + + FLT_TOP -> FLT_X32; + FLT_X32 -> FLT_CON0; + FLT_X32 -> FLT_CON32; + FLT_CON0 -> FLT_32; + FLT_CON32 -> FLT_32; + FLT_32 -> FLT_BOT + + FLT_BOT -> BOT; + + FLT_CON0 -> FLT_CON32 -> FLT_CONPI -> FLT_CON64 [style=invis]; + + // ---------------------- + // sub-Floats + FL8_TOP [label=<<B>⊤</B >:FP8>, fillcolor=aqua, shape=oval]; + FL8_BOT [label=<<B>⊥</B>:FP8>, fillcolor=aqua, shape=oval]; + + FL8_MINDOTS [label="...", fillcolor=aqua, shape=oval]; + FL8_ZERO [label="0" , fillcolor=aqua]; + FL8_MAXDOTS [label="...", fillcolor=aqua, shape=oval]; + + TOP -> FL8_TOP; + FL8_TOP -> FL8_MINDOTS; + FL8_TOP -> FL8_ZERO; + FL8_TOP -> FL8_MAXDOTS; + FL8_MINDOTS -> FL8_BOT; + FL8_ZERO -> FL8_BOT; + FL8_MAXDOTS -> FL8_BOT; + FL8_BOT -> BOT; + + FL8_MINDOTS -> FL8_ZERO -> FL8_MAXDOTS [style=invis]; + + // Additional customization + {rank=same; TOP} + {rank=same; INT_TOP; FLT_TOP; FL8_TOP; XCTRL } + {rank=same; INT_CON; INT_CON0; INT_CON1; + FLT_CON32; FLT_CON64; FLT_CON0; FLT_CONPI; + FL8_MINDOTS; FL8_ZERO; FL8_MAXDOTS; + } + {rank=same; INT_BOT; FLT_BOT; FL8_BOT; CTRL; } + {rank=same; BOT;} +} diff --git a/docs/lattice_iffc.svg b/docs/lattice_iffc.svg new file mode 100644 index 00000000..8ca5afd0 --- /dev/null +++ b/docs/lattice_iffc.svg @@ -0,0 +1,396 @@ +<?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="1061pt" height="709pt"
+ viewBox="0.00 0.00 1061.00 708.86" 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 704.86)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-704.86 1057,-704.86 1057,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="474" cy="-679.73" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="466.12" y="-675.31" 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="97" cy="-604.61" rx="36.51" ry="18"/>
+<text text-anchor="start" x="78.25" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="94" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- TOP->XCTRL -->
+<g id="edge1" class="edge">
+<title>TOP->XCTRL</title>
+<path fill="none" stroke="black" d="M453.19,-674.7C393.93,-663.2 223.25,-630.1 141.58,-614.26"/>
+<polygon fill="black" stroke="black" points="142.64,-610.9 132.15,-612.43 141.3,-617.77 142.64,-610.9"/>
+</g>
+<!-- INT_TOP -->
+<g id="node5" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="291" cy="-604.61" rx="33.95" ry="18"/>
+<text text-anchor="start" x="274.12" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="289.88" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- TOP->INT_TOP -->
+<g id="edge4" class="edge">
+<title>TOP->INT_TOP</title>
+<path fill="none" stroke="black" d="M454.42,-670.91C424.37,-658.9 366.38,-635.73 328.19,-620.47"/>
+<polygon fill="black" stroke="black" points="329.49,-617.22 318.91,-616.76 326.89,-623.72 329.49,-617.22"/>
+</g>
+<!-- FLT_TOP -->
+<g id="node14" class="node">
+<title>FLT_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="514" cy="-604.61" rx="32.41" ry="18"/>
+<text text-anchor="start" x="498.25" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="514" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- TOP->FLT_TOP -->
+<g id="edge18" class="edge">
+<title>TOP->FLT_TOP</title>
+<path fill="none" stroke="black" d="M483.89,-660.66C488.64,-651.96 494.44,-641.37 499.67,-631.81"/>
+<polygon fill="black" stroke="black" points="502.59,-633.76 504.32,-623.31 496.45,-630.4 502.59,-633.76"/>
+</g>
+<!-- FL8_TOP -->
+<g id="node22" class="node">
+<title>FL8_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-604.61" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="888.12" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- TOP->FL8_TOP -->
+<g id="edge33" class="edge">
+<title>TOP->FL8_TOP</title>
+<path fill="none" stroke="black" d="M495.07,-675.06C559.45,-663.82 754.77,-629.73 845.61,-613.88"/>
+<polygon fill="black" stroke="black" points="846.19,-617.33 855.44,-612.16 844.99,-610.44 846.19,-617.33"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="379" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="371.12" 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="73" cy="-96.25" rx="36.51" ry="18"/>
+<text text-anchor="start" x="54.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="70" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- XCTRL->CTRL -->
+<g id="edge2" class="edge">
+<title>XCTRL->CTRL</title>
+<path fill="none" stroke="black" d="M96.13,-586.22C92.54,-510.24 78.86,-220.41 74.41,-126.1"/>
+<polygon fill="black" stroke="black" points="77.91,-125.95 73.94,-116.13 70.91,-126.28 77.91,-125.95"/>
+</g>
+<!-- CTRL->BOT -->
+<g id="edge3" class="edge">
+<title>CTRL->BOT</title>
+<path fill="none" stroke="black" d="M105.46,-87.49C164.46,-73.39 288.58,-43.73 347.14,-29.74"/>
+<polygon fill="black" stroke="black" points="347.88,-33.16 356.79,-27.43 346.25,-26.35 347.88,-33.16"/>
+</g>
+<!-- INT_HI -->
+<g id="node7" class="node">
+<title>INT_HI</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-532.61" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-527.56" font-family="Times New Roman,serif" font-size="14.00">max < min</text>
+</g>
+<!-- INT_TOP->INT_HI -->
+<g id="edge5" class="edge">
+<title>INT_TOP->INT_HI</title>
+<path fill="none" stroke="black" d="M274.03,-588.76C263.65,-579.68 250.13,-567.85 238.28,-557.48"/>
+<polygon fill="black" stroke="black" points="240.59,-554.85 230.76,-550.9 235.98,-560.12 240.59,-554.85"/>
+</g>
+<!-- INT_BOT -->
+<g id="node6" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="267" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="250.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="265.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT->BOT -->
+<g id="edge15" class="edge">
+<title>INT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M287.8,-81.67C305.9,-69.85 332.25,-52.64 351.98,-39.76"/>
+<polygon fill="black" stroke="black" points="353.89,-42.7 360.35,-34.3 350.06,-36.84 353.89,-42.7"/>
+</g>
+<!-- INT_XBOOL -->
+<g id="node8" class="node">
+<title>INT_XBOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-450.29" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">1...0</text>
+</g>
+<!-- INT_HI->INT_XBOOL -->
+<g id="edge6" class="edge">
+<title>INT_HI->INT_XBOOL</title>
+<path fill="none" stroke="black" d="M188.75,-515.93C170.46,-503.04 144.44,-484.72 124.78,-470.87"/>
+<polygon fill="black" stroke="black" points="126.86,-468.05 116.67,-465.15 122.83,-473.77 126.86,-468.05"/>
+</g>
+<!-- INT_CON -->
+<g id="node9" class="node">
+<title>INT_CON</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-345.31" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">constants...</text>
+</g>
+<!-- INT_HI->INT_CON -->
+<g id="edge9" class="edge">
+<title>INT_HI->INT_CON</title>
+<path fill="none" stroke="black" d="M211,-514.31C211,-481.93 211,-414.27 211,-375.09"/>
+<polygon fill="black" stroke="black" points="214.5,-375.2 211,-365.2 207.5,-375.2 214.5,-375.2"/>
+</g>
+<!-- INT_CON0 -->
+<g id="node10" class="node">
+<title>INT_CON0</title>
+<ellipse fill="lightblue" stroke="black" cx="18" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_XBOOL->INT_CON0 -->
+<g id="edge7" class="edge">
+<title>INT_XBOOL->INT_CON0</title>
+<path fill="none" stroke="black" d="M85,-433.65C71.8,-416.44 50.45,-388.61 35.41,-369"/>
+<polygon fill="black" stroke="black" points="38.38,-367.12 29.51,-361.32 32.82,-371.38 38.38,-367.12"/>
+</g>
+<!-- INT_CON1 -->
+<g id="node11" class="node">
+<title>INT_CON1</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="97" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_XBOOL->INT_CON1 -->
+<g id="edge8" class="edge">
+<title>INT_XBOOL->INT_CON1</title>
+<path fill="none" stroke="black" d="M97,-431.82C97,-416.27 97,-393.22 97,-374.97"/>
+<polygon fill="black" stroke="black" points="100.5,-375.04 97,-365.04 93.5,-375.04 100.5,-375.04"/>
+</g>
+<!-- INT_LO -->
+<g id="node13" class="node">
+<title>INT_LO</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-168.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-163.2" font-family="Times New Roman,serif" font-size="14.00">max > min</text>
+</g>
+<!-- INT_CON->INT_LO -->
+<g id="edge13" class="edge">
+<title>INT_CON->INT_LO</title>
+<path fill="none" stroke="black" d="M211,-327.03C211,-296.55 211,-235.05 211,-198.18"/>
+<polygon fill="black" stroke="black" points="214.5,-198.21 211,-188.21 207.5,-198.21 214.5,-198.21"/>
+</g>
+<!-- INT_CON0->INT_CON1 -->
+<!-- INT_BOOL -->
+<g id="node12" class="node">
+<title>INT_BOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-245.45" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">0...1</text>
+</g>
+<!-- INT_CON0->INT_BOOL -->
+<g id="edge10" class="edge">
+<title>INT_CON0->INT_BOOL</title>
+<path fill="none" stroke="black" d="M28.98,-330.7C41.46,-315.25 62.06,-289.73 77.33,-270.81"/>
+<polygon fill="black" stroke="black" points="80.04,-273.03 83.6,-263.05 74.59,-268.64 80.04,-273.03"/>
+</g>
+<!-- INT_CON1->INT_CON -->
+<!-- INT_CON1->INT_BOOL -->
+<g id="edge11" class="edge">
+<title>INT_CON1->INT_BOOL</title>
+<path fill="none" stroke="black" d="M97,-326.82C97,-312.48 97,-291.91 97,-275.16"/>
+<polygon fill="black" stroke="black" points="100.5,-275.31 97,-265.31 93.5,-275.31 100.5,-275.31"/>
+</g>
+<!-- INT_BOOL->INT_LO -->
+<g id="edge12" class="edge">
+<title>INT_BOOL->INT_LO</title>
+<path fill="none" stroke="black" d="M116.08,-231.86C132.97,-220.72 157.98,-204.22 178.09,-190.96"/>
+<polygon fill="black" stroke="black" points="179.83,-194.01 186.25,-185.58 175.97,-188.16 179.83,-194.01"/>
+</g>
+<!-- INT_LO->INT_BOT -->
+<g id="edge14" class="edge">
+<title>INT_LO->INT_BOT</title>
+<path fill="none" stroke="black" d="M224.27,-150.66C231.06,-142.17 239.47,-131.66 247.03,-122.21"/>
+<polygon fill="black" stroke="black" points="249.75,-124.41 253.26,-114.42 244.28,-120.04 249.75,-124.41"/>
+</g>
+<!-- FLT_CON64 -->
+<g id="node16" class="node">
+<title>FLT_CON64</title>
+<ellipse fill="aqua" stroke="black" cx="725" cy="-345.31" rx="55.33" ry="40.66"/>
+<text text-anchor="middle" x="725" y="-356.76" font-family="Times New Roman,serif" font-size="14.00">64b consts</text>
+<text text-anchor="middle" x="725" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">[excludes</text>
+<text text-anchor="middle" x="725" y="-323.76" font-family="Times New Roman,serif" font-size="14.00">32b consts]</text>
+</g>
+<!-- FLT_TOP->FLT_CON64 -->
+<g id="edge19" class="edge">
+<title>FLT_TOP->FLT_CON64</title>
+<path fill="none" stroke="black" d="M527.52,-587.99C559.7,-548.44 641.72,-447.65 689.32,-389.16"/>
+<polygon fill="black" stroke="black" points="691.82,-391.64 695.41,-381.67 686.39,-387.22 691.82,-391.64"/>
+</g>
+<!-- FLT_CONPI -->
+<g id="node18" class="node">
+<title>FLT_CONPI</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-345.31" rx="48.79" ry="18"/>
+<text text-anchor="middle" x="578" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">3.14159...</text>
+</g>
+<!-- FLT_TOP->FLT_CONPI -->
+<g id="edge20" class="edge">
+<title>FLT_TOP->FLT_CONPI</title>
+<path fill="none" stroke="black" d="M518.5,-586.38C529.43,-542.11 557.43,-428.67 570.75,-374.69"/>
+<polygon fill="black" stroke="black" points="574.14,-375.54 573.14,-364.99 567.35,-373.86 574.14,-375.54"/>
+</g>
+<!-- FLT_X32 -->
+<g id="node19" class="node">
+<title>FLT_X32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-450.29" rx="28.32" ry="28.32"/>
+<text text-anchor="middle" x="436" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">~f32</text>
+</g>
+<!-- FLT_TOP->FLT_X32 -->
+<g id="edge23" class="edge">
+<title>FLT_TOP->FLT_X32</title>
+<path fill="none" stroke="black" d="M505.05,-586.91C492.69,-562.44 470.09,-517.73 454.12,-486.13"/>
+<polygon fill="black" stroke="black" points="457.3,-484.66 449.66,-477.32 451.05,-487.82 457.3,-484.66"/>
+</g>
+<!-- FLT_BOT -->
+<g id="node15" class="node">
+<title>FLT_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="500" cy="-96.25" rx="32.41" ry="18"/>
+<text text-anchor="start" x="484.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="500" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- FLT_BOT->BOT -->
+<g id="edge29" class="edge">
+<title>FLT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M478.65,-82.34C458.62,-70.24 428.55,-52.07 406.69,-38.86"/>
+<polygon fill="black" stroke="black" points="408.65,-35.95 398.28,-33.78 405.03,-41.95 408.65,-35.95"/>
+</g>
+<!-- FLT_CON64->FLT_BOT -->
+<g id="edge21" class="edge">
+<title>FLT_CON64->FLT_BOT</title>
+<path fill="none" stroke="black" d="M694.19,-311.2C648.25,-260.35 562.88,-165.85 522.4,-121.05"/>
+<polygon fill="black" stroke="black" points="525.02,-118.72 515.72,-113.65 519.82,-123.41 525.02,-118.72"/>
+</g>
+<!-- FLT_CON32 -->
+<g id="node17" class="node">
+<title>FLT_CON32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-345.31" rx="50.33" ry="18"/>
+<text text-anchor="middle" x="436" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">32b consts</text>
+</g>
+<!-- FLT_CON32->FLT_CONPI -->
+<!-- FLT_32 -->
+<g id="node21" class="node">
+<title>FLT_32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-245.45" rx="23.2" ry="23.2"/>
+<text text-anchor="middle" x="436" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">f32</text>
+</g>
+<!-- FLT_CON32->FLT_32 -->
+<g id="edge27" class="edge">
+<title>FLT_CON32->FLT_32</title>
+<path fill="none" stroke="black" d="M436,-326.82C436,-313.94 436,-296.02 436,-280.37"/>
+<polygon fill="black" stroke="black" points="439.5,-280.47 436,-270.47 432.5,-280.47 439.5,-280.47"/>
+</g>
+<!-- FLT_CONPI->FLT_BOT -->
+<g id="edge22" class="edge">
+<title>FLT_CONPI->FLT_BOT</title>
+<path fill="none" stroke="black" d="M572.26,-327C558.82,-284.07 525.2,-176.7 509,-124.98"/>
+<polygon fill="black" stroke="black" points="512.42,-124.19 506.09,-115.7 505.74,-126.29 512.42,-124.19"/>
+</g>
+<!-- FLT_CONPI->FLT_CON64 -->
+<!-- FLT_X32->FLT_CON32 -->
+<g id="edge25" class="edge">
+<title>FLT_X32->FLT_CON32</title>
+<path fill="none" stroke="black" d="M436,-421.69C436,-407.26 436,-389.62 436,-375.03"/>
+<polygon fill="black" stroke="black" points="439.5,-375.14 436,-365.14 432.5,-375.14 439.5,-375.14"/>
+</g>
+<!-- FLT_CON0 -->
+<g id="node20" class="node">
+<title>FLT_CON0</title>
+<ellipse fill="aqua" stroke="black" cx="325" cy="-345.31" rx="18.08" ry="18.08"/>
+<text text-anchor="middle" x="325" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0.</text>
+</g>
+<!-- FLT_X32->FLT_CON0 -->
+<g id="edge24" class="edge">
+<title>FLT_X32->FLT_CON0</title>
+<path fill="none" stroke="black" d="M415.38,-430.16C395.7,-411.9 366.18,-384.51 346.28,-366.05"/>
+<polygon fill="black" stroke="black" points="348.7,-363.53 338.99,-359.29 343.94,-368.66 348.7,-363.53"/>
+</g>
+<!-- FLT_CON0->FLT_CON32 -->
+<!-- FLT_CON0->FLT_32 -->
+<g id="edge26" class="edge">
+<title>FLT_CON0->FLT_32</title>
+<path fill="none" stroke="black" d="M338.17,-332.7C355.91,-317.06 387.87,-288.88 410.42,-269"/>
+<polygon fill="black" stroke="black" points="412.53,-271.81 417.72,-262.57 407.9,-266.56 412.53,-271.81"/>
+</g>
+<!-- FLT_32->FLT_BOT -->
+<g id="edge28" class="edge">
+<title>FLT_32->FLT_BOT</title>
+<path fill="none" stroke="black" d="M445.31,-223.76C456.56,-197.53 475.52,-153.32 487.9,-124.46"/>
+<polygon fill="black" stroke="black" points="490.97,-126.18 491.69,-115.61 484.53,-123.42 490.97,-126.18"/>
+</g>
+<!-- FL8_MINDOTS -->
+<g id="node24" class="node">
+<title>FL8_MINDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="850" cy="-345.31" rx="27" ry="18"/>
+<text text-anchor="middle" x="850" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MINDOTS -->
+<g id="edge34" class="edge">
+<title>FL8_TOP->FL8_MINDOTS</title>
+<path fill="none" stroke="black" d="M889.98,-586.38C882.64,-542.11 863.82,-428.67 854.87,-374.69"/>
+<polygon fill="black" stroke="black" points="858.36,-374.31 853.27,-365.02 851.45,-375.46 858.36,-374.31"/>
+</g>
+<!-- FL8_ZERO -->
+<g id="node25" class="node">
+<title>FL8_ZERO</title>
+<ellipse fill="aqua" stroke="black" cx="938" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="938" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- FL8_TOP->FL8_ZERO -->
+<g id="edge35" class="edge">
+<title>FL8_TOP->FL8_ZERO</title>
+<path fill="none" stroke="black" d="M896.16,-586.38C903.85,-542.11 923.53,-428.67 932.9,-374.69"/>
+<polygon fill="black" stroke="black" points="936.32,-375.47 934.58,-365.02 929.42,-374.27 936.32,-375.47"/>
+</g>
+<!-- FL8_MAXDOTS -->
+<g id="node26" class="node">
+<title>FL8_MAXDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="1026" cy="-345.31" rx="27" ry="18"/>
+<text text-anchor="middle" x="1026" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MAXDOTS -->
+<g id="edge36" class="edge">
+<title>FL8_TOP->FL8_MAXDOTS</title>
+<path fill="none" stroke="black" d="M902.14,-586.79C924.98,-542.26 984.66,-425.9 1011.98,-372.64"/>
+<polygon fill="black" stroke="black" points="1015,-374.42 1016.45,-363.92 1008.78,-371.22 1015,-374.42"/>
+</g>
+<!-- FL8_BOT -->
+<g id="node23" class="node">
+<title>FL8_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-96.25" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="888.12" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- FL8_BOT->BOT -->
+<g id="edge40" class="edge">
+<title>FL8_BOT->BOT</title>
+<path fill="none" stroke="black" d="M856.03,-89.99C759.77,-76.29 502.48,-39.69 411.46,-26.74"/>
+<polygon fill="black" stroke="black" points="412.13,-23.3 401.73,-25.36 411.14,-30.23 412.13,-23.3"/>
+</g>
+<!-- FL8_MINDOTS->FL8_BOT -->
+<g id="edge37" class="edge">
+<title>FL8_MINDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M853.16,-327C860.54,-284.27 878.94,-177.67 887.92,-125.69"/>
+<polygon fill="black" stroke="black" points="891.32,-126.53 889.58,-116.08 884.43,-125.34 891.32,-126.53"/>
+</g>
+<!-- FL8_MINDOTS->FL8_ZERO -->
+<!-- FL8_ZERO->FL8_BOT -->
+<g id="edge38" class="edge">
+<title>FL8_ZERO->FL8_BOT</title>
+<path fill="none" stroke="black" d="M934.76,-327.4C927.1,-284.97 907.77,-178.01 898.34,-125.81"/>
+<polygon fill="black" stroke="black" points="901.82,-125.38 896.6,-116.16 894.93,-126.62 901.82,-125.38"/>
+</g>
+<!-- FL8_ZERO->FL8_MAXDOTS -->
+<!-- FL8_MAXDOTS->FL8_BOT -->
+<g id="edge39" class="edge">
+<title>FL8_MAXDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M1016.86,-328.19C994.24,-285.83 935.48,-175.8 907.81,-123.99"/>
+<polygon fill="black" stroke="black" points="911.07,-122.66 903.27,-115.49 904.9,-125.96 911.07,-122.66"/>
+</g>
+</g>
+</svg>
diff --git a/docs/lattice_iffcs.gv b/docs/lattice_iffcs.gv new file mode 100644 index 00000000..5b849ccf --- /dev/null +++ b/docs/lattice_iffcs.gv @@ -0,0 +1,143 @@ +digraph Lattice { + compound = true; + // Define nodes + splines=false; + node [shape=circle, style=filled]; + nodesep=0.6; + + 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; + + // ---------------------- + // Integers + INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval]; + + INT_HI [label="max < min" , fillcolor=lightblue, shape=oval]; + INT_XBOOL [label="1...0", fillcolor=lightblue, shape=oval]; + INT_CON [label="constants...", fillcolor=lightblue, shape=oval]; + INT_CON0 [label="0", fillcolor=lightblue]; + INT_CON1 [label="1", fillcolor=lightblue]; + INT_BOOL [label="0...1", fillcolor=lightblue,shape=oval]; + INT_LO [label="max > min" , fillcolor=lightblue, shape=oval]; + + TOP -> INT_TOP; + INT_TOP -> INT_HI; + INT_HI -> INT_XBOOL; + INT_XBOOL -> INT_CON0; + INT_XBOOL -> INT_CON1; + INT_HI -> INT_CON; + INT_CON0 -> INT_BOOL; + INT_CON1 -> INT_BOOL; + INT_BOOL -> INT_LO; + INT_CON -> INT_LO; + INT_LO -> INT_BOT; + INT_BOT -> BOT; + + INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; + + // ---------------------- + // Floats + FLT_TOP [label=<<B>⊤</B >:flt>, fillcolor=aqua, shape=oval]; + FLT_BOT [label=<<B>⊥</B>:flt>, fillcolor=aqua, shape=oval]; + + FLT_CON64 [label="64b consts\n[excludes\n32b consts]" , fillcolor=aqua, shape=oval]; + FLT_CON32 [label="32b consts", fillcolor=aqua, shape=oval]; + FLT_CONPI [label="3.14159...", fillcolor=aqua, shape=oval]; + FLT_X32 [label="~f32", fillcolor=aqua]; + FLT_CON0 [label="0." , fillcolor=aqua]; + FLT_32 [label="f32" , fillcolor=aqua]; + + TOP -> FLT_TOP; + FLT_TOP -> FLT_CON64 + FLT_TOP -> FLT_CONPI + FLT_CON64 -> FLT_BOT + FLT_CONPI -> FLT_BOT + + FLT_TOP -> FLT_X32; + FLT_X32 -> FLT_CON0; + FLT_X32 -> FLT_CON32; + FLT_CON0 -> FLT_32; + FLT_CON32 -> FLT_32; + FLT_32 -> FLT_BOT + + FLT_BOT -> BOT; + + FLT_CON0 -> FLT_CON32 -> FLT_CONPI -> FLT_CON64 [style=invis]; + + // ---------------------- + // sub-Floats + FL8_TOP [label=<<B>⊤</B >:FP8>, fillcolor=aqua, shape=oval]; + FL8_BOT [label=<<B>⊥</B>:FP8>, fillcolor=aqua, shape=oval]; + + FL8_MINDOTS [label="...", fillcolor=aqua, shape=oval]; + FL8_ZERO [label="0" , fillcolor=aqua]; + FL8_MAXDOTS [label="...", fillcolor=aqua, shape=oval]; + + TOP -> FL8_TOP; + FL8_TOP -> FL8_MINDOTS; + FL8_TOP -> FL8_ZERO; + FL8_TOP -> FL8_MAXDOTS; + FL8_MINDOTS -> FL8_BOT; + FL8_ZERO -> FL8_BOT; + FL8_MAXDOTS -> FL8_BOT; + FL8_BOT -> BOT; + + FL8_MINDOTS -> FL8_ZERO -> FL8_MAXDOTS [style=invis]; + + // ---------------------- + // Structs + STRUCT_TOP [label=<<B>⊤</B >:struct>, fillcolor=lightgreen, shape=oval]; + STRUCT_BOT [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> + >]; + + + TOP -> STRUCT_TOP; + STRUCT_TOP -> STRUCT_S1; + STRUCT_TOP -> STRUCT_S2; + STRUCT_TOP -> STRUCT_SN; + STRUCT_S1 -> STRUCT_BOT; + STRUCT_S2 -> STRUCT_BOT; + STRUCT_SN -> STRUCT_BOT; + STRUCT_BOT -> BOT; + + STRUCT_S1 -> STRUCT_S2 -> STRUCT_SN [style=invis]; + + // Additional customization + {rank=same; TOP} + {rank=same; INT_TOP; FLT_TOP; FL8_TOP; XCTRL } + {rank=same; INT_CON; INT_CON0; INT_CON1; + FLT_CON32; FLT_CON64; FLT_CON0; FLT_CONPI; + FL8_MINDOTS; FL8_ZERO; FL8_MAXDOTS; + STRUCT_S1; STRUCT_S2; STRUCT_SN; + } + {rank=same; INT_BOT; FLT_BOT; FL8_BOT; CTRL; } + {rank=same; BOT;} +} diff --git a/docs/lattice_iffcs.svg b/docs/lattice_iffcs.svg new file mode 100644 index 00000000..fc976d90 --- /dev/null +++ b/docs/lattice_iffcs.svg @@ -0,0 +1,547 @@ +<?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="1448pt" height="709pt"
+ viewBox="0.00 0.00 1447.88 708.86" 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 704.86)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-704.86 1443.88,-704.86 1443.88,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="578" cy="-679.73" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="570.12" y="-675.31" 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="41" cy="-604.61" rx="36.51" ry="18"/>
+<text text-anchor="start" x="22.25" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="38" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- TOP->XCTRL -->
+<g id="edge1" class="edge">
+<title>TOP->XCTRL</title>
+<path fill="none" stroke="black" d="M556.95,-675.87C478.01,-665.12 198.42,-627.05 87.16,-611.9"/>
+<polygon fill="black" stroke="black" points="87.88,-608.46 77.5,-610.58 86.94,-615.4 87.88,-608.46"/>
+</g>
+<!-- INT_TOP -->
+<g id="node5" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="364" cy="-604.61" rx="33.95" ry="18"/>
+<text text-anchor="start" x="347.12" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="362.88" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- TOP->INT_TOP -->
+<g id="edge4" class="edge">
+<title>TOP->INT_TOP</title>
+<path fill="none" stroke="black" d="M557.87,-671.85C522.4,-659.73 448.22,-634.39 402.6,-618.8"/>
+<polygon fill="black" stroke="black" points="403.96,-615.57 393.37,-615.64 401.7,-622.19 403.96,-615.57"/>
+</g>
+<!-- FLT_TOP -->
+<g id="node14" class="node">
+<title>FLT_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-604.61" rx="32.41" ry="18"/>
+<text text-anchor="start" x="562.25" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="578" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- TOP->FLT_TOP -->
+<g id="edge18" class="edge">
+<title>TOP->FLT_TOP</title>
+<path fill="none" stroke="black" d="M578,-658.36C578,-650.87 578,-642.24 578,-634.15"/>
+<polygon fill="black" stroke="black" points="581.5,-634.41 578,-624.41 574.5,-634.41 581.5,-634.41"/>
+</g>
+<!-- FL8_TOP -->
+<g id="node22" class="node">
+<title>FL8_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-604.61" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-600.56" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="888.12" y="-600.56" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- TOP->FL8_TOP -->
+<g id="edge33" class="edge">
+<title>TOP->FL8_TOP</title>
+<path fill="none" stroke="black" d="M598.67,-673.94C648.91,-662.27 778.39,-632.21 847.67,-616.13"/>
+<polygon fill="black" stroke="black" points="848.24,-619.59 857.19,-613.92 846.65,-612.78 848.24,-619.59"/>
+</g>
+<!-- STRUCT_TOP -->
+<g id="node27" class="node">
+<title>STRUCT_TOP</title>
+<ellipse fill="lightgreen" stroke="black" cx="1203" cy="-450.29" rx="44.7" ry="18"/>
+<text text-anchor="start" x="1178.25" y="-446.24" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="1194" y="-446.24" font-family="Times New Roman,serif" font-size="14.00">:struct</text>
+</g>
+<!-- TOP->STRUCT_TOP -->
+<g id="edge43" class="edge">
+<title>TOP->STRUCT_TOP</title>
+<path fill="none" stroke="black" d="M598.09,-672.36C685.6,-640.23 1034.77,-512.05 1158.92,-466.47"/>
+<polygon fill="black" stroke="black" points="1159.93,-469.83 1168.11,-463.1 1157.51,-463.26 1159.93,-469.83"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="578" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="570.12" 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="41" cy="-96.25" rx="36.51" ry="18"/>
+<text text-anchor="start" x="22.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="38" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- XCTRL->CTRL -->
+<g id="edge2" class="edge">
+<title>XCTRL->CTRL</title>
+<path fill="none" stroke="black" d="M41,-586.22C41,-510.24 41,-220.41 41,-126.1"/>
+<polygon fill="black" stroke="black" points="44.5,-126.13 41,-116.13 37.5,-126.13 44.5,-126.13"/>
+</g>
+<!-- CTRL->BOT -->
+<g id="edge3" class="edge">
+<title>CTRL->BOT</title>
+<path fill="none" stroke="black" d="M75.82,-90.51C173.78,-77.17 450.76,-39.45 545.64,-26.53"/>
+<polygon fill="black" stroke="black" points="545.85,-30.03 555.29,-25.22 544.91,-23.1 545.85,-30.03"/>
+</g>
+<!-- INT_HI -->
+<g id="node7" class="node">
+<title>INT_HI</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-532.61" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-527.56" font-family="Times New Roman,serif" font-size="14.00">max < min</text>
+</g>
+<!-- INT_TOP->INT_HI -->
+<g id="edge5" class="edge">
+<title>INT_TOP->INT_HI</title>
+<path fill="none" stroke="black" d="M338.74,-592.05C315.1,-581.24 279.4,-564.9 251.74,-552.25"/>
+<polygon fill="black" stroke="black" points="253.5,-549.21 242.95,-548.23 250.59,-555.57 253.5,-549.21"/>
+</g>
+<!-- INT_BOT -->
+<g id="node6" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="364" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="347.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="362.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT->BOT -->
+<g id="edge15" class="edge">
+<title>INT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M391.98,-85.69C432.05,-71.99 505.55,-46.88 547.16,-32.66"/>
+<polygon fill="black" stroke="black" points="548.23,-36 556.56,-29.45 545.96,-29.37 548.23,-36"/>
+</g>
+<!-- INT_XBOOL -->
+<g id="node8" class="node">
+<title>INT_XBOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-450.29" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">1...0</text>
+</g>
+<!-- INT_HI->INT_XBOOL -->
+<g id="edge6" class="edge">
+<title>INT_HI->INT_XBOOL</title>
+<path fill="none" stroke="black" d="M188.75,-515.93C170.46,-503.04 144.44,-484.72 124.78,-470.87"/>
+<polygon fill="black" stroke="black" points="126.86,-468.05 116.67,-465.15 122.83,-473.77 126.86,-468.05"/>
+</g>
+<!-- INT_CON -->
+<g id="node9" class="node">
+<title>INT_CON</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-345.31" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">constants...</text>
+</g>
+<!-- INT_HI->INT_CON -->
+<g id="edge9" class="edge">
+<title>INT_HI->INT_CON</title>
+<path fill="none" stroke="black" d="M211,-514.31C211,-481.93 211,-414.27 211,-375.09"/>
+<polygon fill="black" stroke="black" points="214.5,-375.2 211,-365.2 207.5,-375.2 214.5,-375.2"/>
+</g>
+<!-- INT_CON0 -->
+<g id="node10" class="node">
+<title>INT_CON0</title>
+<ellipse fill="lightblue" stroke="black" cx="18" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_XBOOL->INT_CON0 -->
+<g id="edge7" class="edge">
+<title>INT_XBOOL->INT_CON0</title>
+<path fill="none" stroke="black" d="M85,-433.65C71.8,-416.44 50.45,-388.61 35.41,-369"/>
+<polygon fill="black" stroke="black" points="38.38,-367.12 29.51,-361.32 32.82,-371.38 38.38,-367.12"/>
+</g>
+<!-- INT_CON1 -->
+<g id="node11" class="node">
+<title>INT_CON1</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="97" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_XBOOL->INT_CON1 -->
+<g id="edge8" class="edge">
+<title>INT_XBOOL->INT_CON1</title>
+<path fill="none" stroke="black" d="M97,-431.82C97,-416.27 97,-393.22 97,-374.97"/>
+<polygon fill="black" stroke="black" points="100.5,-375.04 97,-365.04 93.5,-375.04 100.5,-375.04"/>
+</g>
+<!-- INT_LO -->
+<g id="node13" class="node">
+<title>INT_LO</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-168.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-163.2" font-family="Times New Roman,serif" font-size="14.00">max > min</text>
+</g>
+<!-- INT_CON->INT_LO -->
+<g id="edge13" class="edge">
+<title>INT_CON->INT_LO</title>
+<path fill="none" stroke="black" d="M211,-327.03C211,-296.55 211,-235.05 211,-198.18"/>
+<polygon fill="black" stroke="black" points="214.5,-198.21 211,-188.21 207.5,-198.21 214.5,-198.21"/>
+</g>
+<!-- INT_CON0->INT_CON1 -->
+<!-- INT_BOOL -->
+<g id="node12" class="node">
+<title>INT_BOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-245.45" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">0...1</text>
+</g>
+<!-- INT_CON0->INT_BOOL -->
+<g id="edge10" class="edge">
+<title>INT_CON0->INT_BOOL</title>
+<path fill="none" stroke="black" d="M28.98,-330.7C41.46,-315.25 62.06,-289.73 77.33,-270.81"/>
+<polygon fill="black" stroke="black" points="80.04,-273.03 83.6,-263.05 74.59,-268.64 80.04,-273.03"/>
+</g>
+<!-- INT_CON1->INT_CON -->
+<!-- INT_CON1->INT_BOOL -->
+<g id="edge11" class="edge">
+<title>INT_CON1->INT_BOOL</title>
+<path fill="none" stroke="black" d="M97,-326.82C97,-312.48 97,-291.91 97,-275.16"/>
+<polygon fill="black" stroke="black" points="100.5,-275.31 97,-265.31 93.5,-275.31 100.5,-275.31"/>
+</g>
+<!-- INT_BOOL->INT_LO -->
+<g id="edge12" class="edge">
+<title>INT_BOOL->INT_LO</title>
+<path fill="none" stroke="black" d="M116.08,-231.86C132.97,-220.72 157.98,-204.22 178.09,-190.96"/>
+<polygon fill="black" stroke="black" points="179.83,-194.01 186.25,-185.58 175.97,-188.16 179.83,-194.01"/>
+</g>
+<!-- INT_LO->INT_BOT -->
+<g id="edge14" class="edge">
+<title>INT_LO->INT_BOT</title>
+<path fill="none" stroke="black" d="M241.59,-153.25C266.73,-141.75 302.37,-125.45 328.71,-113.39"/>
+<polygon fill="black" stroke="black" points="330.01,-116.65 337.64,-109.31 327.09,-110.29 330.01,-116.65"/>
+</g>
+<!-- FLT_CON64 -->
+<g id="node16" class="node">
+<title>FLT_CON64</title>
+<ellipse fill="aqua" stroke="black" cx="725" cy="-345.31" rx="55.33" ry="40.66"/>
+<text text-anchor="middle" x="725" y="-356.76" font-family="Times New Roman,serif" font-size="14.00">64b consts</text>
+<text text-anchor="middle" x="725" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">[excludes</text>
+<text text-anchor="middle" x="725" y="-323.76" font-family="Times New Roman,serif" font-size="14.00">32b consts]</text>
+</g>
+<!-- FLT_TOP->FLT_CON64 -->
+<g id="edge19" class="edge">
+<title>FLT_TOP->FLT_CON64</title>
+<path fill="none" stroke="black" d="M587.87,-587.19C610.15,-547.91 664.93,-451.26 698.12,-392.72"/>
+<polygon fill="black" stroke="black" points="701.02,-394.7 702.91,-384.28 694.93,-391.25 701.02,-394.7"/>
+</g>
+<!-- FLT_CONPI -->
+<g id="node18" class="node">
+<title>FLT_CONPI</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-345.31" rx="48.79" ry="18"/>
+<text text-anchor="middle" x="578" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">3.14159...</text>
+</g>
+<!-- FLT_TOP->FLT_CONPI -->
+<g id="edge20" class="edge">
+<title>FLT_TOP->FLT_CONPI</title>
+<path fill="none" stroke="black" d="M578,-586.38C578,-542.21 578,-429.14 578,-375.03"/>
+<polygon fill="black" stroke="black" points="581.5,-375.04 578,-365.04 574.5,-375.04 581.5,-375.04"/>
+</g>
+<!-- FLT_X32 -->
+<g id="node19" class="node">
+<title>FLT_X32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-450.29" rx="28.32" ry="28.32"/>
+<text text-anchor="middle" x="436" y="-445.24" font-family="Times New Roman,serif" font-size="14.00">~f32</text>
+</g>
+<!-- FLT_TOP->FLT_X32 -->
+<g id="edge23" class="edge">
+<title>FLT_TOP->FLT_X32</title>
+<path fill="none" stroke="black" d="M563.07,-588.39C539.34,-562.6 492.68,-511.88 462.98,-479.61"/>
+<polygon fill="black" stroke="black" points="465.83,-477.53 456.48,-472.55 460.67,-482.27 465.83,-477.53"/>
+</g>
+<!-- FLT_BOT -->
+<g id="node15" class="node">
+<title>FLT_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-96.25" rx="32.41" ry="18"/>
+<text text-anchor="start" x="562.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="578" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- FLT_BOT->BOT -->
+<g id="edge29" class="edge">
+<title>FLT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M578,-77.92C578,-70.74 578,-62.18 578,-53.95"/>
+<polygon fill="black" stroke="black" points="581.5,-54.22 578,-44.22 574.5,-54.22 581.5,-54.22"/>
+</g>
+<!-- FLT_CON64->FLT_BOT -->
+<g id="edge21" class="edge">
+<title>FLT_CON64->FLT_BOT</title>
+<path fill="none" stroke="black" d="M702.83,-307.75C672.98,-257.18 620.57,-168.38 594.17,-123.64"/>
+<polygon fill="black" stroke="black" points="597.21,-121.91 589.11,-115.08 591.18,-125.47 597.21,-121.91"/>
+</g>
+<!-- FLT_CON32 -->
+<g id="node17" class="node">
+<title>FLT_CON32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-345.31" rx="50.33" ry="18"/>
+<text text-anchor="middle" x="436" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">32b consts</text>
+</g>
+<!-- FLT_CON32->FLT_CONPI -->
+<!-- FLT_32 -->
+<g id="node21" class="node">
+<title>FLT_32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-245.45" rx="23.2" ry="23.2"/>
+<text text-anchor="middle" x="436" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">f32</text>
+</g>
+<!-- FLT_CON32->FLT_32 -->
+<g id="edge27" class="edge">
+<title>FLT_CON32->FLT_32</title>
+<path fill="none" stroke="black" d="M436,-326.82C436,-313.94 436,-296.02 436,-280.37"/>
+<polygon fill="black" stroke="black" points="439.5,-280.47 436,-270.47 432.5,-280.47 439.5,-280.47"/>
+</g>
+<!-- FLT_CONPI->FLT_BOT -->
+<g id="edge22" class="edge">
+<title>FLT_CONPI->FLT_BOT</title>
+<path fill="none" stroke="black" d="M578,-327C578,-284.36 578,-178.12 578,-126.02"/>
+<polygon fill="black" stroke="black" points="581.5,-126.1 578,-116.1 574.5,-126.1 581.5,-126.1"/>
+</g>
+<!-- FLT_CONPI->FLT_CON64 -->
+<!-- FLT_X32->FLT_CON32 -->
+<g id="edge25" class="edge">
+<title>FLT_X32->FLT_CON32</title>
+<path fill="none" stroke="black" d="M436,-421.69C436,-407.26 436,-389.62 436,-375.03"/>
+<polygon fill="black" stroke="black" points="439.5,-375.14 436,-365.14 432.5,-375.14 439.5,-375.14"/>
+</g>
+<!-- FLT_CON0 -->
+<g id="node20" class="node">
+<title>FLT_CON0</title>
+<ellipse fill="aqua" stroke="black" cx="325" cy="-345.31" rx="18.08" ry="18.08"/>
+<text text-anchor="middle" x="325" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0.</text>
+</g>
+<!-- FLT_X32->FLT_CON0 -->
+<g id="edge24" class="edge">
+<title>FLT_X32->FLT_CON0</title>
+<path fill="none" stroke="black" d="M415.38,-430.16C395.7,-411.9 366.18,-384.51 346.28,-366.05"/>
+<polygon fill="black" stroke="black" points="348.7,-363.53 338.99,-359.29 343.94,-368.66 348.7,-363.53"/>
+</g>
+<!-- FLT_CON0->FLT_CON32 -->
+<!-- FLT_CON0->FLT_32 -->
+<g id="edge26" class="edge">
+<title>FLT_CON0->FLT_32</title>
+<path fill="none" stroke="black" d="M338.17,-332.7C355.91,-317.06 387.87,-288.88 410.42,-269"/>
+<polygon fill="black" stroke="black" points="412.53,-271.81 417.72,-262.57 407.9,-266.56 412.53,-271.81"/>
+</g>
+<!-- FLT_32->FLT_BOT -->
+<g id="edge28" class="edge">
+<title>FLT_32->FLT_BOT</title>
+<path fill="none" stroke="black" d="M452.29,-228.33C477.48,-201.86 526,-150.88 554.84,-120.58"/>
+<polygon fill="black" stroke="black" points="557.36,-123.01 561.72,-113.36 552.29,-118.19 557.36,-123.01"/>
+</g>
+<!-- FL8_MINDOTS -->
+<g id="node24" class="node">
+<title>FL8_MINDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="850" cy="-345.31" rx="27" ry="18"/>
+<text text-anchor="middle" x="850" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MINDOTS -->
+<g id="edge34" class="edge">
+<title>FL8_TOP->FL8_MINDOTS</title>
+<path fill="none" stroke="black" d="M889.98,-586.38C882.64,-542.11 863.82,-428.67 854.87,-374.69"/>
+<polygon fill="black" stroke="black" points="858.36,-374.31 853.27,-365.02 851.45,-375.46 858.36,-374.31"/>
+</g>
+<!-- FL8_ZERO -->
+<g id="node25" class="node">
+<title>FL8_ZERO</title>
+<ellipse fill="aqua" stroke="black" cx="938" cy="-345.31" rx="18" ry="18"/>
+<text text-anchor="middle" x="938" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- FL8_TOP->FL8_ZERO -->
+<g id="edge35" class="edge">
+<title>FL8_TOP->FL8_ZERO</title>
+<path fill="none" stroke="black" d="M896.16,-586.38C903.85,-542.11 923.53,-428.67 932.9,-374.69"/>
+<polygon fill="black" stroke="black" points="936.32,-375.47 934.58,-365.02 929.42,-374.27 936.32,-375.47"/>
+</g>
+<!-- FL8_MAXDOTS -->
+<g id="node26" class="node">
+<title>FL8_MAXDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="1026" cy="-345.31" rx="27" ry="18"/>
+<text text-anchor="middle" x="1026" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MAXDOTS -->
+<g id="edge36" class="edge">
+<title>FL8_TOP->FL8_MAXDOTS</title>
+<path fill="none" stroke="black" d="M902.14,-586.79C924.98,-542.26 984.66,-425.9 1011.98,-372.64"/>
+<polygon fill="black" stroke="black" points="1015,-374.42 1016.45,-363.92 1008.78,-371.22 1015,-374.42"/>
+</g>
+<!-- FL8_BOT -->
+<g id="node23" class="node">
+<title>FL8_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-96.25" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="888.12" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- FL8_BOT->BOT -->
+<g id="edge40" class="edge">
+<title>FL8_BOT->BOT</title>
+<path fill="none" stroke="black" d="M858.69,-87.28C797.25,-73.02 669.32,-43.32 609.77,-29.5"/>
+<polygon fill="black" stroke="black" points="610.81,-26.15 600.28,-27.3 609.23,-32.97 610.81,-26.15"/>
+</g>
+<!-- FL8_MINDOTS->FL8_BOT -->
+<g id="edge37" class="edge">
+<title>FL8_MINDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M853.16,-327C860.54,-284.27 878.94,-177.67 887.92,-125.69"/>
+<polygon fill="black" stroke="black" points="891.32,-126.53 889.58,-116.08 884.43,-125.34 891.32,-126.53"/>
+</g>
+<!-- FL8_MINDOTS->FL8_ZERO -->
+<!-- FL8_ZERO->FL8_BOT -->
+<g id="edge38" class="edge">
+<title>FL8_ZERO->FL8_BOT</title>
+<path fill="none" stroke="black" d="M934.76,-327.4C927.1,-284.97 907.77,-178.01 898.34,-125.81"/>
+<polygon fill="black" stroke="black" points="901.82,-125.38 896.6,-116.16 894.93,-126.62 901.82,-125.38"/>
+</g>
+<!-- FL8_ZERO->FL8_MAXDOTS -->
+<!-- FL8_MAXDOTS->FL8_BOT -->
+<g id="edge39" class="edge">
+<title>FL8_MAXDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M1016.86,-328.19C994.24,-285.83 935.48,-175.8 907.81,-123.99"/>
+<polygon fill="black" stroke="black" points="911.07,-122.66 903.27,-115.49 904.9,-125.96 911.07,-122.66"/>
+</g>
+<!-- STRUCT_S1 -->
+<g id="node29" class="node">
+<title>STRUCT_S1</title>
+<polygon fill="none" stroke="none" points="1181.88,-363.31 1096.12,-363.31 1096.12,-327.31 1181.88,-327.31 1181.88,-363.31"/>
+<polygon fill="lightgreen" stroke="none" points="1104.12,-334.06 1104.12,-356.56 1134.88,-356.56 1134.88,-334.06 1104.12,-334.06"/>
+<polygon fill="none" stroke="black" points="1104.12,-334.06 1104.12,-356.56 1134.88,-356.56 1134.88,-334.06 1104.12,-334.06"/>
+<text text-anchor="start" x="1107.12" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_0" gradientUnits="userSpaceOnUse" x1="1140.59" y1="-353.27" x2="1168.16" y2="-337.36" >
+<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="1134.88,-334.06 1134.88,-356.56 1173.88,-356.56 1173.88,-334.06 1134.88,-334.06"/>
+<polygon fill="none" stroke="black" points="1134.88,-334.06 1134.88,-356.56 1173.88,-356.56 1173.88,-334.06 1134.88,-334.06"/>
+<text text-anchor="start" x="1137.88" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
+</g>
+<!-- STRUCT_TOP->STRUCT_S1 -->
+<g id="edge44" class="edge">
+<title>STRUCT_TOP->STRUCT_S1</title>
+<path fill="none" stroke="black" d="M1192.72,-432.74C1182.65,-416.55 1167.16,-391.63 1155.4,-372.7"/>
+<polygon fill="black" stroke="black" points="1158.52,-371.09 1150.27,-364.44 1152.57,-374.78 1158.52,-371.09"/>
+</g>
+<!-- STRUCT_S2 -->
+<g id="node30" class="node">
+<title>STRUCT_S2</title>
+<polygon fill="none" stroke="none" points="1310.88,-371.81 1225.12,-371.81 1225.12,-318.81 1310.88,-318.81 1310.88,-371.81"/>
+<polygon fill="lightgreen" stroke="none" points="1233.12,-345.31 1233.12,-367.81 1263.88,-367.81 1263.88,-345.31 1233.12,-345.31"/>
+<polygon fill="none" stroke="black" points="1233.12,-345.31 1233.12,-367.81 1263.88,-367.81 1263.88,-345.31 1233.12,-345.31"/>
+<text text-anchor="start" x="1236.12" y="-351.51" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_1" gradientUnits="userSpaceOnUse" x1="1269.59" y1="-364.52" x2="1297.16" y2="-348.61" >
+<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="1263.88,-345.31 1263.88,-367.81 1302.88,-367.81 1302.88,-345.31 1263.88,-345.31"/>
+<polygon fill="none" stroke="black" points="1263.88,-345.31 1263.88,-367.81 1302.88,-367.81 1302.88,-345.31 1263.88,-345.31"/>
+<text text-anchor="start" x="1266.88" y="-351.51" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
+<polygon fill="lightgreen" stroke="none" points="1233.12,-322.81 1233.12,-345.31 1263.88,-345.31 1263.88,-322.81 1233.12,-322.81"/>
+<polygon fill="none" stroke="black" points="1233.12,-322.81 1233.12,-345.31 1263.88,-345.31 1263.88,-322.81 1233.12,-322.81"/>
+<text text-anchor="start" x="1236.12" y="-329.01" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_2" gradientUnits="userSpaceOnUse" x1="1269.59" y1="-342.02" x2="1297.16" y2="-326.11" >
+<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="1263.88,-322.81 1263.88,-345.31 1302.88,-345.31 1302.88,-322.81 1263.88,-322.81"/>
+<polygon fill="none" stroke="black" points="1263.88,-322.81 1263.88,-345.31 1302.88,-345.31 1302.88,-322.81 1263.88,-322.81"/>
+<text text-anchor="start" x="1266.88" y="-329.01" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
+</g>
+<!-- STRUCT_TOP->STRUCT_S2 -->
+<g id="edge45" class="edge">
+<title>STRUCT_TOP->STRUCT_S2</title>
+<path fill="none" stroke="black" d="M1213.44,-432.74C1222.22,-418.83 1235.07,-398.48 1246.1,-381.01"/>
+<polygon fill="black" stroke="black" points="1248.81,-383.27 1251.19,-372.95 1242.89,-379.54 1248.81,-383.27"/>
+</g>
+<!-- STRUCT_SN -->
+<g id="node31" class="node">
+<title>STRUCT_SN</title>
+<polygon fill="none" stroke="none" points="1439.88,-383.06 1354.12,-383.06 1354.12,-307.56 1439.88,-307.56 1439.88,-383.06"/>
+<polygon fill="lightgreen" stroke="none" points="1362.12,-356.56 1362.12,-379.06 1392.88,-379.06 1392.88,-356.56 1362.12,-356.56"/>
+<polygon fill="none" stroke="black" points="1362.12,-356.56 1362.12,-379.06 1392.88,-379.06 1392.88,-356.56 1362.12,-356.56"/>
+<text text-anchor="start" x="1365.12" y="-362.76" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_3" gradientUnits="userSpaceOnUse" x1="1398.59" y1="-375.77" x2="1426.16" y2="-359.86" >
+<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="1392.88,-356.56 1392.88,-379.06 1431.88,-379.06 1431.88,-356.56 1392.88,-356.56"/>
+<polygon fill="none" stroke="black" points="1392.88,-356.56 1392.88,-379.06 1431.88,-379.06 1431.88,-356.56 1392.88,-356.56"/>
+<text text-anchor="start" x="1395.88" y="-362.76" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
+<polygon fill="lightgreen" stroke="none" points="1362.12,-334.06 1362.12,-356.56 1392.88,-356.56 1392.88,-334.06 1362.12,-334.06"/>
+<polygon fill="none" stroke="black" points="1362.12,-334.06 1362.12,-356.56 1392.88,-356.56 1392.88,-334.06 1362.12,-334.06"/>
+<text text-anchor="start" x="1368.12" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">...  </text>
+<defs>
+<linearGradient id="l_4" gradientUnits="userSpaceOnUse" x1="1398.59" y1="-353.27" x2="1426.16" y2="-337.36" >
+<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="1392.88,-334.06 1392.88,-356.56 1431.88,-356.56 1431.88,-334.06 1392.88,-334.06"/>
+<polygon fill="none" stroke="black" points="1392.88,-334.06 1392.88,-356.56 1431.88,-356.56 1431.88,-334.06 1392.88,-334.06"/>
+<text text-anchor="start" x="1395.88" y="-340.26" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
+<polygon fill="lightgreen" stroke="none" points="1362.12,-311.56 1362.12,-334.06 1392.88,-334.06 1392.88,-311.56 1362.12,-311.56"/>
+<polygon fill="none" stroke="black" points="1362.12,-311.56 1362.12,-334.06 1392.88,-334.06 1392.88,-311.56 1362.12,-311.56"/>
+<text text-anchor="start" x="1365.12" y="-317.76" font-family="Times New Roman,serif" font-size="14.00">field</text>
+<defs>
+<linearGradient id="l_5" gradientUnits="userSpaceOnUse" x1="1398.59" y1="-330.77" x2="1426.16" y2="-314.86" >
+<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="1392.88,-311.56 1392.88,-334.06 1431.88,-334.06 1431.88,-311.56 1392.88,-311.56"/>
+<polygon fill="none" stroke="black" points="1392.88,-311.56 1392.88,-334.06 1431.88,-334.06 1431.88,-311.56 1392.88,-311.56"/>
+<text text-anchor="start" x="1395.88" y="-317.76" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
+</g>
+<!-- STRUCT_TOP->STRUCT_SN -->
+<g id="edge46" class="edge">
+<title>STRUCT_TOP->STRUCT_SN</title>
+<path fill="none" stroke="black" d="M1229.16,-435.4C1258.6,-419.78 1307.16,-394 1344.49,-374.18"/>
+<polygon fill="black" stroke="black" points="1345.68,-377.51 1352.88,-369.73 1342.4,-371.33 1345.68,-377.51"/>
+</g>
+<!-- STRUCT_BOT -->
+<g id="node28" class="node">
+<title>STRUCT_BOT</title>
+<ellipse fill="lightgreen" stroke="black" cx="1203" cy="-245.45" rx="44.7" ry="18"/>
+<text text-anchor="start" x="1178.25" y="-241.4" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="1194" y="-241.4" font-family="Times New Roman,serif" font-size="14.00">:struct</text>
+</g>
+<!-- STRUCT_BOT->BOT -->
+<g id="edge50" class="edge">
+<title>STRUCT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M1169.4,-233.39C1059.91,-194.09 714.44,-70.1 608.92,-32.22"/>
+<polygon fill="black" stroke="black" points="610.11,-28.93 599.51,-28.85 607.74,-35.52 610.11,-28.93"/>
+</g>
+<!-- STRUCT_S1->STRUCT_BOT -->
+<g id="edge47" class="edge">
+<title>STRUCT_S1->STRUCT_BOT</title>
+<path fill="none" stroke="black" d="M1149.86,-327.71C1159.69,-312.67 1174.36,-290.25 1185.79,-272.76"/>
+<polygon fill="black" stroke="black" points="1188.72,-274.68 1191.26,-264.4 1182.86,-270.85 1188.72,-274.68"/>
+</g>
+<!-- STRUCT_S1->STRUCT_S2 -->
+<!-- STRUCT_S2->STRUCT_BOT -->
+<g id="edge48" class="edge">
+<title>STRUCT_S2->STRUCT_BOT</title>
+<path fill="none" stroke="black" d="M1251.09,-318.85C1241.62,-304.59 1229.83,-286.84 1220.29,-272.48"/>
+<polygon fill="black" stroke="black" points="1223.39,-270.82 1214.94,-264.43 1217.56,-274.7 1223.39,-270.82"/>
+</g>
+<!-- STRUCT_S2->STRUCT_SN -->
+<!-- STRUCT_SN->STRUCT_BOT -->
+<g id="edge49" class="edge">
+<title>STRUCT_SN->STRUCT_BOT</title>
+<path fill="none" stroke="black" d="M1354.43,-322.83C1320.31,-305.62 1272.91,-281.71 1240.27,-265.25"/>
+<polygon fill="black" stroke="black" points="1242.09,-262.25 1231.58,-260.87 1238.93,-268.5 1242.09,-262.25"/>
+</g>
+</g>
+</svg>
diff --git a/docs/lattice_iffct.gv b/docs/lattice_iffct.gv new file mode 100644 index 00000000..becb2612 --- /dev/null +++ b/docs/lattice_iffct.gv @@ -0,0 +1,145 @@ +digraph Lattice { + compound = true; + // Define nodes + splines=false; + node [shape=circle, style=filled]; + nodesep=0.6; + + 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; + + // ---------------------- + // Integers + INT_TOP [label=<<B>⊤</B >:int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<<B>⊥</B>:int>, fillcolor=lightblue, shape=oval]; + + INT_HI [label="max < min" , fillcolor=lightblue, shape=oval]; + INT_XBOOL [label="1...0", fillcolor=lightblue, shape=oval]; + INT_CON [label="constants...", fillcolor=lightblue, shape=oval]; + INT_CON0 [label="0", fillcolor=lightblue]; + INT_CON1 [label="1", fillcolor=lightblue]; + INT_BOOL [label="0...1", fillcolor=lightblue,shape=oval]; + INT_LO [label="max > min" , fillcolor=lightblue, shape=oval]; + + TOP -> INT_TOP; + INT_TOP -> INT_HI; + INT_HI -> INT_XBOOL; + INT_XBOOL -> INT_CON0; + INT_XBOOL -> INT_CON1; + INT_HI -> INT_CON; + INT_CON0 -> INT_BOOL; + INT_CON1 -> INT_BOOL; + INT_BOOL -> INT_LO; + INT_CON -> INT_LO; + INT_LO -> INT_BOT; + INT_BOT -> BOT; + + INT_CON0 -> INT_CON1 -> INT_CON [style=invis]; + + // ---------------------- + // Floats + FLT_TOP [label=<<B>⊤</B >:flt>, fillcolor=aqua, shape=oval]; + FLT_BOT [label=<<B>⊥</B>:flt>, fillcolor=aqua, shape=oval]; + + FLT_CON64 [label="64b consts\n[excludes\n32b consts]" , fillcolor=aqua, shape=oval]; + FLT_CON32 [label="32b consts", fillcolor=aqua, shape=oval]; + FLT_CONPI [label="3.14159...", fillcolor=aqua, shape=oval]; + FLT_X32 [label="~f32", fillcolor=aqua]; + FLT_CON0 [label="0." , fillcolor=aqua]; + FLT_32 [label="f32" , fillcolor=aqua]; + + TOP -> FLT_TOP; + FLT_TOP -> FLT_CON64 + FLT_TOP -> FLT_CONPI + FLT_CON64 -> FLT_BOT + FLT_CONPI -> FLT_BOT + + FLT_TOP -> FLT_X32; + FLT_X32 -> FLT_CON0; + FLT_X32 -> FLT_CON32; + FLT_CON0 -> FLT_32; + FLT_CON32 -> FLT_32; + FLT_32 -> FLT_BOT + + FLT_BOT -> BOT; + + FLT_CON0 -> FLT_CON32 -> FLT_CONPI -> FLT_CON64 [style=invis]; + + // ---------------------- + // sub-Floats + FL8_TOP [label=<<B>⊤</B >:FP8>, fillcolor=aqua, shape=oval]; + FL8_BOT [label=<<B>⊥</B>:FP8>, fillcolor=aqua, shape=oval]; + + FL8_MINDOTS [label="...", fillcolor=aqua, shape=oval]; + FL8_ZERO [label="0" , fillcolor=aqua]; + FL8_MAXDOTS [label="...", fillcolor=aqua, shape=oval]; + + TOP -> FL8_TOP; + FL8_TOP -> FL8_MINDOTS; + FL8_TOP -> FL8_ZERO; + FL8_TOP -> FL8_MAXDOTS; + FL8_MINDOTS -> FL8_BOT; + FL8_ZERO -> FL8_BOT; + FL8_MAXDOTS -> FL8_BOT; + FL8_BOT -> BOT; + + FL8_MINDOTS -> FL8_ZERO -> FL8_MAXDOTS [style=invis]; + + // ---------------------- + // Tuples + + 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 -> 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; FLT_TOP; FL8_TOP; XCTRL } + {rank=same; INT_CON; INT_CON0; INT_CON1; + FLT_CON32; FLT_CON64; FLT_CON0; FLT_CONPI; + FL8_MINDOTS; FL8_ZERO; FL8_MAXDOTS; + TUPLE1; TUPLE2; TUPLEN; + } + {rank=same; INT_BOT; FLT_BOT; FL8_BOT; CTRL; } + {rank=same; BOT;} +} diff --git a/docs/lattice_iffct.svg b/docs/lattice_iffct.svg new file mode 100644 index 00000000..3c38552b --- /dev/null +++ b/docs/lattice_iffct.svg @@ -0,0 +1,500 @@ +<?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="1352pt" height="726pt"
+ viewBox="0.00 0.00 1352.00 725.54" 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 721.54)">
+<title>Lattice</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-721.54 1348,-721.54 1348,4 -4,4"/>
+<!-- TOP -->
+<g id="node1" class="node">
+<title>TOP</title>
+<ellipse fill="black" stroke="black" cx="578" cy="-696.42" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="570.12" y="-691.99" 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="41" cy="-621.29" rx="36.51" ry="18"/>
+<text text-anchor="start" x="22.25" y="-617.24" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="38" y="-617.24" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- TOP->XCTRL -->
+<g id="edge1" class="edge">
+<title>TOP->XCTRL</title>
+<path fill="none" stroke="black" d="M556.95,-692.55C478.01,-681.8 198.42,-643.73 87.16,-628.58"/>
+<polygon fill="black" stroke="black" points="87.88,-625.14 77.5,-627.26 86.94,-632.08 87.88,-625.14"/>
+</g>
+<!-- INT_TOP -->
+<g id="node5" class="node">
+<title>INT_TOP</title>
+<ellipse fill="lightblue" stroke="black" cx="364" cy="-621.29" rx="33.95" ry="18"/>
+<text text-anchor="start" x="347.12" y="-617.24" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="362.88" y="-617.24" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- TOP->INT_TOP -->
+<g id="edge4" class="edge">
+<title>TOP->INT_TOP</title>
+<path fill="none" stroke="black" d="M557.87,-688.54C522.4,-676.42 448.22,-651.07 402.6,-635.48"/>
+<polygon fill="black" stroke="black" points="403.96,-632.25 393.37,-632.33 401.7,-638.87 403.96,-632.25"/>
+</g>
+<!-- FLT_TOP -->
+<g id="node14" class="node">
+<title>FLT_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-621.29" rx="32.41" ry="18"/>
+<text text-anchor="start" x="562.25" y="-617.24" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="578" y="-617.24" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- TOP->FLT_TOP -->
+<g id="edge18" class="edge">
+<title>TOP->FLT_TOP</title>
+<path fill="none" stroke="black" d="M578,-675.05C578,-667.55 578,-658.92 578,-650.83"/>
+<polygon fill="black" stroke="black" points="581.5,-651.09 578,-641.09 574.5,-651.09 581.5,-651.09"/>
+</g>
+<!-- FL8_TOP -->
+<g id="node22" class="node">
+<title>FL8_TOP</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-621.29" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-617.24" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="888.12" y="-617.24" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- TOP->FL8_TOP -->
+<g id="edge33" class="edge">
+<title>TOP->FL8_TOP</title>
+<path fill="none" stroke="black" d="M598.67,-690.62C648.91,-678.96 778.39,-648.9 847.67,-632.81"/>
+<polygon fill="black" stroke="black" points="848.24,-636.28 857.19,-630.61 846.65,-629.46 848.24,-636.28"/>
+</g>
+<!-- TUPLE_TOP -->
+<g id="node27" class="node">
+<title>TUPLE_TOP</title>
+<ellipse fill="pink" stroke="black" cx="1176" cy="-466.97" rx="42.65" ry="18"/>
+<text text-anchor="start" x="1152.75" y="-462.92" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
+<text text-anchor="start" x="1168.5" y="-462.92" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
+</g>
+<!-- TOP->TUPLE_TOP -->
+<g id="edge43" class="edge">
+<title>TOP->TUPLE_TOP</title>
+<path fill="none" stroke="black" d="M597.9,-688.78C682.7,-656.25 1015.01,-528.74 1133.64,-483.23"/>
+<polygon fill="black" stroke="black" points="1134.61,-486.6 1142.69,-479.75 1132.1,-480.07 1134.61,-486.6"/>
+</g>
+<!-- BOT -->
+<g id="node2" class="node">
+<title>BOT</title>
+<ellipse fill="black" stroke="black" cx="578" cy="-21.12" rx="21.12" ry="21.12"/>
+<text text-anchor="start" x="570.12" 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="41" cy="-96.25" rx="36.51" ry="18"/>
+<text text-anchor="start" x="22.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="38" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:ctrl</text>
+</g>
+<!-- XCTRL->CTRL -->
+<g id="edge2" class="edge">
+<title>XCTRL->CTRL</title>
+<path fill="none" stroke="black" d="M41,-602.91C41,-525.1 41,-222.37 41,-125.93"/>
+<polygon fill="black" stroke="black" points="44.5,-125.99 41,-115.99 37.5,-125.99 44.5,-125.99"/>
+</g>
+<!-- CTRL->BOT -->
+<g id="edge3" class="edge">
+<title>CTRL->BOT</title>
+<path fill="none" stroke="black" d="M75.82,-90.51C173.78,-77.17 450.76,-39.45 545.64,-26.53"/>
+<polygon fill="black" stroke="black" points="545.85,-30.03 555.29,-25.22 544.91,-23.1 545.85,-30.03"/>
+</g>
+<!-- INT_HI -->
+<g id="node7" class="node">
+<title>INT_HI</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-549.29" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-544.24" font-family="Times New Roman,serif" font-size="14.00">max < min</text>
+</g>
+<!-- INT_TOP->INT_HI -->
+<g id="edge5" class="edge">
+<title>INT_TOP->INT_HI</title>
+<path fill="none" stroke="black" d="M338.74,-608.73C315.1,-597.92 279.4,-581.59 251.74,-568.93"/>
+<polygon fill="black" stroke="black" points="253.5,-565.89 242.95,-564.91 250.59,-572.25 253.5,-565.89"/>
+</g>
+<!-- INT_BOT -->
+<g id="node6" class="node">
+<title>INT_BOT</title>
+<ellipse fill="lightblue" stroke="black" cx="364" cy="-96.25" rx="33.95" ry="18"/>
+<text text-anchor="start" x="347.12" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="362.88" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:int</text>
+</g>
+<!-- INT_BOT->BOT -->
+<g id="edge15" class="edge">
+<title>INT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M391.98,-85.69C432.05,-71.99 505.55,-46.88 547.16,-32.66"/>
+<polygon fill="black" stroke="black" points="548.23,-36 556.56,-29.45 545.96,-29.37 548.23,-36"/>
+</g>
+<!-- INT_XBOOL -->
+<g id="node8" class="node">
+<title>INT_XBOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-466.97" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-461.92" font-family="Times New Roman,serif" font-size="14.00">1...0</text>
+</g>
+<!-- INT_HI->INT_XBOOL -->
+<g id="edge6" class="edge">
+<title>INT_HI->INT_XBOOL</title>
+<path fill="none" stroke="black" d="M188.75,-532.62C170.46,-519.73 144.44,-501.4 124.78,-487.55"/>
+<polygon fill="black" stroke="black" points="126.86,-484.73 116.67,-481.83 122.83,-490.45 126.86,-484.73"/>
+</g>
+<!-- INT_CON -->
+<g id="node9" class="node">
+<title>INT_CON</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-353.65" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">constants...</text>
+</g>
+<!-- INT_HI->INT_CON -->
+<g id="edge9" class="edge">
+<title>INT_HI->INT_CON</title>
+<path fill="none" stroke="black" d="M211,-530.89C211,-497.02 211,-424.56 211,-383.55"/>
+<polygon fill="black" stroke="black" points="214.5,-383.66 211,-373.66 207.5,-383.66 214.5,-383.66"/>
+</g>
+<!-- INT_CON0 -->
+<g id="node10" class="node">
+<title>INT_CON0</title>
+<ellipse fill="lightblue" stroke="black" cx="18" cy="-353.65" rx="18" ry="18"/>
+<text text-anchor="middle" x="18" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- INT_XBOOL->INT_CON0 -->
+<g id="edge7" class="edge">
+<title>INT_XBOOL->INT_CON0</title>
+<path fill="none" stroke="black" d="M85.68,-450.02C72.29,-431.15 49.88,-399.57 34.54,-377.96"/>
+<polygon fill="black" stroke="black" points="37.56,-376.17 28.92,-370.04 31.86,-380.22 37.56,-376.17"/>
+</g>
+<!-- INT_CON1 -->
+<g id="node11" class="node">
+<title>INT_CON1</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-353.65" rx="18" ry="18"/>
+<text text-anchor="middle" x="97" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">1</text>
+</g>
+<!-- INT_XBOOL->INT_CON1 -->
+<g id="edge8" class="edge">
+<title>INT_XBOOL->INT_CON1</title>
+<path fill="none" stroke="black" d="M97,-448.58C97,-431.1 97,-403.85 97,-383.2"/>
+<polygon fill="black" stroke="black" points="100.5,-383.44 97,-373.44 93.5,-383.44 100.5,-383.44"/>
+</g>
+<!-- INT_LO -->
+<g id="node13" class="node">
+<title>INT_LO</title>
+<ellipse fill="lightblue" stroke="black" cx="211" cy="-168.25" rx="52.89" ry="18"/>
+<text text-anchor="middle" x="211" y="-163.2" font-family="Times New Roman,serif" font-size="14.00">max > min</text>
+</g>
+<!-- INT_CON->INT_LO -->
+<g id="edge13" class="edge">
+<title>INT_CON->INT_LO</title>
+<path fill="none" stroke="black" d="M211,-335.2C211,-303.06 211,-236.57 211,-197.9"/>
+<polygon fill="black" stroke="black" points="214.5,-198.14 211,-188.14 207.5,-198.14 214.5,-198.14"/>
+</g>
+<!-- INT_CON0->INT_CON1 -->
+<!-- INT_BOOL -->
+<g id="node12" class="node">
+<title>INT_BOOL</title>
+<ellipse fill="lightblue" stroke="black" cx="97" cy="-245.45" rx="27.81" ry="18"/>
+<text text-anchor="middle" x="97" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">0...1</text>
+</g>
+<!-- INT_CON0->INT_BOOL -->
+<g id="edge10" class="edge">
+<title>INT_CON0->INT_BOOL</title>
+<path fill="none" stroke="black" d="M28.33,-338.77C41.09,-321.61 63.05,-292.09 78.7,-271.06"/>
+<polygon fill="black" stroke="black" points="81.32,-273.39 84.48,-263.28 75.71,-269.21 81.32,-273.39"/>
+</g>
+<!-- INT_CON1->INT_CON -->
+<!-- INT_CON1->INT_BOOL -->
+<g id="edge11" class="edge">
+<title>INT_CON1->INT_BOOL</title>
+<path fill="none" stroke="black" d="M97,-335.59C97,-319.35 97,-294.6 97,-275.3"/>
+<polygon fill="black" stroke="black" points="100.5,-275.34 97,-265.34 93.5,-275.34 100.5,-275.34"/>
+</g>
+<!-- INT_BOOL->INT_LO -->
+<g id="edge12" class="edge">
+<title>INT_BOOL->INT_LO</title>
+<path fill="none" stroke="black" d="M116.08,-231.86C132.97,-220.72 157.98,-204.22 178.09,-190.96"/>
+<polygon fill="black" stroke="black" points="179.83,-194.01 186.25,-185.58 175.97,-188.16 179.83,-194.01"/>
+</g>
+<!-- INT_LO->INT_BOT -->
+<g id="edge14" class="edge">
+<title>INT_LO->INT_BOT</title>
+<path fill="none" stroke="black" d="M241.59,-153.25C266.73,-141.75 302.37,-125.45 328.71,-113.39"/>
+<polygon fill="black" stroke="black" points="330.01,-116.65 337.64,-109.31 327.09,-110.29 330.01,-116.65"/>
+</g>
+<!-- FLT_CON64 -->
+<g id="node16" class="node">
+<title>FLT_CON64</title>
+<ellipse fill="aqua" stroke="black" cx="725" cy="-353.65" rx="55.33" ry="40.66"/>
+<text text-anchor="middle" x="725" y="-365.1" font-family="Times New Roman,serif" font-size="14.00">64b consts</text>
+<text text-anchor="middle" x="725" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">[excludes</text>
+<text text-anchor="middle" x="725" y="-332.1" font-family="Times New Roman,serif" font-size="14.00">32b consts]</text>
+</g>
+<!-- FLT_TOP->FLT_CON64 -->
+<g id="edge19" class="edge">
+<title>FLT_TOP->FLT_CON64</title>
+<path fill="none" stroke="black" d="M587.65,-603.73C609.87,-563.28 665.3,-462.35 698.56,-401.8"/>
+<polygon fill="black" stroke="black" points="701.62,-403.49 703.37,-393.04 695.48,-400.12 701.62,-403.49"/>
+</g>
+<!-- FLT_CONPI -->
+<g id="node18" class="node">
+<title>FLT_CONPI</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-353.65" rx="48.79" ry="18"/>
+<text text-anchor="middle" x="578" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">3.14159...</text>
+</g>
+<!-- FLT_TOP->FLT_CONPI -->
+<g id="edge20" class="edge">
+<title>FLT_TOP->FLT_CONPI</title>
+<path fill="none" stroke="black" d="M578,-602.9C578,-557.33 578,-438.91 578,-383.3"/>
+<polygon fill="black" stroke="black" points="581.5,-383.34 578,-373.34 574.5,-383.34 581.5,-383.34"/>
+</g>
+<!-- FLT_X32 -->
+<g id="node19" class="node">
+<title>FLT_X32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-466.97" rx="28.32" ry="28.32"/>
+<text text-anchor="middle" x="436" y="-461.92" font-family="Times New Roman,serif" font-size="14.00">~f32</text>
+</g>
+<!-- FLT_TOP->FLT_X32 -->
+<g id="edge23" class="edge">
+<title>FLT_TOP->FLT_X32</title>
+<path fill="none" stroke="black" d="M563.07,-605.07C539.34,-579.28 492.68,-528.57 462.98,-496.29"/>
+<polygon fill="black" stroke="black" points="465.83,-494.22 456.48,-489.23 460.67,-498.96 465.83,-494.22"/>
+</g>
+<!-- FLT_BOT -->
+<g id="node15" class="node">
+<title>FLT_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="578" cy="-96.25" rx="32.41" ry="18"/>
+<text text-anchor="start" x="562.25" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="578" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
+</g>
+<!-- FLT_BOT->BOT -->
+<g id="edge29" class="edge">
+<title>FLT_BOT->BOT</title>
+<path fill="none" stroke="black" d="M578,-77.92C578,-70.74 578,-62.18 578,-53.95"/>
+<polygon fill="black" stroke="black" points="581.5,-54.22 578,-44.22 574.5,-54.22 581.5,-54.22"/>
+</g>
+<!-- FLT_CON64->FLT_BOT -->
+<g id="edge21" class="edge">
+<title>FLT_CON64->FLT_BOT</title>
+<path fill="none" stroke="black" d="M703.47,-315.95C673.5,-263.48 619.95,-169.7 593.56,-123.5"/>
+<polygon fill="black" stroke="black" points="596.67,-121.88 588.67,-114.93 590.59,-125.35 596.67,-121.88"/>
+</g>
+<!-- FLT_CON32 -->
+<g id="node17" class="node">
+<title>FLT_CON32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-353.65" rx="50.33" ry="18"/>
+<text text-anchor="middle" x="436" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">32b consts</text>
+</g>
+<!-- FLT_CON32->FLT_CONPI -->
+<!-- FLT_32 -->
+<g id="node21" class="node">
+<title>FLT_32</title>
+<ellipse fill="aqua" stroke="black" cx="436" cy="-245.45" rx="23.2" ry="23.2"/>
+<text text-anchor="middle" x="436" y="-240.4" font-family="Times New Roman,serif" font-size="14.00">f32</text>
+</g>
+<!-- FLT_CON32->FLT_32 -->
+<g id="edge27" class="edge">
+<title>FLT_CON32->FLT_32</title>
+<path fill="none" stroke="black" d="M436,-335.59C436,-320.77 436,-298.87 436,-280.49"/>
+<polygon fill="black" stroke="black" points="439.5,-280.54 436,-270.54 432.5,-280.54 439.5,-280.54"/>
+</g>
+<!-- FLT_CONPI->FLT_BOT -->
+<g id="edge22" class="edge">
+<title>FLT_CONPI->FLT_BOT</title>
+<path fill="none" stroke="black" d="M578,-335.55C578,-291.81 578,-180.01 578,-126.15"/>
+<polygon fill="black" stroke="black" points="581.5,-126.19 578,-116.19 574.5,-126.19 581.5,-126.19"/>
+</g>
+<!-- FLT_CONPI->FLT_CON64 -->
+<!-- FLT_X32->FLT_CON32 -->
+<g id="edge25" class="edge">
+<title>FLT_X32->FLT_CON32</title>
+<path fill="none" stroke="black" d="M436,-438.17C436,-421.48 436,-400.3 436,-383.44"/>
+<polygon fill="black" stroke="black" points="439.5,-383.57 436,-373.57 432.5,-383.57 439.5,-383.57"/>
+</g>
+<!-- FLT_CON0 -->
+<g id="node20" class="node">
+<title>FLT_CON0</title>
+<ellipse fill="aqua" stroke="black" cx="325" cy="-353.65" rx="18.08" ry="18.08"/>
+<text text-anchor="middle" x="325" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">0.</text>
+</g>
+<!-- FLT_X32->FLT_CON0 -->
+<g id="edge24" class="edge">
+<title>FLT_X32->FLT_CON0</title>
+<path fill="none" stroke="black" d="M416.41,-446.33C396.48,-426.34 365.72,-395.49 345.47,-375.18"/>
+<polygon fill="black" stroke="black" points="348.11,-372.87 338.57,-368.26 343.15,-377.82 348.11,-372.87"/>
+</g>
+<!-- FLT_CON0->FLT_CON32 -->
+<!-- FLT_CON0->FLT_32 -->
+<g id="edge26" class="edge">
+<title>FLT_CON0->FLT_32</title>
+<path fill="none" stroke="black" d="M337.73,-340.47C355.61,-323.37 388.5,-291.9 411.28,-270.1"/>
+<polygon fill="black" stroke="black" points="413.56,-272.76 418.37,-263.32 408.72,-267.71 413.56,-272.76"/>
+</g>
+<!-- FLT_32->FLT_BOT -->
+<g id="edge28" class="edge">
+<title>FLT_32->FLT_BOT</title>
+<path fill="none" stroke="black" d="M452.29,-228.33C477.48,-201.86 526,-150.88 554.84,-120.58"/>
+<polygon fill="black" stroke="black" points="557.36,-123.01 561.72,-113.36 552.29,-118.19 557.36,-123.01"/>
+</g>
+<!-- FL8_MINDOTS -->
+<g id="node24" class="node">
+<title>FL8_MINDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="850" cy="-353.65" rx="27" ry="18"/>
+<text text-anchor="middle" x="850" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MINDOTS -->
+<g id="edge34" class="edge">
+<title>FL8_TOP->FL8_MINDOTS</title>
+<path fill="none" stroke="black" d="M890.04,-602.9C882.71,-557.24 863.62,-438.41 854.71,-382.95"/>
+<polygon fill="black" stroke="black" points="858.2,-382.64 853.16,-373.32 851.29,-383.75 858.2,-382.64"/>
+</g>
+<!-- FL8_ZERO -->
+<g id="node25" class="node">
+<title>FL8_ZERO</title>
+<ellipse fill="aqua" stroke="black" cx="938" cy="-353.65" rx="18" ry="18"/>
+<text text-anchor="middle" x="938" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">0</text>
+</g>
+<!-- FL8_TOP->FL8_ZERO -->
+<g id="edge35" class="edge">
+<title>FL8_TOP->FL8_ZERO</title>
+<path fill="none" stroke="black" d="M896.09,-602.9C903.77,-557.24 923.75,-438.41 933.07,-382.95"/>
+<polygon fill="black" stroke="black" points="936.49,-383.76 934.69,-373.32 929.58,-382.6 936.49,-383.76"/>
+</g>
+<!-- FL8_MAXDOTS -->
+<g id="node26" class="node">
+<title>FL8_MAXDOTS</title>
+<ellipse fill="aqua" stroke="black" cx="1026" cy="-353.65" rx="27" ry="18"/>
+<text text-anchor="middle" x="1026" y="-348.6" font-family="Times New Roman,serif" font-size="14.00">...</text>
+</g>
+<!-- FL8_TOP->FL8_MAXDOTS -->
+<g id="edge36" class="edge">
+<title>FL8_TOP->FL8_MAXDOTS</title>
+<path fill="none" stroke="black" d="M901.93,-603.32C924.76,-557.39 985.32,-435.51 1012.49,-380.85"/>
+<polygon fill="black" stroke="black" points="1015.46,-382.72 1016.78,-372.21 1009.19,-379.61 1015.46,-382.72"/>
+</g>
+<!-- FL8_BOT -->
+<g id="node23" class="node">
+<title>FL8_BOT</title>
+<ellipse fill="aqua" stroke="black" cx="893" cy="-96.25" rx="39.07" ry="18"/>
+<text text-anchor="start" x="872.38" y="-92.2" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="888.12" y="-92.2" font-family="Times New Roman,serif" font-size="14.00">:FP8</text>
+</g>
+<!-- FL8_BOT->BOT -->
+<g id="edge40" class="edge">
+<title>FL8_BOT->BOT</title>
+<path fill="none" stroke="black" d="M858.69,-87.28C797.25,-73.02 669.32,-43.32 609.77,-29.5"/>
+<polygon fill="black" stroke="black" points="610.81,-26.15 600.28,-27.3 609.23,-32.97 610.81,-26.15"/>
+</g>
+<!-- FL8_MINDOTS->FL8_BOT -->
+<g id="edge37" class="edge">
+<title>FL8_MINDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M853.02,-335.55C860.35,-291.72 879.09,-179.54 888.06,-125.81"/>
+<polygon fill="black" stroke="black" points="891.48,-126.61 889.67,-116.17 884.57,-125.45 891.48,-126.61"/>
+</g>
+<!-- FL8_MINDOTS->FL8_ZERO -->
+<!-- FL8_ZERO->FL8_BOT -->
+<g id="edge38" class="edge">
+<title>FL8_ZERO->FL8_BOT</title>
+<path fill="none" stroke="black" d="M934.84,-335.55C927.17,-291.72 907.56,-179.54 898.17,-125.81"/>
+<polygon fill="black" stroke="black" points="901.65,-125.41 896.48,-116.16 894.76,-126.62 901.65,-125.41"/>
+</g>
+<!-- FL8_ZERO->FL8_MAXDOTS -->
+<!-- FL8_MAXDOTS->FL8_BOT -->
+<g id="edge39" class="edge">
+<title>FL8_MAXDOTS->FL8_BOT</title>
+<path fill="none" stroke="black" d="M1017.07,-336.36C994.51,-292.7 935.08,-177.69 907.48,-124.26"/>
+<polygon fill="black" stroke="black" points="910.64,-122.76 902.94,-115.49 904.42,-125.98 910.64,-122.76"/>
+</g>
+<!-- TUPLE1 -->
+<g id="node29" class="node">
+<title>TUPLE1</title>
+<polygon fill="none" stroke="none" points="1344,-380.15 1290,-380.15 1290,-327.15 1344,-327.15 1344,-380.15"/>
+<polygon fill="pink" stroke="none" points="1298.25,-353.65 1298.25,-376.15 1335.75,-376.15 1335.75,-353.65 1298.25,-353.65"/>
+<polygon fill="none" stroke="black" points="1298.25,-353.65 1298.25,-376.15 1335.75,-376.15 1335.75,-353.65 1298.25,-353.65"/>
+<text text-anchor="start" x="1301.25" y="-359.85" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
+<polygon fill="black" stroke="none" points="1298.25,-331.15 1298.25,-353.65 1335.75,-353.65 1335.75,-331.15 1298.25,-331.15"/>
+<polygon fill="none" stroke="black" points="1298.25,-331.15 1298.25,-353.65 1335.75,-353.65 1335.75,-331.15 1298.25,-331.15"/>
+<text text-anchor="start" x="1305.38" y="-337.35" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP->TUPLE1 -->
+<g id="edge44" class="edge">
+<title>TUPLE_TOP->TUPLE1</title>
+<path fill="none" stroke="black" d="M1195.61,-450.49C1217.7,-433.05 1254.08,-404.33 1281.26,-382.87"/>
+<polygon fill="black" stroke="black" points="1283.22,-385.78 1288.9,-376.84 1278.88,-380.29 1283.22,-385.78"/>
+</g>
+<!-- TUPLE2 -->
+<g id="node30" class="node">
+<title>TUPLE2</title>
+<polygon fill="none" stroke="none" points="1150,-391.4 1096,-391.4 1096,-315.9 1150,-315.9 1150,-391.4"/>
+<polygon fill="pink" stroke="none" points="1104.25,-364.9 1104.25,-387.4 1141.75,-387.4 1141.75,-364.9 1104.25,-364.9"/>
+<polygon fill="none" stroke="black" points="1104.25,-364.9 1104.25,-387.4 1141.75,-387.4 1141.75,-364.9 1104.25,-364.9"/>
+<text text-anchor="start" x="1107.25" y="-371.1" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
+<polygon fill="black" stroke="none" points="1104.25,-342.4 1104.25,-364.9 1141.75,-364.9 1141.75,-342.4 1104.25,-342.4"/>
+<polygon fill="none" stroke="black" points="1104.25,-342.4 1104.25,-364.9 1141.75,-364.9 1141.75,-342.4 1104.25,-342.4"/>
+<text text-anchor="start" x="1111.38" y="-348.6" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+<polygon fill="black" stroke="none" points="1104.25,-319.9 1104.25,-342.4 1141.75,-342.4 1141.75,-319.9 1104.25,-319.9"/>
+<polygon fill="none" stroke="black" points="1104.25,-319.9 1104.25,-342.4 1141.75,-342.4 1141.75,-319.9 1104.25,-319.9"/>
+<text text-anchor="start" x="1111.38" y="-326.1" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP->TUPLE2 -->
+<g id="edge45" class="edge">
+<title>TUPLE_TOP->TUPLE2</title>
+<path fill="none" stroke="black" d="M1167.95,-449.07C1161.91,-436.37 1153.32,-418.34 1145.27,-401.43"/>
+<polygon fill="black" stroke="black" points="1148.47,-400 1141.01,-392.47 1142.15,-403.01 1148.47,-400"/>
+</g>
+<!-- TUPLEN -->
+<g id="node31" class="node">
+<title>TUPLEN</title>
+<polygon fill="none" stroke="none" points="1247,-402.65 1193,-402.65 1193,-304.65 1247,-304.65 1247,-402.65"/>
+<polygon fill="pink" stroke="none" points="1201.25,-376.15 1201.25,-398.65 1238.75,-398.65 1238.75,-376.15 1201.25,-376.15"/>
+<polygon fill="none" stroke="black" points="1201.25,-376.15 1201.25,-398.65 1238.75,-398.65 1238.75,-376.15 1201.25,-376.15"/>
+<text text-anchor="start" x="1204.25" y="-382.35" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
+<polygon fill="black" stroke="none" points="1201.25,-353.65 1201.25,-376.15 1238.75,-376.15 1238.75,-353.65 1201.25,-353.65"/>
+<polygon fill="none" stroke="black" points="1201.25,-353.65 1201.25,-376.15 1238.75,-376.15 1238.75,-353.65 1201.25,-353.65"/>
+<text text-anchor="start" x="1208.38" y="-359.85" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+<polygon fill="black" stroke="none" points="1201.25,-331.15 1201.25,-353.65 1238.75,-353.65 1238.75,-331.15 1201.25,-331.15"/>
+<polygon fill="none" stroke="black" points="1201.25,-331.15 1201.25,-353.65 1238.75,-353.65 1238.75,-331.15 1201.25,-331.15"/>
+<text text-anchor="start" x="1214.38" y="-337.35" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text>
+<polygon fill="black" stroke="none" points="1201.25,-308.65 1201.25,-331.15 1238.75,-331.15 1238.75,-308.65 1201.25,-308.65"/>
+<polygon fill="none" stroke="black" points="1201.25,-308.65 1201.25,-331.15 1238.75,-331.15 1238.75,-308.65 1201.25,-308.65"/>
+<text text-anchor="start" x="1208.38" y="-314.85" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
+</g>
+<!-- TUPLE_TOP->TUPLEN -->
+<g id="edge46" class="edge">
+<title>TUPLE_TOP->TUPLEN</title>
+<path fill="none" stroke="black" d="M1182.68,-449.07C1186.55,-439.27 1191.68,-426.31 1196.89,-413.13"/>
+<polygon fill="black" stroke="black" points="1200.08,-414.57 1200.5,-403.98 1193.57,-411.99 1200.08,-414.57"/>
+</g>
+<!-- TUPLE_BOT -->
+<g id="node28" class="node">
+<title>TUPLE_BOT</title>
+<ellipse fill="pink" stroke="black" cx="1177" cy="-245.45" rx="42.65" ry="18"/>
+<text text-anchor="start" x="1153.75" y="-241.4" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
+<text text-anchor="start" x="1169.5" y="-241.4" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
+</g>
+<!-- TUPLE_BOT->BOT -->
+<g id="edge50" class="edge">
+<title>TUPLE_BOT->BOT</title>
+<path fill="none" stroke="black" d="M1144.8,-233.39C1040.21,-194.22 710.98,-70.93 608.66,-32.6"/>
+<polygon fill="black" stroke="black" points="610.14,-29.42 599.55,-29.19 607.68,-35.98 610.14,-29.42"/>
+</g>
+<!-- TUPLE1->TUPLE_BOT -->
+<g id="edge47" class="edge">
+<title>TUPLE1->TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M1290.01,-332.18C1265.91,-313.9 1230.71,-287.2 1206.02,-268.46"/>
+<polygon fill="black" stroke="black" points="1208.4,-265.88 1198.32,-262.62 1204.17,-271.46 1208.4,-265.88"/>
+</g>
+<!-- TUPLE2->TUPLE_BOT -->
+<g id="edge48" class="edge">
+<title>TUPLE2->TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M1141.58,-316.1C1148.69,-302.13 1156.65,-286.47 1163.23,-273.54"/>
+<polygon fill="black" stroke="black" points="1166.28,-275.26 1167.69,-264.76 1160.04,-272.09 1166.28,-275.26"/>
+</g>
+<!-- TUPLEN->TUPLE_BOT -->
+<g id="edge49" class="edge">
+<title>TUPLEN->TUPLE_BOT</title>
+<path fill="none" stroke="black" d="M1200.64,-304.83C1196.39,-294.34 1192.03,-283.58 1188.23,-274.19"/>
+<polygon fill="black" stroke="black" points="1191.48,-272.9 1184.49,-264.94 1185,-275.52 1191.48,-272.9"/>
+</g>
+</g>
+</svg>
|
