Russell
Russell is a language for programming with dependent types in Coq. It uses an adaptation of the predicate subtyping feature of PVS to allow users to write only algorithmic code while using strong specifications. Proof obligations are generated automatically, and, once proved, permit to build a complete, valid Coq term. A report [1] (in french) with full proofs is available as well as an article [2] describing the theoretical development. I'm working on a complete formalization of this in Coq, here's the relevant page.
As an example of using Russell to develop programs with dependent types, I implemented the Finger Tree data structure [3] in Coq. It gives quite a few insights about the power of dependent types for specification and their practical use [4]. Here's the relevant page. You can have a look at the example on celebrities in a party inspired by Richard Bird's article. Yet a lighter example: quicksort.
I developed a complete formalization [5] of simply-typed lambda calculus with constants in the dependently-typed style with the help of Program. It includes a tait-style proof of weak normalization. The Coq file is here.
Here are the slides of a talk i gave at the LRI on Program, Russell's incarnation in Coq. The updated version for another seminar at Gallium.
1
Coercion par prédicats en Coq. Matthieu Sozeau, Master's Thesis,Université Paris VII, LRI, Orsay, 2005 - In french.
2
Subset Coercions in Coq in TYPES'06. Matthieu Sozeau. Volume 4502 of Lecture Notes in Computer Science. Springer, 2007, pp.237--252.
3
Finger Trees: A Simple General-purpose Data Structure. Ralf Hinze and Ross Paterson J. Funct. Program. 16 (2), Available at http://www.soi.city.ac.uk/~ross/papers/FingerTree.html, 2006, pp.197--217.
4
Program-ing Finger Trees in Coq in ICFP'07: Proceedings of the 2007 ACM SIGPLAN International Conference on Functional Programming. Matthieu Sozeau. ACM Press, Freiburg, Germany, 2007, pp.13--24.
Valid XHTML 1.1! Valid CSS!