Proving properties of shared data structures application to functional programming

  • Authors:
  • J. Hagelstein

  • Affiliations:
  • -

  • Venue:
  • ACM '82 Proceedings of the ACM '82 conference
  • Year:
  • 1982

Quantified Score

Hi-index 0.00

Visualization

Abstract

We describe a proof-oriented semantics for languages handling shared pointer structures. The main difficulty is to describe the store containing the pointer structure in an appropriate way. On the one hand, it should be easy to express the effect of the instructions handling pointers and on the other, it should be possible to state high-level properties of the structure (involving the concepts of lists, graphs,...). We review the previous works and propose an original solution which considers the store as a graph described by means of a collection of trees. This allows us to use a calculus of recursive functions in the domain of trees to specify properties of the pointer structure. We have chosen to illustrate those concepts in the case of a functional programming language, as no proof-oriented semantics of pointer handling has been proposed for such languages. To perform symbolic execution, we need to record both the value and the effect of a program at different stages of evaluation. To do so, we use the states (p;e)where p is a partially evaluated program and e is a store (described as stated above). To obtain a suitable proof method, we define (p;e) in a way which hides all details that are not observable by the user of the language. We axiomatize the needed relations between these pairs and use the resulting axioms as a basis of a formal proof technique, where the proofs proceed by symbolic execution and induction over trees. The language Lisp has been chosen because it is well-known. Nevertheless, no prior knowledge in Lisp is required.