Coq 由于未知原因,在依赖类型表达式中重写术语失败

Coq 由于未知原因,在依赖类型表达式中重写术语失败,coq,Coq,下面是一个更大证明的简化片段,它捕获了所讨论的行为 Section foo. Parameter t : Type. Parameter x : t. Parameter y : t. Parameter prop : x = y <-> True. Parameter prop2 : x = y. Lemma lemma : forall e : t, x = y. rewrite prop2. intro e; trivial. Q

下面是一个更大证明的简化片段,它捕获了所讨论的行为

Section foo.
  Parameter t : Type.
  Parameter x : t.
  Parameter y : t.
  Parameter prop : x = y <-> True.
  Parameter prop2 : x = y.
  Lemma lemma : forall e : t, x = y.
    rewrite prop2.
    intro e; trivial.
    Qed.
End foo.
第foo节。
参数t:Type。
参数x:t。
参数y:t。
参数prop:x=y True。
参数prop2:x=y。
引理引理:对于所有的e:t,x=y。
重写prop2。
简介e;琐碎的。
Qed。
完福。
当您将
rewrite prop 2
替换为
rewrite prop
coq时,会出现隐藏错误。然而,在我的讨论中,coq应该在重写步骤之后为所有e:t、True产生
。有人能帮我吗?

如中所述:

但是
prop
的形式与莱布尼茨等式不同:

Coq < Unset Printing Notations.
Coq < Print prop.
prop : iff (eq x y) True
Coq
因此coq要求Setoid检查
iff
是否为setiod等式。

注意,“intros;rewrite prop”有效,因为“iff”是注册的Setoid等式。我不确定这个错误消息是什么意思。然而,Coq似乎正在检查(iff==>impl)(箭头)是否是正确的。
Coq < Unset Printing Notations.
Coq < Print prop.
prop : iff (eq x y) True