我如何证明';S x>;0';从零开始在Coq?
我如何证明这个简单的事实我如何证明';S x>;0';从零开始在Coq?,coq,coq-tactic,Coq,Coq Tactic,我如何证明这个简单的事实 forall x:nat, S x > 0. ? 我的逻辑是 对于任何nat n,n>0或n=0 sx=0会导致矛盾 我的主要问题是,我不能记住所有这些关于nat的琐碎定理/引理,而且我对搜索命令也不太了解 我尝试过“析构函数gt”或“>”构造函数,或者对“gt”进行一些反转。但我无法理解语法,或者这是否是正确的方向 非常感谢您的帮助(除了像欧米茄这样的重物) 这里有几个命令可以帮助您: 取消设置打印符号。以便能够查看对应的符号 Print ID.查看标识符I
forall x:nat, S x > 0.
?
我的逻辑是
非常感谢您的帮助(除了像欧米茄这样的重物) 这里有几个命令可以帮助您:
以便能够查看对应的符号取消设置打印符号。
查看标识符Print ID.
是什么ID
按其定义替换展开ID.
ID
查找涉及子项和任何其他子项的SearchAbout(ID(CON?m)?n)
的结果(如果重复使用相同的ID
占位符,搜索将只返回对应子项匹配的结果)?m
Unset Printing Notations.
Goal forall x:nat, S x > 0.
intro x.
Print gt.
unfold gt.
Print lt.
unfold lt.
Print le.
SearchAbout (le (S ?m) (S ?n)).
apply le_n_S.
SearchAbout (le 0 ?m).
apply le_0_n.
Qed.
这是另一种方法(基于你对自然数的观察)
首先,我们需要导入一个模块,该模块包含许多关于自然数的事实(没有此导入搜索将无法找到我们要查找的内容):
现在,让我们寻找引理,它表示任何nat
要么0
要么大于0
:
Search ({_ = 0} + {_}).
此搜索结果为
zerop: forall n : nat, {n = 0} + {0 < n},
顺便说一句,标准库中有一个引理(从Coq v8.5开始),它与引理的状态完全相同:
Search (S _ > 0).
这导致了gt\u Sn\u O:forall n:nat,Sn>0
,您可以在标准库中查看这个引理的实现(它又使用了几个引理).出于完整性考虑,我提出了一种基于计算编码的替代解决方案:SearchAbout
在Coq 8.5中被弃用。建议使用Search
(其行为方式与Coq 8.4中的SearchAbout
相同)。谢谢!我正在运行8.5beta2
,但从未收到任何警告并返回正确答案,因此我认为它仍然有效。我会尽量记住它(我不再经常使用Coq)给出警告(如果你是一个普通用户)。如果你坚持使用标准Coq,你的引理确实与证明0相同
Goal forall x:nat, S x > 0.
intros x.
destruct (zerop (S x)).
(* subcase S x = 0 *)
discriminate. (* deals with the contradiction *)
(* subcase S x > 0 *)
assumption.
Qed.
Search (S _ > 0).
From mathcomp
Require Import ssreflect ssrbool ssrfun eqtype ssrnat.
Lemma test n : 0 < n.+1.
Proof. by []. Qed.
(m < n) = (m.+1 <= n) = (m.+1 - n == 0)
(0 < n.+1) = (0.+1 <= n.+1) = (1 - n.+1 == 0) = (0 - n == 0) = (0 == 0) = true