[英]Understanding practice exam about Agda
我正在使用agda進行編程語言基礎的實踐考試,並且存在以下問題:
您將獲得以下Agda聲明:
data Even : N → Set where
ezero : Even 0
esuc : { n : N } → Even n → Even (2+ n)
假設已導入標准自然數庫。 回答以下的問題:
a) ezero
的類型是什么?
b)是否有類型Even 1
?
c) Even 2
類型有多少項? 列出他們
d)描述如果我們將esuc的返回類型更改為Even (n+2)
而不是Even (2+n)
可能發生的一個潛在問題。
我們沒有提供解決方案手冊。 這個問題似乎很基本,但我不確定其中任何一個,我認為前三個答案是:
一套
b)甚至沒有1個類型的項
c)一類偶數2的項
d)不知道
這些問題的答案以及簡短的解釋將不勝感激。 謝謝
ezero
的類型是什么?
可以從數據聲明中讀取數據構造函數ezero
的類型: ezero : Even 0
表示其類型為Even 0
。
是否有類型
Even 1
?
不,沒有。 這可以通過區分大小寫來看出:如果有一個術語,則以兩個構造函數之一開始。 並且由於它們具有特定的回報指數,因此必須與1
統一。
ezero
將強制執行1 = 0
esuc
表示存在一個n,使得1 = 2+ n
這兩種情況都是不可能的。
偶數2類型有多少個術語? 列出他們
恰好有一個: esuc ezero
。 隨着一個類似於在上一個問題推理,我們可以證明ezero
和esuc (esuc p)
對於某些p
)不會做。
描述一下如果將
esuc
的返回類型更改為Even (n+2)
而不是Even (2+n)
可能發生的一個潛在問題。
考慮plus-Even : {mn : N} → Even m → Even n → Even (m + n)
的證明plus-Even : {mn : N} → Even m → Even n → Even (m + n)
。 由於(+)
是通過對第一個參數的歸納定義的,因此您將無法在單步情況下立即應用esuc
。 您將需要使用重寫將目標的類型從Even ((m +2) + n)
(或Even (m + (n +2))
取決於您對哪個參數進行歸納)重組為Even ((m + n) +2)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.