added unequal to Negation

This commit is contained in:
wadler 2018-03-17 12:27:07 -03:00
parent 81b5da1ebd
commit 83776712ac

View file

@ -11,6 +11,8 @@ and classical logic.
\begin{code} \begin{code}
open import Isomorphism using (_≃_; ≃-sym; ≃-trans; _≲_) open import Isomorphism using (_≃_; ≃-sym; ≃-trans; _≲_)
open import Relation.Binary.PropositionalEquality using (_≡_; refl)
open import Data.Nat using (; zero; suc)
open import Data.Empty using (⊥; ⊥-elim) open import Data.Empty using (⊥; ⊥-elim)
open import Data.Sum using (_⊎_; inj₁; inj₂) open import Data.Sum using (_⊎_; inj₁; inj₂)
open import Data.Product using (_×_; _,_; proj₁; proj₂) open import Data.Product using (_×_; _,_; proj₁; proj₂)
@ -65,7 +67,7 @@ we have only half of this equivalence, namely that `A` implies `¬ ¬ A`.
Let `x` be evidence of `A`. We will show that assuming Let `x` be evidence of `A`. We will show that assuming
`¬ A` leads to a contradiction, and hence `¬ ¬ A` must hold. `¬ A` leads to a contradiction, and hence `¬ ¬ A` must hold.
Let `¬x` be evidence of `¬ A`. Then from `A` and `¬ A` Let `¬x` be evidence of `¬ A`. Then from `A` and `¬ A`
we have a contradiction (evidenced by `¬x x`). Hence, we have we have a contradiction, evidenced by `¬x x`. Hence, we have
shown `¬ ¬ A`. shown `¬ ¬ A`.
We cannot show that `¬ ¬ A` implies `A`, but we can show that We cannot show that `¬ ¬ A` implies `A`, but we can show that
@ -77,8 +79,8 @@ We cannot show that `¬ ¬ A` implies `A`, but we can show that
Let `¬¬¬x` be evidence of `¬ ¬ ¬ A`. We will show that assuming Let `¬¬¬x` be evidence of `¬ ¬ ¬ A`. We will show that assuming
`A` leads to a contradiction, and hence `¬ A` must hold. `A` leads to a contradiction, and hence `¬ A` must hold.
Let `x` be evidence of `A`. Then by the previous result, we Let `x` be evidence of `A`. Then by the previous result, we
can conclude `¬ ¬ A` (evidenced by `¬¬-intro x`). Then from can conclude `¬ ¬ A`, evidenced by `¬¬-intro x`. Then from
`¬ ¬ ¬ A` and `¬ ¬ A` we have a contradiction (evidenced by `¬ ¬ ¬ A` and `¬ ¬ A` we have a contradiction, evidenced by
`¬¬¬x (¬¬-intro x)`. Hence we have shown `¬ A`. `¬¬¬x (¬¬-intro x)`. Hence we have shown `¬ A`.
Another law of logic is *contraposition*, Another law of logic is *contraposition*,
@ -90,10 +92,33 @@ contraposition f ¬y x = ¬y (f x)
Let `f` be evidence of `A → B` and let `¬y` be evidence of `¬ B`. We Let `f` be evidence of `A → B` and let `¬y` be evidence of `¬ B`. We
will show that assuming `A` leads to a contradiction, and hence will show that assuming `A` leads to a contradiction, and hence
`¬ A` must hold. Let `x` be evidence of `A`. Then from `A → B` and `¬ A` must hold. Let `x` be evidence of `A`. Then from `A → B` and
`A` we may conclude `B` (evidenced by `f x`), and from `B` and `¬ B` `A` we may conclude `B`, evidenced by `f x`, and from `B` and `¬ B`
we may conclude `⊥` (evidenced by `¬y (f x)`). Hence, we have shown we may conclude `⊥`, evidenced by `¬y (f x)`. Hence, we have shown
`¬ A`. `¬ A`.
Using negation, it is straightforward to define unequal.
\begin{code}
_≢_ : ∀ {A : Set} → A → A → Set
x ≢ y = ¬ (x ≡ y)
\end{code}
It is straightforward to show distinct numbers are unequal.
\begin{code}
_ : 1 ≢ 2
_ = λ()
\end{code}
This is our first use of an absurd patters in a lambda expression.
The type `M ≡ N` is occupied exactly when `M` and `N` simplify to
identical terms. Since `1` and `2` simplify to distinct normal forms,
Agda determines that the absurd pattern `()` matches all arguments of
type `1 ≡ 2`. As a second example, it is also easy to validate
Peano's postulate that zero is not the successor of any number.
\begin{code}
peano : ∀ {m : } → zero ≢ suc m
peano = λ()
\end{code}
The evidence is essentially the same, as the absurd pattern matches
all arguments of type `zero ≡ suc m`.
Given the correspondence of implication to exponentiation and Given the correspondence of implication to exponentiation and
false to the type with no members, we can view negation as false to the type with no members, we can view negation as
raising to the zero power. This indeed corresponds to what raising to the zero power. This indeed corresponds to what