Verification of Programs That Destructively Manipulate Data

Abstract We investigate various equivalence relations between expressions in a first-order functional programming language augmented with the ability to destructively alter the underlying data. To define the semantics we introduce the notion of a memory structure. A computation theory for lexically scoped functional language is then defined over these structures. The equivalence relations are then defined within this model theoretic framework. A distinction is made between intensional relations and extensional relations. The former class turn out to have a much more manageable theory than the latter. The principal intensional relation studied is strong isomorphism , its properties allow for elegant verification proofs in a style similar to that of purely applicative languages. In particular the relation is preserved under many standard syntactic manipulations and transformations.

[1]  Willem P. de Roever,et al.  Program Derivation Through Transformations: The Evolution of List-Copying Algorithms , 1986, Sci. Comput. Program..

[2]  鈴木 則久 Automatic verification of programs with complex data structures , 1980 .

[3]  Nachum Dershowitz,et al.  The Schorr-Waite Marking Algorithm Revisited , 1980, Inf. Process. Lett..

[4]  Dana S. Scott,et al.  First Steps Towards Inferential Programming , 1983, IFIP Congress.

[5]  Zohar Manna,et al.  Is “sometime” sometimes better than “always”?: Intermittent assertions in proving program correctness , 1976, ICSE '76.

[6]  Ian A. Mason The Semantics of Destructive LISP , 1986 .

[7]  C. Goad Computational uses of the manipulation of formal proofs , 1980 .

[8]  Norihisa Suzuki Automatic Verification of Programs with Complex Data Structures , 1976, Outstanding Dissertations in the Computer Sciences.

[9]  Derek C. Oppen Reasoning About Recursively Defined Data Structures , 1980, J. ACM.

[10]  Rod M. Burstall,et al.  Program Proving as Hand Simulation with a Little Induction , 1974, IFIP Congress.

[11]  David Gries The Schorr-Waite Graph Marking Algorithm , 1978, Program Construction.

[12]  Tomasz Kowaltowski,et al.  Correctness of programs manipulating data structures. , 1973 .

[13]  Robin Milner,et al.  An Algebraic Definition of Simulation Between Programs , 1971, IJCAI.

[14]  Stephen L. Bloom,et al.  Varieties of "if-then-else" , 1983, SIAM J. Comput..

[15]  Willem P. de Roever,et al.  The Evolution of List-Copying Algorithms. , 1979 .

[16]  Derek C. Oppen,et al.  Reasoning about recursively defined data structures , 1978, POPL.

[17]  Zohar Manna,et al.  The Deductive Synthesis of Imperative LISP Programs , 1987, AAAI.

[18]  Norihisa Suzuki Analysis of pointer “rotation” , 1982, CACM.

[19]  Richard Lee Tenney,et al.  Decidable Pairing Functions , 1972 .

[20]  Norihisa Suzuki Analysis of pointer rotation , 1980, POPL '80.

[21]  José Meseguer,et al.  On the Axiomatization of "If-Then-Else" , 1987, SIAM J. Comput..

[22]  William M. Waite,et al.  An efficient machine-independent procedure for garbage collection in various list structures , 1967, CACM.

[23]  William L. Scherlis,et al.  Expression procedures and program derivation , 1980 .

[24]  John Darlington,et al.  A Transformation System for Developing Recursive Programs , 1977, J. ACM.