Putting curry-howard to work

The Curry-Howard isomorphism states that types are propositions and that programs are proofs. This allows programmers to state and enforce invariants of programs by using types. Unfortunately, the type systems of today's functional languages cannot directly express interesting properties of programs. To alleviate this problem, we propose the addition of three new features to functional programming languages such as Haskell: Generalized Algebraic Datatypes, Extensible Kind Systems, and the generation, propagation, and discharging of Static Propositions. These three new features are backward compatible with existing features, and combine to enable a new programming paradigm for functional programmers. This paradigm makes it possible to state and enforce interesting properties of programs using the type system, and it does this in manner that leaves intact the functional programming style, known and loved by functional programmers everywhere.

[1]  S. Doaitse Swierstra,et al.  Typing dynamic typing , 2002, ICFP '02.

[2]  Furio Honsell,et al.  A framework for defining logics , 1993, JACM.

[3]  Bengt Nordström The alf proof editor , 1993 .

[4]  Lawrence C. Paulson,et al.  Isabelle: The Next 700 Theorem Provers , 2000, ArXiv.

[5]  Mark P. Jones A system of constructor classes: overloading and implicit higher-order polymorphism , 1993, FPCA '93.

[6]  Hugo Herbelin,et al.  The Coq proof assistant : reference manual, version 6.1 , 1997 .

[7]  Martin Sulzmann,et al.  A Systematic Translation of Guarded Recursive Data Typesto Existential Types , 2004 .

[8]  Emir Pasalic,et al.  The role of type equality in meta-programming , 2004 .

[9]  Frank Pfenning,et al.  System Description: Twelf - A Meta-Logical Framework for Deductive Systems , 1999, CADE.

[10]  Gang Chen,et al.  Guarded recursive datatype constructors , 2003, POPL '03.

[11]  Conor McBride,et al.  Epigram: Practical Programming with Dependent Types , 2004, Advanced Functional Programming.

[12]  Peter Dybjer,et al.  A Finite Axiomatization of Inductive-Recursive Definitions , 1999, TLCA.

[13]  F. Pfenning Logic programming in the LF logical framework , 1991 .

[14]  Frank Pfenning,et al.  Eliminating array bound checking through dependent types , 1998, PLDI.

[15]  Simon Peyton Jones,et al.  Wobbly types: type inference for generalised algebraic data types∗ , 2004 .

[16]  Emir Pasalic,et al.  Meta-programming With Built-in Type Equality (Extended Abstract) , 2004 .

[17]  Robert Harper,et al.  Type Checking with Universes , 1991, Theor. Comput. Sci..

[18]  Said Jahama Type Reconstruction in the Presence of Polymorphic Recursion and Recursive Types , 1993 .

[19]  Tim Sheard,et al.  WHAT IS A PROOF , 2005 .

[20]  Lennart Augustsson,et al.  Cayenne—a language with dependent types , 1998, ICFP '98.

[21]  Hongwei Xi,et al.  Dead Code Elimination through Dependent Types , 1999, PADL.

[22]  Frank Pfenning,et al.  Dependent types in practical programming , 1999, POPL '99.

[23]  Stephanie Weirich,et al.  Type-safe cast: (functional pearl) , 2000, ICFP '00.

[24]  James Cheney,et al.  First-Class Phantom Types , 2003 .

[25]  Simon L. Peyton Jones,et al.  Practical type inference for arbitrary-rank types , 2007, Journal of Functional Programming.

[26]  François Pottier,et al.  Constraint-Based Type Inference for Guarded Algebraic Data Types , 2005 .

[27]  Emir Pasalic,et al.  Meta-programming with Typed Object-Language Representations , 2004, GPCE.

[28]  Dominic Duggan,et al.  Dynamic typing for distributed programming in polymorphic languages , 1999, TOPL.

[29]  Rowan Davies Refinement-Type Checker for Standard ML , 1997, AMAST.

[30]  Christine Paulin-Mohring,et al.  The coq proof assistant reference manual , 2000 .

[31]  Thierry Coquand,et al.  Inductive Definitions and Type Theory: an Introduction (Preliminary Version) , 1994, FSTTCS.

[32]  James Cheney,et al.  A lightweight implementation of generics and dynamics , 2002, Haskell '02.

[33]  Peter J. Stuckey,et al.  Type Inference for Guarded Recursive Data Types , 2005, ArXiv.