agda编译器如何计算出要编译的内容?

时间:2018-01-12 14:39:57

标签: compiler-construction agda

Coq中,它明确来自逻辑世界(Prop)是什么以及来自计算世界(Set)的内容。证明世界提供了关于计算世界的保证,并且是唯一需要编译的。

Agda中,没有明显的区别,所以我想知道:

Agda编译器如何确定需要编译的内容以及需要留下的内容?

谢谢。

1 个答案:

答案 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中的强制优化。