{ lst == 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 |->_)}
        
        skip

{TT | (lst |-> first) ** (lst+1 |-> current) ** (lst+2 |-> elem) ** (list first current) ** (list current elem) ** (elem |-> 0) ** (elem+1 |-> data2)}




{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] := tmp;
                [lst+0] := elem;
                [elem+1] := data2

{TT | (lst |-> first) ** (lst+1 |-> current) ** (lst+2 |-> elem) ** (list first current) ** (list current elem) ** (elem |-> 0) ** (elem+1 |-> data2)}

