corrected spelling

This commit is contained in:
wadler 2018-03-18 19:30:35 -03:00
parent cd37b8a2ce
commit b58de9d80e
9 changed files with 33 additions and 32 deletions

View file

@ -27,6 +27,7 @@ For answering questions on the Agda mailing list.
* Nils Anders Danielsson <nad@cse.gu.se> * Nils Anders Danielsson <nad@cse.gu.se>
* Miëtek Bak <mietek@bak.io> * Miëtek Bak <mietek@bak.io>
* Gergő Érdi <gergo@erdi.hu> * Gergő Érdi <gergo@erdi.hu>
* Adam Sandberg Eriksson <adam@sandbergericsson.se>
* David Janin <david.janin@labri.fr> * David Janin <david.janin@labri.fr>
* András Kovács <kovacsahun@hotmail.com> * András Kovács <kovacsahun@hotmail.com>
* Ulf Norell <ulf.norell@gmail.com> * Ulf Norell <ulf.norell@gmail.com>

View file

@ -49,7 +49,7 @@ data _×_ : Set → Set → Set where
Evidence that `A × B` holds is of the form Evidence that `A × B` holds is of the form
`(M , N)`, where `M` is evidence that `A` holds and `(M , N)`, where `M` is evidence that `A` holds and
`N` is evidence that `B` holds. By convention, we `N` is evidence that `B` holds. By convention, we
parenthesize pairs, even though `M , N` is also parenthesise pairs, even though `M , N` is also
accepted by Agda. accepted by Agda.
Given evidence that `A × B` holds, we can conclude that either Given evidence that `A × B` holds, we can conclude that either
@ -189,7 +189,7 @@ to `(aa , true)`, which is a member of the latter.
For associativity, the `to` function reassociates two uses of pairing, For associativity, the `to` function reassociates two uses of pairing,
taking `((x , y) , z)` to `(x , (y , z))`, and the `from` function does taking `((x , y) , z)` to `(x , (y , z))`, and the `from` function does
the inverse. Again, the evidence of left and right inverse requires the inverse. Again, the evidence of left and right inverse requires
matching against a suitable pattern to enable simplificition. matching against a suitable pattern to enable simplification.
\begin{code} \begin{code}
×-assoc : ∀ {A B C : Set} → ((A × B) × C) ≃ (A × (B × C)) ×-assoc : ∀ {A B C : Set} → ((A × B) × C) ≃ (A × (B × C))
×-assoc = ×-assoc =
@ -269,7 +269,7 @@ Having an *identity* is different from having an identity
In the first case, we might have that `m` is `2`, and both In the first case, we might have that `m` is `2`, and both
`1 * m` and `m` are equal to `2`. In the second `1 * m` and `m` are equal to `2`. In the second
case, we might have that `A` is `Bool`, and ` × Bool` is *not* the case, we might have that `A` is `Bool`, and ` × Bool` is *not* the
same as `Bool`. But there is an isomorphism betwee the two types. same as `Bool`. But there is an isomorphism between the two types.
For instance, `(tt, true)`, which is a member of the former, For instance, `(tt, true)`, which is a member of the former,
corresponds to `true`, which is a member of the latter. corresponds to `true`, which is a member of the latter.
@ -304,7 +304,7 @@ is evidence that `A` holds, or `inj₂ N`, where `N` is evidence that
`B` holds. `B` holds.
Given evidence that `A → C` and `B → C` both hold, then given Given evidence that `A → C` and `B → C` both hold, then given
evidence that `A ⊎ B` holds we can conlude that `C` holds. evidence that `A ⊎ B` holds we can conclude that `C` holds.
\begin{code} \begin{code}
⊎-elim : ∀ {A B C : Set} → (A → C) → (B → C) → (A ⊎ B → C) ⊎-elim : ∀ {A B C : Set} → (A → C) → (B → C) → (A ⊎ B → C)
⊎-elim f g (inj₁ x) = f x ⊎-elim f g (inj₁ x) = f x
@ -317,7 +317,7 @@ When `inj₁` and `inj₂` appear on the right-hand side of an equation we
refer to them as *constructors*, and when they appears on the refer to them as *constructors*, and when they appears on the
left-hand side we refer to them as *destructors*. We also refer left-hand side we refer to them as *destructors*. We also refer
to `⊎-elim` as a destructor, since it plays a similar role. to `⊎-elim` as a destructor, since it plays a similar role.
Other terminology refers to constructorse as *introducing* a disjunction, Other terminology refers to constructors as *introducing* a disjunction,
and to a destructors as *eliminating* a disjunction. and to a destructors as *eliminating* a disjunction.
Applying the destructor to each of the constructors is the identity. Applying the destructor to each of the constructors is the identity.
@ -411,7 +411,7 @@ former, corresponds to `inj₂ true`, which is a member of the latter.
For associativity, the `to` function reassociates, and the `from` function does For associativity, the `to` function reassociates, and the `from` function does
the inverse. Again, the evidence of left and right inverse requires the inverse. Again, the evidence of left and right inverse requires
matching against a suitable pattern to enable simplificition. matching against a suitable pattern to enable simplification.
\begin{code} \begin{code}
⊎-assoc : ∀ {A B C : Set} → ((A ⊎ B) ⊎ C) ≃ (A ⊎ (B ⊎ C)) ⊎-assoc : ∀ {A B C : Set} → ((A ⊎ B) ⊎ C) ≃ (A ⊎ (B ⊎ C))
⊎-assoc = record ⊎-assoc = record
@ -487,7 +487,7 @@ enumerates all possible arguments of type `⊥`:
Here again the absurd pattern `()` indicates that no value can match Here again the absurd pattern `()` indicates that no value can match
type `⊥`. type `⊥`.
For numbers, zero is the identity of additition. Correspondingly, For numbers, zero is the identity of addition. Correspondingly,
empty is the identity of sums *up to isomorphism*. empty is the identity of sums *up to isomorphism*.
For left identity, the `to` function observes that `inj₁ ()` can never arise, For left identity, the `to` function observes that `inj₁ ()` can never arise,
and takes `inj₂ x` to `x`, and the `from` function and takes `inj₂ x` to `x`, and the `from` function
@ -519,7 +519,7 @@ Having an *identity* is different from having an identity
In the first case, we might have that `m` is `2`, and both `0 + m` and In the first case, we might have that `m` is `2`, and both `0 + m` and
`m` are equal to `2`. In the second case, we might have that `A` is `m` are equal to `2`. In the second case, we might have that `A` is
`Bool`, and `⊥ ⊎ Bool` is *not* the same as `Bool`. But there is an `Bool`, and `⊥ ⊎ Bool` is *not* the same as `Bool`. But there is an
isomorphism betwee the two types. For instance, `inj₂ true`, which is isomorphism between the two types. For instance, `inj₂ true`, which is
a member of the former, corresponds to `true`, which is a member of a member of the former, corresponds to `true`, which is a member of
the latter. the latter.
@ -594,7 +594,7 @@ Given two types `A` and `B`, we refer to `A → B` as the *function*
space from `A` to `B`. It is also sometimes called the *exponential*, space from `A` to `B`. It is also sometimes called the *exponential*,
with `B` raised to the `A` power. Among other reasons for calling with `B` raised to the `A` power. Among other reasons for calling
it the exponential, note that if type `A` has `m` distinct it the exponential, note that if type `A` has `m` distinct
memebers, and type `B` has `n` distinct members, then the type members, and type `B` has `n` distinct members, then the type
`A → B` has `n ^ m` distinct members. For instance, consider a `A → B` has `n ^ m` distinct members. For instance, consider a
type `Bool` with two members and a type `Tri` with three members, type `Bool` with two members and a type `Tri` with three members,
as defined earlier. The the type `Bool → Tri` has nine (that is, as defined earlier. The the type `Bool → Tri` has nine (that is,

View file

@ -29,7 +29,7 @@ constructor `refl` provides evidence that `x ≡ x`. Hence, every value
is equivalent to itself, and we have no other way of showing values is equivalent to itself, and we have no other way of showing values
are equivalent. We have quantified over all levels, so that we can are equivalent. We have quantified over all levels, so that we can
apply equivalence to types belonging to any level. The definition apply equivalence to types belonging to any level. The definition
features an asymetry, in that the first argument to `_≡_` is given by features an asymmetry, in that the first argument to `_≡_` is given by
the parameter `x : A`, while the second is given by an index in `A → Set `. the parameter `x : A`, while the second is given by an index in `A → Set `.
This follows our policy of using parameters wherever possible. This follows our policy of using parameters wherever possible.
The first argument to `_≡_` can be a parameter because it doesn't vary, The first argument to `_≡_` can be a parameter because it doesn't vary,
@ -454,9 +454,9 @@ equal if and only if they satisfy the same properties. This
principle sometimes goes by the name Leibniz' Law, and is closely principle sometimes goes by the name Leibniz' Law, and is closely
related to Spock's Law, ``A difference that makes no difference is no related to Spock's Law, ``A difference that makes no difference is no
difference''. Here we define Leibniz equality, and show that two terms difference''. Here we define Leibniz equality, and show that two terms
satsisfy Lebiniz equality if and only if they satisfy Martin Löf equivalence. satisfy Leibniz equality if and only if they satisfy Martin Löf equivalence.
Leibniz equality is usually formalized to state that `x ≐ y` Leibniz equality is usually formalised to state that `x ≐ y`
holds if every property `P` that holds of `x` also holds of holds if every property `P` that holds of `x` also holds of
`y`. Perhaps surprisingly, this definition is `y`. Perhaps surprisingly, this definition is
sufficient to also ensure the converse, that every property `P` that sufficient to also ensure the converse, that every property `P` that

View file

@ -52,7 +52,7 @@ of four things:
+ Evidence `to∘from` asserting that `to` is a *left-identity* for `from`. + Evidence `to∘from` asserting that `to` is a *left-identity* for `from`.
In particular, the third asserts that `from ∘ to` is the identity, and In particular, the third asserts that `from ∘ to` is the identity, and
the fourth that `to ∘ from` is the identity, hence the names. the fourth that `to ∘ from` is the identity, hence the names.
The declaration `open _≃_` makes avaialable the names `to`, `from`, The declaration `open _≃_` makes available the names `to`, `from`,
`from∘to`, and `to∘from`, otherwise we would need to write `_≃_.to` and so on. `from∘to`, and `to∘from`, otherwise we would need to write `_≃_.to` and so on.
The above is our first use of records. A record declaration is equivalent The above is our first use of records. A record declaration is equivalent
@ -184,7 +184,7 @@ equational reasoning to combine the inverses.
It is straightforward to support a variant of equational reasoning for It is straightforward to support a variant of equational reasoning for
isomorphism. We essentially copy the previous definition for isomorphism. We essentially copy the previous definition for
of equivality. We omit the form that corresponds to `_≡⟨⟩_`, since of equality. We omit the form that corresponds to `_≡⟨⟩_`, since
trivial isomorphisms arise far less often than trivial equalities. trivial isomorphisms arise far less often than trivial equalities.
\begin{code} \begin{code}
@ -317,7 +317,7 @@ import Function using (_∘_)
import Function.Inverse using (_↔_) import Function.Inverse using (_↔_)
import Function.LeftInverse using (_↞_) import Function.LeftInverse using (_↞_)
\end{code} \end{code}
Here `_↔_` correpsonds to our `_≃_`, and `_↞_` corresponds to our `_≲_`. Here `_↔_` corresponds to our `_≃_`, and `_↞_` corresponds to our `_≲_`.
However, we stick with the definitions given here, mainly because `_↔_` is However, we stick with the definitions given here, mainly because `_↔_` is
specified as a nested record, rather than the flat records used here. specified as a nested record, rather than the flat records used here.

View file

@ -592,7 +592,7 @@ When I first learned about currying, I was told it was misattributed,
since the same idea was previously proposed by Moses Schönfinkel in since the same idea was previously proposed by Moses Schönfinkel in
the 1920's. I was told a joke: "It should be called schönfinkeling, the 1920's. I was told a joke: "It should be called schönfinkeling,
but currying is tastier". Only later did I learn that the explanation but currying is tastier". Only later did I learn that the explanation
of the misattribution was itself a misattribution. The idea actully of the misattribution was itself a misattribution. The idea actually
appears in the *Begriffschrift* of Gottlob Frege, published in 1879. appears in the *Begriffschrift* of Gottlob Frege, published in 1879.
We should call it frigging! We should call it frigging!

View file

@ -270,7 +270,7 @@ The devil paused. "I choose (b)."
The man was disappointed but not surprised. That was that, he thought. The man was disappointed but not surprised. That was that, he thought.
But the offer gnawed at him. Imagine what he could do with his wish! But the offer gnawed at him. Imagine what he could do with his wish!
Many years passed, and the man began to accumulate money. To get the Many years passed, and the man began to accumulate money. To get the
money he sometimes did bad things, and dimly he realized that money he sometimes did bad things, and dimly he realised that
this must be what the devil had in mind. this must be what the devil had in mind.
Eventually he had his billion dollars, and the devil appeared again. Eventually he had his billion dollars, and the devil appeared again.

View file

@ -75,7 +75,7 @@ Proof by induction follows the structure of this definition. To prove
a property of natural numbers by induction, we need prove two cases. a property of natural numbers by induction, we need prove two cases.
First is the *base case*, where we show the property holds for `zero`. First is the *base case*, where we show the property holds for `zero`.
Second is the *inductive case*, where we assume the the property holds for Second is the *inductive case*, where we assume the the property holds for
an arbitary natural `m` (we call this the *inductive hypothesis*), and an arbitrary natural `m` (we call this the *inductive hypothesis*), and
then show that the property must also hold for `suc m`. then show that the property must also hold for `suc m`.
If we write `P m` for a property of `m`, then what we need to If we write `P m` for a property of `m`, then what we need to
@ -149,7 +149,7 @@ In order to prove associativity, we take `P m` to be the property
(m + n) + p ≡ m + (n + p) (m + n) + p ≡ m + (n + p)
Here `n` and `p` are arbitary natural numbers, so if we can show the Here `n` and `p` are arbitrary natural numbers, so if we can show the
equation holds for all `m` it will also hold for all `n` and `p`. equation holds for all `m` it will also hold for all `n` and `p`.
The appropriate instances of the inference rules are: The appropriate instances of the inference rules are:
@ -247,7 +247,7 @@ preserved by applying that function. If `e` is evidence that `x ≡ y`,
then `cong f e` is evidence that `f x ≡ f y`, for any function `f`. then `cong f e` is evidence that `f x ≡ f y`, for any function `f`.
Here the inductive hypothesis is not assumed, but instead proved by a Here the inductive hypothesis is not assumed, but instead proved by a
recursive invocation of the function we are definining, `+-assoc m n p`. recursive invocation of the function we are defining, `+-assoc m n p`.
As with addition, this is well founded because associativity of As with addition, this is well founded because associativity of
larger numbers is proved in terms of associativity of smaller numbers. larger numbers is proved in terms of associativity of smaller numbers.
In this case, `assoc (suc m) n p` is proved using `assoc m n p`. In this case, `assoc (suc m) n p` is proved using `assoc m n p`.
@ -462,7 +462,7 @@ We show this in two steps. First, we have:
m + suc n ≡ suc (m + n) m + suc n ≡ suc (m + n)
which is justifed by the second lemma, `⟨ +-suc m n ⟩`. Then we which is justified by the second lemma, `⟨ +-suc m n ⟩`. Then we
have have
suc (m + n) ≡ suc (n + m) suc (m + n) ≡ suc (n + m)
@ -480,7 +480,7 @@ will suggest what lemmas to prove.
## Creation, one last time ## Creation, one last time
Returing to the proof of associativity, it may be helpful to view the inductive Returning to the proof of associativity, it may be helpful to view the inductive
proof (or, equivalently, the recursive definition) as a creation story. This proof (or, equivalently, the recursive definition) as a creation story. This
time we are concerned with judgements asserting associativity. time we are concerned with judgements asserting associativity.

View file

@ -4,7 +4,7 @@ layout : page
permalink : /Quantifiers permalink : /Quantifiers
--- ---
This chapter introduces universal and existential quatification. This chapter introduces universal and existential quantification.
## Imports ## Imports
@ -238,11 +238,11 @@ We will show that a number is even if and only if it is twice some
other number, and odd if and only if it is one more than twice other number, and odd if and only if it is one more than twice
some other number. In other words, we will show some other number. In other words, we will show
> `even n` *iff* `∃[ m ] ( 2 * m ≡ n)` even n iff ∃[ m ] ( 2 * m ≡ n)
> `odd n` *iff* `∃[ m ] (1 + 2 * m ≡ n)` odd n iff ∃[ m ] (1 + 2 * m ≡ n)
First, we need a lemma, which allows us to simplify twice the First, we need a lemma, which states that twice the successor of `m`
successor of `m` to two more than twice `m`. is two more than twice `m`.
\begin{code} \begin{code}
lemma : ∀ (m : ) → 2 * suc m ≡ 2 + 2 * m lemma : ∀ (m : ) → 2 * suc m ≡ 2 + 2 * m
lemma m = lemma m =
@ -294,7 +294,7 @@ from our lemma.
- If the number is odd because it is the successor of an even - If the number is odd because it is the successor of an even
number, then we apply the induction hypothesis to give a number `m` number, then we apply the induction hypothesis to give a number `m`
and evidence that `2 * m ≡ n`. We return a pair conisting of `suc m` and evidence that `2 * m ≡ n`. We return a pair consisting of `suc m`
and evidence that `1 + 2 * m = suc n`, which is immediate and evidence that `1 + 2 * m = suc n`, which is immediate
after substituting for `n`. after substituting for `n`.
@ -331,9 +331,9 @@ This completes the proof in the backward direction.
Negation of an existential is isomorphic to universal Negation of an existential is isomorphic to universal
of a negation. Considering that existentials are generalised of a negation. Considering that existentials are generalised
disjuntion and universals are generalised conjunction, this disjunction and universals are generalised conjunction, this
result is analogous to the one which tells us that negation result is analogous to the one which tells us that negation
of a disjuntion is isomorphic to a conjunction of negations. of a disjunction is isomorphic to a conjunction of negations.
\begin{code} \begin{code}
¬∃∀ : ∀ {A : Set} {B : A → Set} → (¬ ∃[ x ] B x) ≃ ∀ x → ¬ B x ¬∃∀ : ∀ {A : Set} {B : A → Set} → (¬ ∃[ x ] B x) ≃ ∀ x → ¬ B x
¬∃∀ = ¬∃∀ =

View file

@ -184,7 +184,7 @@ using holes and the `^C ^C`, `^C ^,`, and `^C ^R` commands.
## Transitivity ## Transitivity
The second property to prove about comparison is that it is The second property to prove about comparison is that it is
transitive: for any naturals `m`, `n`, andl `p`, if `m ≤ n` and `n ≤ transitive: for any naturals `m`, `n`, and `p`, if `m ≤ n` and `n ≤
p` hold, then `m ≤ p` holds. p` hold, then `m ≤ p` holds.
\begin{code} \begin{code}
≤-trans : ∀ {m n p : } → m ≤ n → n ≤ p → m ≤ p ≤-trans : ∀ {m n p : } → m ≤ n → n ≤ p → m ≤ p
@ -195,7 +195,7 @@ Here the proof is most easily thought of as by induction on the
*evidence* that `m ≤ n`, so we have left `m`, `n`, and `p` implicit. *evidence* that `m ≤ n`, so we have left `m`, `n`, and `p` implicit.
In the base case, the first inequality holds by `z≤n`, and so In the base case, the first inequality holds by `z≤n`, and so
arwe are given `zero ≤ n` and `n ≤ p` and must show `zero ≤ p`, we are given `zero ≤ n` and `n ≤ p` and must show `zero ≤ p`,
which follows immediately by `z≤n`. In this which follows immediately by `z≤n`. In this
case, the fact that `n ≤ p` is irrelevant, and we write `_` as the case, the fact that `n ≤ p` is irrelevant, and we write `_` as the
pattern to indicate that the corresponding evidence is unused. pattern to indicate that the corresponding evidence is unused.