Programming languages 理解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),可能出现的

我正在使用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)
,可能出现的一个潜在问题

我们没有提供解决方案手册。这个问题似乎很基本,但我对其中任何一个都不确定。我认为前三个问题的答案是:

a) 设置

b) 没有类型为1的术语

c) 偶数2型一项

d) 不知道

如能回答这些问题并作简要解释,将不胜感激。谢谢

ezero的类型是什么

数据构造函数的类型可以从数据声明中读取:
ezero:偶0
声明它具有类型
偶0

是否存在类型为
甚至1
的术语

没有。这可以从一个案例的区别中看出:如果有一个术语,那么它将从两个构造函数中的任何一个开始。因为它们有特定的回报指数,所以它们必须与
1
统一

  • ezero
    将强制执行
    1=0
  • esuc
    意味着存在一个n,使得
    1=2+n
这两种情况都是不可能的

有多少项是偶数2型?列出它们

只有一个:
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)

非常感谢您提供了非常详细的解释。