[英]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.