它们似乎有类似的目的。到目前为止,我注意到的一个区别是,虽然Program Fixpoint
会接受复合措施,例如{measure (length l1 + length l2) }
,Function
似乎拒绝这一点,并且只会允许{measure length l1}
。
Program Fixpoint
严格来说比 更强大Function
,还是更适合不同的用例?
这可能不是一个完整的列表,但这是我迄今为止发现的:
Program Fixpoint
的,允许度量查看多个参数。Function
创建一个foo_equation
引理,可用于使用foo
其 RHS 重写调用。对于避免像Coq simpl for Program Fixpoint这样的问题非常有用。Function
可以定义一个foo_ind
引理来沿着递归调用的结构执行归纳foo
。foo
同样,在不有效重复证明中的终止论点的情况下证明事物非常有用。Program Fixpoint
可以被欺骗支持嵌套递归,请参阅https://stackoverflow.com/a/46859452/946226。这也是为什么Program Fixpoint
不能定义阿克曼函数的原因Function
。