Andrew Lentvorski wrote:
All you are verifying is that for any state S, there exists a way to leave that state. That's not that hard a problem. Tedious, yes, but not hard.

No. Actually, it's so tedious, it's extremely difficult, even for computers. It's an exponential problem, which works well only for very small problems. His sample has two processes, each of which executes two instructions, and he winds up with 45 states. 7 incrementers, each running one instruction, takes 675 megabytes of memory to track.

Now go verify a multi-user FTP server, including modeling the file system.

Look at peculiarity number five: "Don't make loops. Especially infinite loops." Not very useful for describing servers.

Look at "Promela coding tricks": All of them are descriptions of (essentially) unrealistic ways to reduce state space explosion.

Go down to "Running the QRCU example." His QRCU looks like about 100 lines of C-level code. He guesses that having three readers and three writers takes about a terabyte of memory. Tedious, but not difficult.

While it's difficult to be sure, I don't see any actual counters in the body of algorithms. Nothing like "serve this if there are five or fewer users connected, or that if there are more than five." This too leads to tremendous state-space explosion.

Plus, once it's written, there doesn't seem to be much you can do with it. It might be interesting to verify things like your mutex lock subroutine is valid, but it certainly isn't going to work well for (say) a network protocol.

I worked with a guy in grad school who did *exactly* this work as a graduate thesis on an actual formal language (called Estelle, if you care) with actual definitions for what the language meant, what "atomic" vs "interleaved" was, and so on. Doing brute-force checking of algorithms is easy, but ineffective for anything but the smallest algorithms.

There are also languages (like LOTOS) which people have been able to translate into executables (with great effort) but which you can prove various things about (like compatibility between versions, progress over certain timeframes, and so on).
--
  Darren New / San Diego, CA, USA (PST)
    The primary use of XML is as a technique
    to avoid documenting your interchange formats.

--
[email protected]
http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-lpsg

Reply via email to