{TT /\ lst + 0 <> 0 /\ lst + 1 <> 0 /\ lst + 2 <> 0 /\ ! hd == 0 | lst + 2 |-> lastcell **  list hd 0 ** lst + 0 |-> hd ** lst + 1 |-> cur}
found <- 0;
lstElem <- hd;
tmp <-* lstElem + 1
{lstElem == hd | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list lstElem 0}{lstElem <> 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem ** lstElem + 0 |-> nxt ** lstElem + 1 |-> tmp}{lstElem == 0 /\ tmp == 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem}



{lstElem == hd /\ ! lstElem <> 0 /\ tmp <> elt | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list lstElem 0}
found <- lstElem
{found <> 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd found ** found + 0 |-> nxt ** found + 1 |-> elt **  list nxt 0}{found == 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd 0}



{lstElem <> 0 /\ ! lstElem <> 0 /\ tmp <> elt | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem ** lstElem + 0 |-> nxt ** lstElem + 1 |-> tmp}
found <- lstElem
{found <> 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd found ** found + 0 |-> nxt ** found + 1 |-> elt **  list nxt 0}{found == 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd 0}

{lstElem == hd /\ lstElem <> 0 /\ tmp <> elt /\ lst + 0 <> 0 /\ lst + 1 <> 0 /\ lst + 2 <> 0 /\ lstElem <> lst + 0 /\ lstElem <> lst + 1 /\ lstElem <> lst + 2 /\ lstElem <> error /\ ! error == 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list error 0 ** lstElem + 1 |->_  ** lstElem |-> error}
lstElem <- error;
tmp <-* lstElem + 1
{lstElem == hd | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list lstElem 0}{lstElem <> 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem ** lstElem + 0 |-> nxt ** lstElem + 1 |-> tmp}{lstElem == 0 /\ tmp == 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem}

{lstElem <> 0 /\ lstElem <> 0 /\ tmp <> elt /\ lst + 0 <> 0 /\ lst + 1 <> 0 /\ lst + 2 <> 0 /\ lstElem + 1 <> 0 /\ lstElem + 1 <> lst + 0 /\ lstElem + 1 <> lst + 1 /\ lstElem + 1 <> lst + 2 /\ lstElem + 0 <> lst + 2 /\ ! nxt == 0 | lstElem + 1 |-> tmp ** lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem ** lstElem + 0 |-> nxt}
lstElem <- nxt;
tmp <-* lstElem + 1
{lstElem == hd | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list lstElem 0}{lstElem <> 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem ** lstElem + 0 |-> nxt ** lstElem + 1 |-> tmp}{lstElem == 0 /\ tmp == 0 | lst + 0 |-> hd ** lst + 1 |-> cur ** lst + 2 |-> lastcell **  list hd lstElem}
