next up previous
Next: Data Structure = Algorithm Up: Mechanizing the Hoare calculus Previous: Verifying abstract program transformations

Verifying incompleteness

M. Wand [6] has presented a data structure tex2html_wrap_inline1894 over which the Hoare calculus is incomplete. From our earlier remarks it follows that tex2html_wrap_inline1894 is not expressive. The signature of tex2html_wrap_inline1894 extends the Boolean signature by

displaymath1886

and the operations are defined on the set tex2html_wrap_inline1900 via

displaymath1887

picture571

Wand considers the following program tex2html_wrap_inline1916 over tex2html_wrap_inline1894 :

displaymath1888

It is obvious that tex2html_wrap_inline1922 , which is the upper copy of tex2html_wrap_inline1924 in the figure, so in particular the Hoare triple tex2html_wrap_inline1926 is valid.

Assuming that this can be proven in the Hoare calculus, we submit the annotated program to NPPV. We have to supply the while-loop with an invariant, which, if it exists, must be a logical expression with at most tex2html_wrap_inline1660 as free variable. NPPV allows us to enter such an ``unknown'' expression, so we enter

 
        { R(x) }
        WHILE not (Z0(x) or Z1(x)) DO  { I(x) }
                x := g(x)
        { Z0(x) }
NPPV generates the following verification conditions
        R(x) => I(x)
        I(x) and not (Z0(x) or Z1(x)) => I(g(x))
        I(x) and Z1(x) => Z0(x)
from which we conclude that I(x) describes the same set as before, namely tex2html_wrap_inline1930 .

Using the Beth-definability theorem[2], Wand shows that the above set is not definable, contradicting the existence of an expression I(x). We shall now give an elementary proof of this result.

definition629

lemma637

proof639

corollary648

proof650



H.Peter Gumm