Dependently typed programming in Agda

  title={Dependently typed programming in Agda},
  author={Ulf Norell},
  booktitle={TLDI '09},
  • U. Norell
  • Published in TLDI '09 24 January 2009
  • Computer Science
Dependently typed languages have for a long time been used to describe proofs about programs. Traditionally, dependent types are used mostly for stating and proving the properties of the programs and not in defining the programs themselves. An impressive example is the certified compiler by Leroy (2006) implemented and proved correct in Coq (Bertot and Castéran 2004). Recently there has been an increased interest in dependently typed programming, where the aim is to write programs that use the… 

Verified programming with explicit coercions

A design of explicitly proving the local correctness of type-transformations in the presence of accumulated constraints can form the basis of a flexible language in concert with a variety of trusted solver.

(Re-)Creating sharing in Agda's GHC backend

The main contributions of this thesis are a series of compiler optimisations that inlines simple projections, removes some expressions with trivial evaluations that can be statically inferred, and reduces the need for repeated evaluations of the same expressions by increasing sharing.

A functional specification of effects

This dissertation provides pure, functional specifications in Haskell of several different effects that may be used to write and verify effectful programs in the framework of type theory, and overcomes this limitation, by presenting total functional species in Agda, a programming language with dependent types.

A framework for improving error messages in dependently-typed languages

This work modify a higher-order unification algorithm that is used to resolve and type-check implicit arguments, and augment this algorithm with replay graphs, allowing for a global heuristic analysis of a unification problem-set, error-tolerant typing, and counter-factual unification, which makes error messages less affected by the order in which types are checked.

Automatic generation of proof terms in dependently typed programming languages

This thesis presents an original type-safe reflection mechanism, where reflected terms are indexed by the original Idris expression that they represent, and shows how it allows us to easily construct and manipulate proofs.

PML2: Integrated Program Verification in ML

The PML 2 language is presented, which provides a uniform environment for programming, and for proving properties of programs in an ML-like setting, and it supports general recursion and a very general form of (implicit, non-coercive) subtyping.

Methods for using Agda to prove Safety and Liveness for Concurrent Programs

The methods are based on the semi-formal theory of the semantics of concurrent programming from [OL82] (Owicki and Lamport, 1981) and work well, but like formal and manually constructed proofs, the implementations are still long and tedious.

Practical Subtyping for Curry-Style Languages

A new, syntax-directed framework for Curry-style type systems with subtyping that deals with complex programs involving mixed induction and coinduction, or even mixed polymorphism and (co-)induction is presented.

Label dependent lambda calculus and gradual typing

A gradual version of a minimalist value-dependent lambda calculus, where dependencies are restricted to labels, drawn from a generic enumeration type and the gradual guarantee for the gradual language is established.

An Intrinsically-Typed Solution for the List-Machine Benchmark

Formal models are important tools in the programming language research community. However, such models are full of intricacies and, due to that, they are subject to subtle errors. Such failures



Why dependent types matter

This talk will explore some of the possibilities and challenges afforded by full spectrum type dependency at the static and dynamic level, and suggest a style of programming embracing 'learning by testing, views, and Burstall's 'hand simulation plus a little induction'.

Towards a practical programming language based on dependent type theory

This thesis is concerned with bridging the gap between the theoretical presentations of type theory and the requirements on a practical programming language.

Program-ing finger trees in Coq

This work implements the structure but also proves its invariants along the way, which permit building certified structures on top of Finger Trees in an elegant way.

Formal certification of a compiler back-end or: programming a compiler with a proof assistant

This paper reports on the development and formal certification of a compiler from Cminor (a C-like imperative language) to PowerPC assembly code, using the Coq proof assistant both for programming the compiler and for proving its correctness.

The power of Pi

This paper exhibits the power of programming with dependent types by dint of embedding three domain-specific languages: Cryptol, a language for cryptographic protocols; a small data description

Intuitionistic type theory

These lectures were given in Padova and Munich later in the same year as part of the meeting on Konstruktive Mengenlehre und Typentheorie which was organized in Munich by Prof. Helmut Schwichtenberg.

Interactive Theorem Proving and Program Development: Coq'Art The Calculus of Inductive Constructions

A practical introduction to the development of proofs and certified programs using Coq. An invaluable tool for researchers, students, and engineers interested in formal methods and the development of

A view from the left

Not in Our Genes: Biology, Ideology, and Human Nature.By R.C. Lewontin, Steven Rose and Leon J. Kamin. Pantheon, New York: 1984. Pp.322. $21.95. To be published in Britain on 27 September by Penguin,

MMacrBtrinid-eL oaf.ndI Jt.u iMtiocKnisintincaT . yTpeheT vhieeowr yfr.o Bmi b tlhioep olelifts.· Jaopuorlni,al 1 of F.unctional Programming

  • MMacrBtrinid-eL oaf.ndI Jt.u iMtiocKnisintincaT . yTpeheT vhieeowr yfr.o Bmi b tlhioep olelifts.· Jaopuorlni,al 1 of F.unctional Programming
  • 2004