Research topics in functional programming
Report on the programming language Haskell: a non-strict, purely functional language version 1.2
ACM SIGPLAN Notices - Haskell special issue
Rippling: a heuristic for guiding inductive proofs
Artificial Intelligence
Bisimilarity for a first-order calculus of objects with subtyping
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A calculus for cryptographic protocols: the spi calculus
Proceedings of the 4th ACM conference on Computer and communications security
A Proof Tool for Reasoning About Functional Programs
TPHOLs '96 Proceedings of the 9th International Conference on Theorem Proving in Higher Order Logics
An Interface between Clam and HOL
Proceedings of the 11th International Conference on Theorem Proving in Higher Order Logics
Proceedings of the International Workshop on Automatic Verification Methods for Finite State Systems
How to Prove Algebraic Inductive Hypotheses Without Induction
Proceedings of the 5th Conference on Automated Deduction
The Use of Explicit Plans to Guide Inductive Proofs
Proceedings of the 9th International Conference on Automated Deduction
Proceedings of the 10th International Conference on Automated Deduction
CADE-11 Proceedings of the 11th International Conference on Automated Deduction: Automated Deduction
Using A Generalisation Critic to Find Bisimulations for Coinductive Proofs
CADE-14 Proceedings of the 14th International Conference on Automated Deduction
On Finite Representations of Infinite Sequences of Terms
Proceedings of the 2nd International CTRS Workshop on Conditional and Typed Rewriting Systems
FoSSaCS '98 Proceedings of the First International Conference on Foundations of Software Science and Computation Structure
Omega: Towards a Mathematical Assistant
CADE-14 Proceedings of the 14th International Conference on Automated Deduction
Circular Coinductive Rewriting
ASE '00 Proceedings of the 15th IEEE international conference on Automated software engineering
Universal coalgebra: a theory of systems
Universal coalgebra: a theory of systems
Circular Coinduction
The Implementation of Functional Programming Languages (Prentice-Hall International Series in Computer Science)
A divergence critic for inductive proof
Journal of Artificial Intelligence Research
A Comparison of Two Proof Critics: Power vs. Robustness
TPHOLs '02 Proceedings of the 15th International Conference on Theorem Proving in Higher Order Logics
Hi-index | 0.00 |
Coinduction is a proof rule. It is the dual of induction. It allows reasoning about non-well-founded structures such as lazy lists or streams and is of particular use for reasoning about equivalences. A central difficulty in the automation of coinductive proof is the choice of a relation (called a bisimulation).We present an automation of coinductive theorem proving. This automation is based on the idea of proof planning [7]. Proof planning constructs the higher level steps in a proof, using knowledge of the general structure of a family of proofs and exploiting this knowledge to control the proof search. Part of proof planning involves the use of failure information to modify the plan by the use of a proof critic [23] which exploits the information gained from the failed proof attempt.Our approach to the problem was to develop a strategy that makes an initial simple guess at a bisimulation and then uses generalisation techniques, motivated by a critic, to refine this guess, so that a larger class of coinductive problems can be automatically verified.The implementation of this strategy has focused on the use of coinduction to prove the equivalence of programs in a small lazy functional language which is similar to Haskell [22].We have developed a proof plan for coinduction and a critic associated with this proof plan. These have been implemented in iCoCLAM, an extended version of iCLAM [9], with encouraging results. The planner has been successfully tested on a number of theorems.