Coq:如何在lambda中重写?

问题描述 投票:0回答:1

基本上,我想证明以下引理,但我遇到麻烦,因为我似乎无法直接重写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).
coq coq-tactic
1个回答
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故意不同 - 一个在语法上没有减少到另一个。然而,多亏了安德鲁·威尔斯,我们知道fg在所有g(n) = 0n之后都是一样的。

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

© www.soinside.com 2019 - 2024. All rights reserved.