# Dependent type

### From HaskellWiki

EndreyMark (Talk | contribs) (→Library: Adding Ivor theorem prover, and other related materials found on Edwin Brady's homepage) |
EndreyMark (Talk | contribs) (→Qi: and Blaise: Lisp-based languages with dependent types) |
||

Line 55: | Line 55: | ||

Depandent types make it useful also as a [[Libraries and tools/Theorem provers|theorem prover]]. | Depandent types make it useful also as a [[Libraries and tools/Theorem provers|theorem prover]]. | ||

+ | |||

+ | === Qi === | ||

+ | |||

+ | [http://www.lambdassociates.org/ Qi] is aLisp-based functional programming language. It provides many possibilities (currying, pattern matching, type checking etc.), and it uses sequent calculus notation for defining new types. This enables [http://www.lambdassociates.org/advtypes.htm a very powerful type system]. | ||

+ | |||

=== Other techniques === | === Other techniques === | ||

+ | |||

+ | Also [http://www.defmacro.org/blaise/faq.html Blaise] is a Lisp-based language with dependent types. It will be released under GPL, but has not yet a released implementation. | ||

[http://www-sop.inria.fr/oasis/DTP00/ APPSEM Workshop on Subtyping & Dependent Types in Programming] | [http://www-sop.inria.fr/oasis/DTP00/ APPSEM Workshop on Subtyping & Dependent Types in Programming] |

## Revision as of 12:09, 10 October 2006

## Contents |

## 1 The concept of dependent types

### 1.1 General

Dependent Types in Programming abstract in APPSEM'2000

### 1.2 Type theory

Simon Thompson: Type Theory and Functional Programming. Section 6.3 deals with dependent types, but because of the strong emphasis on Curry-Howard isomorphism and the connections between logic and programming, the book seemed cathartic for me even from its beginning.

Another interesting approach to Curry-Howard isomorphism and the concept of dependent type: Lecture 9. Semantics and pragmatics of text and dialogue dicsusses these concepts in the context of linguistics. Written by Arne Ranta, see also his online course and other linguistical materials on the Linguistics wikipage.

### 1.3 Illative combinatory logic

To see how Illative Combinatory logic deals with dependent types, see combinator **G** described in Systems of Illative Combinatory Logic complete for first-order propositional and predicate calculus by Henk Barendregt, Martin Bunder, Wil Dekkers.
It seems to me that the dependent type construct
of Epigram corresponds to
in Illative Combinatory Logic. I think e.g. the followings should correspond to each other:

## 2 Dependently typed languages

### 2.1 Epigram

Epigram is a full dependently typed programming language, see especially

- Epigram Tutorial by Conor McBride
- and Why dependent types matter by Thorsten Altenkirch, Conor McBride and James McKinna).

Dependent types (of this language) also provide a not-forgetful concept of **views** (already mentioned in the Haskell Future#Extensions of Haskell;
the connection between these concepts is described in p. 32 of Epigram Tutorial (section *4.6 Patterns Forget; Matching Is Remembering*).

See Epigram also as theorem prover.

### 2.2 Agda

“Agda is a system for incrementally developing proofs and programs. Agda is also a functional language with dependent types. This language is very similar to cayenne and agda is intended to be a (almost) full implementation of it in the future.“

People who are interested also in theorem proving may see the theorem provers page.

### 2.3 Cayenne

Cayenne is influenced also by constructive type theory (see its page).

Dependent types make it possible not to have a separate module lenguage and a core language. This idea may concern Haskell too, see First-class module page.

Depandent types make it useful also as a theorem prover.

### 2.4 Qi

Qi is aLisp-based functional programming language. It provides many possibilities (currying, pattern matching, type checking etc.), and it uses sequent calculus notation for defining new types. This enables a very powerful type system.

### 2.5 Other techniques

Also Blaise is a Lisp-based language with dependent types. It will be released under GPL, but has not yet a released implementation.

APPSEM Workshop on Subtyping & Dependent Types in Programming

## 3 Dependent types in Haskell programming

### 3.1 Library

Ivor is type theory based theorem proving library -- written by Edwin Brady (see also the author's homepage, there are a lot of materials concerning dependent type theory there).

### 3.2 Proposals

John Hughes: Dependent Types in Haskell (some ideas).

### 3.3 Simulating them

- SimulatingDependentTypes of HaWiki
- The
*See also*section of Type page contains links to many related idioms. Especially type arithmetic seems to me also a way yielding some tastes from dependent type theory. - On the usefulness of such idioms in practice, see HaskellDB's pages
- updated page (see
*Papers*subsection on Documentation) - which presupposes reading also paper on the original page (see Documentation subpage, PostScript version)

- updated page (see