I've been looking at integrating formal methods, advanced typing and
provability into STEPS, mainly as a good solution to being able to go
from specifications to testable prototypes easily. I've been looking
at a number of different languages and proof assistants that could
fill the role.
>From the (little) reading I've done, there seems to be a concensus
that higher order languages/provers are more useful than first order
ones, in particular, pattern matching for types/solutions appears to
be more complete under higher order logic.
For example, Epigram (http://www.e-pig.org/darcs/Pig09/web/) is based
on dependent types, but uses first order matching and is incomplete
(see the literal programming manual, Epitome, p163) ie. it doesn't
neccessarily match all types/terms. I'm of the opinion that, although
having a sound and complete parser/matcher is pretty useless
day-to-day (most computer languages and systems are unambiguous), it
is important to be sure you'll catch all types/terms for proofs and
for execution.

Coq, Isabelle and PVS all now use rewriting to some extent, though in
a higher order fashion (ie. more general than lambda calculus eg.
Curry-Howard calculi, dependent types). They do appear to use
first-order logic for some proofs where decidability is a problem
(www.lix.polytechnique.fr/~jouannaud/articles/tyl.pdf) and having seen
some higher-order developments within Maude, I'd venture that it is
useful to build higher-order provers on first-order environments -
case in point, Epigram compiles down to Haskell constructs.

There's a very good paper on pure type systems in Maude, with a view
to implementing a higher-order (Open) Calculus of Constructions. The
paper mentions a nice CINNI notation which allows you to use named
types, rather than say de Brujin indices, and still avoid accidental
type/term hiding. The proof assistant for OCC has been designed for
use in a universe heirarchy
(http://www.informatik.uni-hamburg.de/TGI/mitarbeiter/wimis/stehr/occ_eng.html)
which does sound similar to Alessandro Warth's Worlds POV.

A later paper on the system is here:
http://www.arnetminer.org/viewpub.do?pid=882439 It looks interesting,
but I don't have a direct link for download unfortunately.
Lastly, I've a couple of links to a declarative debugger in Maude -
yes you can debug the specifications!
(http://maude.sip.ucm.es/debugging/ and
http://maude.cs.uiuc.edu/papers/pdf/Riesco-et-al-debugging-tr.pdf)

Fairly recently, the Maude team (and contributors) wrote a formal
analyser for java programs (JavaFAN - see the slides in the Maude
intro http://maude.cs.uiuc.edu/talks/maude-padl10-slides.pdf). The
basic strategy I've come up with, involves writing a version of Maude
on top of Squeak (smalltalk), then adapting JavaFAN to analyse
smalltalk bytecodes so you can prove the version of Maude itself, the
VM, and thus the entire software stack from the top, down to the metal
by virtue of running on the VM (ok, SqueakNOS isn't strictly bare
metal, but STEPS/FRANK/NotSqueak should be, and I'd try to move the
Maude runtime across).

The Maude port would be straight - I don't know smalltalk that well,
and I'm starting work by moving over the BuDDY library into Squeak.
I'd appreciate people's thoughts on my programming direction.

Cheers,
Alexis.

_______________________________________________
fonc mailing list
[email protected]
http://vpri.org/mailman/listinfo/fonc

Reply via email to