new exercise
This commit is contained in:
parent
e51e255d8d
commit
6dc437bce7
1 changed files with 50 additions and 0 deletions
|
@ -60,6 +60,7 @@ open import Relation.Binary using (Setoid)
|
||||||
```
|
```
|
||||||
open import Agda.Primitive using (lzero; lsuc)
|
open import Agda.Primitive using (lzero; lsuc)
|
||||||
open import Data.Empty using (⊥-elim)
|
open import Data.Empty using (⊥-elim)
|
||||||
|
open import Data.Nat using (ℕ; zero; suc)
|
||||||
open import Data.Product using (_×_; Σ; Σ-syntax; ∃; ∃-syntax; proj₁; proj₂)
|
open import Data.Product using (_×_; Σ; Σ-syntax; ∃; ∃-syntax; proj₁; proj₂)
|
||||||
renaming (_,_ to ⟨_,_⟩)
|
renaming (_,_ to ⟨_,_⟩)
|
||||||
open import Data.Sum
|
open import Data.Sum
|
||||||
|
@ -507,6 +508,55 @@ for your choice of `v`.
|
||||||
-- Your code goes here
|
-- Your code goes here
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Exercise `denot-church` (recommended)
|
||||||
|
|
||||||
|
Church numerals are more general than natural numbers in that they
|
||||||
|
represent paths in a graph. The following `Path` predicate specifies
|
||||||
|
when a value of the form `f ↦ a ↦ b` represents a path from the
|
||||||
|
starting point `a` to the end point `b` in the graph of the function `f`.
|
||||||
|
|
||||||
|
```
|
||||||
|
data Path : (n : ℕ) → Value → Set where
|
||||||
|
singleton : ∀{f a} → Path 0 (f ↦ a ↦ a)
|
||||||
|
edge : ∀{n f a b c}
|
||||||
|
→ Path n (f ↦ a ↦ b)
|
||||||
|
→ b ↦ c ⊑ f
|
||||||
|
→ Path (suc n) (f ↦ a ↦ c)
|
||||||
|
```
|
||||||
|
|
||||||
|
* A singleton path is of the form `f ↦ a ↦ a`.
|
||||||
|
|
||||||
|
* If there is a path from `a` to `b` and
|
||||||
|
an edge from `b` to `c` in graph of `f`,
|
||||||
|
then there is a path from `a` to `c`.
|
||||||
|
|
||||||
|
This exercise is to prove that if `f ↦ a ↦ b` is a path of length `n`,
|
||||||
|
then `f ↦ a ↦ b` is a meaning of the Church numeral `n`.
|
||||||
|
|
||||||
|
To fascilitate talking about arbitrary Church numerals, the following
|
||||||
|
`church` function builds the term for the nth Church numeral,
|
||||||
|
using the auxilliary function `apply-n`.
|
||||||
|
|
||||||
|
```
|
||||||
|
apply-n : (n : ℕ) → ∅ , ★ , ★ ⊢ ★
|
||||||
|
apply-n zero = # 0
|
||||||
|
apply-n (suc n) = # 1 · apply-n n
|
||||||
|
|
||||||
|
church : (n : ℕ) → ∅ ⊢ ★
|
||||||
|
church n = ƛ ƛ apply-n n
|
||||||
|
```
|
||||||
|
|
||||||
|
Prove the following theorem.
|
||||||
|
|
||||||
|
denot-church : ∀{n v}
|
||||||
|
→ Path n v
|
||||||
|
-----------------
|
||||||
|
→ `∅ ⊢ church n ↓ v
|
||||||
|
|
||||||
|
```
|
||||||
|
-- Your code goes here
|
||||||
|
```
|
||||||
|
|
||||||
## Denotations and denotational equality
|
## Denotations and denotational equality
|
||||||
|
|
||||||
Next we define a notion of denotational equality based on the above
|
Next we define a notion of denotational equality based on the above
|
||||||
|
|
Loading…
Reference in a new issue