假设我需要证明以下内容:
x: nat
(fun _ : nat => 0) = (fun y : nat => if beq_nat x y then 0 else 0)
由于y
不在环境中,看起来我无法在beq_nat x y
上进行破坏以简化右侧。有没有简单的方法来简化匿名函数中的表达式?
除了能够按摩两个看起来相同的函数之外,有没有办法通过显示它们在所有输入上产生相同的值来推断出两个函数是否相同?
编辑:我意识到我可能会要求不可能,因为这些函数不一样,只是当应用于参数时它们产生相同的值。我不确定Coq如何解释这一点。答案 0 :(得分:1)
我相信这是所谓的functional extensionality
的情况,你要证明两个函数在扩展上是相等的(从调用者的角度看它们的行为相同)。
你不能直接在Coq中证明它(因为=
是一个定义上的平等,它不是真的),但如果你愿意,你可以要求这个模块:
http://coq.inria.fr/stdlib/Coq.Logic.FunctionalExtensionality.html
将为您提供功能扩展性的公理。您可以调用策略extensionality y.
,以便您访问y
。