Dependently typed programming with finite sets

Definitions of many mathematical structures used in computer science are parametrized by finite sets. To work with such structures in proof assistants, we need to be able to explain what a finite set is. In constructive mathematics, a widely used definition is listability: a set is considered to be finite, if its elements can be listed completely. In this paper, we formalize different variations of this definition in the Agda programming language. We develop a toolbox for boilerplate-free programming with finite sets that arise as subsets of some base set with decidable equality. Among other things we implement combinators for defining functions from finite sets and a prover for quantified formulas over decidable properties on finite sets.

[1]  John B. Shoven,et al.  I , Edinburgh Medical and Surgical Journal.

[2]  J. L. Bell CONSTRUCTIVE ANALYSIS (Grundlehren der mathematischen Wissenschaften, 279) , 1986 .

[3]  Tarmo Uustalu,et al.  On streams that are finitely red , 2012, Log. Methods Comput. Sci..

[4]  Ulf Norell,et al.  Dependently typed programming in Agda , 2009, TLDI '09.

[5]  Enrico Tassi,et al.  A Small Scale Reflection Extension for the Coq system , 2008 .

[6]  I. Chuang,et al.  Quantum Computation and Quantum Information: Introduction to the Tenth Anniversary Edition , 2010 .

[7]  Philip Wadler,et al.  Comprehending monads , 1990, Mathematical Structures in Computer Science.

[8]  Ioana Pasca,et al.  Canonical Big Operators , 2008, TPHOLs.