基本上,我想证明以下引理,但我遇到麻烦,因为我似乎无法直接重写lambdas内部。
但是我觉得这应该是可能的,因为如果我在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).
你试图证明的陈述(基本上)是功能性的延伸性,在没有额外公理的情况下,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
故意不同 - 一个在语法上没有减少到另一个。然而,多亏了安德鲁·威尔斯,我们知道f
和g
在所有g(n) = 0
的n
之后都是一样的。
您可以自由地将您的引理(或各种强化)作为公理添加到Coq而不必担心不一致。