The logic of programming
A simple fixpoint argument without the restriction to continuity
Acta Informatica
A theoretical basis for stepwise refinement and the programming calculus
Science of Computer Programming
Understanding Z: a specification language and its formal semantics
Understanding Z: a specification language and its formal semantics
Auxiliary variables in data refinement
Information Processing Letters
A generalization of Dijkstra's calculus
ACM Transactions on Programming Languages and Systems (TOPLAS)
Computational lambda-calculus and monads
Proceedings of the Fourth Annual Symposium on Logic in computer science
Predicate calculus and program semantics
Predicate calculus and program semantics
Software engineering mathematics
Software engineering mathematics
Specification and transformation of programs: a formal approach to software development
Specification and transformation of programs: a formal approach to software development
Duality in specification languages: a lattice-theoretical approach
Acta Informatica
Programming in the 1990s: an introduction to the calculation of programs
Programming in the 1990s: an introduction to the calculation of programs
Programming: the derivation of algorithms
Programming: the derivation of algorithms
Data refinement of predicate transformers
Theoretical Computer Science
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A practical theory of programming
A practical theory of programming
A logical approach to discrete math
A logical approach to discrete math
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
The lattice of data refinement
Acta Informatica
Programming from specifications (2nd ed.)
Programming from specifications (2nd ed.)
Journal of the ACM (JACM)
A Weaker Precondition for Loops
ACM Transactions on Programming Languages and Systems (TOPLAS)
An axiomatic basis for computer programming
Communications of the ACM
Calculating sharp adaptation rules
Information Processing Letters - Special issue in honor of Edsger W. Dijkstra
Predicate transformer semantics of a higher-order imperative language with record subtyping
Science of Computer Programming
The Science of Programming
Selected writings on computing: a personal perspective
Selected writings on computing: a personal perspective
A Discipline of Programming
Refinement Calculus: A Systematic Introduction
Refinement Calculus: A Systematic Introduction
Ideal models for pointwise relational and state-free imperative programming
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
Program Construction: Calculating Implementations from Specifications
Program Construction: Calculating Implementations from Specifications
Simplify: a theorem prover for program checking
Journal of the ACM (JACM)
Functional declarative language design and predicate calculus: a practical approach
ACM Transactions on Programming Languages and Systems (TOPLAS)
Dual unbounded nondeterminacy, recursion, and fixpoints
Acta Informatica
Dually nondeterministic functions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.01 |
We present a new approach to adding state and state-changing commands to a term language. As a formal semantics it can be seen as a generalization of predicate transformer semantics, but beyond that it brings additional opportunities for specifying and verifying programs. It is based on a construct called a phrase, which is a term of the form C ▹ t, where C stands for a command and t stands for a term of any type. If R is boolean, C ▹ R is closely related to the weakest precondition wp(C,R). The new theory draws together functional and imperative programming in a simple way. In particular, imperative procedures and functions are seen to be governed by the same laws as classical functions. We get new techniques for reasoning about programs, including the ability to dispense with logical variables and their attendant complexities. The theory covers both programming and specification languages, and supports unbounded demonic and angelic nondeterminacy in both commands and terms.