Results 1  10
of
14
Parametric Shape Analysis via 3Valued Logic
, 1999
"... Shape Analysis concerns the problem of determining "shape invariants"... ..."
Abstract

Cited by 539 (71 self)
 Add to MetaCart
Shape Analysis concerns the problem of determining "shape invariants"...
The Spec# Programming System: An Overview
, 2004
"... Spec# is the latest in a long line of work on programming languages and systems aimed at improving the development of correct software. This paper describes the goals and architecture of the Spec# programming system, consisting of the objectoriented Spec# programming language, the Spec# compiler ..."
Abstract

Cited by 448 (45 self)
 Add to MetaCart
Spec# is the latest in a long line of work on programming languages and systems aimed at improving the development of correct software. This paper describes the goals and architecture of the Spec# programming system, consisting of the objectoriented Spec# programming language, the Spec# compiler, and the Boogie static program verifier. The language includes constructs for writing specifications that capture programmer intentions about how methods and data are to be used, the compiler emits runtime checks to enforce these specifications, and the verifier can check the consistency between a program and its specifications. The Spec#
Tutorial Notes on Partial Evaluation
 Proceedings of the Twentieth Annual ACM Symposium on Principles of Programming Languages
, 1993
"... The last years have witnessed a flurry of new results in the area of partial evaluation. These tutorial notes survey the field and present a critical assessment of the state of the art. 1 Introduction Partial evaluation is a sourcetosource program transformation technique for specializing program ..."
Abstract

Cited by 237 (62 self)
 Add to MetaCart
The last years have witnessed a flurry of new results in the area of partial evaluation. These tutorial notes survey the field and present a critical assessment of the state of the art. 1 Introduction Partial evaluation is a sourcetosource program transformation technique for specializing programs with respect to parts of their input. In essence, partial evaluation removes layers of interpretation. In the most general sense, an interpreter can be defined as a program whose control flow is determined by its input data. As Abelson points out, [43, Foreword], even programs that are not themselves interpreters have important interpreterlike pieces. These pieces contain both compiletime and runtime constructs. Partial evaluation identifies and eliminates the compiletime constructs. 1.1 A complete example We consider a function producing formatted text. Such functions exist in most programming languages (e.g., format in Lisp and printf in C). Figure 1 displays a formatting functio...
Putting static analysis to work for verification: A case study
 In Int. Symp. on Softw. Testing and Analysis
, 2000
"... Abstract We study how program analysis can be used to:* Automatically prove partial correctness of correct programs.* Discover, locate, and diagnose bugs in incorrect programs. Specifically, we present an algorithm that analyzes sorting programs that manipulate linked lists. A prototype of the algor ..."
Abstract

Cited by 79 (18 self)
 Add to MetaCart
Abstract We study how program analysis can be used to:* Automatically prove partial correctness of correct programs.* Discover, locate, and diagnose bugs in incorrect programs. Specifically, we present an algorithm that analyzes sorting programs that manipulate linked lists. A prototype of the algorithm has been implemented. We show that the algorithm is sufficiently precise to discover that (correct versions) of bubblesort and insertionsort procedures do, in fact, produce correctly sorted lists as outputs, and that the invariant "issorted " is maintained by listmanipulation operations such as elementinsertion, elementdeletion, and even destructive list reversal and merging of two sorted lists. When we run the algorithm on erroneous versions of bubblesort and insertionsort procedures, it is able to discover and sometimes even locate and diagnose the error. 1 Introduction This paper shows that static analysis can be employed to* Automatically prove partial correctness of correct programs.*
Proving Theorems about LISP Functions
, 1975
"... Program verification is the idea that properties of programs can be precisely stated and proved in the mathematical sense. In this paper, some simple heuristics combining evaluation and mathematical induction are described, which the authors have implemented in a program that automatically proves a ..."
Abstract

Cited by 48 (2 self)
 Add to MetaCart
Program verification is the idea that properties of programs can be precisely stated and proved in the mathematical sense. In this paper, some simple heuristics combining evaluation and mathematical induction are described, which the authors have implemented in a program that automatically proves a wide variety of theorems about recursive LISP functions. The method the program uses to generate induction formulas is described at length. The theorems proved by the program include that REVERSE is its own inverse and that a particular SORT program is correct. A list of theorems proved by the program is given. key words and phrases: LISP, automatic theoremproving, structural induction, program verification cr categories: 3.64, 4.22, 5.21 1 Introduction We are concerned with proving theorems in a firstorder theory of lists, akin to the elementary theory of numbers. We use a subset of LISP as our language because recursive list processing functions are easy to write in LISP and because ...
Introduction to the OBDD Algorithm for the ATP Community
, 1992
"... We describe in terms familiar to the automated reasoning community the graphbased algorithm for deciding propositional equivalence published by R.E. Bryant in 1986. Such algorithm, based on ordered binary decision diagrams or OBDDs, are currently the fastest known ways to decide whether two proposi ..."
Abstract

Cited by 9 (1 self)
 Add to MetaCart
We describe in terms familiar to the automated reasoning community the graphbased algorithm for deciding propositional equivalence published by R.E. Bryant in 1986. Such algorithm, based on ordered binary decision diagrams or OBDDs, are currently the fastest known ways to decide whether two propositional expressions are equivalent and are generally hundreds or thousands of times faster on such problems than most automatic theorem proving systems. An OBDD is a normalized IFthenelse expression in which the tests down any branch are ascending in some previously chosen fixed order. Such IF expressions represent a canonical form for propositional expressions. Three coding tricks make it extremely efficient to manipulate canonical IF expressions. The first is that two canonicalized expressions can be rapidly combined to form the canonicalized form of their disjunction (conjunction, exclusiveor, etc) by exploiting the fact that the tests are ordered. The second is that every distinct cano...
An overview of the Jahob analysis system: Project goals and current status
 In NSF Next Generation Software Workshop
, 2006
"... We present an overview of the Jahob system for modular analysis of data structure properties. Jahob uses a subset of Java as the implementation language and annotations with formulas in a subset of Isabelle as the specification language. It uses monadic secondorder logic over trees to reason about ..."
Abstract

Cited by 8 (1 self)
 Add to MetaCart
We present an overview of the Jahob system for modular analysis of data structure properties. Jahob uses a subset of Java as the implementation language and annotations with formulas in a subset of Isabelle as the specification language. It uses monadic secondorder logic over trees to reason about reachability in linked data structures, the Isabelle theorem prover and NelsonOppen style theorem provers to reason about highlevel properties and arrays, and a new technique to combine reasoning about constraints on uninterpreted function symbols with other decision procedures. It also incorporates new decision procedures for reasoning about sets with cardinality constraints. The system can infer loop invariants using new symbolic shape analysis. Initial results in the use of our system are promising; we are continuing to develop and evaluate it. 1.
The Boyer benchmark at warp speed
 In ACM Lisp Pointers, Volume 3, Julyâ€“September
, 1992
"... We show how to speed up the Boyer Benchmark by an order of magnitude (46 X faster than the Cray1) on a Common Lisp system (80860based OKIstation) using better programming techniques. The resulting program fits nicely within next generation onchip caches and kills almost all potential parallelism, ..."
Abstract

Cited by 6 (1 self)
 Add to MetaCart
We show how to speed up the Boyer Benchmark by an order of magnitude (46 X faster than the Cray1) on a Common Lisp system (80860based OKIstation) using better programming techniques. The resulting program fits nicely within next generation onchip caches and kills almost all potential parallelism, thus becoming worthless as a generalpurpose Lisp benchmark. A.
Practical Program Verification by Forward Symbolic Execution: Correctness and Examples
 AustrianJapan Workshop on Symbolic Computation in Software Science
, 2008
"... Abstract. We present the theoretical aspects and a prototype implementation in the Theorema system of a method for the verification of recursive imperative programs. The method is based on forward symbolic execution and functional semantics and generates first order verification conditions for the t ..."
Abstract

Cited by 5 (4 self)
 Add to MetaCart
Abstract. We present the theoretical aspects and a prototype implementation in the Theorema system of a method for the verification of recursive imperative programs. The method is based on forward symbolic execution and functional semantics and generates first order verification conditions for the total correctness which use only the underlying theory of the program. All verification conditions are generated automatically by our prototype implementation in the frame of the Theorema system based on Mathematica. The termination property is expressed as an induction principle depending on the structure of the program with respect to recursion. It turns out that part of the verification conditions (notably the termination condition) are crucial for the existence of the function defined by the program, without which the total correctness formula is trivial due to inconsistency of the assumptions. The formal description of the method is the basis for the implementation and also for the proof of its correctness. 1