The Definition of Standard ML
Dependent Types for Program Termination Verification
Higher-Order and Symbolic Computation
Compiling Embedded Programs to Byte Code
PADL '02 Proceedings of the 4th International Symposium on Practical Aspects of Declarative Languages
Proceedings of the 3rd ACM SIGPLAN international conference on Principles and practice of declarative programming
Welcome to the Educational Pearls Column
Journal of Functional Programming
Enumerating the strings of regular languages
Journal of Functional Programming
Staged computation with names and necessity
Journal of Functional Programming
EDUCATIONAL PEARL: Automata via macros
Journal of Functional Programming
EDUCATIONAL PEARL: ‘Proof-directed debugging’ revisited for a first-order version
Journal of Functional Programming
Enhancing Theorem Prover Interfaces with Program Slice Information
Electronic Notes in Theoretical Computer Science (ENTCS)
Adapting functional programs to higher order logic
Higher-Order and Symbolic Computation
Functional pearl. proof-directed debugging – corrigendum
Journal of Functional Programming
Science of Computer Programming
Balancing insight and effort: the industrial uptake of formal methods
Formal methods and hybrid real-time systems
A Formalisation of the Myhill-Nerode Theorem Based on Regular Expressions
Journal of Automated Reasoning
Hi-index | 0.00 |
The close relationship between writing programs and proving theorems has frequently been cited as an advantage of functional programming languages. We illustrate the interplay between programming and proving in the development of a program for regular expression matching. The presentation is inspired by Lakatos's method of proofs and refutations in which the attempt to prove a plausible conjecture leads to a revision not only of the proof, but of the theorem itself. We give a plausible implementation of a regular expression matcher that contains a flaw that is uncovered in an attempt to prove its correctness. The failure of the proof suggests a revision of the specification, rather than a change to the code. We then show that a program meeting the revised specification is nevertheless sufficient to solve the original problem.