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