Mich interessiert, warum natürliche Zahlen bei den Autoren von Büchern über Programmiersprachentheorie und Typentheorie so beliebt sind (z. B. J. Mitchell, Grundlagen für Programmiersprachen und B. Pierce, Typen und Programmiersprachen). Die Beschreibung des einfach getippten Lambda-Kalküls und insbesondere der PCF-Programmiersprache basiert normalerweise auf Nat's und Bool's. Für die Menschen, die industrielle PL für allgemeine Zwecke verwenden und unterrichten, ist es viel natürlicher, Ganzzahlen anstelle von natürlichen Werten zu behandeln. Können Sie einige gute Gründe nennen, warum PL-Theoretiker Nat's bevorzugen? Ansonsten ist es etwas unkomplizierter. Gibt es fundamentale Gründe oder ist es nur eine Ehre der Tradition?
UPD Bei all diesen Kommentaren zur „Fundamentalität“ von Naturals: Ich bin mir all dieser coolen Dinge durchaus bewusst, aber ich würde lieber ein Beispiel sehen, wenn es wirklich wichtig ist, diese Eigenschaften in der Typentheorie der PL-Theorie zu haben. ZB häufig erwähnte Induktion. Wenn wir irgendeine Art von Logik haben (die einfach LC ist), wie grundlegende Logik erster Ordnung, verwenden wir wirklich Induktion - aber Induktion auf Ableitungsbaum (die wir auch in Lambda haben).
Meine Frage kommt hauptsächlich von Leuten aus der Industrie, die eine grundlegende Theorie der Programmiersprachen erlernen wollen. Früher hatten sie ganze Zahlen in ihren Programmen und ohne konkrete Argumente und Anwendungen für die Theorie, die studiert wurde (in unserem Fall Typentheorie), warum sie sich ziemlich enttäuscht fühlen, wenn sie Sprachen nur mit Nat lernen.
quelle
Antworten:
Kurze Antwort: Die Naturals sind die ersten Grenzwerte. Daher spielen sie eine zentrale Rolle in der axiomatischen Mengenlehre (z. B. ist das Axiom der Unendlichkeit die Behauptung, dass sie existieren) und in der Logik, und PL-Theoretiker neigen dazu, grundlegende Interessen mit Logikern zu teilen. Wir wollen Zugang zum Prinzip der Induktion haben, um die vollständige Korrektheit, Beendigung und ähnliche Eigenschaften zu beweisen, und die Naturtöne sind eine (er) natürliche Wahl der Ordnung.
Ich möchte nicht implizieren, dass binäre Ganzzahlen mit endlicher Breite weniger coole Objekte sind. Sie sind Darstellungen der p-adics und erlauben uns, Potenzreihenmethoden in der Zahlentheorie und in der Kombinatorik anzuwenden. Dies bedeutet, dass ihre Bedeutung in der Algorithmik sichtbarer wird als in PL, da wir uns dann mehr um Komplexität als um Terminierung kümmern.
quelle
Naturals sind ein viel grundlegenderes Konzept als die ganzen Zahlen.
Die Induktion erfolgt über die natürlichen Zahlen, und die ganzen Zahlen können aus den natürlichen Zahlen abgeleitet werden, indem einfach ein unärer inverser Operator hinzugefügt wird.
Eigentlich möchte ich die umgekehrte Frage stellen: Warum haben frühe Programmiersprachen- (und Registermaschinen-) Designer Ganzzahlen als Basisdatentyp festgelegt, wenn sie so zweitrangig sind und sich so leicht von Naturals ableiten lassen?
Ich vermute, es liegt nur daran, dass es einige coole Binärkodierungen gab, die ganze Zahlen elegant handhaben konnten. ;-)
Überlegen Sie, wie oft Sie den negativen Bereich einer programmatischen Ganzzahl ignorieren möchten, und betrachten Sie den Impuls, einen vorzeichenlosen Ganzzahltyp zu haben, um das verlorene Bit wiederherzustellen.
quelle
Zwischen und besteht eine berechenbare Trennung . Daher ist es ausreichend, über die Berechenbarkeit und dergleichen nur mit natürlichen Zahlen zu argumentieren. Dabei müssen Sie stets wissen, dass sich Ihre Ergebnisse auf ganze Zahlen (und rationale Zahlen sowie alle anderen rekursiv aufzählbaren Mengen) verallgemeinern lassen.N Z
Nur auf natürliche Weise zu argumentieren ist praktisch, weil Sie eine Induktion haben und eine fundierte Menge mit der natürlichen Ordnung . Letzteres ist besonders wichtig, da es in Termination Proofs instrumentalisiert werden kann. Sie können zwar eine fundierte Reihenfolge in , dies ist jedoch weniger praktisch, da sie nicht der üblichen Reihenfolge entspricht.N ≤ Z
quelle
Ein weiterer Grund (im Zusammenhang mit den bereits gegebenen, aber diese Antwort fügt neue Informationen hinzu) ist, dass es eine sehr einfache, quotientenfreie Konstruktion der Naturals gibt, die mit einem schönen Induktionsprinzip einhergeht [wie bereits gesagt]. . Was nicht erweitert wurde, ist, wie schwierig es ist, eine quotientenfreie Konstruktion der ganzen Zahlen zu finden.
Je mehr Programme ich dort programmiere, wo ich eine hohe Sicherheit haben möchte, desto mehr brauche ich die natürlichen Werte und nur die für mich vordefinierten ganzen Zahlen zu haben, ist für mich ein echtes Problem.
quelle
Gibt es gute Gründe, warum PL-Theoretiker Naturals anstelle von ganzen Zahlen bevorzugen? Es gibt einige, aber in einem Lehrbuch über die Semantik von Programmiersprachen gibt es meines Erachtens keinen technischen Grund, warum dies erforderlich ist. Ich kann mir keinen anderen Ort als abhängige Typsysteme vorstellen, an dem die Induktion von Daten in der PL-Theorie wichtig ist. Andere Lehrbücher von Mike Gordon , David Schmidt , Bob Tennent und John Reynolds machen das nicht. (Und diese Bücher wären wahrscheinlich viel besser geeignet, um Menschen beizubringen, die sich für industrielle Allzweck-PL interessieren!)
Sie haben also den Beweis, dass dies nicht notwendig ist. Tatsächlich würde ich behaupten, dass ein gutes Lehrbuch zur PL-Theorie in den primitiven Typen der Programmiersprache parametrisch sein sollte , und es ist irreführend, etwas anderes vorzuschlagen.
quelle
Naturals und Bools und Operationen auf ihnen können auf einfache Weise in der reinen Lambda-Rechnung als sogenannte Church-Ziffern (und Church-Bools, nehme ich an) kodiert werden. Es ist nicht klar, wie man ganze Zahlen schön codieren würde, obwohl dies offensichtlich möglich ist.
quelle