State :: mem : map ADDR to CON
access : setof ADDR
used : setof ADDR
inv mk_State(mem,access,used) == used = dom mem;
functions
Safe : State -> bool
Safe (mk_State(-,access,used)) ==
used subset access;
Alloc : ADDR * State -> State
Alloc (addr,mk_State(mem,access,used)) == let used' = used union {addr},
mem' = mem ++ {addr |-> let c:CON in c} in
mk_State(mem',access,used') pre addr notinset used;
Alloc2 : ADDR * State -> State
Alloc2 (addr,mk_State(mem,access,used)) == let used' = used union {addr}, -- mem' = mem ++ {addr |-> <c0>}
mem' = mem munion {addr |-> let c:CON in c} in
mk_State(mem',access,used') pre addr notinset used and
addr inset access;
Alloc20 : ADDR * State -> State
Alloc20 (addr,mk_State(mem,access,used)) == let used' = used union {addr},
mem' = mem ++ {addr |-> } in
mk_State(mem',access,used') pre addr notinset used and
addr inset access;
Alloc21 : ADDR * State -> State
Alloc21 (addr,mk_State(-,access,used)) == let used' = used union {addr}, -- mem' = mem ++ {addr |-> <c0>}
mem' = {addr |-> let c:CON in c} in
mk_State(mem',access,used') pre addr notinset used and
addr inset access;
Alloc3 : ADDR * State * map ADDR to CON -> State
Alloc3 (addr,mk_State(mem,access,used),mem2) == let used' = used union {addr}, -- mem' = mem ++ {addr |-> <c0>}
mem' = mem munion {addr |-> let c:CON in c} in
mk_State(mem',access,used') pre addr notinset used and
addr inset access post mem2 = mem munion {addr |-> let c:CON in c};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.