forked from agda/agda-stdlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README.agda
287 lines (197 loc) · 8.61 KB
/
README.agda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
{-# OPTIONS --rewriting --guardedness --sized-types #-}
module README where
------------------------------------------------------------------------
-- The Agda standard library, version 2.0
--
-- Authors: Nils Anders Danielsson, Matthew Daggitt, Guillaume Allais
-- with contributions from Andreas Abel, Stevan Andjelkovic,
-- Jean-Philippe Bernardy, Peter Berry, Bradley Hardy Joachim Breitner,
-- Samuel Bronson, Daniel Brown, Jacques Carette, James Chapman,
-- Liang-Ting Chen, Dominique Devriese, Dan Doel, Érdi Gergő,
-- Zack Grannan, Helmut Grohne, Simon Foster, Liyang Hu, Jason Hu,
-- Patrik Jansson, Alan Jeffrey, Wen Kokke, Evgeny Kotelnikov,
-- Sergei Meshveliani, Eric Mertens, Darin Morrison, Guilhem Moulin,
-- Shin-Cheng Mu, Ulf Norell, Noriyuki Ohkawa, Nicolas Pouillard,
-- Andrés Sicard-Ramírez, Lex van der Stoep, Sandro Stucki, Milo Turner,
-- Noam Zeilberger and other anonymous contributors.
------------------------------------------------------------------------
-- This version of the library has been tested using Agda 2.6.2.
-- The library comes with a .agda-lib file, for use with the library
-- management system.
-- Currently the library does not support the JavaScript compiler
-- backend.
------------------------------------------------------------------------
-- Stability guarantees
------------------------------------------------------------------------
-- We do our best to adhere to the spirit of semantic versioning in that
-- minor versions should not break people's code. This applies to the
-- the entire library with one exception: modules with names that end in
-- either ".Core" or ".Primitive".
-- The former have (mostly) been created to avoid mutual recursion
-- between modules and the latter to bind primitive operations to the
-- more efficient operations supplied by the relevant backend.
-- These modules may undergo backwards incompatible changes between
-- minor versions and therefore are imported directly at your own risk.
-- Instead their contents should be accessed by their parent module,
-- whose interface will remain stable.
------------------------------------------------------------------------
-- High-level overview of contents
------------------------------------------------------------------------
-- The top-level module names of the library are currently allocated
-- as follows:
--
-- • Algebra
-- Abstract algebra (monoids, groups, rings etc.), along with
-- properties needed to specify these structures (associativity,
-- commutativity, etc.), and operations on and proofs about the
-- structures.
-- • Axiom
-- Types and consequences of various additional axioms not
-- necessarily included in Agda, e.g. uniqueness of identity
-- proofs, function extensionality and excluded middle.
import README.Axiom
-- • Category
-- Category theory-inspired idioms used to structure functional
-- programs (functors and monads, for instance).
-- • Codata
-- Coinductive data types and properties. There are two different
-- approaches taken. The `Codata` folder contains the new more
-- standard approach using sized types. The `Codata.Musical`
-- folder contains modules using the old musical notation.
-- • Data
-- Data types and properties.
import README.Data
-- • Function
-- Combinators and properties related to functions.
-- • Foreign
-- Related to the foreign function interface.
-- • Induction
-- A general framework for induction (includes lexicographic and
-- well-founded induction).
-- • IO
-- Input/output-related functions.
import README.IO
-- • Level
-- Universe levels.
-- • Reflection
-- Support for reflection.
-- • Relation
-- Properties of and proofs about relations.
-- • Size
-- Sizes used by the sized types mechanism.
-- • Strict
-- Provides access to the builtins relating to strictness.
-- • Tactic
-- Tactics for automatic proof generation
-- ∙ Text
-- Format-based printing, Pretty-printing, and regular expressions
------------------------------------------------------------------------
-- Library design
------------------------------------------------------------------------
-- The following modules contain a discussion of some of the choices
-- that have been made whilst designing the library.
-- • How mathematical hierarchies (e.g. preorder, partial order, total
-- order) are handled in the library.
import README.Design.Hierarchies
-- • How decidability is handled in the library.
import README.Design.Decidability
------------------------------------------------------------------------
-- A selection of useful library modules
------------------------------------------------------------------------
-- Note that module names in source code are often hyperlinked to the
-- corresponding module. In the Emacs mode you can follow these
-- hyperlinks by typing M-. or clicking with the middle mouse button.
-- • Some data types
import Data.Bool -- Booleans.
import Data.Char -- Characters.
import Data.Empty -- The empty type.
import Data.Fin -- Finite sets.
import Data.List -- Lists.
import Data.Maybe -- The maybe type.
import Data.Nat -- Natural numbers.
import Data.Product -- Products.
import Data.String -- Strings.
import Data.Sum -- Disjoint sums.
import Data.Unit -- The unit type.
import Data.Vec -- Fixed-length vectors.
-- • Some co-inductive data types
import Codata.Stream -- Streams.
import Codata.Colist -- Colists.
-- • Some types used to structure computations
import Category.Functor -- Functors.
import Category.Applicative -- Applicative functors.
import Category.Monad -- Monads.
-- • Equality
-- Propositional equality:
import Relation.Binary.PropositionalEquality
-- Convenient syntax for "equational reasoning" using a preorder:
import Relation.Binary.Reasoning.Preorder
-- Solver for commutative ring or semiring equalities:
import Algebra.Solver.Ring
-- • Properties of functions, sets and relations
-- Monoids, rings and similar algebraic structures:
import Algebra
-- Negation, decidability, and similar operations on sets:
import Relation.Nullary
-- Properties of homogeneous binary relations:
import Relation.Binary
-- • Induction
-- An abstraction of various forms of recursion/induction:
import Induction
-- Well-founded induction:
import Induction.WellFounded
-- Various forms of induction for natural numbers:
import Data.Nat.Induction
-- • Support for coinduction
import Codata.Musical.Notation
import Codata.Thunk
-- • IO
import IO
-- ∙ Text
-- Dependently typed formatted printing
import Text.Printf
------------------------------------------------------------------------
-- More documentation
------------------------------------------------------------------------
-- Some examples showing how the case expression can be used.
import README.Case
-- Some examples showing how combinators can be used to emulate
-- "functional reasoning"
import README.Function.Reasoning
-- An example showing how to use the debug tracing mechanism to inspect
-- the behaviour of compiled Agda programs.
import README.Debug.Trace
-- An exploration of the generic programs acting on n-ary functions and
-- n-ary heterogeneous products
import README.Nary
-- Explaining the inspect idiom: use case, equivalent handwritten
-- auxiliary definitions, and implementation details.
import README.Inspect
-- Explaining how to use the automatic solvers
import README.Tactic.MonoidSolver
import README.Tactic.RingSolver
-- Explaining how the Haskell FFI works
import README.Foreign.Haskell
-- Explaining string formats and the behaviour of printf
import README.Text.Printf
-- Showcasing the pretty printing module
import README.Text.Pretty
-- Demonstrating the regular expression matching
import README.Text.Regex
-- Explaining how to display tables of strings:
import README.Text.Tabular
------------------------------------------------------------------------
-- All library modules
------------------------------------------------------------------------
-- For short descriptions of every library module, see Everything;
-- to exclude unsafe modules, see EverythingSafe:
import Everything
import EverythingSafe
-- Note that the Everything* modules are generated automatically. If
-- you have downloaded the library from its Git repository and want
-- to type check README then you can (try to) construct Everything by
-- running "cabal install && GenerateEverything".
-- Note that all library sources are located under src or ffi. The
-- modules README, README.* and Everything are not really part of the
-- library, so these modules are located in the top-level directory
-- instead.