coq - Coq中的程序定点和功能之间有什么区别?

标签 coq totality

它们似乎具有相似的目的。到目前为止,我注意到的一个区别是,虽然Program Fixpoint将接受像{measure (length l1 + length l2) }这样的复合量度,但Function似乎拒绝了这一点,并且只允许{measure length l1}
Program Fixpoint是否比Function严格更强大,或者它们更适合于不同的用例?

最佳答案

这可能不是完整的列表,但这是我到目前为止发现的:

  • 正如您已经提到的,Program Fixpoint允许度量查看多个参数。
  • Function创建一个foo_equation引理,该引理可用于用其​​RHS重写对foo的调用。避免Coq simpl for Program Fixpoint之类的问题非常有用。
  • 在某些(简单?)情况下,Function可以定义foo_ind引理,以按照foo的递归调用的结构执行归纳。同样,在不有效重复证明中的终止参数的情况下证明有关foo的内容非常有用。
  • 可以欺骗
  • Program Fixpoint以支持嵌套递归,请参见https://stackoverflow.com/a/46859452/946226。这也是为什么Program Fixpoint无法执行时Function可以define the Ackermann功能的原因。
  • 关于coq - Coq中的程序定点和功能之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44606245/

    相关文章:

    coq - 如何在 Coq 中结束这个证明

    coq - 如何让 Coq 接受以下 Fixpoint?

    coq - 应用部分实例化引理

    coq - 定义产品类型的递归函数

    recursion - Coq无法在Z上计算有据可依的函数,但可以在nat上运行

    Coq最佳实践: mutual recursion,只有一个函数在结构上减少

    coq - 如何在 Coq 中定义有序对?

    exists - 在 Coq : inversion of existential quantifier with multiple variables, 中使用一个命令?

    coq - 在 Coq 中定义 Ackermann 时出错

    coq - Coq 中 Fixpoint 的局限性?