Lattice cluster_control Control cluster_integer Integer ranges (schematic) cluster_float Float cluster_pointer Pointer = nullability × struct type cluster_struct Struct named collection of named scalar types cluster_memory Memory precise alias slices cluster_tuple Tuple collection of types TOP ⊤ XCTRL ⊤:ctrl TOP->XCTRL INT_TOP ⊤ :int TOP->INT_TOP FLT_TOP ⊤ :flt TOP->FLT_TOP PTR_TOP ⊤:ptr [*⊤:struct] TOP->PTR_TOP STRUCT_TOP ⊤:struct [struct top] TOP->STRUCT_TOP MEM_TOP ⊤:mem TOP->MEM_TOP TUPLE_TOP ⊤:tuple TOP->TUPLE_TOP BOT ⊥ CTRL ⊥:ctrl XCTRL->CTRL CTRL->BOT INT_HI max < min INT_TOP->INT_HI INT_BOT ⊥ :int INT_BOT->BOT INT_XBOOL 1...0 INT_HI->INT_XBOOL INT_CON constants INT_HI->INT_CON INT_CON0 0 INT_XBOOL->INT_CON0 INT_CON1 1 INT_XBOOL->INT_CON1 INT_LO max > min INT_CON->INT_LO INT_BOOL 0...1 INT_CON0->INT_BOOL INT_CON1->INT_BOOL INT_BOOL->INT_LO INT_LO->INT_BOT FLT_CON64 64b consts [excludes 32b consts] FLT_TOP->FLT_CON64 FLT_CONPI 3.14159... FLT_TOP->FLT_CONPI FLT_X32 ~f32 FLT_TOP->FLT_X32 FLT_BOT ⊥ :flt FLT_BOT->BOT FLT_CON64->FLT_BOT FLT_CON32 32b consts FLT_32 f32 FLT_CON32->FLT_32 FLT_CONPI->FLT_BOT FLT_X32->FLT_CON32 FLT_CON0 0. FLT_X32->FLT_CON0 FLT_CON0->FLT_32 FLT_32->FLT_BOT PTR_NULL null PTR_TOP->PTR_NULL PTR_PERSON *Person PTR_TOP->PTR_PERSON PTR_S1 *s1 PTR_TOP->PTR_S1 PTR_MORE *s2, … PTR_TOP->PTR_MORE PTR_BOT ⊥:ptr [*⊥:struct?] PTR_BOT->BOT PTR_PERSON_NIL *Person? PTR_NULL->PTR_PERSON_NIL PTR_S1_NIL *s1? PTR_NULL->PTR_S1_NIL PTR_MORE_NIL *s2?, … PTR_NULL->PTR_MORE_NIL PTR_ANY *⊥:struct [ptr any struct] PTR_ANY->PTR_BOT PTR_PERSON->PTR_ANY PTR_PERSON->PTR_PERSON_NIL PTR_S1->PTR_ANY PTR_S1->PTR_S1_NIL PTR_MORE->PTR_ANY PTR_MORE->PTR_MORE_NIL PTR_PERSON_NIL->PTR_BOT PTR_S1_NIL->PTR_BOT PTR_MORE_NIL->PTR_BOT STRUCT_PERSON Person age: int STRUCT_TOP->STRUCT_PERSON STRUCT_S1 s1 x: int STRUCT_TOP->STRUCT_S1 STRUCT_S2 s2 x: int, y: *s1 STRUCT_TOP->STRUCT_S2 STRUCT_MORE … STRUCT_TOP->STRUCT_MORE STRUCT_BOT ⊥:struct [struct bottom] STRUCT_BOT->BOT STRUCT_PERSON->STRUCT_BOT STRUCT_S1->STRUCT_BOT STRUCT_S2->STRUCT_BOT STRUCT_MORE->STRUCT_BOT MEM_ALIAS2 MEM#2 MEM_TOP->MEM_ALIAS2 MEM_ALIAS3 MEM#3 MEM_TOP->MEM_ALIAS3 MEM_MORE … MEM_TOP->MEM_MORE MEM_BOT ⊥:mem MEM_BOT->BOT MEM_ALIAS2->MEM_BOT MEM_ALIAS3->MEM_BOT MEM_MORE->MEM_BOT TUPLE1 tuple type TUPLE_TOP->TUPLE1 TUPLE2 tuple type type TUPLE_TOP->TUPLE2 TUPLEN tuple type … type TUPLE_TOP->TUPLEN TUPLE_BOT ⊥:tuple TUPLE_BOT->BOT TUPLE1->TUPLE_BOT TUPLE2->TUPLE_BOT TUPLEN->TUPLE_BOT