
{lst <> 0 /\ tmp == first /\ tmp <> 0 /\ first <> 0 /\ current <> 0 /\ last <> 0 | 
(lst |-> first) ** (lst+1 |-> current) ** (lst+2 |-> last) ** 
(list first current) ** (list current last) ** (last |-> 0) ** (last+1 |-> data) ** 
(elem |->_) ** (elem+1 |->_)}

                [elem+0] := 0;
                tmp := [lst+2];
                [tmp+0] := elem;
                [elem+1] := data2

{first <> 0 /\ current <> 0 /\ last <> 0 | 
(lst |-> first) ** (lst+1 |-> current) ** (lst+2 |-> elem) ** 
(list first current) ** (list current elem) ** 
(elem |-> 0) ** (elem+1 |-> data2)}
