Difference between revisions of "Dependent type"

From HaskellWiki
Jump to navigation Jump to search
m (Specifying exactly which papers are meant as I referred to HaskelDB)
 
(38 intermediate revisions by 17 users not shown)
Line 1: Line 1:
 
__TOC__
 
__TOC__
   
= The concept of dependent types =
+
== The concept of dependent types ==
   
== General ==
+
=== General ===
[http://en.wikipedia.org/wiki/Dependent_types Wikipedia]
 
   
 
* [http://en.wikipedia.org/wiki/Dependent_types Wikipedia]
[http://www-sop.inria.fr/oasis/Caminha00/abstract.html Dependent Types in Programming] abstract in APPSEM'2000
+
* [http://www-sop.inria.fr/oasis/Caminha00/abstract.html Dependent Types in Programming] abstract in APPSEM'2000
  +
* [http://www.brics.dk/RS/01/10/BRICS-RS-01-10.ps.gz Do we need dependent types?] by Daniel Fridlender and Mia Indrika, 2001.
   
  +
== Type Theory ==
+
=== 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 Curry-Howard isomorphism] and the connections between logic and programming,
 
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 Curry-Howard isomorphism] and the connections between logic and programming,
 
the book seemed cathartic for me even from its beginning.
 
the book seemed cathartic for me even from its beginning.
  +
  +
Another interesting approach to Curry-Howard isomorphism and the concept of dependent type: [http://www.cs.chalmers.se/~aarne/course-langtech/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 Haskell-related approaches to linguistics|his online course and other linguistical materials on the Linguistics wikipage]].
   
 
[http://lists.seas.upenn.edu/mailman/listinfo/types-list Types Forum]
 
[http://lists.seas.upenn.edu/mailman/listinfo/types-list Types Forum]
   
== Illative Combinatory Logic ==
+
=== 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 first-order propositional and predicate calculus] by Henk Barendregt, Martin Bunder, Wil Dekkers.
 
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 first-order propositional and predicate calculus] by Henk Barendregt, Martin Bunder, Wil Dekkers.
Line 27: Line 31:
   
   
= Dependently typed languages =
+
== Dependently typed languages ==
   
== Epigram ==
+
=== Epigram ===
   
[http://www.e-pig.org/ Epigram] is a full dependently typed programming language see especially
+
[http://www.e-pig.org/ Epigram] is a full dependently typed programming language, see especially
* [http://www.e-pig.org/downloads/epigram-notes.pdf Epigram Tutorial] by Conor McBride
+
* [http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.115.9718&rep=rep1&type=pdf Epigram Tutorial] by Conor McBride
* and [http://www.e-pig.org/downloads/ydtm.pdf Why dependent types matter] by Thorsten Altenkirch, Conor McBride and James McKinna).
+
* 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 not-forgetful concept of '''views''' (already mentioned in the Haskell [[Future]];
+
Dependent types (of this language) also provide a not-forgetful 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'').
   
  +
See Epigram also as [[Libraries and tools/Theorem provers|theorem prover]].
== Other techniques ==
 
   
  +
=== Agda ===
[http://www-sop.inria.fr/oasis/DTP00/ APPSEM Workshop on Subtyping & Dependent Types in Programming]
 
   
  +
[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 Haskell-like syntax.
= Dependent types in Haskell programming =
 
== Proposals ==
 
John Hughes: [http://www.coverproject.org/TalksUntilSpring2004/DependentTypesInHaskell.pdf Dependent Types in Haskell (some ideas)].
 
   
  +
People who are interested also in theorem proving may see the [[Libraries and tools/Theorem provers|theorem provers]] page.
== Simulating them ==
 
  +
* [http://haskell.org/hawiki/SimulatingDependentTypes SimulatingDependentTypes] of HaWiki
 
  +
=== Idris ===
* [[Smart constructors]]
 
  +
  +
[http://idris-lang.org/ Idris] is a general purpose pure functional programming language with dependent types, eager evaluation, and optional lazy evaluation via laziness annotations. It has a very Haskell-like syntax and is available on [http://hackage.haskell.org/package/idris Hackage].
  +
  +
Idris is actively developed by [http://edwinb.wordpress.com/ Edwin Brady] at the [http://www.cs.st-andrews.ac.uk/ University of St. Andrews].
  +
  +
=== Cayenne ===
  +
  +
[https://en.wikipedia.org/wiki/Cayenne_(programming_language) Cayenne] is influenced also by [http://en.wikipedia.org/wiki/Constructive_type_theory constructive type theory]. The compiler can be found at [https://github.com/csgordon/cayenne GitHub]
  +
  +
Dependent types make it possible not to have a separate module language and a core language. This idea may concern Haskell too, see [[First-class module]] page.
  +
  +
Dependent types make it useful also as a [[Applications and libraries/Theorem provers|theorem prover]].
  +
 
== Dependent types in Haskell programming ==
  +
  +
=== Lightweight Dependent Typing ===
  +
[http://okmij.org/ftp/Computation/lightweight-static-guarantees.html These] [http://okmij.org/ftp/Haskell/dependent-types.html pages] describe a 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 Knuth-Morris-Pratt
  +
string search). The page also briefly describes `singleton types' (Hayashi and
  +
Xi).
  +
  +
=== Library ===
  +
  +
[http://www.cs.st-and.ac.uk/~eb/ivor.php Ivor] is type theory based theorem proving library -- written by [http://www.dcs.st-and.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 ===
  +
* Richard A. Eisenberg: [https://arxiv.org/pdf/1610.07978.pdf Dependent Types in Haskell: Theory and Practice]
 
* John Hughes: <s> [http://www.coverproject.org/TalksUntilSpring2004/DependentTypesInHaskell.pdf Dependent Types in Haskell (some ideas)]</s> (404).
  +
 
=== 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
 
* [https://web.archive.org/web/20060203083622/http://www.haskell.org:80/hawiki/SimulatingDependentTypes SimulatingDependentTypes] of HaWiki (Web Archive)
  +
* 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
 
* 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])
 
** [http://haskelldb.sourceforge.net/ updated] page (see ''Papers'' subsection on [http://haskelldb.sourceforge.net/#documentation Documentation])
Line 54: Line 91:
   
 
[[Category:Theoretical foundations]]
 
[[Category:Theoretical foundations]]
  +
  +
[[Category:Type-level programming]]

Latest revision as of 16:00, 19 April 2021

The concept of dependent types

General


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.

Types Forum

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:


Dependently typed languages

Epigram

Epigram is a full dependently typed programming language, see especially

Dependent types (of this language) also provide a not-forgetful 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.

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 Haskell-like syntax.

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

Idris

Idris is a general purpose pure functional programming language with dependent types, eager evaluation, and optional lazy evaluation via laziness annotations. It has a very Haskell-like syntax and is available on Hackage.

Idris is actively developed by Edwin Brady at the University of St. Andrews.

Cayenne

Cayenne is influenced also by constructive type theory. The compiler can be found at GitHub

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

Dependent types make it useful also as a theorem prover.

Dependent types in Haskell programming

Lightweight Dependent Typing

These pages describe a 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 Knuth-Morris-Pratt string search). The page also briefly describes `singleton types' (Hayashi and Xi).

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).

Proposals

Simulating them