非构造性证明的库里霍华德和程序


29

这是一个后续问题

证明与程序(或命题与类型)之间有什么区别?

哪个程序对应于形式的非构造性(经典)证明?(假设是一些有趣的可确定的关系,例如,第个TM不会以步长停止。)Ť È ķķ ŤËķ¬ķ ŤËķŤËķ

(ps:我之所以发布此问题,部分原因是我有兴趣在他的评论中进一步了解Neel所说的“ Godel-Gentzen翻译是一种延续通过的转变”的意思。)


2
这些讲义第2页的部分答案。这有点神秘;我将尝试挖掘更完整的内容。
戴夫·克拉克

因为我犯了决定证明我所知道的事情而不是仅仅断言的错误,所以我花了比计划要更长的时间来写我的答案。:)
Neel Krishnaswami

1
最新的JSL发表了这篇文章。要点是,经典证明的计算内容可能在很大程度上取决于您选择如何提取它。我还没有真正消化它,但是我认为我应该把它扔在那里。
Mark Reitblatt 2011年

但是,您已经指定T是可确定的关系,因此可以得出有关命题的建设性证明。古典逻辑是直觉逻辑的子集,您可以通过将T判定为T来指定T属于该子集。
wren romano

ren,那也是我起初的想法!但是,如果问题实际上是在所有k上量化的,则问题中的P /〜P示例中的命题P不一定是可确定的。
jbapple 2011年

Answers:


25

这是一个有趣的问题。显然,人们不能指望有决定每个程序是否是否成立,因为这将决定停机问题。如前所述,有几种方法可以通过计算方式解释证明:Curry-Howard的扩展,可实现性,方言等。但是他们都会以以下方式通过计算方式或多或少地解释您提到的定理。∀ ķ Ť ê ķ ËķŤËķ

为简单起见,请考虑等效的经典定理

(1)一世Ĵ¬ŤËĴ¬ŤË一世

这是(建设性)相当于提及,因为给定的一个我们可以决定是否ķ Ť ê ķ 通过简单地检查的值保持与否¬ Ť ê 。如果¬ Ť ê 持有然后¬ Ť ê ,因此¬ Ť ê 。另一方面一世ķŤËķ¬ŤË一世¬ŤË一世一世¬ŤË一世¬一世ŤË一世不然后通过(1)持有,我们有Ĵ ¬ Ť ê Ĵ →交通这意味着Ĵ Ť ê Ĵ ¬ŤË一世Ĵ¬ŤËĴĴŤËĴ

现在,我们不能再为每个给定的e计算(1)中的,因为我们将再次解决停止问题。上面提到的所有解释所要做的就是看等价定理一世Ë

(2)F一世¬ŤËF一世¬ŤË一世

函数称为Herbrand函数。它尝试为每个给定的潜在证人i计算一个反例j。显然,(1)和(2)是等效的。从左到右,这是建设性的,只需将(2)中的i ' = i取为条件,其中i是(1)的假定见证人。从右到左,必须经典推理。假设(1)不正确。然后,FĴ一世一世=一世一世

(3)一世Ĵ¬¬ŤËĴ¬ŤË一世

是证明这一点的函数,即F

(4)一世¬¬ŤËF一世¬ŤË一世

现在,取(2)中,我们有¬ Ť ê ˚F ''¬ Ť ê ',对于一些'。但是,在(4)式中取i = i ',就可以得出相反的否定。因此,(2)暗示(1)。F=F¬ŤËF一世¬ŤË一世一世一世=一世

因此,我们认为(1)和(2)在经典上是等效的。但是有趣的是,(2)现在有了一个非常简单的构造见证。如果T e f 0 不成立,只需取,因为(2)的结论为真;否则取' = 0如果Ť ê ˚F 0 成立,因为然后¬ Ť ê ˚F 0 一世=F0ŤËF0一世=0ŤËF0不成立,并且(2)的前提为假,使其再次成立。¬ŤËF0

因此,在计算上解释像(1)这样的经典定理的方法是看一个(经典的)等价表述,在我们的情况下(2),该表述可以得到建设性的证明。

上面提到的不同解释仅在函数弹出的方式上有所不同。在可实现性和方言解释的情况下,当与某种形式的否定翻译(例如Goedel-Gentzen's)组合使用时,解释会明确给出这一点。在带有call-cc和延续运算符的Curry-Howard扩展的情况下,函数f产生于以下事实:程序被允许“知道”将如何使用某个值(在我们的情况下为i),因此f是延续围绕i的计算点FF一世F一世

另一个重要的一点是,您希望从(1)到(2)的通道是“模数”的,即,如果使用(1)来证明(1'),则应以类似的方式使用其解释(2)证明(1')的解释,例如(2')。上面提到的所有解释都是这样做的,包括Goedel-Gentzen否定翻译。


8
欢迎!很高兴在这里见到专家证明理论家。
Neel Krishnaswami

1
感谢Paulo,您的回答已经澄清了我正在解决的相关问题中的部分图片。
卡夫

17

众所周知,经典算术和直觉算术是相等的。

证明这一点的一种方法是通过将经典逻辑“负嵌入”到直觉逻辑中。因此,假设是经典一阶算术的公式。现在,我们可以定义直觉逻辑的公式,如下所示:ϕ

G=¬¬Gϕψ=¬¬GϕGψG=¬G¬ϕ=¬GϕGϕψ=¬¬Gϕ¬GψGXϕ=X¬¬GϕGXϕ=¬X¬GϕGP=¬¬P

请注意,本质上是一种同态性,坚持存在于所有其他not-not之外,只是在析取和存在存在时,它使用de Morgan对偶性将它们转变为合取和普适性。(我非常有信心这不是确切的Godel-Gentzen翻译,因为我为这个答案做好了准备-基本上,您使用双重否定+ de Morgan对偶性编写的任何内容都将起作用。实际上,这种多样性对于经典逻辑的计算解释;请参见下文。)Gϕ

第一:很明显,这种翻译保留了古典真理,因此,就古典而言,当且仅当ϕG ϕ 是正确的。Gϕϕ

二:这是不太明显,但仍的情况下,即在公式片段,可证明在直觉和经典逻辑重合。证明这一点的方法是首先查看从该语法得出的公式:¬

A,B::=x.A(x)|AB|AB|¬A|¬¬P

然后我们可以作为一个引理证明(通过感应上),该G ^ A可以凭直觉推导。因此,现在,我们可以通过对证明的结构(例如,顺序演算)进行归纳,并使用先前的引理来模拟被排除的中间律,从而显示负公式的等价性。G(A)A

那么,您应该如何直观地考虑这一点?

  • 首先,证明理论观点。如果您看一下后续演算的规则,您会发现古典逻辑和直觉逻辑的唯一不同之处仅在于析取和存在规则。因此,我们利用这一事实表明,这些公式中一种逻辑的证明可以转化为另一种逻辑的证明。这说明怎么想建设性的逻辑,作为一个扩展经典逻辑与两个新的连接词。我们所谓的“经典存在”和“经典析取”只是涉及,合取和否定的缩写,因此要谈论实际存在,我们需要引入新的连接词。

  • 其次,有一个拓扑视图。现在,经典逻辑的模型(作为一组集合)是布尔代数(即,在任意并集,交点和补码下闭合的子集家族)。事实证明,直觉逻辑模型是一个拓扑空间,这些命题被解释为开放集。他们否定的解释是补体的内部,然后可以很容易地表明,这意味着双否定将我们带入最小clopen覆盖每个打开的---和clopens形成布尔代数。¬¬¬P=¬P

现在,由于有了Curry-Howard,我们知道了如何将直觉逻辑中的证明解释为功能程序。因此,对于“古典证明的建设性内容是什么?”这个问题,可能有一个答案(但不是唯一的答案)。是以下内容:

经典证明的计算内容与证明的翻译(根据否定翻译)的计算内容无关。

因此,让我们看看翻译。因此,这说排中的建设性内容相同的话说,这不是的情况下¬ P和和¬ ¬ P保持-即非矛盾。因此,从这个意义上讲,被排除的中间定律实际上并没有太多的计算内容。G一种¬一种=¬¬G一种¬¬G一种¬P¬¬P

要看到它是什么具体的,建设性的那个,否定被定义为召回。所以这个公式是G A ¬一种==一种。Ocaml代码的以下部分将说明:G一种G一种

type bot = Void of bot
type 'a not = 'a -> bot

let excluded_middle : ('a not * 'a not not) not = fun (u, k) -> k u 

也就是说,如果得到非A和非非A,则可以将第一个否定传递给第二个否定,以得出所需的矛盾。

现在,什么是延续传递样式转换?

  • 一个连续型的是一些需要类型的值τ并从中计算出最终的答案。ττ
  • 连续用于对程序上下文进行建模。也就是说,作为更大的程序C [ 3 + 5 ]的一部分,我们可能会有评估。它周围的所有内容将取3 + 5的结果并计算最终答案。3+5C[3+5]3+5
  • 因此,您可以将类型的延续视为函数τ α,其中α代表答案类型。τταα
  • 因此,如果您有一个类型为τ的程序,我们可以通过找到一个类型为τ α α的项来“ CPS转换”它,最终将把任何e计算出来的结果传递给它的延续。(基本上,这只是使控制流明确。)ËττααË
  • 但是,我们必须进行遗传操作,以便程序的每个子项都明确表示其延续。

现在,

  • 负翻译基本上是世袭发送¬ ¬ φϕ¬¬ϕ
  • 但是,尽管我们的翻译使用否定词,但它实际上并未消除错误的命题-因此翻译在该命题中参数化地起作用。
  • 特别是,我们可以用任何答案类型α代替α
  • 因此,我们用ϕ α α替换ϕϕαα
  • 这是CPS转换。

我看到了“ a”个CPS转换,因为正如我前面提到的,有许多否定的转换让您证明这个定理,并且每个对应于一个不同的CPS转换。在操作上,每个转换对应一个不同的评估顺序。因此,经典逻辑没有独特的计算解释,因为您可以做出选择,而差异选择具有非常不同的操作特性。


3
这是一个很好的答案。这让我想起了Wadler的论文“按值致电对按姓名致电是双重的”:homepages.inf.ed.ac.uk/wadler/topics/call-by-need.html,其中包括一个令人难忘的轶事在第4节中解释了callCC与排除的中间对象之间的关系。
sclv 2011年

8

整个会议以程序形式讨论非构造性证明,我不是该领域的专家。上面,尼尔·克里希纳斯瓦米(Neel Krishnaswami)暗示了他正在准备的更长的答案,从他在这里的工作来看,这将是极好的。这只是一个答案。

PP¬P

Set Implicit Arguments.

Axiom callcc : forall (A B : Set), ((A -> B) -> A) -> A.

Lemma lem : forall (A B:Set), sum A (A -> B).
Proof.
  intros.
  eapply callcc.
  intros H.
  right.
  intros.
  apply H.
  left.
  assumption.
Defined.

Recursive Extraction lem.

给出O'Caml代码:

type ('a, 'b) sum =
  | Inl of 'a
  | Inr of 'b

(** val callcc : (('a1 -> 'a2) -> 'a1) -> 'a1 **)

let callcc =
  failwith "AXIOM TO BE REALIZED"

(** val lem : ('a1, 'a1 -> no) sum **)

let lem =
    callcc (fun h -> Inr (fun h0 -> h (Inl h0)))

我所见过的最干净的介绍是蒂姆·格里芬(Tim Griffin)的“控制的公式化类型”


3
您应该尝试提取到Scheme中,并告诉提取过程应该将您的内容提取callcc到Scheme中callcc。然后,您实际上可以尝试一下。
Andrej Bauer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.