Coq 如何使用ssreflect进行反映:无法统一?x==?y和;n=n0“;

Coq 如何使用ssreflect进行反映:无法统一?x==?y和;n=n0“;,coq,ssreflect,Coq,Ssreflect,编辑:我找到了!我已经忘记了强迫。请忽略以下内容:) 我正在学习ssreflect,并且一直在学习如何继续。我的证明状态如下: n, n0 : nat ============================ n = n0 -> n == n0 首先,我尝试了move/eqP,因为我认为这会将eqP“应用”到n=n0,其中“应用”意味着“从eqP给出的反射中获取n==n0”。 然而,这一尝试产生了: Illegal application (Non-functional co

编辑:我找到了!我已经忘记了强迫。请忽略以下内容:)

我正在学习ssreflect,并且一直在学习如何继续。我的证明状态如下:

 n, n0 : nat
  ============================
  n = n0 -> n == n0

首先,我尝试了move/eqP,因为我认为这会将eqP“应用”到n=n0,其中“应用”意味着“从eqP给出的反射中获取n==n0”。 然而,这一尝试产生了:

Illegal application (Non-functional construction): 
The expression "eqP ?i" of type "?x = ?y"
cannot be applied to the term
 "?y0" : "?T0"
我不知道y0和T0应该是什么。 我也试过了

介绍H.eapply(介绍eqP)在H.

这就产生了错误

Unable to apply lemma of type "?x = ?y -> ?x == ?y"
on hypothesis of type "n = n0".
我试着将显式参数n0和n传递给eqP,只是想看看它是否可以工作

pose-proof(eqP n n0)。
但这给了我们一个错误

In environment
n, n0 : nat
H : n = n0
The term "n" has type "nat"
while it is expected to have type
 "is_true (?x == ?y)".
因此,eqP似乎既想要也不想要?x和?y的显式实例化。我非常希望能从概念上解释一下为什么move/eqP没有按照我认为应该的方式运行,以及eqP和(introT eqP)类型的实际情况

如果是相关的,我正在导入

From mathcomp Require Import ssrnat ssreflect ssrfun ssrbool eqtype. 
从ssreflect


谢谢。

愚蠢的错误!我有一种强迫,我忘记了;我的实际证明状态是Nat n=Nat n0->n==n0。

我无法重现您的错误:
move/eqP
对我有效。我试过Coq 8.9、8.10和8.11。你能发布完整的例子(包括导入和目标声明)吗?谢谢!我想我解决了问题;我忘记了一个强制,所以实际的目标是Nat n0=Nat n1->n0==n1Ah,这是规范的
集的一个实例,全部打印。
问题:)