Proving Theorems about LISP Functions
Journal of the ACM (JACM)
Initial Algebra Semantics and Continuous Algebras
Journal of the ACM (JACM)
On proving inductive properties of abstract data types
POPL '80 Proceedings of the 7th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Automatic program verification III: a methodology for verifying programs.
Automatic program verification III: a methodology for verifying programs.
Automatic design and implementation of language data types
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Algorithmic specifications: a constructive specification method for abstract data types
ACM Transactions on Programming Languages and Systems (TOPLAS)
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Exact real arithmetic: a case study in higher order programming
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
Final Data Types and Their Specification
ACM Transactions on Programming Languages and Systems (TOPLAS)
Paths: an abstract alternative to pointers
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The semantics of lazy (and industrious) evaluation
LFP '82 Proceedings of the 1982 ACM symposium on LISP and functional programming
Efficient abstractions for the implementation of structured editors
SLIPE '85 Proceedings of the ACM SIGPLAN 85 symposium on Language issues in programming environments
The structure of “data structures”
ACM '81 Proceedings of the ACM '81 conference
ACM SIGPLAN Notices - Best of PLDI 1979-1999
Hi-index | 0.00 |
Many computer scientists advocate using axiomatic methods (such as algebraic specification) to specify a program data domain—the universe of abstract data objects and operations manipulated by a program. Unfortunately, correct axiomatizations are difficult to write and to understand. Furthermore, their non-constructive nature precludes automatic implementation by a language processor. In this paper, we present a more disciplined, purely constructive alternative to axiomatic data domain specification. Instead of axiomatizing the program data domain, the programmer explicitly constructs it by using four type construction mechanisms: constructor generation, union generation, subset generation, and quotient generation. These mechanisms are rich enough to define all of the abstract data objects that programmers commonly use: integers, sequences, trees, sets, arrays, functions, etc. In contrast to axiomatic definitions, constructive definitions are easy to write and to understand. An unexpected advantage of the constructive approach is a limited capacity to support non-deterministic operations. As an illustration, we define a non-deterministic “choose” operation on sets.