Coq:如何在Lambda内部进行重写?

时间:2019-04-11 23:02:11

标签: coq coq-tactic

基本上,我想证明以下引理,但由于我似乎无法直接在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).

1 个答案:

答案 0 :(得分:3)

您要证明的语句(本质上)是功能扩展性,is well-known在Coq中没有额外的公理就无法得到证明。基本上,想法是fg可以有意地有很大不同(它们的定义可能看起来不同),但仍取相同的值。函数(fun x => f x) = (fun x => g x)的相等(没有任何其他公理)意味着这两个函数在语法上是相同的。

例如,取f(n) = 0g(n) = 1 if x^(3 + n) + y^(3 + n) = z^(3 + n) has a non-trivial solution in integers, otherwise 0(从自然数到自然数的函数)。然后fg故意不同-一个语法上不归为另一个。但是,多亏了安德鲁·威尔斯(Andrew Wiles),我们知道fgg(n) = 0到所有n的范围都相同。

您可以自由地将引理(或各种增强方法)作为公理添加到Coq中,而不必担心不一致。