我是COQ的新手,我正试图证明反例定理。
<Image source={{uri: "https://images.pexels.com/photos/614810/pexels-photo-614810.jpeg?auto=compress&cs=tinysrgb&h=650&w=940"}} style={{height:100,width:100}} />
当我们学习逻辑时,我们学习了RAA技术,但在COQ中并没有增加新的假设,现在我们陷入了困境。
所以我们尝试:
Variable A B:Prop.
Hypothesis R1: ~A->B.
Hypothesis R2: ~B.
Theorem ej: A.
具有以下输出,但我们不知道这是什么意思。
Proof.
tauto.
Show Proof.
有人可以帮助我们了解COQ Show Proof的输出吗?
答案 0 :(得分:5)
Coq将证明作为功能编程语言的程序,紧跟Curry-Howard correspondence。这些程序是通过将Coq逻辑的原语与用户证明的公理和定理组合而成的。您看到的输出是一个“程序”,它在两个参数(命题NNPP
和匿名函数A
)上调用公理fun H : ~ A => ...
。公理NNPP
是通常在矛盾证明中使用的双重否定消除原理。如果您输入Check NNPP.
,Coq会告诉您其类型为forall P : Prop, ~ ~ P -> P
,这意味着,给定P
的任何命题H
和任何证明~ ~ P
,{ {1}}是NNPP P H
的证明。上面构建的Coq P
的功能性术语正是使用您声明的假设的fun H : ~ A => ...
的Coq证明。
我不知道您有多少有关Coq和函数式编程的经验,但是看一下Software Foundations书系列可能会很有用,该书对Coq进行了全面介绍。特别是,Proof Objects这一章介绍了Coq证明的表示方式。