了解有关 Agda 的练习考试

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 的 return 类型更改为 Even (n+2) 而不是 Even (2+n)

我们没有提供解决方案手册。这个问题看起来很基本,但我不确定 these.I 认为前三个问题的答案是:

a) 设置

b) 没有 Even 1 类型的项

c) Even 2 类型的一项

d) 不知道

如能回答这些问题并提供简要说明,我们将不胜感激。谢谢

What is the type of ezero?

数据构造函数ezero的类型可以从数据声明中读取:ezero : Even 0声明它的类型为Even 0.

Are there any terms of type Even 1?

不,没有。这可以通过区分大小写看出:如果有一个术语,那么它将以两个构造函数之一开始。而且因为它们有特定的 return 索引,所以它们必须与 1.

统一
  • ezero 将强制执行 1 = 0
  • esuc 意味着有一个 n 使得 1 = 2+ n

这两种情况都是不可能的。

How many terms are of type Even 2? List them

只有一个:esuc ezero。通过与上一个问题类似的推理,我们可以证明 ezeroesuc (esuc p)(对于某些 p)不会。

Describe one potential problem that might occur if we change the return type of esuc to be Even (n+2) instead of Even (2+n).

考虑证明 plus-Even : {m n : N} → Even m → Even n → Even (m + n)。因为 (+) 是通过对其第一个参数的归纳法定义的,所以您将无法立即在步骤案例中应用 esuc 。您将需要使用重写来预先将目标类型从 Even ((m +2) + n)(或 Even (m + (n +2)) 取决于您执行归纳的参数)重新组织为 Even ((m + n) +2)