Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何证明';S x>;0';从零开始在Coq?_Coq_Coq Tactic - Fatal编程技术网

我如何证明';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.
?

我的逻辑是

  • 对于任何nat n,n>0或n=0

  • sx=0会导致矛盾

  • 我的主要问题是,我不能记住所有这些关于nat的琐碎定理/引理,而且我对搜索命令也不太了解

    我尝试过“析构函数gt”或“>”构造函数,或者对“gt”进行一些反转。但我无法理解语法,或者这是否是正确的方向


    非常感谢您的帮助(除了像欧米茄这样的重物)

    这里有几个命令可以帮助您:

    • 取消设置打印符号。
      以便能够查看对应的符号

    • 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