The Curry-Howard correspondence is a mapping between logic and type systems. On the one hand you have logic systems with propositions and proofs. On the other hand you have type systems with types and programs (or functions). As it turns out these two very different things have very similar rules. This article will explore the Curry-Howard correspondence by constructing a proof system using the Haskell type system (how appropriate since Haskell is named after Haskell Curry, the "Curry" in "Curry-Howard"). We'll set up the rules of logic using Haskell types and programs. Then we'll use these rules as an abstract interface to perform some logic profs.
This course provides an introduction to functional logic programming throught its basic ideas, foundations and implementation techniques. FLP combines the distinctive features of functional programming (algebraic data types, lazy evaluation, polymorphic typing, first-class functions, monadic I/O) and logic programming (logic variables, non-determinism, search) seamlessly through narrowing and residuation. The course will address three kinds of questions: Why are these features useful? What is their underlying theory? How can they be implemented? Lectures will be augmented with weekly programming assignments in Curry, a leading functional logic language. Exercises will serve both to illustrate the use of the language and to illuminate the underlying theory and implementation issues. Prior exposure to functional or logic programming will be useful, but is not required.
Escher Escher is a functional logic programming language designed with the aim of providing in a simple computation mechanism the best features of functional programming and logic programming. The theoretical foundations for Escher is provided in the book `Logic for Learning' by John Lloyd. Escher is implemented in Noweb-C++, with fairly extensive documentation. It is being actively supported.