Proving inter-program properties


ABSTRACT We develop foundations for proving properties relating two programs. Our formalization is based on a suitably adapted notion of program invariant for a single program. First, we give an abstract formulation of the theory of program invariants based on the notion of assertion function: a function that assigns assertions to program points. Then, we develop this abstract notion further so that it can be used to prove properties between two programs. We describe two applications of the theory. One application is in the translation validation for optimiz-ing compilers, and the other application is in the certification of smart-card application in the framework of Common Criteria. The latter application is part of an industrial project con-ducted at Verimag laboratory.

  • Source
    [Show abstract] [Hide abstract]
    ABSTRACT: There is a growing awareness, both in industry and academia, of the crucial role of formally verifying the translation from high-level source-code representation into an low-level object code that is typically performed by an optimizing compiler. Formally verifying an optimizing compiler, as one would verify any other large program, is not feasible due to its size, ongoing evolution and modification, and, possibly, proprietary considerations. Translation validation is a novel approach that offers an alternative to the verification of translators in general and compilers in particular: Rather than verifying the compiler itself, one constructs a validation tool which, after every run of the compiler, formally confirms that the target code produced in the run is a correct translation of the source program. The paper presents voc--a methodology for translation validation of optimizing compilers. We distinguish between structure preserving optimizations, for which we establish a simulation relation between the source and target code based on computational induction, and structure modifying optimizations, for which we develop specialized "permutation-rules". The paper also describes voc-64---a prototype translation validator tool that automatically produces verification conditions for the global optimizations of the SGI Pro-64 compiler.
    J. UCS. 01/2003; 9:223-247.
  • Source
    [Show abstract] [Hide abstract]
    ABSTRACT: An abstract is not available.
    POPL '88: Proceedings of the 15th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages; 01/1988
  • Source
    [Show abstract] [Hide abstract]
    ABSTRACT: We describe a translation validation infrastructure for the GNU C compiler. During the compilation the infrastructure compares the intermediate form of the program before and after each compiler pass and verifies the preservation of semantics. We discuss a general framework that the optimizer can use to communicate to the validator what transformations were performed. Our implementation however does not rely on help from the optimizer and it is quite successful by using instead a few heuristics to detect the transformations that take place. The main message of this paper is that a practical translation validation infrastructure, able to check the correctness of many of the transformations performed by a realistic compiler, can be implemented with about the effort typically required to implement one compiler pass. We demonstrate this in the context of the GNU C compiler for a number of its optimizations while compiling realistic programs such as the compiler itself or the Linux kernel. W...


Available from