Delphin

horizontal rule

Home
Downloads
Publications
Contact Us

Papers

bulletDissertation (includes Delphin user manual)
bulletSimply-Typed Examples
bulletDependently-Typed Examples
bulletAdvanced Example
bulletAdam Poswolsky and Carsten Schürmann.  Programming with Higher-Order Encodings and Dependent Types.  (ESOP 2008).
bullet

Example file from Draft: examples08.d

bullet

Extended Technical Report (TR-1375) (PDF)

bullet

Adam Poswolsky and Carsten Schürmann.  System Description: Delphin -- A Functional Programmling Language for Deductive Systems (Submitted)

bullet

Coverage (Including all proofs.  Warning:  Large document with limited text (DRAFT))

 

Software

Source Code:  Available Here

bulletLatest Version: Version 1.5.1, April 2008
bulletNEW:  Termination-Checker included (lexicographic order of all explicit inputs)
bulletCoverage Checker implements rules here.
bulletCompare:  Converted examples involving First-order Logic from  Twelf (fol.elf)  into Delphin Version (fol.d).
bulletLast Version: Version 1.3.3, November 2007
bulletcompiled in SML/NJ v110.65
bulletDelphin Examples
bulletCompare to Elphin Examples
bulletNew:  July 30th, 2007An example of Hindley-Milner type inference is available using parameters instead of the typical references. 
bulletAvailable here.
bulletWarning:  This is an advanced example.

 

 

Clarifications:

bulletAlthough the predecessor of our work is Elphin, the Delphin system is fundamentally different.  Elphin is only simply-typed and follows a stack-based solution using a modality []T as well as a "pop" construct to control the stack.  We have subsequently abandoned this approach.  Delphin has no [] modality and does not even have a stack.  Hence, there is no "pop" construct controlling a stack.  In Elphin, we used ∇ to express pattern-variables, whereas in Delphin we use ∇ as a Type Constructor similar to Miller and Tiu's. 
bulletThe only thing that Elphin and Delphin have in common is that type-checking guarantees that parameters cannot escape their scope.
bulletWe welcome the reader to compare the systems, although it is best to think of Delphin as something completely new.  To this end, we have converted all of Elphin's examples into Delphin.  Comparing the examples is illustrative in seeing how Delphin is more principled.  We have also included more advanced examples utilizing "functions over parameters" as well as dependent-types which are both not supported in Elphin.

 

bulletThe Delphin elimination form for ∇ is expressed in the paper as "e \x".  As this means e is evaluated without x, it may be more intuitive to write it in a prefix style.  Therefore, we also support the syntax "pop x e" which is just sugar for "e \x".  Again this "pop" should not be confused with the Elphin "pop".

 

Previous Designs

Other recent designs have been made based on Temporal Logic both utilizing a modal operator and a three-tiered hierarchical system.  Both have had their simply-typed version formally verified in Twelf.

bullet

Adam Poswolsky.  A Temporal-Logic Approach to Functional Calculi for Dependent Types and Higher-Order Encodings.
bullet

Concise Version (PDF)

bullet

Extended Technical Report. YALEU/DCS/TR-1364  (PDF)

bullet

Twelf Code (.tar.gz)

bullet

Adam Poswolsky and Carsten Schürmann.  A Temporal-Logic Approach to Programming with Dependent Types and Higher-Order Encodings.  YALEU/DCS/TR-1355 (PDF) (Twelf Code)

 

Related

bullet

Miller and Tiu, A Proof Theory for Generic Judgments: An extended abstract. (PDF)
bullet

Here they present their own ∇ constructor which they use to distinguish between eigenvariables intended for instantiation from those representing scoped constants.  Their reasoning occurs over formulas with an explicit local context of scoped constants.  In our setting there is only a global context, which renders it more useful for functional programming.

bulletBrigitte Pientka. A type-theoretic foundation for programming with higher-order abstract syntax and first-class substitutions (POPL 2008)
bullet

Here they present a simply-typed system also designed to reason over higher-order encodings.  Their approach is quite opposite to our approach.  Whereas we aim to keep meta-level constructs such as context and substitution implicit, they make them explicit objects that the programmer must use.  For example, they introduce the abstraction and application of explicit context variables.  Our approach avoids this by only addressing the "relative" difference in the context using our type constructor.  They acknowledge the problem of having explicit context variables and defer the reconstruction of context variables to future work.

bullet

Dependent Types:
bullet

There are many other systems that have addressed programming with some form of Dependent Types.  Please see the paper here for a more detailed explanation.  However, they stop short of supporting higher-order encodings. 

bullet

Freshness:
bullet

Our work is also related to programming languages with freshness, such as FreshML.  They allow for limited support of higher-order abstract syntax as substitution must still be explicit, albeit easier to write.  In their work the creation of a fresh parameter is a global effect.  Interestingly, there is recent work by Pottier used to prove that names do not escape their scope.  However, in our system the creation of parameters is not a global effect and scoping is guaranteed by typing.
bullet

François Pottier.  Static name control for FreshML.  In LICS'07.

Delphin Elphin CVS Repository

horizontal rule

Home | Downloads | Publications | Contact Us

For problems or questions regarding this web contact poswolsky@cs.yale.edu.
Last updated: 11/14/07.