基本上,我想证明以下引理,但由于我似乎无法直接在lambda内部重写而遇到麻烦。
无论如何我都认为这是可能的,因为如果我在lambda内部,我可以很容易地证明给定的x
。
Lemma lemma :
forall {A B : Type} (f : A -> B) (g : A -> B),
(forall (x : A), f x = g x) -> (fun x => f x) = (fun x => g x).
答案 0 :(得分:3)
您要证明的语句(本质上)是功能扩展性,is well-known在Coq中没有额外的公理就无法得到证明。基本上,想法是f
和g
可以有意地有很大不同(它们的定义可能看起来不同),但仍取相同的值。函数(fun x => f x) = (fun x => g x)
的相等(没有任何其他公理)意味着这两个函数在语法上是相同的。
例如,取f(n) = 0
和g(n) = 1 if x^(3 + n) + y^(3 + n) = z^(3 + n) has a non-trivial solution in integers, otherwise 0
(从自然数到自然数的函数)。然后f
和g
故意不同-一个语法上不归为另一个。但是,多亏了安德鲁·威尔斯(Andrew Wiles),我们知道f
和g
从g(n) = 0
到所有n
的范围都相同。
您可以自由地将引理(或各种增强方法)作为公理添加到Coq中,而不必担心不一致。