6 research outputs found
Program Derivation by Correctness Enhacements
Relative correctness is the property of a program to be more-correct than
another program with respect to a given specification. Among the many
properties of relative correctness, that which we found most intriguing is the
property that program P' refines program P if and only if P' is more-correct
than P with respect to any specification. This inspires us to reconsider
program derivation by successive refinements: each step of this process
mandates that we transform a program P into a program P' that refines P, i.e.
P' is more-correct than P with respect to any specification. This raises the
question: why should we want to make P' more-correct than P with respect to any
specification, when we only have to satisfy specification R? In this paper, we
discuss a process of program derivation that replaces traditional sequence of
refinement-based correctness-preserving transformations starting from
specification R by a sequence of relative correctness-based
correctness-enhancing transformations starting from abort.Comment: In Proceedings Refine'15, arXiv:1606.0134
A discipline for program development
A constructive method of program development is presented. It is based on a simple strategy for problem decomposition that is claimed to be more supportive of goal-oriented programming than the Wirth-Dijkstra top-down refinement method. The strategy can minimize case analysis, simplify constructive program proofs, and, ensure a correspondence between program structure and data structure
Program development by inductive step wise refinement
A constructive method of program development is presented. It seeks to unify two important ideas about program development. Namely that programming is a goal-oriented activity and that there should be a correspondence between data and program structures. The latter concept is seen to be extensible beyond the data processing context in which it was originally proposed. Induction provides the vehicle for program development by stepwise refinement, with the final program being constructed by application of a sequence of progressively more powerful generalizations. The design process employed guarantees the correctness of the final program provided each of the refinement steps have been correctly taken. The method is illustrated by a number of examples
Termination, correctness and relative correctness
Over the last decade, research in verification and formal methods has been the subject of increased interest with the need of more secure and dependable software. At the heart of software dependability is the concept of software fault, defined in the literature as the adjudged or hypothesized cause of an error. This definition, which lacks precision, presents at least two challenges with regard to using formal methods: (1) Adjudging and hypothesizing are highly subjective human endeavors; (2) The concept of error is itself insufficiently defined, since it depends on a detailed characterization of correct system states at each stage of a computation (which is usually unavailable). In the process of defining what a software fault is, the concept of relative correctness, the property of a program to be more-correct than another with respect to a given specification, is discussed. Subsequently, a feature of a program is a fault (for a given specification) only because there exists an alternative to it that would make the program more-correct with respect to the specification. Furthermore, the implications and applications of relative correctness in various software engineering activities are explored. It is then illustrated that in many situations of software testing, fault removal and program repair, testing for relative correctness rather than absolute correctness leads to clearer conclusions and better outcomes. In particular, debugging without testing, a technique whereby, a fault can be removed from a program and the new program proven to be more-correct than the original, all without any testing (and its associated uncertainties/imperfections) is introduced. Given that there are orders of magnitude more incorrect programs than correct programs in use nowadays, this has the potential to expand the scope of proving methods significantly. Another technique, programming without refining, is also introduced. The most important advantage of program derivation by correctness enhancement is that it captures not only program construction from scratch, but also virtually all activities of software evolution. Given that nowadays most software is developed by evolving existing assets rather than producing new assets from scratch, the paradigm of software evolution by correctness enhancements stands to yield significant gains, if we can make it practical