A User-interface for Proofs and Certified Software
by Janet Bertot, Yves Bertot, Yann Coscoy, Healfdene Goguen and Francis Montagnac
By making it possible to express the properties of procedures and functions, proofs assistants can be used to help develop certified software. However, these proof assistants are often complicated to use and deserve real user-interfaces to make software development feasible. Since 1990, The CROAP team at INRIA Sophia-Antipolis has been studying the development of user-interfaces for theorem provers to reduce this level of complication. We have implemented a powerful prototype, CtCoq, that has been used successfully in the development of certified algorithms for program manipulation or polynomial mathematics. The last version of this proof environment has been released in February 1997.
The semantics of programs can be mathematically described using relations between inputs and outputs or using functions from the domain of inputs to the domain of outputs. When these relations and functions are formally described, it is possible to use a computer to check mechanically some of their properties. This leads to the perspective of checking that programs fulfil a formal specification and ultimately to zero-default software. Since the correction of a given program may rely on an arbitrarily complex corpus of mathematics, the system used for the verification needs to have very powerful proving capabilities. To date, only the systems known as theorem provers or proof checkers provide enough mathematical capabilities for this task.
The Coq proof assistant is one such proof checker (see previous article). It uses type theory to express the properties of functions and encode powerful mathematical tools such as recursion and algebraic structures. Intuitively, the types used in a programming language like Pascal or C make it possible to verify simple consistency properties between the components of a software. When using language with more expressive types, the properties that can be expressed using types can actually cover the complete specification of a software system.
The CtCoq user-interface is an independent front-end for the Coq proof assistant. It uses technologies from the domain of programming environments to help the proof developer in several ways.
The first element taken from programming environment technology is the use of syntax directed tools. These tools use a precise description of the proof assistant's syntax to help in the rapid construction of syntactically correct logical sentences, specifications, and proof commands. For instance, syntax directed menus make it possible to perform transformations on expressions or commands that respect the syntactic correctness of these expressions, thus reducing the time spent in correcting low-level errors. Syntax aware tools also make it easier to recognize usual mathematical notations and render them using multiple-font display, in a wysiwyg fashion.
These tools make semantic manipulation of data possible, with interpretation of the user's pointing or dragging gestures using the mouse. For instance, pointing at an expression can be interpreted guiding the proof process towards this expression. In the same realm, dragging an expression can be used to rearrange data when the algebraic properties make it possible.
Other tools taken from programming environments use the analysis of dependence graphs between functions, mathematical objects, and proof commands. This analysis can lead to quicker tools to help finding and correcting errors in specifications, thus making the development of completely proved software quicker.
Powerful analyses also make it possible to extract natural language presentation from proofs data structures, thus making the results of proof developments understandable by mathematicians and engineers outside the community of Coq and CtCoq users.
The CtCoq proof environment has been used successfully in the development of algorithms for symbolic computation, trajectory planning, and program partial evaluation.
Future research around this user-interface aims on one side at a better integration with symbolic computation and computer algebra systems and on the other side at a better use of dependency graphs to make large proof maintenance and re-engineering feasible.
Publication references for this research can be found at: http://www.inria.fr/croap/publications.html
The CtCoq system can be retrieved by following the instructions found at: http://www.inria.fr/ctcoq/ctcoq-eng.html
Yves Bertot - INRIA
Tel: +33 4 9365 7739