3,722 research outputs found
Distilling programs for verification
In this paper, we show how our program transformation algorithm called distillation can not only be used for the optimisation of programs, but can also be used to facilitate program verification. Using the distillation algorithm, programs are transformed into a specialised form in which functions are tail recursive, and very few intermediate structures are created. We then show how properties of this specialised form of program can be easily verified by the application of inductive proof rules. We therefore argue that the distillation algorithm is an ideal candidate for inclusion within compilers as it facilitates the two goals of program optimization and verification
Verifying Temporal Properties of Reactive Systems by Transformation
We show how program transformation techniques can be used for the
verification of both safety and liveness properties of reactive systems. In
particular, we show how the program transformation technique distillation can
be used to transform reactive systems specified in a functional language into a
simplified form that can subsequently be analysed to verify temporal properties
of the systems. Example systems which are intended to model mutual exclusion
are analysed using these techniques with respect to both safety (mutual
exclusion) and liveness (non-starvation), with the errors they contain being
correctly identified.Comment: In Proceedings VPT 2015, arXiv:1512.02215. This work was supported,
in part, by Science Foundation Ireland grant 10/CE/I1855 to Lero - the Irish
Software Engineering Research Centre (www.lero.ie), and by the School of
Computing, Dublin City Universit
What Works at Scale? Distilling the Critical Success Factors for Scaling Up Rural Sanitation
This paper is based on the Knowledge Sharing Forum of the same name. It examines the conditions for success in sanitation programs and strategies that lead to robust implementation in various countries
Distilling Programs to Prove Termination
The problem of determining whether or not any program terminates was shown to
be undecidable by Turing, but recent advances in the area have allowed this
information to be determined for a large class of programs. The classic method
for deciding whether a program terminates dates back to Turing himself and
involves finding a ranking function that maps a program state to a well-order,
and then proving that the result of this function decreases for every possible
program transition. More recent approaches to proving termination have involved
moving away from the search for a single ranking function and toward a search
for a set of ranking functions; this set is a choice of ranking functions and a
disjunctive termination argument is used. In this paper, we describe a new
technique for determining whether programs terminate. Our technique is applied
to the output of the distillation program transformation that converts programs
into a simplified form called distilled form. Programs in distilled form are
converted into a corresponding labelled transition system and termination can
be demonstrated by showing that all possible infinite traces through this
labelled transition system would result in an infinite descent of well-founded
data values. We demonstrate our technique on a number of examples, and compare
it to previous work.Comment: In Proceedings VPT/HCVS 2020, arXiv:2008.02483. This work owes a lot
to the input of Neil Jones, who provided many useful insights and ideas on
the subject matter presented her
- …