A Bytecode Logic for JML and Types

We present a program logic for virtual machine code that may serve as a suitable target for different proof-transforming compilers. Compilation from JML-specified source code is supported by the inclusion of annotations whose interpretation extends to non-terminating computations. Compilation from functional languages, and the communication of results from intermediate level program analysis phases are facilitated by a new judgement format that admits the compositionality of type systems to be reflected in derivations. This makes the logic well suited to serve as a language in which proofs of a PCC architecture are expressed. We substantiate this claim by presenting the compositional encoding of a type system for bounded heap consumption. Both the soundness proof of the logic and the derivation of the type system have been formally verified by an implementation in Isabelle/HOL.

[1]  Nick Benton,et al.  Simple relational correctness proofs for static analyses and program transformations , 2004, POPL.

[2]  Amr Sabry,et al.  The essence of compiling with continuations , 1993, PLDI '93.

[3]  John C. Reynolds,et al.  Separation logic: a logic for shared mutable data structures , 2002, Proceedings 17th Annual IEEE Symposium on Logic in Computer Science.

[4]  Peter Müller,et al.  A Logic for Bytecode , 2004 .

[5]  Tobias Nipkow,et al.  Hoare Logics for Recursive Procedures and Unbounded Nondeterminism , 2002, CSL.

[6]  David Cachera,et al.  Certified Memory Usage Analysis , 2005, FM.

[7]  Peter Müller,et al.  A Program Logic for Bytecode , 2005, Electron. Notes Theor. Comput. Sci..

[8]  Andrew W. Appel,et al.  SSA is functional programming , 1998, SIGP.

[9]  Lars Birkedal,et al.  Polymorphism and separation in hoare type theory , 2006, ICFP '06.

[10]  Richard A. Kelsey A correspondence between continuation passing style and static single assignment form , 1995 .

[11]  Cliff B. Jones,et al.  Systematic software development using VDM (2. ed.) , 1990, Prentice Hall International Series in Computer Science.

[12]  David Aspinall,et al.  Optimisation Validation , 2007, COCV@ETAPS.

[13]  Thomas Kleymann,et al.  Hoare logic and VDM : machine-checked soundness and completeness proofs , 1998 .

[14]  Andrew W. Appel,et al.  Foundational proof-carrying code , 2001, Proceedings 16th Annual IEEE Symposium on Logic in Computer Science.

[15]  Martin Hofmann,et al.  A Program Logic for Resource Verification , 2004, TPHOLs.

[16]  Martin Hofmann,et al.  Static prediction of heap space usage for first-order functional programs , 2003, POPL '03.

[17]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[18]  Bernhard Beckert,et al.  A Sequent Calculus for First-Order Dynamic Logic with Trace Modalities , 2001, IJCAR.

[19]  Nick Benton A Typed, Compositional Logic for a Stack-Based Abstract Machine , 2005, APLAS.

[20]  Bart Jacobs,et al.  A Logic for the Java Modeling Language JML , 2001, FASE.

[21]  Aleksandar Nanevski,et al.  Dependent type theory of stateful higher-order functions , 2005 .

[22]  Frank S. de Boer,et al.  An assertion-based proof system for multithreaded Java , 2005, Theor. Comput. Sci..

[23]  Martin Rinard,et al.  Credible Compilation with Pointers , 1999 .

[24]  Cliff B. Jones,et al.  Systematic software development using VDM , 1986, Prentice Hall International Series in Computer Science.

[25]  Raymie Stata,et al.  Checking object invariants , 1997 .

[26]  Michael D. Ernst,et al.  An overview of JML tools and applications , 2003, Electron. Notes Theor. Comput. Sci..

[27]  Mark Lillibridge,et al.  Extended static checking for Java , 2002, PLDI '02.

[28]  Reiner Hähnle,et al.  Verification of Safety Properties in the Presence of Transactions , 2004, CASSIS.

[29]  Martin Hofmann,et al.  Automatic Certification of Heap Consumption , 2004, LPAR.