Programming languages 理解Agda实践考试
我正在使用agda进行编程语言基础实践考试,考试有以下问题: 您将收到以下Agda声明:Programming languages 理解Agda实践考试,programming-languages,agda,agda-mode,Programming Languages,Agda,Agda Mode,我正在使用agda进行编程语言基础实践考试,考试有以下问题: 您将收到以下Agda声明: data Even : N → Set where ezero : Even 0 esuc : { n : N } → Even n → Even (2+ n) 假设已导入自然数的标准库。回答以下问题: a) ezero的类型是什么 b) 是否存在类型为甚至1的术语 c) 有多少术语的类型为偶数2?列出它们 d) 描述如果我们将esuc的返回类型更改为偶数(n+2)而不是偶数(2+n),可能出现的
data Even : N → Set where
ezero : Even 0
esuc : { n : N } → Even n → Even (2+ n)
假设已导入自然数的标准库。回答以下问题:
a) ezero的类型是什么
b) 是否存在类型为甚至1
的术语
c) 有多少术语的类型为偶数2
?列出它们
d) 描述如果我们将esuc的返回类型更改为偶数(n+2)
而不是偶数(2+n)
,可能出现的一个潜在问题
我们没有提供解决方案手册。这个问题似乎很基本,但我对其中任何一个都不确定。我认为前三个问题的答案是:
a) 设置
b) 没有类型为1的术语
c) 偶数2型一项
d) 不知道
如能回答这些问题并作简要解释,将不胜感激。谢谢
ezero的类型是什么
数据构造函数的类型可以从数据声明中读取:ezero:偶0
声明它具有类型偶0
是否存在类型为甚至1
的术语
没有。这可以从一个案例的区别中看出:如果有一个术语,那么它将从两个构造函数中的任何一个开始。因为它们有特定的回报指数,所以它们必须与1
统一
将强制执行ezero
1=0
意味着存在一个n,使得esuc
1=2+n
esuc-ezero
。通过类似于上一个问题中的推理,我们可以证明ezero
和esuc(esuc p)
(对于某些p
)不起作用
描述如果我们将esuc
的返回类型更改为偶数(n+2)
而不是偶数(2+n)
时可能出现的一个潜在问题
考虑证明
加偶数:{mn:n}→ 偶→ 偶数n→ 偶数(m+n)
。由于(+)
是通过归纳法在其第一个参数上定义的,因此您将无法在步骤案例中立即应用esuc
。您需要使用重写来重新组织目标的类型,从偶数((m+2)+n)
(或偶数(m+(n+2))
,具体取决于您执行归纳的参数)到偶数((m+n)+2)
。非常感谢您提供了非常详细的解释。