Coq:如何在lambda中重写?

Coq:如何在lambda中重写?,coq,coq-tactic,Coq,Coq Tactic,基本上,我想证明下面的引理,但我遇到了麻烦,因为我似乎无法直接重写lambdas的内部 但是我觉得这应该是可能的,因为如果我在lambda中,我可以很容易地证明它适用于任何给定的x 你试图证明的陈述本质上是函数的可拓性,如果没有额外的公理,它在Coq中是不可证明的。基本上,我们的想法是f和g可以有意地非常不同,它们的定义可以看起来不同,但仍然具有相同的值。函数的相等性funx=>fx=funx=>gx在没有任何额外公理的情况下意味着这两个函数在语法上是相同的 例如,如果x^3+n+y^3+n=z

基本上,我想证明下面的引理,但我遇到了麻烦,因为我似乎无法直接重写lambdas的内部

但是我觉得这应该是可能的,因为如果我在lambda中,我可以很容易地证明它适用于任何给定的x


你试图证明的陈述本质上是函数的可拓性,如果没有额外的公理,它在Coq中是不可证明的。基本上,我们的想法是f和g可以有意地非常不同,它们的定义可以看起来不同,但仍然具有相同的值。函数的相等性funx=>fx=funx=>gx在没有任何额外公理的情况下意味着这两个函数在语法上是相同的

例如,如果x^3+n+y^3+n=z^3+n有一个整数的非平凡解,则取fn=0和gn=1,否则取自然数到自然数的两个函数都为0。那么f和g是有意不同的——一个不会在语法上简化为另一个。然而,多亏了Andrew Wiles,我们知道f和g在广义上是相同的,因为对于所有n,gn=0


你可以自由地将引理或各种加强项作为公理添加到Coq中,而不必担心不一致性。

你试图证明的陈述本质上是函数的可拓性,如果没有额外的公理,在Coq中是不可证明的。基本上,我们的想法是f和g可以有意地非常不同,它们的定义可以看起来不同,但仍然具有相同的值。函数的相等性funx=>fx=funx=>gx在没有任何额外公理的情况下意味着这两个函数在语法上是相同的

例如,如果x^3+n+y^3+n=z^3+n有一个整数的非平凡解,则取fn=0和gn=1,否则取自然数到自然数的两个函数都为0。那么f和g是有意不同的——一个不会在语法上简化为另一个。然而,多亏了Andrew Wiles,我们知道f和g在广义上是相同的,因为对于所有n,gn=0


您可以自由地将引理或各种加强项作为公理添加到Coq中,而无需担心不一致性。

关于函数语法比较的一个小说明:当Coq比较函数时,它会考虑计算规则,例如,这两个函数相等:Check eq_refl:fun=>n=fun m=>fun=>0+n m.。函数语法比较的一个小说明:当Coq比较函数时,它考虑了计算规则,例如,这两个函数相等:Check eq_refl:fun n=>n=fun m=>0+n m。。
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).