Abstract:
Ensuring correctness of real-world software applications is a challenging task.
Testing can be used to find many bugs, but is typically not sufficient for proving
correctness or even eliminating entire classes of bugs. However, formal proof and
verification techniques tend to be very heavy weight and are simply not available
for day to day use in many common programming environments.
We demonstrate a form of light-weight proof assistant by using the type checking features of the programming language Haskell with existing extensions. We
apply this work to the Open Source version control system Darcs. The properties
checked by our approach are derived directly from the data model used by Darcs.
This allows us to eliminate entire classes of bugs at compile time. We also examine
how these techniques improve the quality of the Darcs codebase and the challenges
that arise when applying these techniques in practice.