在Coq
中,它明确来自逻辑世界(Prop)是什么以及来自计算世界(Set)的内容。证明世界提供了关于计算世界的保证,并且是唯一需要编译的。
在Agda
中,没有明显的区别,所以我想知道:
Agda
编译器如何确定需要编译的内容以及需要留下的内容?
谢谢。
答案 0 :(得分:1)
更新:我在readthedocs.io添加了与新用户手册无关的文档。
在Agda中,您可以将函数参数标记为与点无关,这意味着该参数将仅进行类型检查但从不进行求值。例如,您可以按如下方式定义排序列表(来自wiki):
data SList (bound : ℕ) : Set where
[] : SList bound
scons : (head : ℕ) →
.(head ≤ bound) → -- note the dot!
(tail : SList head) →
SList bound
证明head ≤ bound
在前面有一个点,因此它将被删除(在编译时和运行时)。
除了明确的不相关注释外,Agda编译器还有许多优化功能可以在不需要任何用户干预的情况下删除未使用的参数,例如this paper中的强制优化。