TITLE: Program verification and development with Isabelle
AUTHORS: Marek A. Bednarczyk (ICS PAS) & Tomasz Borzyszkowski (IM UG)
ABSTRACT:
The purpose of this paper is to report on our experiments in using
Isabelle --- a general purpose theorem prover --- as a tool for
verification and development of software.
The idea of using a theorem prover for software verification/development
becomes feasible when the process of verification/development is
presented as a {\it logical activity}. In our case this is achieved as
follows.
* At the top level is a logic, called pLSD, which is a Labelled Deductive
System with the following features:
- Declarative units (judgements) of pLSD have form P : A where
P is a program and A is a specification;
- Consequece ||- is tarskian:
p_1 : A_1, ..., p_n : A_n ||- P(p_1,...,p_n) : A
- Labels are programs built from assignments, x := e, and indeterminate
programs, p, and composed with sequential composition, conditional
composition and while loop;
- Specifications are formulae of predicate logic with explicit
substitutions.
- To every programming construct there is a logical rule which
introduces it. For instance, the assignment axiom and the sequential
composition rule look as follows:
_______________________ assignment
||- x := e : [e/x]
Gamma ||- P_1 : A_1 Gamma ||- P_2 : A_2
_______________________________________________ sequent.comp
Gamma ||- P_1;P_2 : A_1 >< A_2
* Specification logic is a non-commutative intuitionistic substructural
theory with sequents of the form: A_1, ..., A_n |- A. The logic
comprises additive conjunction and disjunction and multiplicative
conjunction >