Funktionen, die mit Lambda berechnet wurden, können nicht berechnet werden

12

Ich möchte nur einige Beispiele für die Funktionen kennen, die mit dem untypisierten Lambda-Kalkül berechnet werden können, aber nicht mit typisierten Lambda-Kalkülen.

Da ich ein Anfänger bin, wäre eine Wiederholung der Hintergrundinformationen wünschenswert.

Vielen Dank.

Edit: Mit getippten Lambda-Kalkülen wollte ich etwas über System F und die einfach getippten Lambda-Kalküle wissen. Mit Funktion meine ich jede Turing-berechenbare Funktion.

Timothy Zacchari
quelle
Es gibt viele Schreibdisziplinen für CALCULI, und die Antwort auf Ihre Anfrage hängt zum Teil davon ab, welche Wahl der Schreibdisziplin Sie sich vorgenommen haben. Es kommt auch darauf an, was Sie unter Funktion verstehen. Ein Beispiel für einen Unterschied wäre, dass Typisierungsdisziplinen wie System F nur normalisierende Programme schreiben können, während der untypisierte λ- Kalkül nicht normalisierende Terme enthält. λλ
Martin Berger
Ich dachte an System F und einfachen typisierten Lambda-Kalkül. Mit Funktion meine ich eine berechenbare Funktion.
Timothy Zacchari

Antworten:

15

Ein gutes Beispiel ist Godelization: In der Lambda-Rechnung können Sie eine Funktion nur anwenden. Infolgedessen gibt es keine Möglichkeit, eine geschlossene Funktion vom Typ zu schreiben , die ein Funktionsargument akzeptiert und einen Godel-Code dafür zurückgibt.(NN)N

Wenn man dies als Axiom zur Heyting-Arithmetik hinzufügt, spricht man gewöhnlich von der "konstruktiven Kirchenlehre" und ist ein stark antiklassisches Axiom. Es ist nämlich konsequent, es zu HA hinzuzufügen, aber nicht zu Peano Arithmetic! (Grundsätzlich ist es eine klassische Tatsache, dass jede Turing-Maschine anhält oder nicht, und es gibt keine berechenbare Funktion, die diese Tatsache bezeugen kann.)

Neel Krishnaswami
quelle
Ich verstehe nicht, wie dies mit einer Erweiterungstheorie vereinbar ist: Nehmen Sie f und g extensional gleich, aber mit unterschiedlichen Implementierungen und damit unterschiedlichen Gödelcodes. Gibt Ihre Funktion für f und g dieselbe Zahl zurück?
Cody
3
Es ist nicht im Einklang mit Extensionalität! Doch in HA und sind logische Verknüpfungen, keine Funktionen / Aufzeichnungen. Sie müssen also realisierbar sein, aber ihre Realisierer müssen nicht erweiterbar sein. Andrej Bauer ist ein Experte in diesem Bereich. Wenn Sie also eine Frage stellen, erhalten Sie mit Sicherheit eine gute Antwort.
Neel Krishnaswami
11

Die einfachste Antwort ergibt sich aus der Tatsache, dass typisierte Lambda-Kalküle Logiken entsprechen (einfach typisierte Lambda-Kalküle -> Prädikatenlogik; System f -> Logik zweiter Ordnung) und konsistente Logiken ihre eigene Konsistenz nicht nachweisen können.

Nehmen wir also an, Sie haben natürliche Zahlen (oder eine Church-Kodierung natürlicher Zahlen) in Ihrem typisierten Lambda-Kalkül. Es ist möglich, eine Gödel-Nummerierung vorzunehmen, die jedem Begriff in System F eine eindeutige natürliche Nummer zuweist. Dann gibt es eine Funktion , die jede natürliche Zahl (die einem gut typisierten Term in System F entspricht) zu einer anderen natürlichen Zahl (die der normalen Form dieses gut typisierten Terms in System F entspricht) nimmt und für etwas anderes sorgt Jede natürliche Zahl, die keinem gut typisierten Begriff in System F entspricht (dh, sie gibt Null zurück). Die Funktion f ist berechenbar, sie kann also mit dem nicht typisierten Lambda-Kalkül berechnet werden, nicht aber mit dem typisierten Lambda-Kalkül (da letzteres ein Beweis für die Konsistenz der Logik zweiter Ordnung inff Logik zweiter Ordnung, was implizieren würde, dass Logik zweiter Ordnung inkonsistent ist).

Caveat 1: Wenn zweite Ordnung Logik ist inkonsequent, es könnte zu schreiben möglich sein , im System F ... und / oder es könnte zu schreiben nicht möglich sein , f in der nicht typisierten Lambda - Kalkül - man etwas schreiben könnte, aber es könnte nicht immer beenden, was ein Kriterium für "berechenbar" ist.ff

Vorsichtsmaßnahme 2: Manchmal bedeutet "einfach eingegebene Lambda-Rechnung" "einfach eingegebene Lambda-Rechnung mit einem Festkomma-Operator oder rekursiven Funktionen". Dies wäre mehr oder weniger PCF , das jede berechenbare Funktion berechnen kann, genau wie der untypisierte Lambda-Kalkül.

Rob Simmons
quelle
10

Der untypisierte Kalkül besitzt eine allgemeine Rekursion in Form des Y- Kombinators. Einfach eingegebener λ- Kalkulus nicht. Somit ist jede Funktion, die eine allgemeine Rekursion erfordert, ein Kandidat, zum Beispiel die Ackermann-Funktion. (Ich überspringe einige Details darüber, wie genau wir die natürlichen Zahlen in jedem System darstellen, aber im Grunde genügt jeder sinnvolle Ansatz.)λY.λ

Natürlich können Sie den einfach eingegebenen Kalkül immer so erweitern , dass er der Potenz von Y entspricht , aber dann ändern Sie die Spielregeln.λY.

Andrej Bauer
quelle
Aus irgendeinem Grund hatte ich es im Kopf, dass Sie Ackermann in System F tun könnten ...
Rob Simmons
@Rob, wie ich verstehe, sagt Andrej nicht, dass das nicht der Fall ist.
Kaveh
1
Ich nehme an, ich habe gesagt, dass die Ackermann-Funktion im untypisierten Kalkül programmiert werden kann (weil jede berechenbare Funktion dies kann), aber nicht im einfach typisierten λ- Kalkül. Ich sagte nichts über System F.λλ
Andrej Bauer
Oh, richtig, ich war nur dumm. (Da die Frage zwischen System F und STLC nicht eindeutig war, habe ich mich für das stärkere System entschieden und die einfachere Frage vergessen.)
Rob Simmons
Die Ackermann-Funktion im Kalkül ist λ m . m ( & lgr; f n . n f ( f 1 _ ) ) s u c . Entsprechend einem Typusinferenzer, den ich in diesem Semester gebaut habe, hat es einen einfachen Typ: ( ( ( ( ( f e ) f e ) h ) ( ( ( ( f e ) f λλm.m(λfn.nf(f1_)) such g ) g ) ( ( ( b c ) a b ) ( b c ) a c ) d ) d , was grausam, aber möglicherweise richtig ist . Das Problem mit STS ist nicht Ackermann - es simuliert zum Beispiel eine Turing-Maschine. Ohne den Y- Kombinator geht daseinfach nicht. (((((fe)fe)h)((((fe)fe)h) hg)g)(((bc)ab)(bc)ac)d)dY
Francisco Mota
6

Der einfach getippte Lambda-Kalkül ist eigentlich überraschend schwach. Beispielsweise kann es die reguläre Sprache nicht erkennen . Ich habe jedoch noch nie eine genaue Beschreibung der Sprachen gefunden, die STLC erkennen kann.a

Sam Tobin-Hochstadt
quelle
5
Ich denke, was berechenbar ist, hängt von den Typen ab, die Sie betrachten. Wenn Sie Naturalien über den Typ , wobei p ein Basistyp ist, und Gleichheit als Beta-Gleichheit annehmen, sind die definierbaren Funktionen die erweiterten Polynome (Polynome + Wenn-Dann-Sonst). IIRC, Schwichtenberg hat dies bewiesen, obwohl ich seine Originalarbeit noch nie gelesen habe. (Ich denke, der Name des Papiers lautet übersetzt "Definierbare Funktionen in typisierten Lambda-Kalkülen", 1976.)(pp)ppp
Neel Krishnaswami
2
@ Neel. Eine etwas bessere Übersetzung wäre Definierbare Funktionen im Kalkül mit Typesλ . Sie können es hier herunterladen , es ist nur zwei Seiten lang. Wissen Sie, was bei anderen Typen, mit anderen Vorstellungen von Gleichheit oder mit anderen Kodierungen natürlicher Zahlen passiert?
Martin Berger
@ Marting: Danke! Ich lebe jetzt in Deutschland und das ist ein schöner zusätzlicher Anreiz, mein Deutsch zu üben. :)
Neel Krishnaswami
4

Eine Vision der Grenzen stark normalisierender Kalküle, die ich mag, ist der Berechenbarkeitswinkel. In einem stark normalisierenden typisierten Kalkül, wie dem einfach typisierten Lambda-Kernkalkül, System F oder Konstruktionskalkül, haben Sie den Beweis, dass alle Terme schließlich enden.

Wenn dieser Beweis konstruktiv ist, erhalten Sie einen festen Algorithmus zum Auswerten aller Terme mit einer garantierten Obergrenze für die Berechnungszeit. Oder Sie können auch studieren den (nicht unbedingt konstruktiven) Beweis und extrahieren ein ober gebundene von ihm - was wahrscheinlich zu sein ist riesig , weil diese Kalküle ausdruck ist.

Diese Schranken geben Ihnen "natürliche" Beispiele für Funktionen, die in dieser festen Lambda-Rechnung nicht typisiert werden können: alle arithmetischen Funktionen, die dieser Schranke asymptotisch überlegen sind.

Wenn ich mich richtig erinnere, getippt Begriffe in dem einfach typisierten Lambda-Kalkül können in Turm der exponentiellen ausgewertet werden: O(2^(2^(...(2^n)..); Eine Funktion, die schneller wächst als alle diese Türme, ist in diesen Kalkülen nicht auszudrücken. Das System F entspricht einer intuitiven Logik zweiter Ordnung, daher ist die Rechenleistung einfach enorm. Um die Berechenbarkeitsstärke noch leistungsfähigerer Theorien zu nutzen, argumentieren wir normalerweise mit Mengen- und Modelltheorie (z. B. welche Ordnungszahlen gebaut werden können) anstelle der Berechenbarkeitstheorie.

gasche
quelle
0

Δ=λx.xxΔΔβ ΔΔΔAA=AA

Charles
quelle
λAAAA
Ja, Sie haben Recht, aber ich dachte (vielleicht irre ich mich), dass es nicht möglich war, einen solchen Typ in der einfach getippten Lambda-Rechnung oder im System F zu haben, die beide stark normalisieren.
Charles
ΔΔΔΔ
@Kaveh Warum ist ein Asolcher Typ A \ident A \rightarrow Anicht seltsam? Es klingt für mich absurd, was übersehen ich?
Martijn
Sie denken wahrscheinlich klassisch über Mengen und Funktionsräume darüber nach. Denken Sie zB über endliche binäre Zeichenketten und berechenbare Funktionen nach.
Kaveh