transition invariant checking

In order to validate  as a transition invariant of a loop, that is , we can transform the program and check for reachability.


the original program:

while c :
    body

transformed program:

 dup = false;
 while c:
    if dup:
        if not (f1 (x1',...,xn') > f1(x1,...,xn) and f1(x1',...,xn') >= 0):
        ......
            if not (fk(x1',...,xn') > fk(x1, ..., xn) and fk(x1',..., xn') >= 0):
                ERROR:skip
    if not _dup and *:
        x1' = x1;...;xn'=xn
        dup =True
    B

where  is the corresponding ranking function of