Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
如何证明引理;(P\/Q)/\~P->;Q.“;在coq?_Coq - Fatal编程技术网

如何证明引理;(P\/Q)/\~P->;Q.“;在coq?

如何证明引理;(P\/Q)/\~P->;Q.“;在coq?,coq,Coq,我试图用统计学的方法来证明这个引理,但失败了。有人能教我如何证明吗? 一般来说,如何证明诸如false->P,P/~P等简单命题?要证明所有这些简单的事情,你有一系列的战术tauto,rtauto,直觉和一阶 我相信它们都比陶托更强,陶托是直觉命题逻辑的完整决策过程 然后,直觉允许你输入一些提示和引理来使用,一阶可以对一阶归纳进行推理 当然还有更多的细节,但这些是你想要在这些目标上使用的策略。你缺少的策略是矛盾,这是为了证明包含矛盾假设的目标。因为你不允许使用矛盾,我相信你要应用的引理是Fa

我试图用统计学的方法来证明这个引理,但失败了。有人能教我如何证明吗?



一般来说,如何证明诸如false->P,P/~P等简单命题?

要证明所有这些简单的事情,你有一系列的战术

tauto
rtauto
直觉
一阶

我相信它们都比陶托更强,陶托是直觉命题逻辑的完整决策过程

然后,
直觉
允许你输入一些提示和引理来使用,一阶可以对一阶归纳进行推理


当然还有更多的细节,但这些是你想要在这些目标上使用的策略。

你缺少的策略是矛盾,这是为了证明包含矛盾假设的目标。因为你不允许使用矛盾,我相信你要应用的引理是False的归纳原理。这样做之后,您可以应用否定命题并通过假设关闭分支。请注意,您可以做得比您的导师要求的更好,并且不使用列出的任何战术!析取三段论的证明术语相对容易写:

Section Example.

  (* Introduce some hypotheses.. *)
  Hypothesis P Q : Prop.

  Lemma a : (P \/ Q) /\ ~P -> Q.
    intros.
    inversion H.
    destruct H0.
      contradiction.
      assumption.
  Qed.

End Example.
Definition dis_syllogism (P Q : Prop) (H : (P ∨ Q) ∧ ¬P) : Q :=
  match H with
    | conj H₁ H₂ =>
      match H₁ with
      | or_introl H₃ => False_ind Q (H₂ H₃)
      | or_intror H₃ => H₃
      end
  end.

请记住,
~p
意味着
p->False
,而反转
False
假设就完成了目标(因为
False
没有构造函数)。所以你只需要
应用
反转

Lemma a : forall (P Q:Prop), (P \/ Q) /\ ~P -> Q.
Proof.
  intros. 
  inversion H.
  inversion H0.
  - apply H1 in H2.  (* applying ~P on P gives H2: False *)
    inversion H2.
  - apply H2.
Qed.

Tks。我已经找到了解决方案。或者,用策略证明定理,然后简单地“打印”它以找出它是什么。策略是
apply(False_ind Q(H₂ H₃)),所以这是同一件事;但是如果你想开始使用依赖类型,你需要弄清楚最终如何编写证明术语,所以命题逻辑是一个很好的起点。是的,“矛盾”等,我相信也会构建这个相同的术语。(值得注意的是,即使你使用的策略看起来“更简单,”在您可以将apply False视为低级别的情况下,它仍然会在封面下构建相同的证明项。)嗯,
矛盾
是最简单的方法,你已经给出了一个标准的证明,没有使用内置的决策过程;但是op想要一个只使用列出的策略的证明,所以我将
矛盾
的使用翻译成了“较低级别”构造。我一点也不反对你!我认为重要的是要看到两者之间的联系,仅此而已。两种解决方案都很好,而且你的比我的更适合于机械设计。抱歉,如果我似乎不同意你的观点,我只是认为重要的是要看到这两种方法是一个相同的!另请参见,其中讨论了这是一个不同但相关的问题lemma@cachuanghu请注意,虽然这不是必须的,但这是一种习惯,如果你将一个对你来说足够好的答案标记为“接受”,你会得到几个声誉分数。您的评论表明您找到了克服困难的方法。如果此处的答案中没有一个包含您的方法,您可以自由填写自己的答案并将其标记为“已接受”。一个被接受的答案将有助于像我这样仍在学习这些Coq策略的人。对此表示抱歉。我已经投票支持了被接受的答案。还有什么我应该做的吗?这个例子需要一些解释!
Lemma a : forall (P Q:Prop), (P \/ Q) /\ ~P -> Q.
Proof.
  intros. 
  inversion H.
  inversion H0.
  - apply H1 in H2.  (* applying ~P on P gives H2: False *)
    inversion H2.
  - apply H2.
Qed.