The/Munich Project CIP
A generalization of Dijkstra's calculus
ACM Transactions on Programming Languages and Systems (TOPLAS)
Specification and transformation of programs: a formal approach to software development
Specification and transformation of programs: a formal approach to software development
Eiffel: the language
Non-determinism in functional languages
The Computer Journal - Special issue on formal methods: part 1
A practical theory of programming
A practical theory of programming
Proof in VDM: a practitioner's guide
Proof in VDM: a practitioner's guide
Algebra of programming
Non-deterministic expressions and predicate transformers
Information Processing Letters
Relational methods in computer science
Relational methods in computer science
Systematic Programming: An Introduction
Systematic Programming: An Introduction
Proceedings of the International Conference on Mathematics of Program Construction, 375th Anniversary of the Groningen University
Logical Specifications for Functional Programs
Proceedings of the Second International Conference on Mathematics of Program Construction
A source of inconsistency in theories of nondeterministic functions
Science of Computer Programming
Terms with unbounded demonic and angelic nondeterminacy
Science of Computer Programming
Dually nondeterministic functions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
Mathematics supplies us with various operators for creating functions from relations, sets, known functions, and so on. Function inversion is a simple example. These operations are useful in specifying programs. However, many of them have strong constraints on their arguments to ensure that the result is indeed a function. For example, only functions that are bijective may be inverted. This is a serious impediment to their use in specifications, because at best it limits the specifier's expressive power, and at worst it imposes strong proof obligations on the programmer. We propose to loosen the definition of functions so that the constraints on operations such as inversion can be greatly relaxed. The specificational functions that emerge generalize traditional functions in that their application to some arguments may yield no good outcome, while for other arguments their application may yield any of several outcomes unpredictably. While these functions are not in general algorithmic, they can serve as specifications of traditional functions as embodied in programming languages. The idea of specificational functions is not new, but accommodating them in all their generality without falling foul of a myriad of anomalies has proved elusive. We investigate the technical problems that have hindered their use, and propose solutions. In particular, we develop a formal axiomatization for reasoning about specificational functions, and we prove its consistency by constructing a model.