diff options
| author | Cliff Click <cliffc@acm.org> | 2026-10-02 13:04:34 -0700 |
|---|---|---|
| committer | Cliff Click <cliffc@acm.org> | 2026-10-02 13:04:34 -0700 |
| commit | e4dc3273f201ae741637b626998637cce973546b (patch) | |
| tree | 7607c1da4378da42549e8142371d95bdca4e06e0 /chapter12/docs | |
| parent | 6cd01a8d646750748a0af221073de8a7787472ad (diff) | |
| download | Simple-e4dc3273f201ae741637b626998637cce973546b.tar.gz Simple-e4dc3273f201ae741637b626998637cce973546b.zip | |
First pass README updates
Diffstat (limited to 'chapter12/docs')
| -rw-r--r-- | chapter12/docs/lattice.gv | 313 | ||||
| -rw-r--r-- | chapter12/docs/lattice.svg | 1306 |
2 files changed, 841 insertions, 778 deletions
diff --git a/chapter12/docs/lattice.gv b/chapter12/docs/lattice.gv index 23b3f7a7..f3b5051c 100644 --- a/chapter12/docs/lattice.gv +++ b/chapter12/docs/lattice.gv @@ -1,182 +1,135 @@ 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_MINDOTS [label="...", fillcolor=lightblue, shape=oval]; - INT_ZERO [label="0" , fillcolor=lightblue]; - INT_MAXDOTS [label="...", fillcolor=lightblue, shape=oval]; - - TOP -> INT_TOP; - INT_TOP -> INT_MINDOTS; - INT_TOP -> INT_ZERO; - INT_TOP -> INT_MAXDOTS; - INT_MINDOTS -> INT_BOT; - INT_ZERO -> INT_BOT; - INT_MAXDOTS -> INT_BOT; - INT_BOT -> BOT; - - INT_MINDOTS -> INT_ZERO -> INT_MAXDOTS [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]; - - 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; - - FLT_MINDOTS -> FLT_ZERO -> FLT_MAXDOTS [style=invis]; - - // ---------------------- - // Pointers, just a boolean nil/not and a struct - PTR [shape=none, fillcolor=none, label=< - <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> - <TR><TD BGCOLOR="green"><FONT color="white">*ptr</FONT></TD></TR> - <TR><TD BGCOLOR="lightgreen">struct</TD></TR> - </TABLE> - >]; - PTR0 [shape=none, fillcolor=none, label=< - <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> - <TR><TD BGCOLOR="green"><FONT color="white">*ptr?</FONT></TD></TR> - <TR><TD BGCOLOR="lightgreen">struct</TD></TR> - </TABLE> - >]; - - TOP -> PTR; - PTR -> PTR0; - PTR0 -> BOT; - - // ---------------------- - // Structs - STRUCT_TOP [label=<<B>⊤</B >:struct>, fillcolor=lightgreen, shape=oval]; - STRUCT_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]; - - // ---------------------- - // Memory - MEM_TOP [label=<<B>⊤</B >:mem>, fillcolor=blue, fontcolor=white, shape=oval]; - MEM_BOT [label=<<B>⊥</B>:mem>, fillcolor=blue, fontcolor=white, shape=oval]; - MEM_ALIAS1 [label="#1" , fillcolor=blue, fontcolor=white]; - MEM_ALIASDOTS [label="..." , fillcolor=blue, fontcolor=white, shape=oval]; - MEM_ALIASN [label="#n" , fillcolor=blue, fontcolor=white]; - - TOP -> MEM_TOP; - MEM_TOP -> MEM_ALIAS1; - MEM_TOP -> MEM_ALIASDOTS; - MEM_TOP -> MEM_ALIASN; - MEM_ALIAS1 -> MEM_BOT; - MEM_ALIASDOTS -> MEM_BOT; - MEM_ALIASN -> MEM_BOT; - MEM_BOT -> BOT; - - MEM_ALIAS1 -> MEM_ALIASDOTS -> MEM_ALIASN [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; XCTRL; STRUCT_TOP; MEM_TOP; TUPLE_TOP} - {rank=same; INT_MINDOTS; INT_ZERO; INT_MAXDOTS; - FLT_MINDOTS; FLT_ZERO; FLT_MAXDOTS; - STRUCT_S1; STRUCT_S2; STRUCT_SN; - MEM_ALIAS1; MEM_ALIASDOTS; MEM_ALIASN;} - {rank=same; INT_BOT; FLT_BOT; CTRL; STRUCT_BOT; MEM_BOT; TUPLE_BOT} - {rank=same; BOT;} + rankdir=TB; + newrank=true; + // Preserve the same-rank ordering edges through cluster layout. + remincross=false; + nodesep=0.22; + ranksep=0.65; + node [shape=ellipse, style=filled, fontname="DejaVu Sans", fontsize=13]; + edge [color="#555555", arrowsize=0.6]; + + // These arrows are lattice-order edges, not use/definition edges. + TOP [label="⊤", fillcolor=black, fontcolor=white]; + BOT [label="⊥", fillcolor=black, fontcolor=white]; + + subgraph cluster_control { + label="Control"; fontname="Arial"; color="#cccccc"; + node [fillcolor="#ffff00"]; + XCTRL [label="⊤:ctrl"]; + CTRL [label="⊥:ctrl"]; + XCTRL -> CTRL; + } + + subgraph cluster_integer { + label="Integer"; fontname="Arial"; color="#cccccc"; + node [fillcolor="#add8e6"]; + INT_TOP [label="⊤:int"]; + INT_BOT [label="⊥:int"]; + INT_NEG [label="… −2, −1"]; + INT_ZERO [label="0"]; + INT_POS [label="1, 2, …"]; + {rank=same; INT_NEG; INT_ZERO; INT_POS;} + INT_NEG -> INT_ZERO -> INT_POS [style=invis]; + INT_TOP -> {INT_NEG INT_ZERO INT_POS}; + {INT_NEG INT_ZERO INT_POS} -> INT_BOT; + } + + subgraph cluster_float { + label="Float"; fontname="Arial"; color="#cccccc"; + FLT_TOP [label=<<B>⊤</B >:flt>, fillcolor=aqua, shape=oval]; + FLT_BOT [label=<<B>⊥</B>:flt>, fillcolor=aqua, shape=oval]; + + FLT_MINDOTS [label="… negative constants", fillcolor=aqua, shape=oval]; + FLT_ZERO [label="0.0" , fillcolor=aqua]; + FLT_MAXDOTS [label="positive constants …", fillcolor=aqua, shape=oval]; + + 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_MINDOTS -> FLT_ZERO -> FLT_MAXDOTS [style=invis]; + + {rank=same; FLT_MINDOTS; FLT_ZERO; FLT_MAXDOTS;} + } + + subgraph cluster_pointer { + label="Pointer = nullability × struct type"; + fontname="Arial"; color="#cccccc"; + node [fillcolor="#008000", fontcolor=white]; + PTR_TOP [label="⊤:ptr\n[*⊤:struct]"]; + PTR_BOT [label="⊥:ptr\n[*⊥:struct?]"]; + PTR_NULL [label="null"]; + PTR_ANY [label="*⊥:struct\n[ptr any struct]"]; + PTR_PERSON [label="*Person"]; + PTR_S1 [label="*s1"]; + PTR_MORE [label="*s2, …"]; + PTR_PERSON_NIL [label="*Person?"]; + PTR_S1_NIL [label="*s1?"]; + PTR_MORE_NIL [label="*s2?, …"]; + {rank=same; PTR_PERSON; PTR_S1; PTR_MORE; PTR_NULL;} + {rank=same; PTR_ANY; PTR_PERSON_NIL; PTR_S1_NIL; PTR_MORE_NIL;} + PTR_PERSON -> PTR_S1 -> PTR_MORE -> PTR_NULL [style=invis]; + PTR_ANY -> PTR_PERSON_NIL -> PTR_S1_NIL -> PTR_MORE_NIL [style=invis]; + PTR_TOP -> {PTR_PERSON PTR_S1 PTR_MORE PTR_NULL}; + {PTR_PERSON PTR_S1 PTR_MORE} -> PTR_ANY; + PTR_PERSON -> PTR_PERSON_NIL; + PTR_S1 -> PTR_S1_NIL; + PTR_MORE -> PTR_MORE_NIL; + PTR_NULL -> {PTR_PERSON_NIL PTR_S1_NIL PTR_MORE_NIL}; + {PTR_ANY PTR_PERSON_NIL PTR_S1_NIL PTR_MORE_NIL} -> PTR_BOT; + } + + subgraph cluster_struct { + label="Struct\nnamed collection of named scalar types"; + fontname="Arial"; color="#cccccc"; + node [fillcolor="#90ee90"]; + STRUCT_TOP [label="⊤:struct\n[struct top]"]; + STRUCT_BOT [label="⊥:struct\n[struct bottom]"]; + STRUCT_PERSON [label="Person\nage: int", shape=box]; + STRUCT_S1 [label="s1\nx: int", shape=box]; + STRUCT_S2 [label="s2\nx: int, y: flt", shape=box]; + STRUCT_MORE [label="…", shape=box]; + {rank=same; STRUCT_PERSON; STRUCT_S1; STRUCT_S2; STRUCT_MORE;} + STRUCT_PERSON -> STRUCT_S1 -> STRUCT_S2 -> STRUCT_MORE [style=invis]; + STRUCT_TOP -> {STRUCT_PERSON STRUCT_S1 STRUCT_S2 STRUCT_MORE}; + {STRUCT_PERSON STRUCT_S1 STRUCT_S2 STRUCT_MORE} -> STRUCT_BOT; + } + + subgraph cluster_memory { + label="Memory\nprecise alias slices"; fontname="Arial"; color="#cccccc"; + node [fillcolor="#00008b", fontcolor=white]; + MEM_TOP [label="⊤:mem"]; + MEM_BOT [label="⊥:mem"]; + MEM_ALIAS2 [label="MEM#2"]; + MEM_ALIAS3 [label="MEM#3"]; + MEM_MORE [label="…"]; + {rank=same; MEM_ALIAS2; MEM_ALIAS3; MEM_MORE;} + MEM_ALIAS2 -> MEM_ALIAS3 -> MEM_MORE [style=invis]; + MEM_TOP -> {MEM_ALIAS2 MEM_ALIAS3 MEM_MORE}; + {MEM_ALIAS2 MEM_ALIAS3 MEM_MORE} -> MEM_BOT; + } + + subgraph cluster_tuple { + label="Tuple\ncollection of types"; + fontname="Arial"; color="#cccccc"; + node [fillcolor="#ffc0cb"]; + TUPLE_TOP [label="⊤:tuple"]; + TUPLE_BOT [label="⊥:tuple"]; + TUPLE1 [label="(type)", shape=box]; + TUPLE2 [label="(type, type)", shape=box]; + TUPLEN [label="(type, …)", shape=box]; + {rank=same; TUPLE1; TUPLE2; TUPLEN;} + TUPLE1 -> TUPLE2 -> TUPLEN [style=invis]; + TUPLE_TOP -> {TUPLE1 TUPLE2 TUPLEN}; + {TUPLE1 TUPLE2 TUPLEN} -> TUPLE_BOT; + } + + TOP -> {XCTRL INT_TOP FLT_TOP PTR_TOP STRUCT_TOP MEM_TOP TUPLE_TOP}; + {CTRL INT_BOT FLT_BOT PTR_BOT STRUCT_BOT MEM_BOT TUPLE_BOT} -> BOT; + {rank=same; XCTRL; INT_TOP; FLT_TOP; PTR_TOP; STRUCT_TOP; MEM_TOP; TUPLE_TOP;} + {rank=same; CTRL; INT_BOT; FLT_BOT; PTR_BOT; STRUCT_BOT; MEM_BOT; TUPLE_BOT;} + XCTRL -> INT_TOP -> FLT_TOP -> PTR_TOP -> STRUCT_TOP -> MEM_TOP -> TUPLE_TOP [style=invis]; } diff --git a/chapter12/docs/lattice.svg b/chapter12/docs/lattice.svg index 1bb4f692..bc64abb6 100644 --- a/chapter12/docs/lattice.svg +++ b/chapter12/docs/lattice.svg @@ -1,598 +1,708 @@ -<?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="1602pt" height="440pt"
- viewBox="0.00 0.00 1601.51 440.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 436.5)">
-<title>Lattice</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-436.5 1597.51,-436.5 1597.51,4 -4,4"/>
-<!-- TOP -->
-<g id="node1" class="node">
-<title>TOP</title>
-<ellipse fill="black" stroke="black" cx="630.51" cy="-411.37" rx="21.12" ry="21.12"/>
-<text text-anchor="start" x="622.63" y="-406.95" 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="36.51" cy="-327.75" rx="36.51" ry="18"/>
-<text text-anchor="start" x="17.76" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="33.51" y="-323.7" 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="M609.37,-407.47C523.96,-395.73 203.25,-351.66 82.7,-335.1"/>
-<polygon fill="black" stroke="black" points="83.22,-331.63 72.84,-333.74 82.27,-338.57 83.22,-331.63"/>
-</g>
-<!-- INT_TOP -->
-<g id="node5" class="node">
-<title>INT_TOP</title>
-<ellipse fill="lightblue" stroke="black" cx="226.51" cy="-327.75" rx="33.95" ry="18"/>
-<text text-anchor="start" x="209.63" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="225.38" y="-323.7" 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="M609.64,-406.16C546.23,-393.34 354.92,-354.69 269.04,-337.34"/>
-<polygon fill="black" stroke="black" points="269.87,-333.94 259.37,-335.39 268.48,-340.8 269.87,-333.94"/>
-</g>
-<!-- FLT_TOP -->
-<g id="node10" class="node">
-<title>FLT_TOP</title>
-<ellipse fill="aqua" stroke="black" cx="489.51" cy="-327.75" rx="32.41" ry="18"/>
-<text text-anchor="start" x="473.76" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="489.51" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
-</g>
-<!-- TOP->FLT_TOP -->
-<g id="edge14" class="edge">
-<title>TOP->FLT_TOP</title>
-<path fill="none" stroke="black" d="M612.36,-399.87C589.31,-386.52 549.15,-363.27 521.04,-347"/>
-<polygon fill="black" stroke="black" points="523,-344.09 512.59,-342.11 519.49,-350.15 523,-344.09"/>
-</g>
-<!-- PTR -->
-<g id="node15" class="node">
-<title>PTR</title>
-<polygon fill="none" stroke="none" points="657.51,-354.25 603.51,-354.25 603.51,-301.25 657.51,-301.25 657.51,-354.25"/>
-<polygon fill="green" stroke="none" points="612.51,-327.75 612.51,-350.25 648.51,-350.25 648.51,-327.75 612.51,-327.75"/>
-<polygon fill="none" stroke="black" points="612.51,-327.75 612.51,-350.25 648.51,-350.25 648.51,-327.75 612.51,-327.75"/>
-<text text-anchor="start" x="619.63" y="-333.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">*ptr</text>
-<polygon fill="lightgreen" stroke="none" points="612.51,-305.25 612.51,-327.75 648.51,-327.75 648.51,-305.25 612.51,-305.25"/>
-<polygon fill="none" stroke="black" points="612.51,-305.25 612.51,-327.75 648.51,-327.75 648.51,-305.25 612.51,-305.25"/>
-<text text-anchor="start" x="615.51" y="-311.45" font-family="Times New Roman,serif" font-size="14.00">struct</text>
-</g>
-<!-- TOP->PTR -->
-<g id="edge24" class="edge">
-<title>TOP->PTR</title>
-<path fill="none" stroke="black" d="M630.51,-389.78C630.51,-382.39 630.51,-373.83 630.51,-365.49"/>
-<polygon fill="black" stroke="black" points="634.01,-365.52 630.51,-355.52 627.01,-365.52 634.01,-365.52"/>
-</g>
-<!-- STRUCT_TOP -->
-<g id="node17" class="node">
-<title>STRUCT_TOP</title>
-<ellipse fill="lightgreen" stroke="black" cx="806.51" cy="-327.75" rx="44.7" ry="18"/>
-<text text-anchor="start" x="781.76" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="797.51" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:struct</text>
-</g>
-<!-- TOP->STRUCT_TOP -->
-<g id="edge27" class="edge">
-<title>TOP->STRUCT_TOP</title>
-<path fill="none" stroke="black" d="M649.68,-401.48C677.9,-388.39 731.22,-363.66 767.79,-346.71"/>
-<polygon fill="black" stroke="black" points="769.12,-349.95 776.71,-342.57 766.17,-343.6 769.12,-349.95"/>
-</g>
-<!-- MEM_TOP -->
-<g id="node22" class="node">
-<title>MEM_TOP</title>
-<ellipse fill="blue" stroke="black" cx="1147.51" cy="-327.75" rx="43.67" ry="18"/>
-<text text-anchor="start" x="1123.51" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊤</text>
-<text text-anchor="start" x="1139.26" y="-323.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">:mem</text>
-</g>
-<!-- TOP->MEM_TOP -->
-<g id="edge37" class="edge">
-<title>TOP->MEM_TOP</title>
-<path fill="none" stroke="black" d="M651.42,-407.07C726.59,-395.2 984.56,-354.47 1095.79,-336.91"/>
-<polygon fill="black" stroke="black" points="1096.21,-340.39 1105.54,-335.37 1095.12,-333.48 1096.21,-340.39"/>
-</g>
-<!-- TUPLE_TOP -->
-<g id="node27" class="node">
-<title>TUPLE_TOP</title>
-<ellipse fill="pink" stroke="black" cx="1420.51" cy="-327.75" rx="42.65" ry="18"/>
-<text text-anchor="start" x="1397.26" y="-323.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊤</text>
-<text text-anchor="start" x="1413.01" y="-323.7" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
-</g>
-<!-- TOP->TUPLE_TOP -->
-<g id="edge47" class="edge">
-<title>TOP->TUPLE_TOP</title>
-<path fill="none" stroke="black" d="M651.64,-408.19C755.41,-397.47 1212.34,-350.26 1368.21,-334.15"/>
-<polygon fill="black" stroke="black" points="1368.24,-337.67 1377.83,-333.16 1367.52,-330.7 1368.24,-337.67"/>
-</g>
-<!-- BOT -->
-<g id="node2" class="node">
-<title>BOT</title>
-<ellipse fill="black" stroke="black" cx="630.51" cy="-21.12" rx="21.12" ry="21.12"/>
-<text text-anchor="start" x="622.63" 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="36.51" cy="-104.75" rx="36.51" ry="18"/>
-<text text-anchor="start" x="17.76" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="33.51" y="-100.7" 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="M36.51,-309.5C36.51,-271.02 36.51,-181.25 36.51,-134.4"/>
-<polygon fill="black" stroke="black" points="40.01,-134.45 36.51,-124.45 33.01,-134.45 40.01,-134.45"/>
-</g>
-<!-- CTRL->BOT -->
-<g id="edge3" class="edge">
-<title>CTRL->BOT</title>
-<path fill="none" stroke="black" d="M71.45,-98.95C177.66,-84.35 495.68,-40.65 598.24,-26.56"/>
-<polygon fill="black" stroke="black" points="598.46,-30.06 607.89,-25.23 597.5,-23.13 598.46,-30.06"/>
-</g>
-<!-- INT_MINDOTS -->
-<g id="node7" class="node">
-<title>INT_MINDOTS</title>
-<ellipse fill="lightblue" stroke="black" cx="89.51" cy="-216.25" rx="27" ry="18"/>
-<text text-anchor="middle" x="89.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP->INT_MINDOTS -->
-<g id="edge5" class="edge">
-<title>INT_TOP->INT_MINDOTS</title>
-<path fill="none" stroke="black" d="M208.32,-312.21C184.36,-293.06 142.09,-259.28 114.97,-237.6"/>
-<polygon fill="black" stroke="black" points="117.24,-234.93 107.24,-231.42 112.87,-240.4 117.24,-234.93"/>
-</g>
-<!-- INT_ZERO -->
-<g id="node8" class="node">
-<title>INT_ZERO</title>
-<ellipse fill="lightblue" stroke="black" cx="177.51" cy="-216.25" rx="18" ry="18"/>
-<text text-anchor="middle" x="177.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">0</text>
-</g>
-<!-- INT_TOP->INT_ZERO -->
-<g id="edge6" class="edge">
-<title>INT_TOP->INT_ZERO</title>
-<path fill="none" stroke="black" d="M219.07,-310.12C211.12,-292.37 198.43,-264.01 189.16,-243.29"/>
-<polygon fill="black" stroke="black" points="192.44,-242.05 185.16,-234.35 186.05,-244.91 192.44,-242.05"/>
-</g>
-<!-- INT_MAXDOTS -->
-<g id="node9" class="node">
-<title>INT_MAXDOTS</title>
-<ellipse fill="lightblue" stroke="black" cx="265.51" cy="-216.25" rx="27" ry="18"/>
-<text text-anchor="middle" x="265.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
-</g>
-<!-- INT_TOP->INT_MAXDOTS -->
-<g id="edge7" class="edge">
-<title>INT_TOP->INT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M232.6,-309.64C238.76,-292.36 248.36,-265.39 255.61,-245.04"/>
-<polygon fill="black" stroke="black" points="258.89,-246.26 258.95,-235.66 252.3,-243.91 258.89,-246.26"/>
-</g>
-<!-- INT_BOT -->
-<g id="node6" class="node">
-<title>INT_BOT</title>
-<ellipse fill="lightblue" stroke="black" cx="226.51" cy="-104.75" rx="33.95" ry="18"/>
-<text text-anchor="start" x="209.63" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="225.38" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:int</text>
-</g>
-<!-- INT_BOT->BOT -->
-<g id="edge11" class="edge">
-<title>INT_BOT->BOT</title>
-<path fill="none" stroke="black" d="M257.87,-97.41C333.02,-82.23 522.71,-43.9 598.5,-28.59"/>
-<polygon fill="black" stroke="black" points="599.06,-32.05 608.17,-26.64 597.68,-25.19 599.06,-32.05"/>
-</g>
-<!-- INT_MINDOTS->INT_BOT -->
-<g id="edge8" class="edge">
-<title>INT_MINDOTS->INT_BOT</title>
-<path fill="none" stroke="black" d="M106.31,-201.82C129.55,-183.25 171.76,-149.5 199.47,-127.36"/>
-<polygon fill="black" stroke="black" points="201.45,-130.25 207.08,-121.28 197.08,-124.79 201.45,-130.25"/>
-</g>
-<!-- INT_MINDOTS->INT_ZERO -->
-<!-- INT_ZERO->INT_BOT -->
-<g id="edge9" class="edge">
-<title>INT_ZERO->INT_BOT</title>
-<path fill="none" stroke="black" d="M184.53,-199.56C192.29,-182.22 204.94,-153.96 214.32,-132.98"/>
-<polygon fill="black" stroke="black" points="217.51,-134.42 218.4,-123.87 211.12,-131.56 217.51,-134.42"/>
-</g>
-<!-- INT_ZERO->INT_MAXDOTS -->
-<!-- INT_MAXDOTS->INT_BOT -->
-<g id="edge10" class="edge">
-<title>INT_MAXDOTS->INT_BOT</title>
-<path fill="none" stroke="black" d="M259.59,-198.62C253.44,-181.35 243.71,-154.05 236.4,-133.51"/>
-<polygon fill="black" stroke="black" points="239.78,-132.57 233.12,-124.32 233.18,-134.92 239.78,-132.57"/>
-</g>
-<!-- FLT_MINDOTS -->
-<g id="node12" class="node">
-<title>FLT_MINDOTS</title>
-<ellipse fill="aqua" stroke="black" cx="362.51" cy="-216.25" rx="27" ry="18"/>
-<text text-anchor="middle" x="362.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
-</g>
-<!-- FLT_TOP->FLT_MINDOTS -->
-<g id="edge15" class="edge">
-<title>FLT_TOP->FLT_MINDOTS</title>
-<path fill="none" stroke="black" d="M472.38,-311.98C450.43,-293.06 412.23,-260.12 387.15,-238.5"/>
-<polygon fill="black" stroke="black" points="389.57,-235.96 379.71,-232.08 385,-241.26 389.57,-235.96"/>
-</g>
-<!-- FLT_ZERO -->
-<g id="node13" class="node">
-<title>FLT_ZERO</title>
-<ellipse fill="aqua" stroke="black" cx="450.51" cy="-216.25" rx="18" ry="18"/>
-<text text-anchor="middle" x="450.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">0</text>
-</g>
-<!-- FLT_TOP->FLT_ZERO -->
-<g id="edge16" class="edge">
-<title>FLT_TOP->FLT_ZERO</title>
-<path fill="none" stroke="black" d="M483.42,-309.64C477.19,-292.16 467.43,-264.76 460.16,-244.33"/>
-<polygon fill="black" stroke="black" points="463.47,-243.2 456.81,-234.95 456.87,-245.54 463.47,-243.2"/>
-</g>
-<!-- FLT_MAXDOTS -->
-<g id="node14" class="node">
-<title>FLT_MAXDOTS</title>
-<ellipse fill="aqua" stroke="black" cx="538.51" cy="-216.25" rx="27" ry="18"/>
-<text text-anchor="middle" x="538.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...</text>
-</g>
-<!-- FLT_TOP->FLT_MAXDOTS -->
-<g id="edge17" class="edge">
-<title>FLT_TOP->FLT_MAXDOTS</title>
-<path fill="none" stroke="black" d="M496.95,-310.12C504.76,-292.67 517.15,-264.98 526.38,-244.36"/>
-<polygon fill="black" stroke="black" points="529.49,-245.97 530.38,-235.42 523.1,-243.12 529.49,-245.97"/>
-</g>
-<!-- FLT_BOT -->
-<g id="node11" class="node">
-<title>FLT_BOT</title>
-<ellipse fill="aqua" stroke="black" cx="489.51" cy="-104.75" rx="32.41" ry="18"/>
-<text text-anchor="start" x="473.76" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="489.51" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:flt</text>
-</g>
-<!-- FLT_BOT->BOT -->
-<g id="edge21" class="edge">
-<title>FLT_BOT->BOT</title>
-<path fill="none" stroke="black" d="M511.23,-91.17C535.78,-76.96 575.81,-53.79 602.65,-38.25"/>
-<polygon fill="black" stroke="black" points="604.36,-41.31 611.26,-33.27 600.85,-35.25 604.36,-41.31"/>
-</g>
-<!-- FLT_MINDOTS->FLT_BOT -->
-<g id="edge18" class="edge">
-<title>FLT_MINDOTS->FLT_BOT</title>
-<path fill="none" stroke="black" d="M378.59,-201.38C400.21,-182.74 438.85,-149.43 464.33,-127.46"/>
-<polygon fill="black" stroke="black" points="466.31,-130.37 471.6,-121.19 461.74,-125.07 466.31,-130.37"/>
-</g>
-<!-- FLT_MINDOTS->FLT_ZERO -->
-<!-- FLT_ZERO->FLT_BOT -->
-<g id="edge19" class="edge">
-<title>FLT_ZERO->FLT_BOT</title>
-<path fill="none" stroke="black" d="M456.26,-199.09C462.41,-181.82 472.27,-154.14 479.66,-133.39"/>
-<polygon fill="black" stroke="black" points="482.91,-134.71 482.97,-124.12 476.31,-132.36 482.91,-134.71"/>
-</g>
-<!-- FLT_ZERO->FLT_MAXDOTS -->
-<!-- FLT_MAXDOTS->FLT_BOT -->
-<g id="edge20" class="edge">
-<title>FLT_MAXDOTS->FLT_BOT</title>
-<path fill="none" stroke="black" d="M531.07,-198.62C523.26,-181.17 510.87,-153.48 501.64,-132.86"/>
-<polygon fill="black" stroke="black" points="504.92,-131.62 497.64,-123.92 498.53,-134.47 504.92,-131.62"/>
-</g>
-<!-- PTR0 -->
-<g id="node16" class="node">
-<title>PTR0</title>
-<polygon fill="none" stroke="none" points="657.51,-131.25 603.51,-131.25 603.51,-78.25 657.51,-78.25 657.51,-131.25"/>
-<polygon fill="green" stroke="none" points="612.51,-104.75 612.51,-127.25 648.51,-127.25 648.51,-104.75 612.51,-104.75"/>
-<polygon fill="none" stroke="black" points="612.51,-104.75 612.51,-127.25 648.51,-127.25 648.51,-104.75 612.51,-104.75"/>
-<text text-anchor="start" x="616.63" y="-110.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">*ptr?</text>
-<polygon fill="lightgreen" stroke="none" points="612.51,-82.25 612.51,-104.75 648.51,-104.75 648.51,-82.25 612.51,-82.25"/>
-<polygon fill="none" stroke="black" points="612.51,-82.25 612.51,-104.75 648.51,-104.75 648.51,-82.25 612.51,-82.25"/>
-<text text-anchor="start" x="615.51" y="-88.45" font-family="Times New Roman,serif" font-size="14.00">struct</text>
-</g>
-<!-- PTR->PTR0 -->
-<g id="edge25" class="edge">
-<title>PTR->PTR0</title>
-<path fill="none" stroke="black" d="M630.51,-301.29C630.51,-261.89 630.51,-187.62 630.51,-142.52"/>
-<polygon fill="black" stroke="black" points="634.01,-142.68 630.51,-132.68 627.01,-142.68 634.01,-142.68"/>
-</g>
-<!-- PTR0->BOT -->
-<g id="edge26" class="edge">
-<title>PTR0->BOT</title>
-<path fill="none" stroke="black" d="M630.51,-78.37C630.51,-70.63 630.51,-62.03 630.51,-53.93"/>
-<polygon fill="black" stroke="black" points="634.01,-54.09 630.51,-44.09 627.01,-54.09 634.01,-54.09"/>
-</g>
-<!-- STRUCT_S1 -->
-<g id="node19" class="node">
-<title>STRUCT_S1</title>
-<polygon fill="none" stroke="none" points="781.38,-234.25 695.63,-234.25 695.63,-198.25 781.38,-198.25 781.38,-234.25"/>
-<polygon fill="lightgreen" stroke="none" points="703.63,-205 703.63,-227.5 734.38,-227.5 734.38,-205 703.63,-205"/>
-<polygon fill="none" stroke="black" points="703.63,-205 703.63,-227.5 734.38,-227.5 734.38,-205 703.63,-205"/>
-<text text-anchor="start" x="706.63" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">field</text>
-<defs>
-<linearGradient id="l_0" gradientUnits="userSpaceOnUse" x1="740.1" y1="-224.2" x2="767.67" y2="-208.29" >
-<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
-<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
-</linearGradient>
-</defs>
-<polygon fill="url(#l_0)" stroke="none" points="734.38,-205 734.38,-227.5 773.38,-227.5 773.38,-205 734.38,-205"/>
-<polygon fill="none" stroke="black" points="734.38,-205 734.38,-227.5 773.38,-227.5 773.38,-205 734.38,-205"/>
-<text text-anchor="start" x="737.38" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
-</g>
-<!-- STRUCT_TOP->STRUCT_S1 -->
-<g id="edge28" class="edge">
-<title>STRUCT_TOP->STRUCT_S1</title>
-<path fill="none" stroke="black" d="M796.18,-310.12C785.25,-292.51 767.83,-264.46 754.99,-243.79"/>
-<polygon fill="black" stroke="black" points="757.98,-241.97 749.73,-235.32 752.03,-245.66 757.98,-241.97"/>
-</g>
-<!-- STRUCT_S2 -->
-<g id="node20" class="node">
-<title>STRUCT_S2</title>
-<polygon fill="none" stroke="none" points="910.38,-242.75 824.63,-242.75 824.63,-189.75 910.38,-189.75 910.38,-242.75"/>
-<polygon fill="lightgreen" stroke="none" points="832.63,-216.25 832.63,-238.75 863.38,-238.75 863.38,-216.25 832.63,-216.25"/>
-<polygon fill="none" stroke="black" points="832.63,-216.25 832.63,-238.75 863.38,-238.75 863.38,-216.25 832.63,-216.25"/>
-<text text-anchor="start" x="835.63" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">field</text>
-<defs>
-<linearGradient id="l_1" gradientUnits="userSpaceOnUse" x1="869.1" y1="-235.45" x2="896.67" y2="-219.54" >
-<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
-<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
-</linearGradient>
-</defs>
-<polygon fill="url(#l_1)" stroke="none" points="863.38,-216.25 863.38,-238.75 902.38,-238.75 902.38,-216.25 863.38,-216.25"/>
-<polygon fill="none" stroke="black" points="863.38,-216.25 863.38,-238.75 902.38,-238.75 902.38,-216.25 863.38,-216.25"/>
-<text text-anchor="start" x="866.38" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
-<polygon fill="lightgreen" stroke="none" points="832.63,-193.75 832.63,-216.25 863.38,-216.25 863.38,-193.75 832.63,-193.75"/>
-<polygon fill="none" stroke="black" points="832.63,-193.75 832.63,-216.25 863.38,-216.25 863.38,-193.75 832.63,-193.75"/>
-<text text-anchor="start" x="835.63" y="-199.95" font-family="Times New Roman,serif" font-size="14.00">field</text>
-<defs>
-<linearGradient id="l_2" gradientUnits="userSpaceOnUse" x1="869.1" y1="-212.95" x2="896.67" y2="-197.04" >
-<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
-<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
-</linearGradient>
-</defs>
-<polygon fill="url(#l_2)" stroke="none" points="863.38,-193.75 863.38,-216.25 902.38,-216.25 902.38,-193.75 863.38,-193.75"/>
-<polygon fill="none" stroke="black" points="863.38,-193.75 863.38,-216.25 902.38,-216.25 902.38,-193.75 863.38,-193.75"/>
-<text text-anchor="start" x="866.38" y="-199.95" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
-</g>
-<!-- STRUCT_TOP->STRUCT_S2 -->
-<g id="edge29" class="edge">
-<title>STRUCT_TOP->STRUCT_S2</title>
-<path fill="none" stroke="black" d="M815.77,-310.12C824.25,-294.9 837.07,-271.89 847.82,-252.58"/>
-<polygon fill="black" stroke="black" points="850.84,-254.36 852.65,-243.92 844.73,-250.95 850.84,-254.36"/>
-</g>
-<!-- STRUCT_SN -->
-<g id="node21" class="node">
-<title>STRUCT_SN</title>
-<polygon fill="none" stroke="none" points="1039.38,-254 953.63,-254 953.63,-178.5 1039.38,-178.5 1039.38,-254"/>
-<polygon fill="lightgreen" stroke="none" points="961.63,-227.5 961.63,-250 992.38,-250 992.38,-227.5 961.63,-227.5"/>
-<polygon fill="none" stroke="black" points="961.63,-227.5 961.63,-250 992.38,-250 992.38,-227.5 961.63,-227.5"/>
-<text text-anchor="start" x="964.63" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">field</text>
-<defs>
-<linearGradient id="l_3" gradientUnits="userSpaceOnUse" x1="998.1" y1="-246.7" x2="1025.67" y2="-230.79" >
-<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
-<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
-</linearGradient>
-</defs>
-<polygon fill="url(#l_3)" stroke="none" points="992.38,-227.5 992.38,-250 1031.38,-250 1031.38,-227.5 992.38,-227.5"/>
-<polygon fill="none" stroke="black" points="992.38,-227.5 992.38,-250 1031.38,-250 1031.38,-227.5 992.38,-227.5"/>
-<text text-anchor="start" x="995.38" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
-<polygon fill="lightgreen" stroke="none" points="961.63,-205 961.63,-227.5 992.38,-227.5 992.38,-205 961.63,-205"/>
-<polygon fill="none" stroke="black" points="961.63,-205 961.63,-227.5 992.38,-227.5 992.38,-205 961.63,-205"/>
-<text text-anchor="start" x="967.63" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">...  </text>
-<defs>
-<linearGradient id="l_4" gradientUnits="userSpaceOnUse" x1="998.1" y1="-224.2" x2="1025.67" y2="-208.29" >
-<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
-<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
-</linearGradient>
-</defs>
-<polygon fill="url(#l_4)" stroke="none" points="992.38,-205 992.38,-227.5 1031.38,-227.5 1031.38,-205 992.38,-205"/>
-<polygon fill="none" stroke="black" points="992.38,-205 992.38,-227.5 1031.38,-227.5 1031.38,-205 992.38,-205"/>
-<text text-anchor="start" x="995.38" y="-211.2" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
-<polygon fill="lightgreen" stroke="none" points="961.63,-182.5 961.63,-205 992.38,-205 992.38,-182.5 961.63,-182.5"/>
-<polygon fill="none" stroke="black" points="961.63,-182.5 961.63,-205 992.38,-205 992.38,-182.5 961.63,-182.5"/>
-<text text-anchor="start" x="964.63" y="-188.7" font-family="Times New Roman,serif" font-size="14.00">field</text>
-<defs>
-<linearGradient id="l_5" gradientUnits="userSpaceOnUse" x1="998.1" y1="-201.7" x2="1025.67" y2="-185.79" >
-<stop offset="0" style="stop-color:lightblue;stop-opacity:1.;"/>
-<stop offset="1" style="stop-color:green;stop-opacity:1.;"/>
-</linearGradient>
-</defs>
-<polygon fill="url(#l_5)" stroke="none" points="992.38,-182.5 992.38,-205 1031.38,-205 1031.38,-182.5 992.38,-182.5"/>
-<polygon fill="none" stroke="black" points="992.38,-182.5 992.38,-205 1031.38,-205 1031.38,-182.5 992.38,-182.5"/>
-<text text-anchor="start" x="995.38" y="-188.7" font-family="Times New Roman,serif" font-size="14.00">int/ptr</text>
-</g>
-<!-- STRUCT_TOP->STRUCT_SN -->
-<g id="edge30" class="edge">
-<title>STRUCT_TOP->STRUCT_SN</title>
-<path fill="none" stroke="black" d="M831.35,-312.43C859.88,-295.99 907.49,-268.55 944.28,-247.35"/>
-<polygon fill="black" stroke="black" points="945.64,-250.61 952.55,-242.58 942.14,-244.54 945.64,-250.61"/>
-</g>
-<!-- STRUCT_BOT -->
-<g id="node18" class="node">
-<title>STRUCT_BOT</title>
-<ellipse fill="lightgreen" stroke="black" cx="806.51" cy="-104.75" rx="44.7" ry="18"/>
-<text text-anchor="start" x="781.76" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="797.51" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:struct</text>
-</g>
-<!-- STRUCT_BOT->BOT -->
-<g id="edge34" class="edge">
-<title>STRUCT_BOT->BOT</title>
-<path fill="none" stroke="black" d="M777.84,-90.45C745.37,-75.39 692.74,-50.98 659.95,-35.78"/>
-<polygon fill="black" stroke="black" points="661.57,-32.67 651.03,-31.64 658.63,-39.02 661.57,-32.67"/>
-</g>
-<!-- STRUCT_S1->STRUCT_BOT -->
-<g id="edge31" class="edge">
-<title>STRUCT_S1->STRUCT_BOT</title>
-<path fill="none" stroke="black" d="M748.84,-198.62C759.77,-181.01 777.19,-152.96 790.02,-132.29"/>
-<polygon fill="black" stroke="black" points="792.98,-134.16 795.29,-123.82 787.04,-130.47 792.98,-134.16"/>
-</g>
-<!-- STRUCT_S1->STRUCT_S2 -->
-<!-- STRUCT_S2->STRUCT_BOT -->
-<g id="edge32" class="edge">
-<title>STRUCT_S2->STRUCT_BOT</title>
-<path fill="none" stroke="black" d="M853.36,-189.85C843.77,-172.63 831.12,-149.92 821.38,-132.44"/>
-<polygon fill="black" stroke="black" points="824.68,-131.18 816.76,-124.15 818.57,-134.59 824.68,-131.18"/>
-</g>
-<!-- STRUCT_S2->STRUCT_SN -->
-<!-- STRUCT_SN->STRUCT_BOT -->
-<g id="edge33" class="edge">
-<title>STRUCT_SN->STRUCT_BOT</title>
-<path fill="none" stroke="black" d="M953.87,-190.67C919.81,-171.04 872.69,-143.89 840.98,-125.62"/>
-<polygon fill="black" stroke="black" points="842.99,-122.73 832.58,-120.77 839.49,-128.8 842.99,-122.73"/>
-</g>
-<!-- MEM_ALIAS1 -->
-<g id="node24" class="node">
-<title>MEM_ALIAS1</title>
-<ellipse fill="blue" stroke="black" cx="1102.51" cy="-216.25" rx="20.13" ry="20.13"/>
-<text text-anchor="middle" x="1102.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">#1</text>
-</g>
-<!-- MEM_TOP->MEM_ALIAS1 -->
-<g id="edge38" class="edge">
-<title>MEM_TOP->MEM_ALIAS1</title>
-<path fill="none" stroke="black" d="M1140.48,-309.64C1133.47,-292.59 1122.58,-266.09 1114.26,-245.84"/>
-<polygon fill="black" stroke="black" points="1117.55,-244.65 1110.52,-236.73 1111.08,-247.31 1117.55,-244.65"/>
-</g>
-<!-- MEM_ALIASDOTS -->
-<g id="node25" class="node">
-<title>MEM_ALIASDOTS</title>
-<ellipse fill="blue" stroke="black" cx="1192.51" cy="-216.25" rx="27" ry="18"/>
-<text text-anchor="middle" x="1192.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text>
-</g>
-<!-- MEM_TOP->MEM_ALIASDOTS -->
-<g id="edge39" class="edge">
-<title>MEM_TOP->MEM_ALIASDOTS</title>
-<path fill="none" stroke="black" d="M1154.54,-309.64C1161.71,-292.18 1172.96,-264.82 1181.35,-244.4"/>
-<polygon fill="black" stroke="black" points="1184.54,-245.86 1185.1,-235.28 1178.06,-243.2 1184.54,-245.86"/>
-</g>
-<!-- MEM_ALIASN -->
-<g id="node26" class="node">
-<title>MEM_ALIASN</title>
-<ellipse fill="blue" stroke="black" cx="1282.51" cy="-216.25" rx="20.13" ry="20.13"/>
-<text text-anchor="middle" x="1282.51" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">#n</text>
-</g>
-<!-- MEM_TOP->MEM_ALIASN -->
-<g id="edge40" class="edge">
-<title>MEM_TOP->MEM_ALIASN</title>
-<path fill="none" stroke="black" d="M1166.56,-311.29C1190.65,-291.76 1232.11,-258.13 1258.38,-236.82"/>
-<polygon fill="black" stroke="black" points="1260.57,-239.55 1266.13,-230.53 1256.16,-234.11 1260.57,-239.55"/>
-</g>
-<!-- MEM_BOT -->
-<g id="node23" class="node">
-<title>MEM_BOT</title>
-<ellipse fill="blue" stroke="black" cx="1147.51" cy="-104.75" rx="43.67" ry="18"/>
-<text text-anchor="start" x="1123.51" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00" fill="white">⊥</text>
-<text text-anchor="start" x="1139.26" y="-100.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">:mem</text>
-</g>
-<!-- MEM_BOT->BOT -->
-<g id="edge44" class="edge">
-<title>MEM_BOT->BOT</title>
-<path fill="none" stroke="black" d="M1107.37,-97.41C1008.15,-81.75 752.85,-41.44 662.66,-27.2"/>
-<polygon fill="black" stroke="black" points="663.45,-23.78 653.03,-25.68 662.36,-30.7 663.45,-23.78"/>
-</g>
-<!-- MEM_ALIAS1->MEM_BOT -->
-<g id="edge41" class="edge">
-<title>MEM_ALIAS1->MEM_BOT</title>
-<path fill="none" stroke="black" d="M1109.94,-197.17C1117.07,-179.82 1127.93,-153.39 1136.15,-133.4"/>
-<polygon fill="black" stroke="black" points="1139.37,-134.75 1139.94,-124.17 1132.9,-132.09 1139.37,-134.75"/>
-</g>
-<!-- MEM_ALIAS1->MEM_ALIASDOTS -->
-<!-- MEM_ALIASDOTS->MEM_BOT -->
-<g id="edge42" class="edge">
-<title>MEM_ALIASDOTS->MEM_BOT</title>
-<path fill="none" stroke="black" d="M1185.67,-198.62C1178.58,-181.35 1167.36,-154.05 1158.92,-133.51"/>
-<polygon fill="black" stroke="black" points="1162.17,-132.22 1155.13,-124.3 1155.7,-134.88 1162.17,-132.22"/>
-</g>
-<!-- MEM_ALIASDOTS->MEM_ALIASN -->
-<!-- MEM_ALIASN->MEM_BOT -->
-<g id="edge43" class="edge">
-<title>MEM_ALIASN->MEM_BOT</title>
-<path fill="none" stroke="black" d="M1267.02,-202.69C1244.75,-184.62 1203.29,-151 1175.55,-128.49"/>
-<polygon fill="black" stroke="black" points="1177.86,-125.86 1167.89,-122.28 1173.45,-131.3 1177.86,-125.86"/>
-</g>
-<!-- TUPLE1 -->
-<g id="node29" class="node">
-<title>TUPLE1</title>
-<polygon fill="none" stroke="none" points="1399.51,-242.75 1345.51,-242.75 1345.51,-189.75 1399.51,-189.75 1399.51,-242.75"/>
-<polygon fill="pink" stroke="none" points="1353.76,-216.25 1353.76,-238.75 1391.26,-238.75 1391.26,-216.25 1353.76,-216.25"/>
-<polygon fill="none" stroke="black" points="1353.76,-216.25 1353.76,-238.75 1391.26,-238.75 1391.26,-216.25 1353.76,-216.25"/>
-<text text-anchor="start" x="1356.76" y="-222.45" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
-<polygon fill="black" stroke="none" points="1353.76,-193.75 1353.76,-216.25 1391.26,-216.25 1391.26,-193.75 1353.76,-193.75"/>
-<polygon fill="none" stroke="black" points="1353.76,-193.75 1353.76,-216.25 1391.26,-216.25 1391.26,-193.75 1353.76,-193.75"/>
-<text text-anchor="start" x="1360.88" y="-199.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
-</g>
-<!-- TUPLE_TOP->TUPLE1 -->
-<g id="edge48" class="edge">
-<title>TUPLE_TOP->TUPLE1</title>
-<path fill="none" stroke="black" d="M1413.01,-309.64C1406.37,-294.48 1396.45,-271.87 1388.1,-252.81"/>
-<polygon fill="black" stroke="black" points="1391.35,-251.51 1384.13,-243.76 1384.94,-254.32 1391.35,-251.51"/>
-</g>
-<!-- TUPLE2 -->
-<g id="node30" class="node">
-<title>TUPLE2</title>
-<polygon fill="none" stroke="none" points="1496.51,-254 1442.51,-254 1442.51,-178.5 1496.51,-178.5 1496.51,-254"/>
-<polygon fill="pink" stroke="none" points="1450.76,-227.5 1450.76,-250 1488.26,-250 1488.26,-227.5 1450.76,-227.5"/>
-<polygon fill="none" stroke="black" points="1450.76,-227.5 1450.76,-250 1488.26,-250 1488.26,-227.5 1450.76,-227.5"/>
-<text text-anchor="start" x="1453.76" y="-233.7" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
-<polygon fill="black" stroke="none" points="1450.76,-205 1450.76,-227.5 1488.26,-227.5 1488.26,-205 1450.76,-205"/>
-<polygon fill="none" stroke="black" points="1450.76,-205 1450.76,-227.5 1488.26,-227.5 1488.26,-205 1450.76,-205"/>
-<text text-anchor="start" x="1457.88" y="-211.2" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
-<polygon fill="black" stroke="none" points="1450.76,-182.5 1450.76,-205 1488.26,-205 1488.26,-182.5 1450.76,-182.5"/>
-<polygon fill="none" stroke="black" points="1450.76,-182.5 1450.76,-205 1488.26,-205 1488.26,-182.5 1450.76,-182.5"/>
-<text text-anchor="start" x="1457.88" y="-188.7" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
-</g>
-<!-- TUPLE_TOP->TUPLE2 -->
-<g id="edge49" class="edge">
-<title>TUPLE_TOP->TUPLE2</title>
-<path fill="none" stroke="black" d="M1428.17,-309.64C1433.64,-297.4 1441.29,-280.3 1448.53,-264.14"/>
-<polygon fill="black" stroke="black" points="1451.68,-265.65 1452.57,-255.09 1445.3,-262.79 1451.68,-265.65"/>
-</g>
-<!-- TUPLEN -->
-<g id="node31" class="node">
-<title>TUPLEN</title>
-<polygon fill="none" stroke="none" points="1593.51,-265.25 1539.51,-265.25 1539.51,-167.25 1593.51,-167.25 1593.51,-265.25"/>
-<polygon fill="pink" stroke="none" points="1547.76,-238.75 1547.76,-261.25 1585.26,-261.25 1585.26,-238.75 1547.76,-238.75"/>
-<polygon fill="none" stroke="black" points="1547.76,-238.75 1547.76,-261.25 1585.26,-261.25 1585.26,-238.75 1547.76,-238.75"/>
-<text text-anchor="start" x="1550.76" y="-244.95" font-family="Times New Roman,serif" font-size="14.00">Tuple</text>
-<polygon fill="black" stroke="none" points="1547.76,-216.25 1547.76,-238.75 1585.26,-238.75 1585.26,-216.25 1547.76,-216.25"/>
-<polygon fill="none" stroke="black" points="1547.76,-216.25 1547.76,-238.75 1585.26,-238.75 1585.26,-216.25 1547.76,-216.25"/>
-<text text-anchor="start" x="1554.88" y="-222.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
-<polygon fill="black" stroke="none" points="1547.76,-193.75 1547.76,-216.25 1585.26,-216.25 1585.26,-193.75 1547.76,-193.75"/>
-<polygon fill="none" stroke="black" points="1547.76,-193.75 1547.76,-216.25 1585.26,-216.25 1585.26,-193.75 1547.76,-193.75"/>
-<text text-anchor="start" x="1560.88" y="-199.95" font-family="Times New Roman,serif" font-size="14.00" fill="white">...</text>
-<polygon fill="black" stroke="none" points="1547.76,-171.25 1547.76,-193.75 1585.26,-193.75 1585.26,-171.25 1547.76,-171.25"/>
-<polygon fill="none" stroke="black" points="1547.76,-171.25 1547.76,-193.75 1585.26,-193.75 1585.26,-171.25 1547.76,-171.25"/>
-<text text-anchor="start" x="1554.88" y="-177.45" font-family="Times New Roman,serif" font-size="14.00" fill="white">type</text>
-</g>
-<!-- TUPLE_TOP->TUPLEN -->
-<g id="edge50" class="edge">
-<title>TUPLE_TOP->TUPLEN</title>
-<path fill="none" stroke="black" d="M1440.81,-311.52C1463.97,-294.15 1502.28,-265.42 1530.53,-244.23"/>
-<polygon fill="black" stroke="black" points="1532.58,-247.07 1538.48,-238.27 1528.38,-241.47 1532.58,-247.07"/>
-</g>
-<!-- TUPLE_BOT -->
-<g id="node28" class="node">
-<title>TUPLE_BOT</title>
-<ellipse fill="pink" stroke="black" cx="1420.51" cy="-104.75" rx="42.65" ry="18"/>
-<text text-anchor="start" x="1397.26" y="-100.7" font-family="Times New Roman,serif" font-weight="bold" font-size="14.00">⊥</text>
-<text text-anchor="start" x="1413.01" y="-100.7" font-family="Times New Roman,serif" font-size="14.00">:tuple</text>
-</g>
-<!-- TUPLE_BOT->BOT -->
-<g id="edge54" class="edge">
-<title>TUPLE_BOT->BOT</title>
-<path fill="none" stroke="black" d="M1379.42,-99.5C1240.27,-85.13 788.44,-38.44 663.04,-25.49"/>
-<polygon fill="black" stroke="black" points="663.44,-22.01 653.13,-24.46 662.72,-28.97 663.44,-22.01"/>
-</g>
-<!-- TUPLE1->TUPLE_BOT -->
-<g id="edge51" class="edge">
-<title>TUPLE1->TUPLE_BOT</title>
-<path fill="none" stroke="black" d="M1383.64,-189.85C1391.12,-172.8 1400.96,-150.34 1408.59,-132.93"/>
-<polygon fill="black" stroke="black" points="1411.61,-134.78 1412.41,-124.21 1405.19,-131.97 1411.61,-134.78"/>
-</g>
-<!-- TUPLE2->TUPLE_BOT -->
-<g id="edge52" class="edge">
-<title>TUPLE2->TUPLE_BOT</title>
-<path fill="none" stroke="black" d="M1453.19,-178.79C1446.51,-163.86 1438.92,-146.89 1432.73,-133.07"/>
-<polygon fill="black" stroke="black" points="1436.02,-131.83 1428.74,-124.13 1429.63,-134.69 1436.02,-131.83"/>
-</g>
-<!-- TUPLEN->TUPLE_BOT -->
-<g id="edge53" class="edge">
-<title>TUPLEN->TUPLE_BOT</title>
-<path fill="none" stroke="black" d="M1539.73,-195.16C1514.22,-176.03 1475.9,-147.29 1449.64,-127.59"/>
-<polygon fill="black" stroke="black" points="1451.86,-124.89 1441.76,-121.69 1447.66,-130.49 1451.86,-124.89"/>
-</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 12.2.0 (20241103.1931) + --> +<!-- Title: Lattice Pages: 1 --> +<svg width="2357pt" height="533pt" + viewBox="0.00 0.00 2357.00 533.45" 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 529.45)"> +<title>Lattice</title> +<polygon fill="white" stroke="none" points="-4,4 -4,-529.45 2353,-529.45 2353,4 -4,4"/> +<g id="clust1" class="cluster"> +<title>cluster_control</title> +<polygon fill="none" stroke="#cccccc" points="8,-85.99 8,-454.71 98,-454.71 98,-85.99 8,-85.99"/> +<text text-anchor="middle" x="53" y="-437.41" font-family="Arial" font-size="14.00">Control</text> +</g> +<g id="clust2" class="cluster"> +<title>cluster_integer</title> +<polygon fill="none" stroke="#cccccc" points="106,-85.99 106,-454.71 404,-454.71 404,-85.99 106,-85.99"/> +<text text-anchor="middle" x="255" y="-437.41" font-family="Arial" font-size="14.00">Integer</text> +</g> +<g id="clust6" class="cluster"> +<title>cluster_float</title> +<polygon fill="none" stroke="#cccccc" points="412,-85.99 412,-454.71 942,-454.71 942,-85.99 412,-85.99"/> +<text text-anchor="middle" x="677" y="-437.41" font-family="Arial" font-size="14.00">Float</text> +</g> +<g id="clust8" class="cluster"> +<title>cluster_pointer</title> +<polygon fill="none" stroke="#cccccc" points="950,-75 950,-465.7 1431,-465.7 1431,-75 950,-75"/> +<text text-anchor="middle" x="1190.5" y="-448.4" font-family="Arial" font-size="14.00">Pointer = nullability × struct type</text> +</g> +<g id="clust15" class="cluster"> +<title>cluster_struct</title> +<polygon fill="none" stroke="#cccccc" points="1439,-75 1439,-481.45 1767,-481.45 1767,-75 1439,-75"/> +<text text-anchor="middle" x="1603" y="-464.15" font-family="Arial" font-size="14.00">Struct</text> +<text text-anchor="middle" x="1603" y="-448.4" font-family="Arial" font-size="14.00">named collection of named scalar types</text> +</g> +<g id="clust19" class="cluster"> +<title>cluster_memory</title> +<polygon fill="none" stroke="#cccccc" points="1775,-85.99 1775,-470.46 2057,-470.46 2057,-85.99 1775,-85.99"/> +<text text-anchor="middle" x="1916" y="-453.16" font-family="Arial" font-size="14.00">Memory</text> +<text text-anchor="middle" x="1916" y="-437.41" font-family="Arial" font-size="14.00">precise alias slices</text> +</g> +<g id="clust23" class="cluster"> +<title>cluster_tuple</title> +<polygon fill="none" stroke="#cccccc" points="2065,-85.99 2065,-470.46 2341,-470.46 2341,-85.99 2065,-85.99"/> +<text text-anchor="middle" x="2203" y="-453.16" font-family="Arial" font-size="14.00">Tuple</text> +<text text-anchor="middle" x="2203" y="-437.41" font-family="Arial" font-size="14.00">collection of types</text> +</g> +<!-- TOP --> +<g id="node1" class="node"> +<title>TOP</title> +<ellipse fill="black" stroke="black" cx="1171" cy="-507.45" rx="27" ry="18"/> +<text text-anchor="middle" x="1171" y="-503.35" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤</text> +</g> +<!-- XCTRL --> +<g id="node3" class="node"> +<title>XCTRL</title> +<ellipse fill="#ffff00" stroke="black" cx="53" cy="-404.96" rx="36.51" ry="18"/> +<text text-anchor="middle" x="53" y="-400.86" font-family="DejaVu Sans" font-size="13.00">⊤:ctrl</text> +</g> +<!-- TOP->XCTRL --> +<g id="edge68" class="edge"> +<title>TOP->XCTRL</title> +<path fill="none" stroke="#555555" d="M1143.75,-506.53C981.55,-506.91 148.8,-507.58 102,-481.45 82.13,-470.35 69.01,-447.44 61.39,-429.76"/> +<polygon fill="#555555" stroke="#555555" points="63.42,-429.19 59.21,-424.43 59.54,-430.78 63.42,-429.19"/> +</g> +<!-- INT_TOP --> +<g id="node5" class="node"> +<title>INT_TOP</title> +<ellipse fill="#add8e6" stroke="black" cx="353" cy="-404.96" rx="33.44" ry="18"/> +<text text-anchor="middle" x="353" y="-400.86" font-family="DejaVu Sans" font-size="13.00">⊤:int</text> +</g> +<!-- TOP->INT_TOP --> +<g id="edge69" class="edge"> +<title>TOP->INT_TOP</title> +<path fill="none" stroke="#555555" d="M1143.82,-506.22C1011.67,-505.05 441.13,-498.99 408,-481.45 387.13,-470.4 372.2,-447.48 363.21,-429.78"/> +<polygon fill="#555555" stroke="#555555" points="365.11,-428.89 360.61,-424.41 361.33,-430.72 365.11,-428.89"/> +</g> +<!-- FLT_TOP --> +<g id="node10" class="node"> +<title>FLT_TOP</title> +<ellipse fill="aqua" stroke="black" cx="755" cy="-404.96" rx="31.39" ry="18"/> +<text text-anchor="start" x="740" y="-401.86" font-family="DejaVu Sans" font-weight="bold" font-size="13.00">⊤</text> +<text text-anchor="start" x="752" y="-401.86" font-family="DejaVu Sans" font-size="13.00">:flt</text> +</g> +<!-- TOP->FLT_TOP --> +<g id="edge70" class="edge"> +<title>TOP->FLT_TOP</title> +<path fill="none" stroke="#555555" d="M1143.92,-505.75C1101.25,-504.14 1015.99,-498.84 946,-481.45 886.87,-466.76 821.59,-438.05 784.7,-420.58"/> +<polygon fill="#555555" stroke="#555555" points="785.84,-418.79 779.52,-418.1 784.03,-422.58 785.84,-418.79"/> +</g> +<!-- PTR_TOP --> +<g id="node15" class="node"> +<title>PTR_TOP</title> +<ellipse fill="#008000" stroke="black" cx="1171" cy="-404.96" rx="61.7" ry="28.99"/> +<text text-anchor="middle" x="1171" y="-409.11" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:ptr</text> +<text text-anchor="middle" x="1171" y="-392.61" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊤:struct]</text> +</g> +<!-- TOP->PTR_TOP --> +<g id="edge71" class="edge"> +<title>TOP->PTR_TOP</title> +<path fill="none" stroke="#555555" d="M1171,-489.4C1171,-476.29 1171,-457.72 1171,-441.43"/> +<polygon fill="#555555" stroke="#555555" points="1173.1,-441.64 1171,-435.64 1168.9,-441.64 1173.1,-441.64"/> +</g> +<!-- STRUCT_TOP --> +<g id="node25" class="node"> +<title>STRUCT_TOP</title> +<ellipse fill="#90ee90" stroke="black" cx="1558" cy="-404.96" rx="64.35" ry="28.99"/> +<text text-anchor="middle" x="1558" y="-409.11" font-family="DejaVu Sans" font-size="13.00">⊤:struct</text> +<text text-anchor="middle" x="1558" y="-392.61" font-family="DejaVu Sans" font-size="13.00">[struct top]</text> +</g> +<!-- TOP->STRUCT_TOP --> +<g id="edge72" class="edge"> +<title>TOP->STRUCT_TOP</title> +<path fill="none" stroke="#555555" d="M1197.97,-505.44C1256.13,-503.02 1391.55,-495.96 1435,-481.45 1466.2,-471.03 1497.74,-451.44 1521.07,-434.83"/> +<polygon fill="#555555" stroke="#555555" points="1522.26,-436.56 1525.9,-431.35 1519.8,-433.16 1522.26,-436.56"/> +</g> +<!-- MEM_TOP --> +<g id="node31" class="node"> +<title>MEM_TOP</title> +<ellipse fill="#00008b" stroke="black" cx="1881" cy="-404.96" rx="44.7" ry="18"/> +<text text-anchor="middle" x="1881" y="-400.86" font-family="DejaVu Sans" font-size="13.00" fill="white">⊤:mem</text> +</g> +<!-- TOP->MEM_TOP --> +<g id="edge73" class="edge"> +<title>TOP->MEM_TOP</title> +<path fill="none" stroke="#555555" d="M1198.14,-506.2C1307.98,-505.07 1716.29,-499.67 1771,-481.45 1804.95,-470.14 1837.98,-444.99 1858.84,-426.82"/> +<polygon fill="#555555" stroke="#555555" points="1860.16,-428.46 1863.26,-422.9 1857.37,-425.31 1860.16,-428.46"/> +</g> +<!-- TUPLE_TOP --> +<g id="node36" class="node"> +<title>TUPLE_TOP</title> +<ellipse fill="#ffc0cb" stroke="black" cx="2118" cy="-404.96" rx="44.7" ry="18"/> +<text text-anchor="middle" x="2118" y="-400.86" font-family="DejaVu Sans" font-size="13.00">⊤:tuple</text> +</g> +<!-- TOP->TUPLE_TOP --> +<g id="edge74" class="edge"> +<title>TOP->TUPLE_TOP</title> +<path fill="none" stroke="#555555" d="M1198.25,-506.35C1343.51,-505.71 2021.76,-501.68 2061,-481.45 2082.45,-470.39 2098.06,-447.15 2107.46,-429.36"/> +<polygon fill="#555555" stroke="#555555" points="2109.12,-430.74 2109.96,-424.43 2105.37,-428.84 2109.12,-430.74"/> +</g> +<!-- BOT --> +<g id="node2" class="node"> +<title>BOT</title> +<ellipse fill="black" stroke="black" cx="1237" cy="-18" rx="27" ry="18"/> +<text text-anchor="middle" x="1237" y="-13.9" font-family="DejaVu Sans" font-size="13.00" fill="white">⊥</text> +</g> +<!-- CTRL --> +<g id="node4" class="node"> +<title>CTRL</title> +<ellipse fill="#ffff00" stroke="black" cx="53" cy="-111.99" rx="36.51" ry="18"/> +<text text-anchor="middle" x="53" y="-107.89" font-family="DejaVu Sans" font-size="13.00">⊥:ctrl</text> +</g> +<!-- XCTRL->CTRL --> +<g id="edge1" class="edge"> +<title>XCTRL->CTRL</title> +<path fill="none" stroke="#555555" d="M53,-386.63C53,-337.1 53,-194.83 53,-137.43"/> +<polygon fill="#555555" stroke="#555555" points="55.1,-137.74 53,-131.74 50.9,-137.74 55.1,-137.74"/> +</g> +<!-- XCTRL->INT_TOP --> +<!-- CTRL->BOT --> +<g id="edge75" class="edge"> +<title>CTRL->BOT</title> +<path fill="none" stroke="#555555" d="M68.81,-95.65C77.79,-87.96 89.67,-79.38 102,-75 207.84,-37.39 1023.53,-22.38 1202.4,-19.52"/> +<polygon fill="#555555" stroke="#555555" points="1202.23,-21.63 1208.2,-19.43 1202.17,-17.43 1202.23,-21.63"/> +</g> +<!-- INT_NEG --> +<g id="node7" class="node"> +<title>INT_NEG</title> +<ellipse fill="#add8e6" stroke="black" cx="169" cy="-216.97" rx="55.45" ry="18"/> +<text text-anchor="middle" x="169" y="-212.87" font-family="DejaVu Sans" font-size="13.00">… −2, −1</text> +</g> +<!-- INT_TOP->INT_NEG --> +<g id="edge4" class="edge"> +<title>INT_TOP->INT_NEG</title> +<path fill="none" stroke="#555555" d="M337.94,-388.74C305.38,-355.83 228.33,-277.94 190.59,-239.8"/> +<polygon fill="#555555" stroke="#555555" points="192.09,-238.33 186.38,-235.54 189.11,-241.28 192.09,-238.33"/> +</g> +<!-- INT_ZERO --> +<g id="node8" class="node"> +<title>INT_ZERO</title> +<ellipse fill="#add8e6" stroke="black" cx="267" cy="-216.97" rx="27" ry="18"/> +<text text-anchor="middle" x="267" y="-212.87" font-family="DejaVu Sans" font-size="13.00">0</text> +</g> +<!-- INT_TOP->INT_ZERO --> +<g id="edge5" class="edge"> +<title>INT_TOP->INT_ZERO</title> +<path fill="none" stroke="#555555" d="M345.22,-387.12C329.8,-353.79 295.37,-279.32 277.78,-241.29"/> +<polygon fill="#555555" stroke="#555555" points="279.76,-240.57 275.34,-236.01 275.95,-242.34 279.76,-240.57"/> +</g> +<!-- INT_POS --> +<g id="node9" class="node"> +<title>INT_POS</title> +<ellipse fill="#add8e6" stroke="black" cx="353" cy="-216.97" rx="43.16" ry="18"/> +<text text-anchor="middle" x="353" y="-212.87" font-family="DejaVu Sans" font-size="13.00">1, 2, …</text> +</g> +<!-- INT_TOP->INT_POS --> +<g id="edge6" class="edge"> +<title>INT_TOP->INT_POS</title> +<path fill="none" stroke="#555555" d="M353,-386.46C353,-353.14 353,-280.53 353,-242.43"/> +<polygon fill="#555555" stroke="#555555" points="355.1,-242.8 353,-236.8 350.9,-242.8 355.1,-242.8"/> +</g> +<!-- INT_TOP->FLT_TOP --> +<!-- INT_BOT --> +<g id="node6" class="node"> +<title>INT_BOT</title> +<ellipse fill="#add8e6" stroke="black" cx="310" cy="-111.99" rx="33.44" ry="18"/> +<text text-anchor="middle" x="310" y="-107.89" font-family="DejaVu Sans" font-size="13.00">⊥:int</text> +</g> +<!-- INT_BOT->BOT --> +<g id="edge76" class="edge"> +<title>INT_BOT->BOT</title> +<path fill="none" stroke="#555555" d="M334.8,-99.65C354.27,-91.29 382.29,-80.47 408,-75 563.61,-41.88 1066.53,-24.26 1202.72,-20.02"/> +<polygon fill="#555555" stroke="#555555" points="1202.6,-22.12 1208.53,-19.84 1202.47,-17.92 1202.6,-22.12"/> +</g> +<!-- INT_NEG->INT_BOT --> +<g id="edge7" class="edge"> +<title>INT_NEG->INT_BOT</title> +<path fill="none" stroke="#555555" d="M190.72,-200.11C216.15,-181.54 258.17,-150.85 284.95,-131.29"/> +<polygon fill="#555555" stroke="#555555" points="285.92,-133.18 289.52,-127.95 283.44,-129.79 285.92,-133.18"/> +</g> +<!-- INT_NEG->INT_ZERO --> +<!-- INT_ZERO->INT_BOT --> +<g id="edge8" class="edge"> +<title>INT_ZERO->INT_BOT</title> +<path fill="none" stroke="#555555" d="M273.91,-199.43C281.01,-182.41 292.14,-155.76 300.16,-136.55"/> +<polygon fill="#555555" stroke="#555555" points="302.01,-137.58 302.38,-131.24 298.13,-135.96 302.01,-137.58"/> +</g> +<!-- INT_ZERO->INT_POS --> +<!-- INT_POS->INT_BOT --> +<g id="edge9" class="edge"> +<title>INT_POS->INT_BOT</title> +<path fill="none" stroke="#555555" d="M345.9,-198.97C338.83,-182.05 327.93,-155.94 319.99,-136.93"/> +<polygon fill="#555555" stroke="#555555" points="321.94,-136.15 317.69,-131.42 318.07,-137.76 321.94,-136.15"/> +</g> +<!-- FLT_MINDOTS --> +<g id="node12" class="node"> +<title>FLT_MINDOTS</title> +<ellipse fill="aqua" stroke="black" cx="529" cy="-310.97" rx="109.19" ry="18"/> +<text text-anchor="middle" x="529" y="-306.87" font-family="DejaVu Sans" font-size="13.00">… negative constants</text> +</g> +<!-- FLT_TOP->FLT_MINDOTS --> +<g id="edge10" class="edge"> +<title>FLT_TOP->FLT_MINDOTS</title> +<path fill="none" stroke="#555555" d="M729.95,-393.76C692.71,-378.6 622.11,-349.86 575.3,-330.81"/> +<polygon fill="#555555" stroke="#555555" points="576.32,-328.96 569.97,-328.64 574.74,-332.85 576.32,-328.96"/> +</g> +<!-- FLT_ZERO --> +<g id="node13" class="node"> +<title>FLT_ZERO</title> +<ellipse fill="aqua" stroke="black" cx="681" cy="-310.97" rx="27" ry="18"/> +<text text-anchor="middle" x="681" y="-306.87" font-family="DejaVu Sans" font-size="13.00">0.0</text> +</g> +<!-- FLT_TOP->FLT_ZERO --> +<g id="edge11" class="edge"> +<title>FLT_TOP->FLT_ZERO</title> +<path fill="none" stroke="#555555" d="M742.45,-388.35C730.15,-373.06 711.32,-349.66 697.75,-332.79"/> +<polygon fill="#555555" stroke="#555555" points="699.71,-331.88 694.32,-328.52 696.44,-334.51 699.71,-331.88"/> +</g> +<!-- FLT_MAXDOTS --> +<g id="node14" class="node"> +<title>FLT_MAXDOTS</title> +<ellipse fill="aqua" stroke="black" cx="829" cy="-310.97" rx="105.09" ry="18"/> +<text text-anchor="middle" x="829" y="-306.87" font-family="DejaVu Sans" font-size="13.00">positive constants …</text> +</g> +<!-- FLT_TOP->FLT_MAXDOTS --> +<g id="edge12" class="edge"> +<title>FLT_TOP->FLT_MAXDOTS</title> +<path fill="none" stroke="#555555" d="M767.55,-388.35C779.41,-373.61 797.32,-351.34 810.76,-334.64"/> +<polygon fill="#555555" stroke="#555555" points="812.05,-336.39 814.18,-330.39 808.78,-333.75 812.05,-336.39"/> +</g> +<!-- FLT_TOP->PTR_TOP --> +<!-- FLT_BOT --> +<g id="node11" class="node"> +<title>FLT_BOT</title> +<ellipse fill="aqua" stroke="black" cx="718" cy="-111.99" rx="31.39" ry="18"/> +<text text-anchor="start" x="703" y="-108.89" font-family="DejaVu Sans" font-weight="bold" font-size="13.00">⊥</text> +<text text-anchor="start" x="715" y="-108.89" font-family="DejaVu Sans" font-size="13.00">:flt</text> +</g> +<!-- FLT_BOT->BOT --> +<g id="edge77" class="edge"> +<title>FLT_BOT->BOT</title> +<path fill="none" stroke="#555555" d="M747.77,-105.72C838.15,-89.69 1109.02,-41.68 1203.8,-24.88"/> +<polygon fill="#555555" stroke="#555555" points="1204.08,-26.97 1209.62,-23.85 1203.35,-22.83 1204.08,-26.97"/> +</g> +<!-- FLT_MINDOTS->FLT_BOT --> +<g id="edge13" class="edge"> +<title>FLT_MINDOTS->FLT_BOT</title> +<path fill="none" stroke="#555555" d="M545.44,-292.83C580.25,-256.55 661.25,-172.14 698.55,-133.26"/> +<polygon fill="#555555" stroke="#555555" points="699.62,-135.18 702.26,-129.4 696.59,-132.27 699.62,-135.18"/> +</g> +<!-- FLT_MINDOTS->FLT_ZERO --> +<!-- FLT_ZERO->FLT_BOT --> +<g id="edge14" class="edge"> +<title>FLT_ZERO->FLT_BOT</title> +<path fill="none" stroke="#555555" d="M684.22,-292.83C690.79,-257.83 705.78,-178.04 713.39,-137.55"/> +<polygon fill="#555555" stroke="#555555" points="715.44,-138 714.48,-131.72 711.31,-137.22 715.44,-138"/> +</g> +<!-- FLT_ZERO->FLT_MAXDOTS --> +<!-- FLT_MAXDOTS->FLT_BOT --> +<g id="edge15" class="edge"> +<title>FLT_MAXDOTS->FLT_BOT</title> +<path fill="none" stroke="#555555" d="M819.34,-292.83C799.4,-257.44 753.64,-176.23 731.07,-136.19"/> +<polygon fill="#555555" stroke="#555555" points="732.92,-135.18 728.14,-130.99 729.26,-137.25 732.92,-135.18"/> +</g> +<!-- PTR_NULL --> +<g id="node17" class="node"> +<title>PTR_NULL</title> +<ellipse fill="#008000" stroke="black" cx="1297" cy="-310.97" rx="27.3" ry="18"/> +<text text-anchor="middle" x="1297" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">null</text> +</g> +<!-- PTR_TOP->PTR_NULL --> +<g id="edge24" class="edge"> +<title>PTR_TOP->PTR_NULL</title> +<path fill="none" stroke="#555555" d="M1203.78,-380.03C1225.49,-364.18 1253.48,-343.74 1273.1,-329.42"/> +<polygon fill="#555555" stroke="#555555" points="1274.33,-331.12 1277.93,-325.88 1271.85,-327.73 1274.33,-331.12"/> +</g> +<!-- PTR_PERSON --> +<g id="node19" class="node"> +<title>PTR_PERSON</title> +<ellipse fill="#008000" stroke="black" cx="1040" cy="-310.97" rx="45.72" ry="18"/> +<text text-anchor="middle" x="1040" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*Person</text> +</g> +<!-- PTR_TOP->PTR_PERSON --> +<g id="edge25" class="edge"> +<title>PTR_TOP->PTR_PERSON</title> +<path fill="none" stroke="#555555" d="M1137.26,-380.27C1115.69,-365.12 1088.05,-345.71 1067.76,-331.46"/> +<polygon fill="#555555" stroke="#555555" points="1069.06,-329.81 1062.95,-328.08 1066.65,-333.25 1069.06,-329.81"/> +</g> +<!-- PTR_S1 --> +<g id="node20" class="node"> +<title>PTR_S1</title> +<ellipse fill="#008000" stroke="black" cx="1129" cy="-310.97" rx="27" ry="18"/> +<text text-anchor="middle" x="1129" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s1</text> +</g> +<!-- PTR_TOP->PTR_S1 --> +<g id="edge26" class="edge"> +<title>PTR_TOP->PTR_S1</title> +<path fill="none" stroke="#555555" d="M1158.4,-376.36C1152.4,-363.23 1145.32,-347.71 1139.6,-335.19"/> +<polygon fill="#555555" stroke="#555555" points="1141.62,-334.55 1137.22,-329.96 1137.8,-336.29 1141.62,-334.55"/> +</g> +<!-- PTR_MORE --> +<g id="node21" class="node"> +<title>PTR_MORE</title> +<ellipse fill="#008000" stroke="black" cx="1213" cy="-310.97" rx="40.6" ry="18"/> +<text text-anchor="middle" x="1213" y="-306.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s2, …</text> +</g> +<!-- PTR_TOP->PTR_MORE --> +<g id="edge27" class="edge"> +<title>PTR_TOP->PTR_MORE</title> +<path fill="none" stroke="#555555" d="M1183.6,-376.36C1189.55,-363.32 1196.59,-347.92 1202.28,-335.45"/> +<polygon fill="#555555" stroke="#555555" points="1204.08,-336.56 1204.66,-330.23 1200.26,-334.82 1204.08,-336.56"/> +</g> +<!-- PTR_TOP->STRUCT_TOP --> +<!-- PTR_BOT --> +<g id="node16" class="node"> +<title>PTR_BOT</title> +<ellipse fill="#008000" stroke="black" cx="1237" cy="-111.99" rx="66.47" ry="28.99"/> +<text text-anchor="middle" x="1237" y="-116.14" font-family="DejaVu Sans" font-size="13.00" fill="white">⊥:ptr</text> +<text text-anchor="middle" x="1237" y="-99.64" font-family="DejaVu Sans" font-size="13.00" fill="white">[*⊥:struct?]</text> +</g> +<!-- PTR_BOT->BOT --> +<g id="edge78" class="edge"> +<title>PTR_BOT->BOT</title> +<path fill="none" stroke="#555555" d="M1237,-82.64C1237,-70.25 1237,-55.86 1237,-43.89"/> +<polygon fill="#555555" stroke="#555555" points="1239.1,-43.94 1237,-37.94 1234.9,-43.94 1239.1,-43.94"/> +</g> +<!-- PTR_PERSON_NIL --> +<g id="node22" class="node"> +<title>PTR_PERSON_NIL</title> +<ellipse fill="#008000" stroke="black" cx="1189" cy="-216.97" rx="50.33" ry="18"/> +<text text-anchor="middle" x="1189" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*Person?</text> +</g> +<!-- PTR_NULL->PTR_PERSON_NIL --> +<g id="edge34" class="edge"> +<title>PTR_NULL->PTR_PERSON_NIL</title> +<path fill="none" stroke="#555555" d="M1281.06,-296.39C1263.26,-281.22 1234.22,-256.49 1213.51,-238.85"/> +<polygon fill="#555555" stroke="#555555" points="1214.99,-237.36 1209.06,-235.06 1212.27,-240.55 1214.99,-237.36"/> +</g> +<!-- PTR_S1_NIL --> +<g id="node23" class="node"> +<title>PTR_S1_NIL</title> +<ellipse fill="#008000" stroke="black" cx="1286" cy="-216.97" rx="30.37" ry="18"/> +<text text-anchor="middle" x="1286" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s1?</text> +</g> +<!-- PTR_NULL->PTR_S1_NIL --> +<g id="edge35" class="edge"> +<title>PTR_NULL->PTR_S1_NIL</title> +<path fill="none" stroke="#555555" d="M1294.93,-292.66C1293.24,-278.53 1290.83,-258.38 1288.94,-242.57"/> +<polygon fill="#555555" stroke="#555555" points="1291.04,-242.41 1288.24,-236.7 1286.87,-242.91 1291.04,-242.41"/> +</g> +<!-- PTR_MORE_NIL --> +<g id="node24" class="node"> +<title>PTR_MORE_NIL</title> +<ellipse fill="#008000" stroke="black" cx="1378" cy="-216.97" rx="45.21" ry="18"/> +<text text-anchor="middle" x="1378" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">*s2?, …</text> +</g> +<!-- PTR_NULL->PTR_MORE_NIL --> +<g id="edge36" class="edge"> +<title>PTR_NULL->PTR_MORE_NIL</title> +<path fill="none" stroke="#555555" d="M1310.38,-294.78C1323.54,-279.83 1343.77,-256.85 1358.68,-239.92"/> +<polygon fill="#555555" stroke="#555555" points="1360.12,-241.46 1362.51,-235.57 1356.97,-238.68 1360.12,-241.46"/> +</g> +<!-- PTR_ANY --> +<g id="node18" class="node"> +<title>PTR_ANY</title> +<ellipse fill="#008000" stroke="black" cx="1040" cy="-216.97" rx="82.38" ry="28.99"/> +<text text-anchor="middle" x="1040" y="-221.12" font-family="DejaVu Sans" font-size="13.00" fill="white">*⊥:struct</text> +<text text-anchor="middle" x="1040" y="-204.62" font-family="DejaVu Sans" font-size="13.00" fill="white">[ptr any struct]</text> +</g> +<!-- PTR_ANY->PTR_BOT --> +<g id="edge37" class="edge"> +<title>PTR_ANY->PTR_BOT</title> +<path fill="none" stroke="#555555" d="M1085.2,-192.35C1116.06,-176.21 1156.91,-154.86 1188.46,-138.37"/> +<polygon fill="#555555" stroke="#555555" points="1189.36,-140.27 1193.7,-135.63 1187.41,-136.54 1189.36,-140.27"/> +</g> +<!-- PTR_ANY->PTR_PERSON_NIL --> +<!-- PTR_PERSON->PTR_ANY --> +<g id="edge28" class="edge"> +<title>PTR_PERSON->PTR_ANY</title> +<path fill="none" stroke="#555555" d="M1040,-292.66C1040,-281.68 1040,-267.07 1040,-253.69"/> +<polygon fill="#555555" stroke="#555555" points="1042.1,-253.92 1040,-247.92 1037.9,-253.92 1042.1,-253.92"/> +</g> +<!-- PTR_PERSON->PTR_S1 --> +<!-- PTR_PERSON->PTR_PERSON_NIL --> +<g id="edge31" class="edge"> +<title>PTR_PERSON->PTR_PERSON_NIL</title> +<path fill="none" stroke="#555555" d="M1063.94,-295.19C1089.64,-279.32 1130.53,-254.07 1158.51,-236.8"/> +<polygon fill="#555555" stroke="#555555" points="1159.33,-238.76 1163.34,-233.82 1157.13,-235.18 1159.33,-238.76"/> +</g> +<!-- PTR_S1->PTR_ANY --> +<g id="edge29" class="edge"> +<title>PTR_S1->PTR_ANY</title> +<path fill="none" stroke="#555555" d="M1114.7,-295.19C1102.96,-283.05 1085.9,-265.42 1071.05,-250.07"/> +<polygon fill="#555555" stroke="#555555" points="1072.84,-248.9 1067.16,-246.05 1069.83,-251.82 1072.84,-248.9"/> +</g> +<!-- PTR_S1->PTR_MORE --> +<!-- PTR_S1->PTR_S1_NIL --> +<g id="edge32" class="edge"> +<title>PTR_S1->PTR_S1_NIL</title> +<path fill="none" stroke="#555555" d="M1150.34,-299.41C1174.33,-287.32 1214.22,-266.51 1247,-245.97 1251.87,-242.92 1256.94,-239.48 1261.75,-236.09"/> +<polygon fill="#555555" stroke="#555555" points="1262.79,-237.93 1266.45,-232.73 1260.35,-234.51 1262.79,-237.93"/> +</g> +<!-- PTR_MORE->PTR_NULL --> +<!-- PTR_MORE->PTR_ANY --> +<g id="edge30" class="edge"> +<title>PTR_MORE->PTR_ANY</title> +<path fill="none" stroke="#555555" d="M1187.84,-296.59C1162.54,-283.13 1122.81,-262.01 1090.91,-245.04"/> +<polygon fill="#555555" stroke="#555555" points="1092.26,-243.38 1085.97,-242.42 1090.28,-247.09 1092.26,-243.38"/> +</g> +<!-- PTR_MORE->PTR_MORE_NIL --> +<g id="edge33" class="edge"> +<title>PTR_MORE->PTR_MORE_NIL</title> +<path fill="none" stroke="#555555" d="M1237.7,-296.19C1266.57,-280.1 1314.43,-253.42 1346.09,-235.77"/> +<polygon fill="#555555" stroke="#555555" points="1347.05,-237.64 1351.26,-232.88 1345,-233.97 1347.05,-237.64"/> +</g> +<!-- PTR_PERSON_NIL->PTR_BOT --> +<g id="edge38" class="edge"> +<title>PTR_PERSON_NIL->PTR_BOT</title> +<path fill="none" stroke="#555555" d="M1196.93,-198.97C1203.41,-185.05 1212.8,-164.91 1220.86,-147.62"/> +<polygon fill="#555555" stroke="#555555" points="1222.72,-148.6 1223.35,-142.27 1218.91,-146.83 1222.72,-148.6"/> +</g> +<!-- PTR_PERSON_NIL->PTR_S1_NIL --> +<!-- PTR_S1_NIL->PTR_BOT --> +<g id="edge39" class="edge"> +<title>PTR_S1_NIL->PTR_BOT</title> +<path fill="none" stroke="#555555" d="M1278.13,-199.43C1271.43,-185.35 1261.59,-164.68 1253.22,-147.07"/> +<polygon fill="#555555" stroke="#555555" points="1255.33,-146.63 1250.86,-142.11 1251.54,-148.43 1255.33,-146.63"/> +</g> +<!-- PTR_S1_NIL->PTR_MORE_NIL --> +<!-- PTR_MORE_NIL->PTR_BOT --> +<g id="edge40" class="edge"> +<title>PTR_MORE_NIL->PTR_BOT</title> +<path fill="none" stroke="#555555" d="M1357.19,-200.78C1335.97,-185.28 1302.52,-160.85 1276.3,-141.69"/> +<polygon fill="#555555" stroke="#555555" points="1277.78,-140.18 1271.7,-138.33 1275.31,-143.57 1277.78,-140.18"/> +</g> +<!-- STRUCT_PERSON --> +<g id="node27" class="node"> +<title>STRUCT_PERSON</title> +<polygon fill="#90ee90" stroke="black" points="1514.5,-237.47 1447.5,-237.47 1447.5,-196.47 1514.5,-196.47 1514.5,-237.47"/> +<text text-anchor="middle" x="1481" y="-221.12" font-family="DejaVu Sans" font-size="13.00">Person</text> +<text text-anchor="middle" x="1481" y="-204.62" font-family="DejaVu Sans" font-size="13.00">age: int</text> +</g> +<!-- STRUCT_TOP->STRUCT_PERSON --> +<g id="edge44" class="edge"> +<title>STRUCT_TOP->STRUCT_PERSON</title> +<path fill="none" stroke="#555555" d="M1546.47,-376.11C1531.72,-340.49 1506.36,-279.23 1491.91,-244.33"/> +<polygon fill="#555555" stroke="#555555" points="1493.99,-243.86 1489.75,-239.12 1490.11,-245.47 1493.99,-243.86"/> +</g> +<!-- STRUCT_S1 --> +<g id="node28" class="node"> +<title>STRUCT_S1</title> +<polygon fill="#90ee90" stroke="black" points="1585,-237.47 1531,-237.47 1531,-196.47 1585,-196.47 1585,-237.47"/> +<text text-anchor="middle" x="1558" y="-221.12" font-family="DejaVu Sans" font-size="13.00">s1</text> +<text text-anchor="middle" x="1558" y="-204.62" font-family="DejaVu Sans" font-size="13.00">x: int</text> +</g> +<!-- STRUCT_TOP->STRUCT_S1 --> +<g id="edge45" class="edge"> +<title>STRUCT_TOP->STRUCT_S1</title> +<path fill="none" stroke="#555555" d="M1558,-375.71C1558,-340.38 1558,-280.29 1558,-245.36"/> +<polygon fill="#555555" stroke="#555555" points="1560.1,-245.4 1558,-239.4 1555.9,-245.4 1560.1,-245.4"/> +</g> +<!-- STRUCT_S2 --> +<g id="node29" class="node"> +<title>STRUCT_S2</title> +<polygon fill="#90ee90" stroke="black" points="1689,-237.47 1601,-237.47 1601,-196.47 1689,-196.47 1689,-237.47"/> +<text text-anchor="middle" x="1645" y="-221.12" font-family="DejaVu Sans" font-size="13.00">s2</text> +<text text-anchor="middle" x="1645" y="-204.62" font-family="DejaVu Sans" font-size="13.00">x: int, y: flt</text> +</g> +<!-- STRUCT_TOP->STRUCT_S2 --> +<g id="edge46" class="edge"> +<title>STRUCT_TOP->STRUCT_S2</title> +<path fill="none" stroke="#555555" d="M1571.02,-376.11C1587.69,-340.49 1616.35,-279.23 1632.67,-244.33"/> +<polygon fill="#555555" stroke="#555555" points="1634.48,-245.42 1635.12,-239.09 1630.68,-243.64 1634.48,-245.42"/> +</g> +<!-- STRUCT_MORE --> +<g id="node30" class="node"> +<title>STRUCT_MORE</title> +<polygon fill="#90ee90" stroke="black" points="1759,-234.97 1705,-234.97 1705,-198.97 1759,-198.97 1759,-234.97"/> +<text text-anchor="middle" x="1732" y="-212.87" font-family="DejaVu Sans" font-size="13.00">…</text> +</g> +<!-- STRUCT_TOP->STRUCT_MORE --> +<g id="edge47" class="edge"> +<title>STRUCT_TOP->STRUCT_MORE</title> +<path fill="none" stroke="#555555" d="M1582.56,-377.7C1616.8,-341.11 1678.29,-275.38 1710.69,-240.75"/> +<polygon fill="#555555" stroke="#555555" points="1712.04,-242.39 1714.6,-236.57 1708.97,-239.52 1712.04,-242.39"/> +</g> +<!-- STRUCT_TOP->MEM_TOP --> +<!-- STRUCT_BOT --> +<g id="node26" class="node"> +<title>STRUCT_BOT</title> +<ellipse fill="#90ee90" stroke="black" cx="1558" cy="-111.99" rx="82.91" ry="28.99"/> +<text text-anchor="middle" x="1558" y="-116.14" font-family="DejaVu Sans" font-size="13.00">⊥:struct</text> +<text text-anchor="middle" x="1558" y="-99.64" font-family="DejaVu Sans" font-size="13.00">[struct bottom]</text> +</g> +<!-- STRUCT_BOT->BOT --> +<g id="edge79" class="edge"> +<title>STRUCT_BOT->BOT</title> +<path fill="none" stroke="#555555" d="M1495.46,-92.57C1476.09,-86.9 1454.67,-80.66 1435,-75 1376.34,-58.12 1307.78,-38.83 1268.67,-27.86"/> +<polygon fill="#555555" stroke="#555555" points="1269.52,-25.92 1263.17,-26.32 1268.38,-29.96 1269.52,-25.92"/> +</g> +<!-- STRUCT_PERSON->STRUCT_BOT --> +<g id="edge48" class="edge"> +<title>STRUCT_PERSON->STRUCT_BOT</title> +<path fill="none" stroke="#555555" d="M1495.85,-196.12C1506.43,-181.96 1520.92,-162.59 1533.24,-146.11"/> +<polygon fill="#555555" stroke="#555555" points="1534.85,-147.46 1536.76,-141.4 1531.49,-144.94 1534.85,-147.46"/> +</g> +<!-- STRUCT_PERSON->STRUCT_S1 --> +<!-- STRUCT_S1->STRUCT_BOT --> +<g id="edge49" class="edge"> +<title>STRUCT_S1->STRUCT_BOT</title> +<path fill="none" stroke="#555555" d="M1558,-196.12C1558,-182.64 1558,-164.43 1558,-148.49"/> +<polygon fill="#555555" stroke="#555555" points="1560.1,-148.87 1558,-142.87 1555.9,-148.87 1560.1,-148.87"/> +</g> +<!-- STRUCT_S1->STRUCT_S2 --> +<!-- STRUCT_S2->STRUCT_BOT --> +<g id="edge50" class="edge"> +<title>STRUCT_S2->STRUCT_BOT</title> +<path fill="none" stroke="#555555" d="M1628.23,-196.12C1616.16,-181.83 1599.61,-162.25 1585.61,-145.68"/> +<polygon fill="#555555" stroke="#555555" points="1587.43,-144.57 1581.95,-141.34 1584.22,-147.28 1587.43,-144.57"/> +</g> +<!-- STRUCT_S2->STRUCT_MORE --> +<!-- STRUCT_MORE->STRUCT_BOT --> +<g id="edge51" class="edge"> +<title>STRUCT_MORE->STRUCT_BOT</title> +<path fill="none" stroke="#555555" d="M1711.74,-198.76C1707.02,-195.04 1701.93,-191.25 1697,-187.98 1670.12,-170.19 1638.63,-152.93 1612.41,-139.46"/> +<polygon fill="#555555" stroke="#555555" points="1613.52,-137.67 1607.22,-136.81 1611.61,-141.41 1613.52,-137.67"/> +</g> +<!-- MEM_ALIAS2 --> +<g id="node33" class="node"> +<title>MEM_ALIAS2</title> +<ellipse fill="#00008b" stroke="black" cx="1828" cy="-216.97" rx="45.21" ry="18"/> +<text text-anchor="middle" x="1828" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">MEM#2</text> +</g> +<!-- MEM_TOP->MEM_ALIAS2 --> +<g id="edge54" class="edge"> +<title>MEM_TOP->MEM_ALIAS2</title> +<path fill="none" stroke="#555555" d="M1876.11,-386.79C1866.64,-353.58 1845.8,-280.42 1834.92,-242.24"/> +<polygon fill="#555555" stroke="#555555" points="1836.96,-241.75 1833.29,-236.55 1832.92,-242.9 1836.96,-241.75"/> +</g> +<!-- MEM_ALIAS3 --> +<g id="node34" class="node"> +<title>MEM_ALIAS3</title> +<ellipse fill="#00008b" stroke="black" cx="1934" cy="-216.97" rx="45.21" ry="18"/> +<text text-anchor="middle" x="1934" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">MEM#3</text> +</g> +<!-- MEM_TOP->MEM_ALIAS3 --> +<g id="edge55" class="edge"> +<title>MEM_TOP->MEM_ALIAS3</title> +<path fill="none" stroke="#555555" d="M1885.89,-386.79C1895.36,-353.58 1916.2,-280.42 1927.08,-242.24"/> +<polygon fill="#555555" stroke="#555555" points="1929.08,-242.9 1928.71,-236.55 1925.04,-241.75 1929.08,-242.9"/> +</g> +<!-- MEM_MORE --> +<g id="node35" class="node"> +<title>MEM_MORE</title> +<ellipse fill="#00008b" stroke="black" cx="2022" cy="-216.97" rx="27" ry="18"/> +<text text-anchor="middle" x="2022" y="-212.87" font-family="DejaVu Sans" font-size="13.00" fill="white">…</text> +</g> +<!-- MEM_TOP->MEM_MORE --> +<g id="edge56" class="edge"> +<title>MEM_TOP->MEM_MORE</title> +<path fill="none" stroke="#555555" d="M1893.51,-387.45C1919.1,-353.7 1977.4,-276.8 2005.82,-239.32"/> +<polygon fill="#555555" stroke="#555555" points="2007.25,-240.91 2009.2,-234.86 2003.9,-238.37 2007.25,-240.91"/> +</g> +<!-- MEM_TOP->TUPLE_TOP --> +<!-- MEM_BOT --> +<g id="node32" class="node"> +<title>MEM_BOT</title> +<ellipse fill="#00008b" stroke="black" cx="1881" cy="-111.99" rx="44.7" ry="18"/> +<text text-anchor="middle" x="1881" y="-107.89" font-family="DejaVu Sans" font-size="13.00" fill="white">⊥:mem</text> +</g> +<!-- MEM_BOT->BOT --> +<g id="edge80" class="edge"> +<title>MEM_BOT->BOT</title> +<path fill="none" stroke="#555555" d="M1849.72,-98.79C1827.96,-90.8 1798.12,-80.79 1771,-75 1585.39,-35.37 1357.24,-23.36 1271.62,-20.1"/> +<polygon fill="#555555" stroke="#555555" points="1271.85,-18 1265.78,-19.88 1271.7,-22.2 1271.85,-18"/> +</g> +<!-- MEM_ALIAS2->MEM_BOT --> +<g id="edge57" class="edge"> +<title>MEM_ALIAS2->MEM_BOT</title> +<path fill="none" stroke="#555555" d="M1836.75,-198.97C1845.5,-181.97 1859.02,-155.71 1868.81,-136.68"/> +<polygon fill="#555555" stroke="#555555" points="1870.66,-137.66 1871.54,-131.37 1866.93,-135.74 1870.66,-137.66"/> +</g> +<!-- MEM_ALIAS2->MEM_ALIAS3 --> +<!-- MEM_ALIAS3->MEM_BOT --> +<g id="edge58" class="edge"> +<title>MEM_ALIAS3->MEM_BOT</title> +<path fill="none" stroke="#555555" d="M1925.25,-198.97C1916.5,-181.97 1902.98,-155.71 1893.19,-136.68"/> +<polygon fill="#555555" stroke="#555555" points="1895.07,-135.74 1890.46,-131.37 1891.34,-137.66 1895.07,-135.74"/> +</g> +<!-- MEM_ALIAS3->MEM_MORE --> +<!-- MEM_MORE->MEM_BOT --> +<g id="edge59" class="edge"> +<title>MEM_MORE->MEM_BOT</title> +<path fill="none" stroke="#555555" d="M2005.42,-202.39C1999.65,-197.74 1993.09,-192.57 1987,-187.98 1960.93,-168.37 1930.47,-146.96 1908.9,-132.06"/> +<polygon fill="#555555" stroke="#555555" points="1910.17,-130.38 1904.03,-128.71 1907.78,-133.84 1910.17,-130.38"/> +</g> +<!-- TUPLE1 --> +<g id="node38" class="node"> +<title>TUPLE1</title> +<polygon fill="#ffc0cb" stroke="black" points="2128.88,-328.97 2073.12,-328.97 2073.12,-292.97 2128.88,-292.97 2128.88,-328.97"/> +<text text-anchor="middle" x="2101" y="-306.87" font-family="DejaVu Sans" font-size="13.00">(type)</text> +</g> +<!-- TUPLE_TOP->TUPLE1 --> +<g id="edge62" class="edge"> +<title>TUPLE_TOP->TUPLE1</title> +<path fill="none" stroke="#555555" d="M2114.8,-386.65C2112.19,-372.52 2108.47,-352.37 2105.54,-336.56"/> +<polygon fill="#555555" stroke="#555555" points="2107.61,-336.2 2104.46,-330.68 2103.48,-336.96 2107.61,-336.2"/> +</g> +<!-- TUPLE2 --> +<g id="node39" class="node"> +<title>TUPLE2</title> +<polygon fill="#ffc0cb" stroke="black" points="2239,-328.97 2145,-328.97 2145,-292.97 2239,-292.97 2239,-328.97"/> +<text text-anchor="middle" x="2192" y="-306.87" font-family="DejaVu Sans" font-size="13.00">(type, type)</text> +</g> +<!-- TUPLE_TOP->TUPLE2 --> +<g id="edge63" class="edge"> +<title>TUPLE_TOP->TUPLE2</title> +<path fill="none" stroke="#555555" d="M2131.23,-387.51C2143,-372.87 2160.35,-351.31 2173.5,-334.97"/> +<polygon fill="#555555" stroke="#555555" points="2175.06,-336.38 2177.18,-330.39 2171.79,-333.74 2175.06,-336.38"/> +</g> +<!-- TUPLEN --> +<g id="node40" class="node"> +<title>TUPLEN</title> +<polygon fill="#ffc0cb" stroke="black" points="2332.75,-328.97 2255.25,-328.97 2255.25,-292.97 2332.75,-292.97 2332.75,-328.97"/> +<text text-anchor="middle" x="2294" y="-306.87" font-family="DejaVu Sans" font-size="13.00">(type, …)</text> +</g> +<!-- TUPLE_TOP->TUPLEN --> +<g id="edge64" class="edge"> +<title>TUPLE_TOP->TUPLEN</title> +<path fill="none" stroke="#555555" d="M2144.35,-390.18C2173.39,-375.01 2220.42,-350.42 2254.01,-332.87"/> +<polygon fill="#555555" stroke="#555555" points="2254.85,-334.8 2259.2,-330.16 2252.91,-331.07 2254.85,-334.8"/> +</g> +<!-- TUPLE_BOT --> +<g id="node37" class="node"> +<title>TUPLE_BOT</title> +<ellipse fill="#ffc0cb" stroke="black" cx="2155" cy="-111.99" rx="44.7" ry="18"/> +<text text-anchor="middle" x="2155" y="-107.89" font-family="DejaVu Sans" font-size="13.00">⊥:tuple</text> +</g> +<!-- TUPLE_BOT->BOT --> +<g id="edge81" class="edge"> +<title>TUPLE_BOT->BOT</title> +<path fill="none" stroke="#555555" d="M2126.88,-97.69C2108.55,-89.66 2083.87,-80.04 2061,-75 1906.73,-41.03 1407.62,-24.05 1271.54,-19.98"/> +<polygon fill="#555555" stroke="#555555" points="1271.79,-17.89 1265.73,-19.81 1271.67,-22.08 1271.79,-17.89"/> +</g> +<!-- TUPLE1->TUPLE_BOT --> +<g id="edge65" class="edge"> +<title>TUPLE1->TUPLE_BOT</title> +<path fill="none" stroke="#555555" d="M2105.79,-292.49C2115.46,-257.21 2137.33,-177.44 2148.37,-137.19"/> +<polygon fill="#555555" stroke="#555555" points="2150.33,-137.95 2149.9,-131.61 2146.28,-136.84 2150.33,-137.95"/> +</g> +<!-- TUPLE1->TUPLE2 --> +<!-- TUPLE2->TUPLE_BOT --> +<g id="edge66" class="edge"> +<title>TUPLE2->TUPLE_BOT</title> +<path fill="none" stroke="#555555" d="M2188.72,-292.49C2182.12,-257.37 2167.24,-178.17 2159.65,-137.74"/> +<polygon fill="#555555" stroke="#555555" points="2161.73,-137.43 2158.56,-131.92 2157.6,-138.2 2161.73,-137.43"/> +</g> +<!-- TUPLE2->TUPLEN --> +<!-- TUPLEN->TUPLE_BOT --> +<g id="edge67" class="edge"> +<title>TUPLEN->TUPLE_BOT</title> +<path fill="none" stroke="#555555" d="M2281.66,-292.49C2256.44,-256.74 2198.97,-175.3 2170.95,-135.59"/> +<polygon fill="#555555" stroke="#555555" points="2172.76,-134.52 2167.59,-130.83 2169.33,-136.94 2172.76,-134.52"/> +</g> +</g> +</svg> |
