Dies ist eine Folgefrage zu
Was ist der Unterschied zwischen Beweisen und Programmen (oder zwischen Aussagen und Typen)?
Welches Programm würde einem nicht konstruktiven (klassischen) Beweis der Form ? (Angenommen, ist eine interessante entscheidbare Beziehung, z. B. th TM bleibt nicht in Schritten stehen.)
(ps: Ich poste diese Frage zum Teil, weil ich mehr darüber erfahren möchte, was Neel in seinem Kommentar unter " Die Godel-Gentzen-Übersetzung ist eine vorübergehende Transformation" versteht .)
Antworten:
Das ist eine interessante Frage. Offensichtlich kann man nicht erwarten, dass es ein Programm gibt, das für jedes ob ∀ k T ( e , k ) gilt oder nicht, da dies das Halteproblem entscheiden würde. Wie bereits erwähnt, gibt es verschiedene Möglichkeiten, Beweise rechnerisch zu interpretieren: Erweiterungen von Curry-Howard, Realisierbarkeit, Dialektik und so weiter. Aber sie alle würden den Satz, den Sie mehr oder weniger erwähnt haben, wie folgt rechnerisch interpretieren.e ∀kT(e,k)
Der Einfachheit halber sei der äquivalente klassische Satz betrachtet
(1)∃i∀j(¬T(e,j)→¬T(e,i))
Dies ist (konstruktiv) äquivalent zu dem genannten, weil wir bei gegebenem entscheiden können, ob ∀ k T ( e , k ) gilt oder nicht, indem wir einfach den Wert von ¬ T ( e , i ) überprüfen . Wenn ¬ T ( e , i ) hält dann ∃ i ¬ T ( e , i ) und damit ¬ ∀ i T ( e , i ) . Wenn andererseitsi ∀kT(e,k) ¬T(e,i) ¬T(e,i) ∃i¬T(e,i) ¬∀iT(e,i) gilt dann nicht zu (1) wir haben ∀ j ( ¬ T ( e , j ) → ⊥ ) was impl j T ( e , j ) impliziert.¬T(e,i) ∀j(¬T(e,j)→⊥) ∀jT(e,j)
Nun können wir wieder in (1) nicht für jedes gegebene e berechnen, weil wir das Halteproblem erneut lösen würden. Was alle oben erwähnten Interpretationen tun würden, wäre, den äquivalenten Satz zu betrachteni e
(2)∀f∃i′(¬T(e,f(i′))→¬T(e,i′))
Die Funktion heißt Herbrand-Funktion. Es wird versucht, ein Gegenbeispiel j für jeden gegebenen potentiellen Zeugen i zu berechnen . Es ist klar, dass (1) und (2) äquivalent sind. Von links nach rechts ist dies konstruktiv. Nehmen Sie einfach i ' = i in (2), wobei i der angenommene Zeuge von (1) ist. Von rechts nach links muss man klassisch argumentieren. Angenommen, (1) war nicht wahr. Dann,f j i i′=i i
(3)∀ i ∃ j ¬ ( ¬ T( e , j ) → ¬ T( E , i ) )
Sei eine Funktion, die dies bezeugt, df′
(4)∀ i ¬ ( ¬ T( e , f′( i ) ) → ¬ T( E , i ) )
Nehmen wir nun in (2) und wir haben ( ¬ T ( e , f ' ( i ' ) ) → ¬ T ( e , i ' ) ) für einige i ' . Aber wenn wir in (4) i = i 'nehmen, erhalten wir die Negation dieses Widerspruchs. Daher impliziert (2) (1).f= f′ (¬T(e,f′(i′))→¬T(e,i′)) i′ i=i′
Wir haben also, dass (1) und (2) klassisch äquivalent sind. Aber das Interessante ist, dass (2) jetzt ein sehr einfaches konstruktives Zeugnis hat. Nehmen Sie einfach wenn T ( e , f ( 0 ) ) nicht gilt, weil dann die Schlussfolgerung von (2) wahr ist; oder sonst nehme i ′ = 0 wenn T ( e , f ( 0 ) ) gilt, weil dann ¬ T ( e , f ( 0 )i′=f(0) T(e,f(0)) i′=0 T(e,f(0)) gilt nicht und die Prämisse von (2) ist falsch, was es wieder wahr macht.¬T(e,f(0))
Die Möglichkeit, einen klassischen Satz wie (1) rechnerisch zu interpretieren, besteht daher darin, eine (klassisch) äquivalente Formulierung zu betrachten, die in unserem Fall (2) konstruktiv bewiesen werden kann.
Die oben genannten unterschiedlichen Interpretationen unterscheiden sich nur in der Art und Weise, in der die Funktion aufgerufen wird. Im Falle der Realisierbarkeit und der dialektischen Interpretation wird dies durch die Interpretation in Kombination mit irgendeiner Form von negativer Übersetzung (wie bei Goedel-Gentzen) ausdrücklich angegeben. Bei Curry-Howard-Erweiterungen mit call-cc- und continuation-Operatoren ergibt sich die Funktion f aus der Tatsache, dass das Programm "wissen" darf, wie ein bestimmter Wert (in unserem Fall i ) verwendet wird, also f die Fortsetzung des Programms um den Punkt, an dem ich berechnet wird.f f i f i
Ein weiterer wichtiger Punkt ist, dass die Passage von (1) zu (2) "modular" sein soll, dh wenn (1) zum Beweisen von (1 ') verwendet wird, sollte dessen Interpretation (2) auf ähnliche Weise verwendet werden um die Interpretation von (1 ') zu beweisen, sagen wir (2'). Dies gilt für alle oben genannten Auslegungen, einschließlich der negativen Übersetzung von Goedel-Gentzen.
quelle
Es ist allgemein bekannt, dass klassische und intuitionistische Arithmetik gleich konsistent sind.
Ein Weg, dies zu zeigen, führt über die "negativen Einbettungen" der klassischen Logik in die intuitionistische Logik. Nehmen wir also an, sind Formeln der klassischen Arithmetik erster Ordnung. Nun können wir eine Formel der intuitionistischen Logik wie folgt definieren:ϕ
Beachten Sie, dass im Grunde genommen ein Homomorphismus ist, der in zusätzlichen Nicht-Nicht-Verhältnissen steckt, mit der Ausnahme, dass bei Disjunktionen und Existentialen die De-Morgan-Dualität verwendet wird, um sie in Konjunktionen und Universalien umzuwandeln. (Ich bin ziemlich zuversichtlich, dass dies nicht die exakte Godel-Gentzen-Übersetzung ist, da ich sie für diese Antwort ausgedacht habe. Grundsätzlich funktioniert alles, was Sie mit der Doppelverneinung + der Morgan-Dualität schreiben. Diese Variante erweist sich tatsächlich als wichtig für Computerinterpretationen der klassischen Logik; siehe unten.)G(ϕ)
Erstens: Es ist offensichtlich, dass diese Übersetzung die klassische Wahrheit bewahrt, so dass genau dann wahr ist, wenn ϕ klassisch ist.G(ϕ) ϕ
Zweitens: Es ist weniger offensichtlich, aber immer noch der Fall, dass für Formeln in der Fragment, Beweisbarkeit in intuitionistischer und klassischer Logik fallen zusammen. Der Weg, dies zu beweisen, besteht darin, zuerst die aus dieser Grammatik gezogenen Formeln zu betrachten:∀,⟹,∧,¬
Und dann können wir als Lemma (durch Induktion auf ) beweisen, dass G ( A )A ist intuitiv ableitbar. Wir können also jetzt die Äquidierbarkeit negativer Formeln zeigen, indem wir eine Induktion über die Struktur des Beweises (etwa in der Folgerechnung) durchführen und das Gesetz der ausgeschlossenen Mitte mit dem vorherigen Lemma simulieren.G(A)⟹A
Also, wie solltest du dir das intuitiv überlegen?
Erstens die beweistheoretische Sichtweise. Wenn Sie sich die Regeln der Folgerechnung ansehen, können Sie sehen, dass der einzige Unterschied zwischen klassischer und intuitionistischer Logik in den Regeln für Disjunktion und Existenzialität besteht. Wir verwenden diese Tatsache also, um zu zeigen, dass Beweise in einer Logik dieser Formeln in Beweise in der anderen übersetzt werden können. Dies zeigt, wie man sich konstruktive Logik als eine Erweiterung der klassischen Logik mit den beiden neuen Konnektiven∃ und . Was wir "klassische Existenz" und "klassische Disjunktion" nennen, waren nur Abkürzungen, die ∀ , Konjunktion und Negation beinhalten. Um über die tatsächliche Existenz zu sprechen, mussten wir neue Konnektiva einführen.∨ ∀
Zweitens gibt es eine topologische Ansicht. Nun ist das Modell einer klassischen Logik (als Familie von Mengen) eine Boolesche Algebra (dh eine Familie von Teilmengen, die unter willkürlichen Vereinigungen, Schnittmengen und Ergänzungen geschlossen sind). Es stellt sich heraus, dass das Modell der intuitionsitischen Logik ein topologischer Raum ist , wobei die Sätze als offene Mengen interpretiert werden. Ihnen ist die Interpretation der Negation das Innere der Ergänzung, und dann ist es einfach, das zu zeigen , was bedeutetdass Doppel Negation uns in die kleinsten clopen sendet Abdeckung jeden offenen --- und die clopens a bilden Boolsche Algebra.¬¬¬P=¬P
Dank Curry-Howard können wir nun Beweise in der intuitiven Logik als funktionale Programme interpretieren. Eine mögliche Antwort (aber nicht die einzige) auf die Frage: "Was ist der konstruktive Inhalt eines klassischen Beweises?" ist das Folgende:
Lassen Sie uns also einen Blick auf die Übersetzung von . Dies besagt also, dass der konstruktive Inhalt der ausgeschlossenen Mitte der gleiche ist wie der, dass es nicht der Fall ist, dass ¬ P und und ¬ ¬ P gelten - dh, dass es keinen Widerspruch gibt. In diesem Sinne enthält das Gesetz der ausgeschlossenen Mitte nicht viel Recheninhalt.G ( A ∨ ¬ A ) = ¬ ( ¬ G ( A ) ∧ ¬ ¬ G ( A ) ) ¬ P ¬ ¬ P
Um zu sehen, was es konkret ist, sei daran erinnert, dass Negation konstruktiv als . Also ist diese Formel ( ( G ( A )¬ A = = A⟹⊥ . Das folgende Ocaml-Code-Bit veranschaulicht Folgendes:( ( G ( A )⟹⊥ ) ∧ ( ( G ( A )⟹⊥ )⟹⊥ ) )⟹⊥
Das heißt, wenn Sie nicht-A und nicht-nicht-A erhalten, können Sie einfach die erste Negation an die zweite übergeben, um den gewünschten Widerspruch abzuleiten.
Was ist nun eine Fortsetzung von Transformationen im vorübergehenden Stil?
Jetzt,
Ich habe "eine" CPS-Transformation gesehen, da es, wie ich bereits erwähnte, viele negative Übersetzungen gibt, mit denen Sie diesen Satz beweisen können, und jede entspricht einer anderen CPS-Transformation. Operativ entspricht jede Transformation einer anderen Auswertungsreihenfolge . Es gibt also keine eindeutige rechnerische Interpretation der klassischen Logik, da Entscheidungen zu treffen sind und die unterschiedlichen Entscheidungen sehr unterschiedliche Betriebseigenschaften haben.
quelle
Es gibt ganze Konferenzen zum Thema nichtkonstruktive Beweise als Programme , und ich bin kein Experte auf diesem Gebiet. Oben spielte Neel Krishnaswami auf eine längere Antwort an, die er vorbereitet, was nach seiner Arbeit hier ausgezeichnet sein wird. Dies ist nur ein Vorgeschmack auf eine Antwort.
gibt den O'Caml-Code an:
Die sauberste Einführung dazu, die ich gesehen habe, ist in Tim Griffins "A formulas-as-types-Begriff der Kontrolle" .
quelle
callcc
in das Schema extrahieren sollcallcc
. Dann können Sie es tatsächlich ausprobieren.