Dependent type
From HaskellWiki
EndreyMark (Talk  contribs) m (Using level 1 headlines for toplevel structuring, according to HaskellWiki:Guidelines) 
(→Cayenne: links updated; link added for constructive type theory) 

(39 intermediate revisions by 14 users not shown)  
Line 1:  Line 1:  
__TOC__ 
__TOC__ 

−  = The concept of dependent types = 
+  == The concept of dependent types == 
−  [http://wwwsop.inria.fr/oasis/Caminha00/abstract.html Dependent Types in Programming] abstract in APPSEM'2000 
+  === General === 
−  To see how Illative [[CombinatoryLogic]] deals with dependent types, see combinator '''G''' described in [http://citeseer.ist.psu.edu/246934.html Systems of Illative Combinatory Logic complete for firstorder propositional and predicate calculus] by Henk Barendregt, Martin Bunder, Wil Dekkers. 
+  * [http://en.wikipedia.org/wiki/Dependent_types Wikipedia] 
+  * [http://wwwsop.inria.fr/oasis/Caminha00/abstract.html Dependent Types in Programming] abstract in APPSEM'2000 

+  * [http://www.brics.dk/RS/01/10/BRICSRS0110.ps.gz Do we need dependent types?] by Daniel Fridlender and Mia Indrika, 2001. 

+  
+  
+  === Type theory === 

+  
+  Simon Thompson: [http://www.cs.kent.ac.uk/people/staff/sjt/TTFP/ Type Theory and Functional Programming]. Section 6.3 deals with dependent types, but because of the strong emphasis on [http://en.wikipedia.org/wiki/Curry_Howard_isomorphism CurryHoward isomorphism] and the connections between logic and programming, 

+  the book seemed cathartic for me even from its beginning. 

+  
+  Another interesting approach to CurryHoward isomorphism and the concept of dependent type: [http://www.cs.chalmers.se/~aarne/courselangtech/lectures/lang09.html Lecture 9. Semantics and pragmatics of text and dialogue] dicsusses these concepts in the context of linguistics. Written by [http://www.cs.chalmers.se/~aarne/ Arne Ranta], see also [[Libraries and tools/Linguistics#Other functional or Haskellrelated approaches to linguisticshis online course and other linguistical materials on the Linguistics wikipage]]. 

+  
+  [http://lists.seas.upenn.edu/mailman/listinfo/typeslist Types Forum] 

+  
+  === Illative combinatory logic === 

+  
+  To see how Illative [[Combinatory logic]] deals with dependent types, see combinator '''G''' described in [http://citeseer.ist.psu.edu/246934.html Systems of Illative Combinatory Logic complete for firstorder propositional and predicate calculus] by Henk Barendregt, Martin Bunder, Wil Dekkers. 

It seems to me that the dependent type construct 
It seems to me that the dependent type construct 

<math>\forall x : S \Rightarrow T</math> 
<math>\forall x : S \Rightarrow T</math> 

Line 15:  Line 15:  
−  = Dependently typed languages = 
+  == Dependently typed languages == 
−  [http://www.epig.org/ Epigram] is a full dependently typed programming language see especially 
+  === Epigram === 
−  * [http://www.epig.org/downloads/epigramnotes.pdf Epigram Tutorial] by Conor McBride 

−  * and [http://www.epig.org/downloads/ydtm.pdf Why dependent types matter] by Thorsten Altenkirch, Conor McBride and James McKinna). 

−  Dependent types (of this language) also provide a notforgetful concept of '''views''' (already mentioned in the Haskell [[Future]]; 
+  [http://www.epig.org/ Epigram] is a full dependently typed programming language, see especially 
+  * [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.115.9718&rep=rep1&type=pdf Epigram Tutorial] by Conor McBride 

+  * and [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.106.8190&rep=rep1&type=pdf Why dependent types matter] by Thorsten Altenkirch, Conor McBride and James McKinna). 

+  
+  Dependent types (of this language) also provide a notforgetful concept of '''views''' (already mentioned in the Haskell [[Future of Haskell#Extensions of Haskell]]; 

the connection between these concepts is described in p. 32 of Epigram Tutorial (section ''4.6 Patterns Forget; Matching Is Remembering''). 
the connection between these concepts is described in p. 32 of Epigram Tutorial (section ''4.6 Patterns Forget; Matching Is Remembering''). 

−  = Dependent types in Haskell programming = 
+  See Epigram also as [[Libraries and tools/Theorem proverstheorem prover]]. 
+  
+  === Agda === 

+  
+  [http://www.cs.chalmers.se/~ulfn/Agda/ Agda] is a system for incrementally developing proofs and programs. Agda is also a functional language with dependent types. This language is similar to Epigram but has a more Haskelllike syntax. 

+  
+  People who are interested also in theorem proving may see the [[Libraries and tools/Theorem proverstheorem provers]] page. 

+  
+  === Cayenne === 

+  
+  [http://www.augustsson.net/Darcs/Cayenne/html/ Cayenne] is influenced also by [http://en.wikipedia.org/wiki/Constructive_type_theory constructive type theory]. 

+  
+  Dependent types make it possible not to have a separate module language and a core language. This idea may concern Haskell too, see [[Firstclass module]] page. 

+  
+  Dependent types make it useful also as a [[Applications and libraries/Theorem proverstheorem prover]]. 

+  
+  == Dependent types in Haskell programming == 

+  
+  === Lightweight Dependent Typing === 

+  [http://pobox.com/~oleg/ftp/Computation/lightweightdependenttyping.html This web page] describes the lightweight approach 

+  and its applications, e.g., statically safe head/tail functions and 

+  the elimination 

+  of array bound check (even in such complex algorithms as KnuthMorrisPratt 

+  string search). The page also briefly describes `singleton types' (Hayashi and 

+  Xi). 

+  
+  === Library === 

+  
+  [http://www.cs.stand.ac.uk/~eb/ivor.php Ivor] is type theory based theorem proving library  written by [http://www.dcs.stand.ac.uk/~eb/index.php Edwin Brady] (see also the author's homepage, there are a lot of materials concerning dependent type theory there). 

+  
+  === Proposals === 

+  John Hughes: [http://www.coverproject.org/TalksUntilSpring2004/DependentTypesInHaskell.pdf Dependent Types in Haskell (some ideas)]. 

+  
+  === Simulating them === 

+  * [http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.22.2636 Faking it: Simulating Dependent Types in Haskell], by Conor McBride 

+  * <s>[http://haskell.org/hawiki/SimulatingDependentTypes SimulatingDependentTypes] of HaWiki</s> (404 Error) 

+  * The [[Type#See also''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 

+  ** [http://haskelldb.sourceforge.net/ updated] page (see ''Papers'' subsection on [http://haskelldb.sourceforge.net/#documentation Documentation]) 

+  ** which presupposes reading also paper on the [http://www.haskell.org/haskellDB/ original] page (see [http://www.haskell.org/haskellDB/doc.html Documentation subpage], PostScript version) 

+  
+  [[Category:Theoretical foundations]] 

−  * John Hughes: [http://www.coverproject.org/TalksUntilSpring2004/DependentTypesInHaskell.pdf Dependent Types in Haskell (some ideas)]. 
+  [[Category:Typelevel programming]] 
−  * [http://haskell.org/hawiki/SimulatingDependentTypes SimulatingDependentTypes] of HaWiki 
Revision as of 20:29, 8 August 2012
Contents 
1 The concept of dependent types
1.1 General
 Wikipedia
 Dependent Types in Programming abstract in APPSEM'2000
 Do we need dependent types? by Daniel Fridlender and Mia Indrika, 2001.
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 CurryHoward isomorphism and the connections between logic and programming, the book seemed cathartic for me even from its beginning.
Another interesting approach to CurryHoward 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 firstorder 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 notforgetful concept of views (already mentioned in the Haskell Future of Haskell#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 similar to Epigram but has a more Haskelllike syntax.
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.
Dependent types make it possible not to have a separate module language and a core language. This idea may concern Haskell too, see Firstclass module page.
Dependent types make it useful also as a theorem prover.
3 Dependent types in Haskell programming
3.1 Lightweight Dependent Typing
This web page describes the lightweight approach and its applications, e.g., statically safe head/tail functions and the elimination of array bound check (even in such complex algorithms as KnuthMorrisPratt string search). The page also briefly describes `singleton types' (Hayashi and Xi).
3.2 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.3 Proposals
John Hughes: Dependent Types in Haskell (some ideas).
3.4 Simulating them
 Faking it: Simulating Dependent Types in Haskell, by Conor McBride

SimulatingDependentTypes of HaWiki(404 Error)  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)