它们似乎有相似的目的。到目前为止我注意到的一个区别是Program Fixpoint
将接受复合措施,例如{measure (length l1 + length l2) }
, Function
似乎拒绝这一点并且只会允许{measure length l1}
.
Is Program Fixpoint
严格来说比Function
,或者它们更适合不同的用例?
这可能不是完整的列表,但这是我迄今为止发现的:
- 正如你已经提到的,
Program Fixpoint
允许该措施考虑多个论点。
-
Function
创建一个foo_equation
可用于重写调用的引理foo
及其 RHS。对于避免诸如此类的问题非常有用用于程序修复点的 Coq simpl https://stackoverflow.com/q/36329256/946226.
- 在某些(简单?)情况下,
Function
可以定义一个foo_ind
引理沿着递归调用的结构执行归纳foo
。再次强调,对于证明一些事情非常有用foo
没有有效地重复证明中的终止论证。
-
Program Fixpoint
可以被欺骗以支持嵌套递归,请参阅https://stackoverflow.com/a/46859452/946226 https://stackoverflow.com/a/46859452/946226。这也是为什么Program Fixpoint
can 定义阿克曼 https://stackoverflow.com/questions/10292421/error-in-defining-ackermann-in-coq函数时Function
cannot.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)