了解 Show Proof 上的 COQ 证明。

Understanding COQ proof on Show Proof.

我是 COQ 的新手,正在尝试证明反例定理。

Variable A B:Prop.

Hypothesis R1: ~A->B.
Hypothesis R2: ~B.

Theorem ej: A.

当我们学习逻辑时,我们学习了 RAA 理论,但是在 COQ 中这并没有添加新的假设,现在我们被卡住了。

那么我们试试:

Proof.
tauto.
Show Proof.

输出如下,但我们不知道这是什么意思。

(NNPP A
   (fun H : ~ A => let H0 : B := R1 H in let H1 : False := R2 H0 in False_ind False H1))

任何人都可以帮助我们了解 COQ 显示证明输出吗?

Coq 将证明表示为函数式编程语言的程序,遵循 Curry-Howard correspondence。这些程序是通过将 Coq 的逻辑原语与用户证明的公理和定理相结合而编写的。您看到的输出是一个 "program",它在两个参数上调用公理 NNPP,即命题 A 和匿名函数 fun H : ~ A => ...。公理NNPP是反证法中常用的双重否定消去原理。如果你输入 Check NNPP.,Coq 告诉你它的类型是 forall P : Prop, ~ ~ P -> P,这意味着,给定任何命题 P~ ~ P 的任何证明 HNNPP P HP 的证明。 Coq 在上面构建的函数项 fun H : ~ A => ... 正是使用您声明的假设的 ~ ~ A 的 Coq 证明。

我不知道您之前对 Coq 和函数式编程有多少经验,但是看看 Software Foundations book series, which gives a comprehensive introduction to Coq. In particular, the Proof Objects 描述 Coq 证明如何表示的章节可能会有用。