coq - ssreflect/Coq 中何时需要 `:`(冒号)?

标签 coq ssreflect

我试图以非 ssreflect Coq 的方式理解 Coq/ssreflect 证明中 : (冒号)的确切含义。

我读到它与将事情转移到目标有关(例如概括??),并且与 => 相反,后者将事情转移到假设。然而,我经常发现它令人困惑,因为无论有或没有 : ,证明都可以工作。以下是教程中的示例:

Lemma tmirror_leaf2 t : tmirror (tmirror t) = Leaf -> t = Leaf.
Proof.
move=> e.
by apply: (tmirror_leaf (tmirror_leaf e)).
Qed.

哪里,

tmirror_leaf
     : forall t, tmirror t = Leaf -> t = Leaf

是一个引理,表示如果树的镜子是叶子,那么树就是叶子。

我不明白为什么我们在这里需要 : 而不仅仅是 Coq apply。事实上,如果我删除 :,它就可以正常工作。为什么会有所不同?

最佳答案

确实,apply: H1 ... Hn 对于所有效果等同于 move: H1 .. Hn;应用。 apply 的一个更有趣的用法是 apply/H 及其变体,它们可以解释 View 。

关于coq - ssreflect/Coq 中何时需要 `:`(冒号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34500893/

相关文章:

coq - "nested"匹配的正确实例

CoqIDE 在同一库中导出模块时出错

coq - 在Coq中找到类似++的定义和符号

coq - 如何使用 Coq GenericMinMax 证明有关实数的事实

coq - 如何将 Coq 算术求解器策略与 SSReflect 算术语句结合使用

Coq Reals 和 Ssreflect GRings

coq - 应如何将用户定义的枚举类型设为 `finType` ?

coq - ssreflect 的依赖 "match"模式中没有隐式

coq - 简单策略在 COQ 中有什么作用

permutation - Ssreflect中的perm_invK引理证明了什么?