如何证明Coq中的(n=n)=(m=m)?
我对Coq中的证据和如何证明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
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,因此它们是sortProp
而不是sortSet
。这基本上意味着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)
会失败。我尝试了一些有趣的方法,稍后可能会发布一个“答案”,详细说明为什么我尝试的东西一定会失败。(但现在我只是头痛…)