了解 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
的任何证明 H
,NNPP P H
是 P
的证明。 Coq 在上面构建的函数项 fun H : ~ A => ...
正是使用您声明的假设的 ~ ~ A
的 Coq 证明。
我不知道您之前对 Coq 和函数式编程有多少经验,但是看看 Software Foundations book series, which gives a comprehensive introduction to Coq. In particular, the Proof Objects 描述 Coq 证明如何表示的章节可能会有用。
我是 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
的任何证明 H
,NNPP P H
是 P
的证明。 Coq 在上面构建的函数项 fun H : ~ A => ...
正是使用您声明的假设的 ~ ~ A
的 Coq 证明。
我不知道您之前对 Coq 和函数式编程有多少经验,但是看看 Software Foundations book series, which gives a comprehensive introduction to Coq. In particular, the Proof Objects 描述 Coq 证明如何表示的章节可能会有用。