Agda (Rev #23, changes) in nLab
Showing changes from revision #22 to #23: Added | Removed | Changed
Context
Type theory
natural deduction metalanguage, practical foundations
type theory (dependent, intensional, observational type theory, homotopy type theory)
computational trinitarianism = \linebreak propositions as types +programs as proofs +relation type theory/category theory
Constructivism, Realizability, Computability
constructive mathematics, realizability, computability
propositions as types, proofs as programs, computational trinitarianism
Constructive mathematics
Realizability
Computability
Contents
Overview
A dependently typed functional programming language with applications to certified programming. It is also used as a proof assistant.
Besides Coq, Agda is one of the languages in which homotopy type theory has been implemented (Brunerie). Agda can be compiled to Haskell, Epic or Javascript.
Variants
Cubical Agda
Cubical Agda is a version mode of Agda (turned on by the flag--cubical
) that implements a type theory similar to CCHM (De Morgan) cubical type theory.
Its main difference from CCHM is that instead of an exotype of “cofibrant propositions” it uses the interval itself, replacing cofibrant propositions by statements of the form r≡1r \equiv 1 for some dimension expression rr. This change does not prevent the construction of a model for the theory in De Morgan cubical sets, although it doesn’t technically fall under the Orton-Pitts axioms since II is not a subobject of Ω\Omega, and no one has checked whether this model can be strengthened to a Quillen model category.
More problematically, to support identity types a la Swan (which are distinct from both cubical “path types” and Martin-Lof “identity types” – the latter sometimes called “jdentity types” to emphasize their definition relative to the J-eliminator) the type of cofibrant propositions must support a dominance. Cubical Agda thus assumes that II supports a dominance, but this is not true in De Morgan cubical sets. So the semantics of the entirety of Cubical Agda, with Swan identity types, is unclear. (For this reason, the Cubical Agda library generally avoids using Swan identity types, although Cubical Agda supports them.)
Ordinary Martin-Lof jdentity types? should, in principle, also be definable in Cubical Agda as an indexed inductive family, with computational behavior as usual for any inductive types in cubical type theory. As of March 2021, however, there is a bug in Cubical Agda that prevents jdentity types from computing correctly.
Guarded Cubical Agda
The guarded cubical variant extends cubical Agda to support guarded recursive definitions which can be used to formalize synthetic guarded domain theory.
Agda-flat
The variant Agda-flat
is a mode of Agda that implements aco-monadic modal operator ♭\flat (“flat”, following the notation used in cohesive homotopy type theory as introduced in dcct and type-theorertically developed in Shulman 15). This makes Agda model a modal type theory and hence a modal homotopy type theory, such as used, for instance, in Wellen 2017.
See:
Little-known features
Listed here are some little-known or undocumented features of Agda that are sometimes useful. Note that undocumented “features” may change without warning; this list is current as of September 2022, Agda v2.6.2.
-
There are a lot of useful documented keybindings that you may not be aware of.
- This appears not to be documented in the manual (although it is in the Emacs docstring): When in a hole, the commands
C-c C-,
andC-c C-.
can be prefixed withC-u C-u
to normalize the type of the hole (and the term, in the second case) before displaying them.
- This appears not to be documented in the manual (although it is in the Emacs docstring): When in a hole, the commands
-
The manual doesn’t document the customizable variables in the Emacs mode. Of particular note are:
agda-input-user-translations
allows you to add new bindings to the Unicode input modeagda2-highlight-level
, when set tointeractive
, uses highlighting to display realtime information about which terms and subterms in the buffer Agda is currently typechecking.agda2-program-args
allows you to add command-line arguments to be used every time (e.g. the-v
options below). This in in addition to the arguments specified by a particular file in theOPTIONS
line.
-
The command
-v
(verbose output) accepts various additional options that are, according to the developers, “documented by their implementation”. These include:rewriting.rewrite:50
— displays information about attempted uses of rewrite rules.rewriting.match:60
— displays information about attempted matches during rewriting.import.chase:2
— when compiling imported files, displays a notification when each file is completed in addition to when it is started.
Unfortunately, the output produced by these flags appears in the
*Agda debug*
buffer, which is not visible by default, rather than the standardAgdaInfo
buffer.
based on plain type theory/set theory:
based on dependent type theory/homotopy type theory:
based on cubical type theory:
-
-
1lab (cross-linked reference resource)
based on modal type theory:
based on simplicial type theory:
For monoidal category theory:
projects for formalization of mathematics with proof assistants:
-
Archive of Formal Proofs (using Isabelle)
-
ForMath project (using Coq)
-
UniMath project (using Coq and Agda)
-
Xena project (using Lean)
Other proof assistants
Historical projects that died out:
References
General information on Agda is at
-
Dan Licata, Ian Voysey, Programming and proving in Agda
With emphasis on the dependent type theory-aspect:
-
Ulf Norell, Towards a practical programming language based on dependent type theory, PhD thesis (2007) [[pdf](https://www.cse.chalmers.se/~ulfn/papers/thesis.pdf), pdf]
-
Ulf Norell, Dependently Typed Programming in Agda, p. 230-266 in: Advanced Functional Programming AFP 2008. Lecture Notes in Computer Science 5832 (2009) [[doi:10.1007/978-3-642-04652-0_5](https://doi.org/10.1007/978-3-642-04652-0_5), pdf]
A tutorial for use of Agda as an implementation of homotopy type theory is at
-
Guillaume Brunerie, Agda for homotopy type theory (web)
-
Guillaume Brunerie, The Agda proof assistant, slides, pdf
and specifically of Cubical Agda as an implementation of cubical type theory:
- Andrea Vezzosi, Anders Mörtberg and Andreas Abel, Cubical Agda: A Dependently Typed Programming Language with Univalence and Higher Inductive Types, 2019 (pdf)
On homotopy type theory and univalent foundations of mathematics in/with Agda:
- Martín Hötzel Escardó, Introduction to Univalent Foundations of Mathematics with Agda [[arXiv:1911.00580](https://arxiv.org/abs/1911.00580), webpage]
The HoTT-Agda library is at
- github, hott-agda
Revision on September 7, 2022 at 15:55:39 by Mike Shulman See the history of this page for a list of all contributions to it.