Results 1 
7 of
7
Proving theorems about Java and the JVM with ACL2
 Models, Algebras and Logic of Engineering Software
, 2003
"... We describe a methodology for proving theorems mechanically about Java methods. The theorem prover used is the ACL2 system, an industrialstrength version of the BoyerMoore theorem prover. An operational semantics for a substantial subset of the Java Virtual Machine (JVM) has been defined in ACL2. ..."
Abstract

Cited by 19 (10 self)
 Add to MetaCart
(Show Context)
We describe a methodology for proving theorems mechanically about Java methods. The theorem prover used is the ACL2 system, an industrialstrength version of the BoyerMoore theorem prover. An operational semantics for a substantial subset of the Java Virtual Machine (JVM) has been defined in ACL2. Theorems are proved about Java methods and classes by compiling them with javac and then proving the corresponding theorem about the JVM. Certain automatically applied strategies are implemented with rewrite rules (and other proofguiding pragmas) in ACL2 “books” to control the theorem prover when operating on problems involving the JVM model. The Java Virtual Machine or JVM [27] is the basic abstraction Java [17] implementors are expected to respect. We speculate that the JVM is an appropriate level of abstraction at which to model Java programs with the intention of mechanically verifying their properties. The most complex features of the Java subset we handle – construction and initialization of new objects, synchronization, thread management, and virtual method invocation – are all supported directly and with full abstraction as single atomic instructions in the JVM. The complexity of verifying JVM bytecode program stems from the complexity of Java’s semantics, not
Efficient execution in an automated reasoning environment
 Journal of Functional Programming
, 2006
"... Abstract We describe a method to permit the user of a mathematical logic to write elegant logical definitions while allowing sound and efficient execution. We focus on the ACL2 logic and automated reasoning environment. ACL2 is used by industrial researchers to describe microprocessor designs and ot ..."
Abstract

Cited by 8 (4 self)
 Add to MetaCart
(Show Context)
Abstract We describe a method to permit the user of a mathematical logic to write elegant logical definitions while allowing sound and efficient execution. We focus on the ACL2 logic and automated reasoning environment. ACL2 is used by industrial researchers to describe microprocessor designs and other complicated digital systems. Properties of the designs can be formally established with the theorem prover. But because ACL2 is also a functional programming language, the formal models can be executed as simulation engines. We implement features that afford these dual applications, namely formal proof and execution on industrial test suites. In particular, the features allow the user to install, in a logically sound way, alternative executable counterparts for logicallydefined functions. These alternatives are often much more efficient than the logically equivalent terms they replace. We discuss several applications of these features. 1 Introduction This paper is about a way to permit the functional programmer to prove efficientprograms correct. The idea is to allow the provision of two definitions of the program: an elegant definition that supports effective reasoning by a mechanizedtheorem prover, and an efficient definition for evaluation. A bridge of this sort,
Integrating CCG analysis into ACL2
 In Eighth International Workshop on Termination, August 2006. Part of FLOC ’06
"... ACL2 [6–8] is a powerful, industrial strength theorem proving system, which has been used on ..."
Abstract

Cited by 3 (3 self)
 Add to MetaCart
(Show Context)
ACL2 [6–8] is a powerful, industrial strength theorem proving system, which has been used on
A mechanized program verifier
 In IFIP Working Conference on the Program Verifier Challenge
, 2005
"... Abstract. In my view, the “verification problem ” is the theorem proving problem, restricted to a computational logic. My approach is: adopt a functional programming language, build a general purpose formal reasoning engine around it, integrate it into a program and proof development environment, an ..."
Abstract

Cited by 3 (0 self)
 Add to MetaCart
(Show Context)
Abstract. In my view, the “verification problem ” is the theorem proving problem, restricted to a computational logic. My approach is: adopt a functional programming language, build a general purpose formal reasoning engine around it, integrate it into a program and proof development environment, and apply it to model and verify a wide variety of computing artifacts, usually modeled operationally within the functional programming language. Everything done in this approach is software verification since the models are runnable programs in a subset of an ANSI standard programming language (Common Lisp). But this approach is of interest to proponents of other approaches (e.g., verification of procedural programs or synthesis) because of the nature of the mathematics of computing. I summarize the progress so far using this approach, sketch the key research challenges ahead and describe my vision of the role and shape of a useful verification system. 1
How To Prove Theorems Formally
, 2005
"... 1 Abstract Today it is impractical to prove formally and mechanically the correctness of entire computing systems of commercial interest. There are many reasons for this, both technical and economic. Mechanized theorem proving is nevertheless relevant in commercial hardware and software production ..."
Abstract
 Add to MetaCart
1 Abstract Today it is impractical to prove formally and mechanically the correctness of entire computing systems of commercial interest. There are many reasons for this, both technical and economic. Mechanized theorem proving is nevertheless relevant in commercial hardware and software production. But practical considerations require that we focus our attention on problems that are both technically feasible within the time limits available and of interest to system designers. Why might designers turn to a mechanical theorem prover? Because the problems even the little ones are so complicated they do not have confidence that their reasoning is sound. Formal, mechanized reasoning is crucial. In this paper we briefly will describe several such &quot;little theorems, &quot; that is, theorems that address issues of concern to designers without trying to address the complete correctness of the system. The theorems have all been formalized and proved with the ACL2 theorem prover. &quot;ACL2 &quot; stands for A Computational Logic for Applicative Common Lisp. It is a theorem prover in the BoyerMoore tradition that uses rewriting, decision procedures, mathematical induction and many other proof techniques to prove theorems in a firstorder mathematical theory of recursively defined functions and inductively constructed objects [6]. However, these descriptions are just motivational. The real purpose of this paper is to answer the question how does one construct and manage large mechanically checked proofs (in ACL2)? After mention of the big industrial examples, we turn our attention to truly simple formal theorems about list processing and develop some advice to the reader. Most of this advice is meant to be helpful no matter what mechanized system or mathematical logic you are using. The paper contains exercises. To learn how to do proofs, it is crucial that you work the exercises. The ACL2 system is available without charge on the net; see the ACL2 home page [8].
Industrial Proofs with ACL2
"... 2 Applications "ACL2 " is the name of a functional programming language (based on Common Lisp), a firstorder mathematical logic, and a mechanical theorem prover. The theorem prover is used to prove theorems in the logic theorems about functions defined in the programming language ..."
Abstract
 Add to MetaCart
2 Applications &quot;ACL2 &quot; is the name of a functional programming language (based on Common Lisp), a firstorder mathematical logic, and a mechanical theorem prover. The theorem prover is used to prove theorems in the logic theorems about functions defined in the programming language. &quot;ACL2 &quot; stands for A Computational Logic for Applicative Common Lisp. ACL2, which is sometimes called an &quot;industrial strength version of the BoyerMoore system, &quot; is the product of Kaufmann and Moore, with many early design contributions by Boyer. The ACL2 theorem prover is interactive in the sense that the user is responsible for the strategy used in proofs. But it is automatic in the sense that once started on a problem, it proceeds without human assistance. In the hands of an experienced user, the theorem prover can produce proofs of complicated theorems. It has been used for a variety of important formal methods projects of industrial and commercial interest, including: verification that the registertransfer level description of the AMD AthlonTM
Greg LavenderFormal Specification and Verification of a JVM and its Bytecode Verifier
, 2006
"... I would like to first thank my advisor J Strother Moore for his support and advice. He gave me just the right balance of freedom, encouragement, and direction for me to pursue the research work that leads to this dissertation. I am grateful to my committee members for their helpful feedbacks. Specia ..."
Abstract
 Add to MetaCart
(Show Context)
I would like to first thank my advisor J Strother Moore for his support and advice. He gave me just the right balance of freedom, encouragement, and direction for me to pursue the research work that leads to this dissertation. I am grateful to my committee members for their helpful feedbacks. Special thanks are due to William Cook and David Hardin for their careful critique and helpful suggestions. I am in debt to Sandip Ray and Robert Krug for reading and commenting on drafts of this dissertation. The remaining errors are solely mine. I also thank my fellow members of the ACL2 research group at University of Texas for many things. These people helped to make my years in