Dependent ML An approach to practical programming with dependent types

We present an approach to enriching the type system of ML with a restricted form of dependent types, where type index terms are required to be drawn from a given type index language ${\cal L}$ that is completely separate from run-time programs, leading to the DML(${\cal L}$) language schema. This enrichment allows for specification and inference of significantly more precise type information, facilitating program error detection and compiler optimization. The primary contribution of the paper lies in our language design, which can effectively support the use of dependent types in practical programming. In particular, this design makes it both natural and straightforward to accommodate dependent types in the presence of effects such as references and exceptions.

[1]  C. Barry Jay,et al.  Shape Checking of Array Programs , 1996 .

[2]  Peter B. Andrews An introduction to mathematical logic and type theory - to truth through proof , 1986, Computer science and applied mathematics.

[3]  Robert E. Shostak,et al.  On the SUP-INF Method for Proving Presburger Formulas , 1977, JACM.

[4]  Frank Pfenning,et al.  Higher-order abstract syntax , 1988, PLDI '88.

[5]  Peter B. Andrews General Models, Descriptions, and Choice in Type Theory , 1972, J. Symb. Log..

[6]  Christoph Kreitz,et al.  A Proof Environment for the Development of Group Communication Systems , 1998, CADE.

[7]  Amr Sabry,et al.  Proving the correctness of reactive systems using sized types , 1996, POPL '96.

[8]  Chiyan Chen,et al.  Implementing typeful program transformations , 2003, PPoPP 2003.

[9]  William Pugh,et al.  Eliminating false data dependences using the Omega test , 1992, PLDI '92.

[10]  Andrew K. Wright Simple imperative polymorphism , 1995, LISP Symb. Comput..

[11]  Martin Odersky,et al.  Type Inference with Constrained Types , 1999, Theory Pract. Object Syst..

[12]  Catherine Parent,et al.  Synthesizing Proofs from Programs in the Calculus of Inductive Constructions , 1995, MPC.

[13]  Christoph Zenger,et al.  Indexed Types , 1997, Theoretical Computer Science.

[14]  J. C. Shepherdson,et al.  Mathematical Logic and Programming Languages , 1985 .

[15]  Frank Pfenning,et al.  Refinement types for ML , 1991, PLDI '91.

[16]  Henk Barendregt,et al.  The Lambda Calculus: Its Syntax and Semantics , 1985 .

[17]  Spiro Michaylov,et al.  Design and implementation of practical constraint logic programming systems , 1992 .

[18]  Rance Cleaveland,et al.  Implementing mathematics with the Nuprl proof development system , 1986 .

[19]  STEFAN KAHRS Red-black trees with types , 2001, J. Funct. Program..

[20]  Frank Pfenning,et al.  Type Assignment for Intersections and Unions in Call-by-Value Languages , 2003, FoSSaCS.

[21]  Philip Wadler,et al.  Views: a way for pattern matching to cohabit with data abstraction , 1987, POPL '87.

[22]  Donald Sannella,et al.  Toward Formal Development of ML Programs: Foundations and Methodology (Extended Abstract) , 1989, TAPSOFT, Vol.2.

[23]  John C. Mitchell,et al.  Abstract types have existential type , 1988, TOPL.

[24]  Aaron Stump,et al.  A language-based approach to functionally correct imperative programming , 2005, ICFP '05.

[25]  Joshua Dunfield,et al.  Combining Two Forms of Type Refinements , 2002 .

[26]  J. Y. Girard,et al.  Interpretation fonctionelle et elimination des coupures dans l'aritmetique d'ordre superieur , 1972 .

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

[28]  Frank Pfenning,et al.  Tridirectional typechecking , 2004, POPL.

[29]  Simon L. Peyton Jones,et al.  Simple unification-based type inference for GADTs , 2006, ICFP '06.

[30]  中野 裕,et al.  PX, a computational logic , 1988 .

[31]  Olivier Danvy Functional Unparsing , 1998, J. Funct. Program..

[32]  Alonzo Church,et al.  A formulation of the simple theory of types , 1940, Journal of Symbolic Logic.

[33]  George B. Dantzig,et al.  Fourier-Motzkin Elimination and Its Dual , 1973, J. Comb. Theory A.

[34]  Hongwei Xi,et al.  Applied Type System: Extended Abstract , 2003, TYPES.

[35]  Martin Odersky,et al.  Colored local type inference , 2001, POPL '01.

[36]  Per Martin-Löf,et al.  Constructive mathematics and computer programming , 1984 .

[37]  Chiyan Chen,et al.  Meta-programming through typeful code representation , 2003, ICFP '03.

[38]  Chris Okasaki,et al.  Purely functional data structures , 1998 .

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

[40]  Robert Harper,et al.  A Simplified Account of Polymorphic References , 1994, Inf. Process. Lett..

[41]  William Pugh,et al.  Experiences with Constraint-based Array Dependence Analysis , 1994, PPCP.

[42]  Frank van Harmelen,et al.  Extensions to the Rippling-Out Tactic for Guiding Inductive Proofs , 1990, CADE.

[43]  Robin Milner,et al.  Definition of standard ML , 1990 .

[44]  Christoph Zenger,et al.  Indizierte Typen , 1998 .

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

[46]  Benjamin C. Pierce,et al.  Local type inference , 1998, POPL '98.

[47]  John W. Gray,et al.  Categories in Computer Science and Logic , 1989 .

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

[49]  Simon L. Peyton Jones,et al.  Imperative functional programming , 1993, POPL '93.

[50]  Hongwei Xi,et al.  Dependently Typed Pattern Matching , 2003 .

[51]  Ralf Hinze,et al.  Manufacturing datatypes , 2001, J. Funct. Program..

[52]  Yann Régis-Gianas,et al.  Stratified type inference for generalized algebraic data types , 2006, POPL '06.

[53]  Simon L. Peyton Jones,et al.  Report on the programming language Haskell: a non-strict, purely functional language version 1.2 , 1992, SIGP.

[54]  Timothy G. Griffin,et al.  A formulae-as-type notion of control , 1989, POPL '90.

[55]  VytiniotisDimitrios,et al.  Simple unification-based type inference for GADTs , 2006 .

[56]  Masako Takahashi Parallel Reductions in lambda-Calculus , 1995, Inf. Comput..

[57]  Ralf Hinze,et al.  Haskell 98 — A Non−strict‚ Purely Functional Language , 1999 .

[58]  Albert R. Meyer,et al.  Continuation Semantics in Typed Lambda-Calculi (Summary) , 1985, Logic of Programs.

[59]  Amy P. Felty,et al.  The Coq proof assistant user's guide : version 5.6 , 1990 .

[60]  Natarajan Shankar,et al.  PVS: Combining Specification, Proof Checking, and Model Checking , 1996, FMCAD.

[61]  Chiyan Chen,et al.  Combining programming with theorem proving , 2005, ICFP '05.

[62]  Patrick J. Hayes,et al.  Computation and Deduction , 1973, MFCS.

[63]  Leon Henkin,et al.  Completeness in the theory of types , 1950, Journal of Symbolic Logic.

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