From 34766f1a2e9e60626eb1bd5a08140fc41a3770c8 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Tue, 26 Nov 2024 17:00:45 -0800 Subject: Upgrades to the Type lattice diagrams --- chapter04/docs/lattice.gv | 29 +- chapter04/docs/lattice.svg | 390 ++++++++-------- chapter06/docs/lattice.gv | 29 +- chapter06/docs/lattice.svg | 412 ++++++++--------- chapter10/docs/lattice.gv | 210 +++++---- chapter10/docs/lattice.svg | 1052 +++++++++++++++++++++++--------------------- 6 files changed, 1105 insertions(+), 1017 deletions(-) diff --git a/chapter04/docs/lattice.gv b/chapter04/docs/lattice.gv index 1f286530..29a53b0a 100644 --- a/chapter04/docs/lattice.gv +++ b/chapter04/docs/lattice.gv @@ -4,13 +4,13 @@ digraph Lattice { node [shape=circle, style=filled, fillcolor=lightblue]; nodesep=0.6; - TOP [label="⊤"]; - BOT [label="⊥"]; + TOP [label="⊤" , fillcolor=black, fontcolor=white]; + BOT [label="⊥", fillcolor=black, fontcolor=white]; - CTRL [label="Ctrl"]; + CTRL [label="Ctrl", fillcolor=yellow]; - INT_TOP [label="IntTop"]; - INT_BOT [label="IntBot"]; + INT_TOP [label="⊤ :Int"]; + INT_BOT [label="⊥ :Int"]; INT_MIN [label="-n"]; INT_MINDOTS [label="..." shape=none style=none]; @@ -20,7 +20,7 @@ digraph Lattice { INT_MAXDOTS [label="..." shape=none style=none]; INT_MAX [label="+n"]; - TUPLE [label="TUPLE"]; + TUPLE [label="TUPLE", fillcolor=pink]; // Define edges edge [arrowhead=none]; @@ -44,20 +44,21 @@ digraph Lattice { INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis]; - TOP -> TUPLE; - TUPLE -> BOT; + TOP -> TUPLE; + TUPLE -> BOT; - TOP -> CTRL; - CTRL -> BOT; + TOP -> CTRL; + CTRL -> BOT; // Additional customization {rank=same; TOP} {rank=same; INT_TOP} - {rank=same; CTRL; INT_MIN; INT_MINDOTS; - INT_MINUS; INT_ZERO; - INT_PLUS; INT_MAXDOTS; - INT_MAX; TUPLE} + {rank=same; + CTRL; + INT_MIN; INT_MINDOTS; INT_MINUS; INT_ZERO; INT_PLUS; INT_MAXDOTS; INT_MAX; + TUPLE + } {rank=same; INT_BOT} {rank=same; BOT;} } diff --git a/chapter04/docs/lattice.svg b/chapter04/docs/lattice.svg index 0d403c20..1cab7681 100644 --- a/chapter04/docs/lattice.svg +++ b/chapter04/docs/lattice.svg @@ -1,195 +1,195 @@ - - - - - - -Lattice - - - -TOP - -⊤ - - - -CTRL - -Ctrl - - - -TOP->CTRL - - - - -INT_TOP - -IntTop - - - -TOP->INT_TOP - - - - -TUPLE - -TUPLE - - - -TOP->TUPLE - - - - -BOT - -⊥ - - - -CTRL->BOT - - - - -INT_MIN - --n - - - -INT_TOP->INT_MIN - - - - -INT_MINDOTS -... - - - -INT_TOP->INT_MINDOTS - - - - -INT_MINUS - --1 - - - -INT_TOP->INT_MINUS - - - - -INT_ZERO - -0 - - - -INT_TOP->INT_ZERO - - - - -INT_PLUS - -1 - - - -INT_TOP->INT_PLUS - - - - -INT_MAXDOTS -... - - - -INT_TOP->INT_MAXDOTS - - - - -INT_MAX - -+n - - - -INT_TOP->INT_MAX - - - - -INT_BOT - -IntBot - - - -INT_BOT->BOT - - - - -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 - - - - -TUPLE->BOT - - - - + + + + + + +Lattice + + + +TOP + +⊤ + + + +CTRL + +Ctrl + + + +TOP->CTRL + + + + +INT_TOP + +⊤ :Int + + + +TOP->INT_TOP + + + + +TUPLE + +TUPLE + + + +TOP->TUPLE + + + + +BOT + +⊥ + + + +CTRL->BOT + + + + +INT_MIN + +-n + + + +INT_TOP->INT_MIN + + + + +INT_MINDOTS +... + + + +INT_TOP->INT_MINDOTS + + + + +INT_MINUS + +-1 + + + +INT_TOP->INT_MINUS + + + + +INT_ZERO + +0 + + + +INT_TOP->INT_ZERO + + + + +INT_PLUS + +1 + + + +INT_TOP->INT_PLUS + + + + +INT_MAXDOTS +... + + + +INT_TOP->INT_MAXDOTS + + + + +INT_MAX + ++n + + + +INT_TOP->INT_MAX + + + + +INT_BOT + +⊥ :Int + + + +INT_BOT->BOT + + + + +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 + + + + +TUPLE->BOT + + + + diff --git a/chapter06/docs/lattice.gv b/chapter06/docs/lattice.gv index e533ad4a..782c2253 100644 --- a/chapter06/docs/lattice.gv +++ b/chapter06/docs/lattice.gv @@ -4,24 +4,24 @@ digraph Lattice { node [shape=circle, style=filled, fillcolor=lightblue]; nodesep=0.6; - TOP [label="⊤"]; - BOT [label="⊥"]; + TOP [label="⊤" , fillcolor=black, fontcolor=white]; + BOT [label="⊥", fillcolor=black, fontcolor=white]; - XCTRL [label="~Ctrl"]; - CTRL [label="Ctrl"]; + XCTRL [label="⊤ :Ctrl", fillcolor=yellow]; + CTRL [label="⊥ :Ctrl", fillcolor=yellow]; - INT_TOP [label="IntTop"]; - INT_BOT [label="IntBot"]; + INT_TOP [label="⊤ :Int"]; + INT_BOT [label="⊥ :Int"]; INT_MIN [label="-n"]; - INT_MINDOTS [label="..." shape=none style=none]; INT_MINUS [label="-1"]; + INT_MINDOTS [label="..." shape=none style=none]; INT_ZERO [label="0"]; INT_PLUS [label="1"]; INT_MAXDOTS [label="..." shape=none style=none]; INT_MAX [label="+n"]; - TUPLE [label="TUPLE"]; + TUPLE [label="TUPLE", fillcolor=pink]; // Define edges edge [arrowhead=none]; @@ -45,20 +45,17 @@ digraph Lattice { INT_MIN -> INT_MINDOTS -> INT_MINUS -> INT_ZERO -> INT_PLUS -> INT_MAXDOTS -> INT_MAX [style=invis]; - TOP -> TUPLE; - TUPLE -> BOT; + TOP -> TUPLE; + TUPLE -> BOT; - TOP -> XCTRL; + TOP -> XCTRL; XCTRL -> CTRL; - CTRL -> BOT; + CTRL -> BOT; // Additional customization {rank=same; TOP} {rank=same; INT_TOP; XCTRL} - {rank=same; INT_MIN; INT_MINDOTS; - INT_MINUS; INT_ZERO; - INT_PLUS; INT_MAXDOTS; - INT_MAX; TUPLE} + {rank=same; INT_MIN; INT_MINDOTS; INT_MINUS; INT_ZERO; INT_PLUS; INT_MAXDOTS; INT_MAX; TUPLE } {rank=same; INT_BOT; CTRL} {rank=same; BOT;} } diff --git a/chapter06/docs/lattice.svg b/chapter06/docs/lattice.svg index 713b54c1..f4929b41 100644 --- a/chapter06/docs/lattice.svg +++ b/chapter06/docs/lattice.svg @@ -1,206 +1,206 @@ - - - - - - -Lattice - - - -TOP - -⊤ - - - -XCTRL - -~Ctrl - - - -TOP->XCTRL - - - - -INT_TOP - -IntTop - - - -TOP->INT_TOP - - - - -TUPLE - -TUPLE - - - -TOP->TUPLE - - - - -BOT - -⊥ - - - -CTRL - -Ctrl - - - -XCTRL->CTRL - - - - -CTRL->BOT - - - - -INT_MIN - --n - - - -INT_TOP->INT_MIN - - - - -INT_MINDOTS -... - - - -INT_TOP->INT_MINDOTS - - - - -INT_MINUS - --1 - - - -INT_TOP->INT_MINUS - - - - -INT_ZERO - -0 - - - -INT_TOP->INT_ZERO - - - - -INT_PLUS - -1 - - - -INT_TOP->INT_PLUS - - - - -INT_MAXDOTS -... - - - -INT_TOP->INT_MAXDOTS - - - - -INT_MAX - -+n - - - -INT_TOP->INT_MAX - - - - -INT_BOT - -IntBot - - - -INT_BOT->BOT - - - - -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 - - - - -TUPLE->BOT - - - - + + + + + + +Lattice + + + +TOP + +⊤ + + + +XCTRL + +⊤ :Ctrl + + + +TOP->XCTRL + + + + +INT_TOP + +⊤ :Int + + + +TOP->INT_TOP + + + + +TUPLE + +TUPLE + + + +TOP->TUPLE + + + + +BOT + +⊥ + + + +CTRL + +⊥ :Ctrl + + + +XCTRL->CTRL + + + + +CTRL->BOT + + + + +INT_MIN + +-n + + + +INT_TOP->INT_MIN + + + + +INT_MINUS + +-1 + + + +INT_TOP->INT_MINUS + + + + +INT_MINDOTS +... + + + +INT_TOP->INT_MINDOTS + + + + +INT_ZERO + +0 + + + +INT_TOP->INT_ZERO + + + + +INT_PLUS + +1 + + + +INT_TOP->INT_PLUS + + + + +INT_MAXDOTS +... + + + +INT_TOP->INT_MAXDOTS + + + + +INT_MAX + ++n + + + +INT_TOP->INT_MAX + + + + +INT_BOT + +⊥ :Int + + + +INT_BOT->BOT + + + + +INT_MIN->INT_BOT + + + + + +INT_MINUS->INT_BOT + + + + + +INT_MINDOTS->INT_BOT + + + + + +INT_ZERO->INT_BOT + + + + + +INT_PLUS->INT_BOT + + + + + +INT_MAXDOTS->INT_BOT + + + + + +INT_MAX->INT_BOT + + + + +TUPLE->BOT + + + + diff --git a/chapter10/docs/lattice.gv b/chapter10/docs/lattice.gv index c074f1a4..5ac1bd5a 100644 --- a/chapter10/docs/lattice.gv +++ b/chapter10/docs/lattice.gv @@ -1,56 +1,32 @@ digraph Lattice { + compound = true; // Define nodes splines=false; - node [shape=circle, style=filled, fillcolor=lightblue]; + node [shape=circle, style=filled]; nodesep=0.6; - TOP [label="⊤"]; - BOT [label="⊥"]; - - XCTRL [label="~Ctrl"]; - CTRL [label="Ctrl"]; - - INT_TOP [label="IntTop"]; - INT_BOT [label="IntBot"]; - - INT_MIN [label="-n"]; - INT_MINDOTS [label="..." shape=none style=none]; - INT_ZERO [label="0"]; - INT_MAXDOTS [label="..." shape=none style=none]; - INT_MAX [label="+n"]; - - TUPLE [label="TUPLE"]; - - STRUCT_TOP [label="$TOP"]; - STRUCT_S1 [label="S1"]; - STRUCT_DOTS [label="..." shape=none style=none]; - STRUCT_SN [label="Sn"]; - STRUCT_BOT [label="$BOT"] - - PTR_TOP [label="*$TOP"]; - PTR_NULL [label="null"]; - PTR_VOIDPTR [label="*void"]; - PTR_S1 [label="*S1"]; - PTR_SDOTS [label="..." shape=none style=none]; - PTR_SN [label="*SN"]; - PTR_S1OPT [label="*S1?"]; - PTR_SOPTDOTS [label="..." shape=none style=none]; - PTR_SNOPT [label="*SN?"]; - PTR_BOT [label="*$BOT?"]; - - MEM_TOP [label="MEM#TOP"]; - MEM_ALIAS1 [label="#1"]; - MEM_ALIAS2 [label="#2"]; - MEM_ALIASDOTS [label="..." shape=none style=none]; - MEM_ALIASN [label="#n"]; - MEM_BOT [label="MEM#BOT"]; - - // Define edges - edge [arrowhead=none]; - - TOP -> XCTRL; + TOP [label=<⊤ >, fillcolor=black, fontcolor=white]; + BOT [label=<⊥>, fillcolor=black, fontcolor=white]; + + // ---------------------- + // Control + XCTRL [label=<⊤ :ctrl>, fillcolor=yellow, shape=oval]; + CTRL [label=<⊥:ctrl>, fillcolor=yellow, shape=oval]; + + TOP -> XCTRL; XCTRL -> CTRL; - CTRL -> BOT; + CTRL -> BOT; + + // ---------------------- + // Integers + INT_TOP [label=<⊤ :int>, fillcolor=lightblue, shape=oval]; + INT_BOT [label=<⊥:int>, fillcolor=lightblue, shape=oval]; + + INT_MIN [label="-n" , fillcolor=lightblue]; + INT_MINDOTS [label="...", fillcolor=lightblue, shape=oval]; + INT_ZERO [label="0" , fillcolor=lightblue]; + INT_MAXDOTS [label="...", fillcolor=lightblue, shape=oval]; + INT_MAX [label="+n" , fillcolor=lightblue]; TOP -> INT_TOP; INT_TOP -> INT_MIN; @@ -67,69 +43,127 @@ digraph Lattice { INT_MIN -> INT_MINDOTS -> INT_ZERO -> INT_MAXDOTS -> INT_MAX [style=invis]; - TOP -> TUPLE; - TUPLE -> BOT; + // ---------------------- + // Pointers, just a boolean nil/not and a struct + PTR [shape=none, fillcolor=none, label=< + + + +
*ptr
struct
+ >]; + PTR0 [shape=none, fillcolor=none, label=< + + + +
*ptr?
struct
+ >]; + + TOP -> PTR; + PTR -> PTR0; + PTR0 -> BOT; + + // ---------------------- + // Structs + STRUCT_TOP [label=<⊤:struct>, fillcolor=lightgreen, shape=oval]; + + STRUCT_S1 [shape=none, fillcolor=none, label=< + + +
fieldint:ptr
+ >]; + STRUCT_S2 [shape=none, fillcolor=none, label=< + + + +
fieldint:ptr
fieldint:ptr
+ >]; + STRUCT_SN [shape=none, fillcolor=none, label=< + + + + +
fieldint:ptr
... int:ptr
fieldint:ptr
+ >]; + + STRUCT_BOT [label=<⊥:struct>, fillcolor=lightgreen, shape=oval] TOP -> STRUCT_TOP; STRUCT_TOP -> STRUCT_S1; - STRUCT_TOP -> STRUCT_DOTS; + STRUCT_TOP -> STRUCT_S2; STRUCT_TOP -> STRUCT_SN; STRUCT_S1 -> STRUCT_BOT; - STRUCT_DOTS -> STRUCT_BOT; + STRUCT_S2 -> STRUCT_BOT; STRUCT_SN -> STRUCT_BOT; STRUCT_BOT -> BOT; - STRUCT_S1 -> STRUCT_DOTS -> STRUCT_SN [style=invis]; - - TOP -> PTR_TOP; - PTR_TOP -> PTR_S1; - PTR_TOP -> PTR_SDOTS; - PTR_TOP -> PTR_SN; - PTR_TOP -> PTR_NULL; - PTR_TOP -> PTR_VOIDPTR; - PTR_NULL -> PTR_BOT; - PTR_NULL -> PTR_S1OPT; - PTR_NULL -> PTR_SOPTDOTS; - PTR_NULL -> PTR_SNOPT; - PTR_S1 -> PTR_S1OPT; - PTR_S1 -> PTR_VOIDPTR; - PTR_SDOTS -> PTR_SOPTDOTS; - PTR_SDOTS -> PTR_VOIDPTR; - PTR_SN -> PTR_SNOPT; - PTR_SN -> PTR_VOIDPTR; - PTR_VOIDPTR -> PTR_BOT; - PTR_S1OPT -> PTR_BOT; - PTR_SOPTDOTS -> PTR_BOT; - PTR_SNOPT -> PTR_BOT; - PTR_BOT -> BOT; - - PTR_S1 -> PTR_SDOTS -> PTR_SN [style=invis]; - PTR_S1OPT -> PTR_SOPTDOTS -> PTR_SNOPT [style=invis]; + STRUCT_S1 -> STRUCT_S2 -> STRUCT_SN [style=invis]; + + // ---------------------- + // Memory + MEM_TOP [label=<⊤:mem>, fillcolor=blue, fontcolor=white, shape=oval]; + MEM_ALIAS1 [label="#1" , fillcolor=blue, fontcolor=white]; + MEM_ALIASDOTS [label="..." , fillcolor=blue, fontcolor=white, shape=oval]; + MEM_ALIASN [label="#n" , fillcolor=blue, fontcolor=white]; + MEM_BOT [label=<⊥:mem>, fillcolor=blue, fontcolor=white, shape=oval]; TOP -> MEM_TOP; MEM_TOP -> MEM_ALIAS1; - MEM_TOP -> MEM_ALIAS2; MEM_TOP -> MEM_ALIASDOTS; MEM_TOP -> MEM_ALIASN; MEM_ALIAS1 -> MEM_BOT; - MEM_ALIAS2 -> MEM_BOT; MEM_ALIASDOTS -> MEM_BOT; MEM_ALIASN -> MEM_BOT; MEM_BOT -> BOT; - MEM_ALIAS1 -> MEM_ALIAS2 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis]; - + MEM_ALIAS1 -> MEM_ALIASDOTS -> MEM_ALIASN [style=invis]; + + // ---------------------- + // Tuples + + TUPLE_TOP [label=<⊤:tuple>, fillcolor=pink, shape=oval]; + + TUPLE1 [shape=none, fillcolor=none, label=< + + + +
Tuple
type
+ >]; + TUPLE2 [shape=none, fillcolor=none, label=< + + + + +
Tuple
type
type
+ >]; + TUPLEN [shape=none, fillcolor=none, label=< + + + + + +
Tuple
type
...
type
+ >]; + + TUPLE_BOT [label=<⊥:tuple>, fillcolor=pink, shape=oval]; + + TOP -> TUPLE_TOP; + TUPLE_TOP -> TUPLE1; + TUPLE_TOP -> TUPLE2; + TUPLE_TOP -> TUPLEN; + TUPLE1 -> TUPLE_BOT; + TUPLE2 -> TUPLE_BOT; + TUPLEN -> TUPLE_BOT; + TUPLE_BOT -> BOT; + + // ---------------------- // Additional customization {rank=same; TOP;} - {rank=same; INT_TOP; XCTRL; STRUCT_TOP; PTR_TOP; MEM_TOP;} - {rank=same; PTR_S1; PTR_SDOTS; PTR_SN;} + {rank=same; INT_TOP; XCTRL; STRUCT_TOP; MEM_TOP; TUPLE_TOP} {rank=same; INT_MIN; INT_MINDOTS; INT_ZERO; INT_MAXDOTS; - INT_MAX; TUPLE; STRUCT_S1; STRUCT_DOTS; STRUCT_SN; - PTR_NULL; PTR_VOIDPTR; - MEM_ALIAS1; MEM_ALIAS2; + INT_MAX; STRUCT_S1; STRUCT_S2; STRUCT_SN; + MEM_ALIAS1; MEM_ALIASDOTS; MEM_ALIASN;} - {rank=same; PTR_S1OPT; PTR_SOPTDOTS; PTR_SNOPT; } - {rank=same; INT_BOT; CTRL; STRUCT_BOT; PTR_BOT; MEM_BOT;} + {rank=same; INT_BOT; CTRL; STRUCT_BOT; MEM_BOT; TUPLE_BOT} {rank=same; BOT;} } diff --git a/chapter10/docs/lattice.svg b/chapter10/docs/lattice.svg index 2fe05bbf..02f3ce69 100644 --- a/chapter10/docs/lattice.svg +++ b/chapter10/docs/lattice.svg @@ -1,498 +1,554 @@ - - - - - - -Lattice - - - -TOP - -⊤ - - - -XCTRL - -~Ctrl - - - -TOP->XCTRL - - - - -INT_TOP - -IntTop - - - -TOP->INT_TOP - - - - -TUPLE - -TUPLE - - - -TOP->TUPLE - - - - -STRUCT_TOP - -$TOP - - - -TOP->STRUCT_TOP - - - - -PTR_TOP - -*$TOP - - - -TOP->PTR_TOP - - - - -MEM_TOP - -MEM#TOP - - - -TOP->MEM_TOP - - - - -BOT - -⊥ - - - -CTRL - -Ctrl - - - -XCTRL->CTRL - - - - -CTRL->BOT - - - - -INT_MIN - --n - - - -INT_TOP->INT_MIN - - - - -INT_MINDOTS -... - - - -INT_TOP->INT_MINDOTS - - - - -INT_ZERO - -0 - - - -INT_TOP->INT_ZERO - - - - -INT_MAXDOTS -... - - - -INT_TOP->INT_MAXDOTS - - - - -INT_MAX - -+n - - - -INT_TOP->INT_MAX - - - - -INT_BOT - -IntBot - - - -INT_BOT->BOT - - - - -INT_MIN->INT_BOT - - - - - -INT_MINDOTS->INT_BOT - - - - - -INT_ZERO->INT_BOT - - - - - -INT_MAXDOTS->INT_BOT - - - - - -INT_MAX->INT_BOT - - - - -TUPLE->BOT - - - - -STRUCT_S1 - -S1 - - - -STRUCT_TOP->STRUCT_S1 - - - - -STRUCT_DOTS -... - - - -STRUCT_TOP->STRUCT_DOTS - - - - -STRUCT_SN - -Sn - - - -STRUCT_TOP->STRUCT_SN - - - - - -STRUCT_BOT - -$BOT - - - -STRUCT_S1->STRUCT_BOT - - - - - -STRUCT_DOTS->STRUCT_BOT - - - - -STRUCT_SN->STRUCT_BOT - - - - -STRUCT_BOT->BOT - - - - -PTR_NULL - -null - - - -PTR_TOP->PTR_NULL - - - - -PTR_VOIDPTR - -*void - - - -PTR_TOP->PTR_VOIDPTR - - - - -PTR_S1 - -*S1 - - - -PTR_TOP->PTR_S1 - - - - -PTR_SDOTS -... - - - -PTR_TOP->PTR_SDOTS - - - - -PTR_SN - -*SN - - - -PTR_TOP->PTR_SN - - - - -PTR_S1OPT - -*S1? - - - -PTR_NULL->PTR_S1OPT - - - - -PTR_SOPTDOTS -... - - - -PTR_NULL->PTR_SOPTDOTS - - - - -PTR_SNOPT - -*SN? - - - -PTR_NULL->PTR_SNOPT - - - - -PTR_BOT - -*$BOT? - - - -PTR_NULL->PTR_BOT - - - - -PTR_VOIDPTR->PTR_BOT - - - - -PTR_S1->PTR_VOIDPTR - - - - - -PTR_S1->PTR_S1OPT - - - - -PTR_SDOTS->PTR_VOIDPTR - - - - - -PTR_SDOTS->PTR_SOPTDOTS - - - - -PTR_SN->PTR_VOIDPTR - - - - -PTR_SN->PTR_SNOPT - - - - - -PTR_S1OPT->PTR_BOT - - - - - -PTR_SOPTDOTS->PTR_BOT - - - - -PTR_SNOPT->PTR_BOT - - - - -PTR_BOT->BOT - - - - -MEM_ALIAS1 - -#1 - - - -MEM_TOP->MEM_ALIAS1 - - - - -MEM_ALIAS2 - -#2 - - - -MEM_TOP->MEM_ALIAS2 - - - - -MEM_ALIASDOTS -... - - - -MEM_TOP->MEM_ALIASDOTS - - - - -MEM_ALIASN - -#n - - - -MEM_TOP->MEM_ALIASN - - - - - -MEM_BOT - -MEM#BOT - - - -MEM_ALIAS1->MEM_BOT - - - - - -MEM_ALIAS2->MEM_BOT - - - - - -MEM_ALIASDOTS->MEM_BOT - - - - -MEM_ALIASN->MEM_BOT - - - - -MEM_BOT->BOT - - - - + + + + + + +Lattice + + + +TOP + +⊤ + + + +XCTRL + +⊤ +:ctrl + + + +TOP->XCTRL + + + + + +INT_TOP + +⊤ +:int + + + +TOP->INT_TOP + + + + + +PTR + + + +*ptr + + +struct + + + +TOP->PTR + + + + + +STRUCT_TOP + +⊤ +:struct + + + +TOP->STRUCT_TOP + + + + + +MEM_TOP + +⊤ +:mem + + + +TOP->MEM_TOP + + + + + +TUPLE_TOP + +⊤ +:tuple + + + +TOP->TUPLE_TOP + + + + + +BOT + +⊥ + + + +CTRL + +⊥ +:ctrl + + + +XCTRL->CTRL + + + + + +CTRL->BOT + + + + + +INT_MIN + +-n + + + +INT_TOP->INT_MIN + + + + + +INT_MINDOTS + +... + + + +INT_TOP->INT_MINDOTS + + + + + +INT_ZERO + +0 + + + +INT_TOP->INT_ZERO + + + + + +INT_MAXDOTS + +... + + + +INT_TOP->INT_MAXDOTS + + + + + +INT_MAX + ++n + + + +INT_TOP->INT_MAX + + + + + +INT_BOT + +⊥ +:int + + + +INT_BOT->BOT + + + + + +INT_MIN->INT_BOT + + + + + + +INT_MINDOTS->INT_BOT + + + + + + +INT_ZERO->INT_BOT + + + + + + +INT_MAXDOTS->INT_BOT + + + + + + +INT_MAX->INT_BOT + + + + + +PTR0 + + + +*ptr? + + +struct + + + +PTR->PTR0 + + + + + +PTR0->BOT + + + + + +STRUCT_S1 + + + +field + + + + + + + + +int:ptr + + + +STRUCT_TOP->STRUCT_S1 + + + + + +STRUCT_S2 + + + +field + + + + + + + + +int:ptr + + +field + + + + + + + + +int:ptr + + + +STRUCT_TOP->STRUCT_S2 + + + + + +STRUCT_SN + + + +field + + + + + + + + +int:ptr + + +...   + + + + + + + + +int:ptr + + +field + + + + + + + + +int:ptr + + + +STRUCT_TOP->STRUCT_SN + + + + + + +STRUCT_BOT + +⊥ +:struct + + + +STRUCT_S1->STRUCT_BOT + + + + + + +STRUCT_S2->STRUCT_BOT + + + + + +STRUCT_SN->STRUCT_BOT + + + + + +STRUCT_BOT->BOT + + + + + +MEM_ALIAS1 + +#1 + + + +MEM_TOP->MEM_ALIAS1 + + + + + +MEM_ALIASDOTS + +... + + + +MEM_TOP->MEM_ALIASDOTS + + + + + +MEM_ALIASN + +#n + + + +MEM_TOP->MEM_ALIASN + + + + + + +MEM_BOT + +⊥ +:mem + + + +MEM_ALIAS1->MEM_BOT + + + + + + +MEM_ALIASDOTS->MEM_BOT + + + + + +MEM_ALIASN->MEM_BOT + + + + + +MEM_BOT->BOT + + + + + +TUPLE1 + + + +Tuple + + +type + + + +TUPLE_TOP->TUPLE1 + + + + + +TUPLE2 + + + +Tuple + + +type + + +type + + + +TUPLE_TOP->TUPLE2 + + + + + +TUPLEN + + + +Tuple + + +type + + +... + + +type + + + +TUPLE_TOP->TUPLEN + + + + + +TUPLE_BOT + +⊥ +:tuple + + + +TUPLE1->TUPLE_BOT + + + + + +TUPLE2->TUPLE_BOT + + + + + +TUPLEN->TUPLE_BOT + + + + + +TUPLE_BOT->BOT + + + + + -- cgit v1.2.3