coq - 如何证明coq中的引理 "(P\/Q)/\~P -> Q."?

标签 coq

我试图用 tatics [intros]、[apply]、[assumption]、[destruct]、[left]、[right]、[split] 来证明这个引理,但失败了。谁能教教我怎么证明?

Lemma a : (P \/ Q) /\ ~P -> Q.
proof.

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

最佳答案

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

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.

关于coq - 如何证明coq中的引理 "(P\/Q)/\~P -> Q."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705953/

相关文章:

coq - 在 coq 中使用已经证明的 lema/定理/推论

functional-programming - 不是由 coq 中的自反性建立的 eta 等价项的相等性

xsd - 将 XSD 中的列表读取到 OCaml 和 Coq 中的列表

functional-programming - Coq:如何用 "n + 1"替换 "S n"之类的术语?

functional-programming - Coq 中的相互递归类型为 `decide equality`?

coq - "Non strictly positive occurrence of ..."

Coq:从总和中删除所有(嵌套)括号

haskell - 在依赖类型的函数式编程语言中扁平化列表更容易吗?

xor - 如何在 Coq 中定义 Xor 并证明其性质

types - coq Set 或 Type 如何成为命题