Automated proofs of object code for a widely used microprocessor
Journal of the ACM (JACM)
Mechanized formal reasoning about programs and computing machines
Automated reasoning and its applications
Efficient Simulation of Formal Processor Models
Formal Methods in System Design
Practical Java: Programming Language Guide
Practical Java: Programming Language Guide
Java Virtual Machine Specification
Java Virtual Machine Specification
Computer-Aided Reasoning: An Approach
Computer-Aided Reasoning: An Approach
The Java Language Specification
The Java Language Specification
Defining the Java Virtual Machine as Platform for Provably Correct Java Compilation
MFCS '98 Proceedings of the 23rd International Symposium on Mathematical Foundations of Computer Science
A Type-Theoretic Memory Model for Verification of Sequential Java Programs
WADT '99 Selected papers from the 14th International Workshop on Recent Trends in Algebraic Development Techniques
Transforming the Theorem Prover into a Digital Design Tool: From Concept Car to Off-Road Vehicle
CAV '98 Proceedings of the 10th International Conference on Computer Aided Verification
A Mechanically Verified Application for a Mechanically Verified Environment
CAV '93 Proceedings of the 5th International Conference on Computer Aided Verification
Executable JVM model for analytical reasoning: a study
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
Executable JVM model for analytical reasoning: a study
Science of Computer Programming - Special issue on advances in interpreters, virtual machines and emulators (IVME'03)
Reasoning about safety properties in a JVM-like environment
Science of Computer Programming
Inductive Proof Outlines for Exceptions in Multithreaded Java
Electronic Notes in Theoretical Computer Science (ENTCS)
Hi-index | 0.00 |
We discuss an axiomatic description of a simple abstract machine similar to the Java Virtual Machine (JVM). Our model supports classes, with fields and bytecoded methods, and a representative sampling of JVM bytecodes for basic operations for both data and control. The GETFIELD and PUTFIELD instructions accurately model inheritance, as does the INVOKEVIRTUAL instruction. Our model supports multiple threads, synchronized methods, and monitors. Our current model is inadequate or inaccurate in many respects (e.g., we do not formalize the JVM's finite arithmetic nor do we describe class loading and initialization). But the model is a useful tool for studying the application of formal reasoning to the JVM and to Java programs. We demonstrate two useful aspects of an operational formal semantics. First, the model is executable: bytecoded methods can be run on the model. Second, the model allows us to prove theorems about those methods or, more generally, about the model. Because the JVM provides a relatively clean semantics for Java, our model can be thought of as a step towards Java software verification. We illustrate these points. We cite some theorems proved about our model, including a theorem involving unbounded multi-threading and mutual exclusion with MONITORENTER and MONITOREXIT. Our proofs are carried out with the ACL2 theorem prover.