Understanding Z: a specification language and its formal semantics
Understanding Z: a specification language and its formal semantics
Programming from specifications (2nd ed.)
Programming from specifications (2nd ed.)
The B-book: assigning programs to meanings
The B-book: assigning programs to meanings
Journal of the ACM (JACM)
Contracts, games, and refinement
Information and Computation - Special issue on EXPRESS 1997
Model checking
An analysis of algorithms for the Dutch National Flag Problem
Communications of the ACM
An efficient machine-independent procedure for garbage collection in various list structures
Communications of the ACM
A Discipline of Programming
On the Refinement Calculus
Abstract Specification in Object-Z and CSP
ICFEM '02 Proceedings of the 4th International Conference on Formal Engineering Methods: Formal Methods and Software Engineering
Learning programs from traces using version space algebra
Proceedings of the 2nd international conference on Knowledge capture
Implementing Angelic Nondeterminism
APSEC '03 Proceedings of the Tenth Asia-Pacific Software Engineering Conference Software Engineering Conference
Reasoning about static and dynamic properties in alloy: A purely relational approach
ACM Transactions on Software Engineering and Methodology (TOSEM)
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Finite automata and their decision problems
IBM Journal of Research and Development
Dimensions in program synthesis
Proceedings of the 12th international ACM SIGPLAN symposium on Principles and practice of declarative programming
Proceedings of the 33rd International Conference on Software Engineering
Synthesizing geometry constructions
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Program sketching via CTL* model checking
Proceedings of the 18th international SPIN conference on Model checking software
Synthesis of first-order dynamic programming algorithms
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
A machine-checked framework for relational separation logic
SEFM'11 Proceedings of the 9th international conference on Software engineering and formal methods
Liberating the programmer with prorogued programming
Proceedings of the ACM international symposium on New ideas, new paradigms, and reflections on programming and software
Automated feedback generation for introductory programming assignments
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Game programming by demonstration
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
Integrating discrete controller synthesis into a reactive programming language compiler
Discrete Event Dynamic Systems
Hi-index | 0.00 |
Angelic nondeterminism can play an important role in program development. It simplifies specifications, for example in deriving programs with a refinement calculus; it is the formal basis of regular expressions; and Floyd relied on it to concisely express backtracking algorithms such as N-queens. We show that angelic nondeterminism is also useful during the development of deterministic programs. The semantics of our angelic operator are the same as Floyd's but we use it as a substitute for yet-to-be-written deterministic code; the final program is fully deterministic. The angelic operator divines a value that makes the program meet its specification, if possible. Because the operator is executable, it allows the programmer to test incomplete programs: if a program has no safe execution, it is already incorrect; if a program does have a safe execution, the execution may reveal an implementation strategy to the programmer. We introduce refinement-based angelic programming, describe our embedding of angelic operators into Scala, report on our implementation with bounded model checking, and describe our experience with two case studies. In one of the studies, we use angelic operators to modularize the Deutsch-Schorr-Waite (DSW) algorithm. The modularization is performed with the notion of a parasitic stack, whose incomplete specification was instantiated for DSW with angelic nondeterminism.