A method for verifying software source code that includes references to
program variables includes processing the source code to derive a set of
next-state functions representing control flow of the source code. The
references to the program variables in the source code are replaced with
non-deterministic choices in the next-state functions. The next-state
functions including the non-deterministic choices are restricted to
produce a finite-state model of the control flow. The finite-state model
is then verified to find an error in the source code.