如何证明Coq中的(n=n)=(m=m)?

如何证明Coq中的(n=n)=(m=m)?,coq,coq-tactic,Coq,Coq Tactic,我对Coq中的证据和Prop等感到困惑。我们如何证明(n=n)=(m=m) 我的意图是要表明这在某种程度上是True=True。但这是正确的表述吗 到目前为止,我尝试的是: Theorem test: forall m n:nat, (n = n) = (m = m). Proof. intros. simpl. 但是simple.什么都不做,而且自反性也不做。这只是一个例子,一般来说,如果可能的话,我需要为任何类型的X证明这一点。如果不假设额外的公理,就不可能证明你的要求;cf..n=n和m

我对Coq中的证据和
Prop
等感到困惑。我们如何证明
(n=n)=(m=m)

我的意图是要表明这在某种程度上是
True=True
。但这是正确的表述吗

到目前为止,我尝试的是:

Theorem test: forall m n:nat, (n = n) = (m = m).
Proof. intros. simpl.

但是
simple.
什么都不做,而且
自反性也不做。这只是一个例子,一般来说,如果可能的话,我需要为任何类型的
X
证明这一点。

如果不假设额外的公理,就不可能证明你的要求;cf..

n=n
m=m
都是propsition,因此它们是sort
Prop
而不是sort
Set
。这基本上意味着
n=n
类似于一条语句(需要证明),而不是类似于
true:boolean

相反,您可以尝试证明如下内容:
n-n=m-m
,或者,您可以定义一个函数
nat\u equal:nat->bool
,给定一个自然值,将其映射到bool,然后证明
nat\u equal n=nat\u equal m


如果你真的想断言语句是相等的,你需要命题的可扩展性。

你考虑过证明:
(n=n)(m=m)
?因为
可以被视为命题之间的相等,所以在Coq中。@RodrigoRibeiro感谢指针。我试试看。我展示的例子是从一个更大的证明中提取出来的。但我可能提出了错误的断言。有趣的问题!我认为这应该失败,因为它不需要是
n=m
refl n refl m
。我花了最后一个小时试图证明,如果
ab
仍然卡住,那么
(a=a)=(b=b)
会失败。我尝试了一些有趣的方法,稍后可能会发布一个“答案”,详细说明为什么我尝试的东西一定会失败。(但现在我只是头痛…)