Ich versuche, mich mit den Konzepten universeller und existenzieller Typen zu beschäftigen, aber überall, wo ich hinschaue, sehe ich entweder logische oder operative Intuitionen (oder Implementierungen) (z. B. TAPL-Buch von B. Pierce), was gut ist , aber ich würde gerne die Definitionen sehen (wo wir sie als Mengen betrachten) - und daraus Ableitungen einiger Gesetze sowie Rechtfertigungen für unsere Intuitionen.
Da ich diese Definitionen nicht finden kann, habe ich mich dazu entschlossen, dies selbst zu tun, und ich denke, dass dies vernünftig sein kann:
Aber in dem oben erwähnten TAPL-Buch erhalten wir diese Definition (obwohl ich es eine Identität nennen würde)
Ich habe zwei Probleme damit:
- Auf der LHS von würde ich erwarten, dass die einzige freie Variable von (denn wie kann man einen Typ "noch nicht erstellt" mit einigen darin baumelnden freien Variablen anzeigen?), Aber auf der RHS scheint es so kann einen Einfluss auf , daher ist es besser, eine freie Variable in . Daher kann LHS nicht gleich RHS sein, da sich die Mengen der freien Variablen von auf beiden Seiten unterscheiden, oder?x T y T T T.
- Selbst wenn ich die Bedenken an Punkt 1 außer Acht lasse. - Ich habe versucht, RHS mithilfe meiner Definitionen neu zu schreiben und zu prüfen, ob ich meine Definition des existenziellen Typs erhalten kann, aber ich bin festgefahren:
Es ähnelt nicht einmal im entferntesten meiner Definition. Ist es möglich, die Formel, zu der ich gekommen bin, zu vereinfachen? Intuitiv, weil es Funktionstypen gibt, wird es wahrscheinlich nie meiner Definition entsprechen. Aber wenn sie nicht gleich sind - sind sie zumindest in gewissem Sinne "isomorph"? Wenn nicht - was ist "schief gelaufen"?
quelle
Antworten:
Die Mengenlehre schadet Ihnen hier und je früher Sie sich davon befreien, desto besser wird es für Ihr Verständnis der Informatik.
Vergessen Sie die Kreuzungen und Gewerkschaften. Die Leute kommen auf die Idee, dass und wie und , was die polnische Schule vor langer Zeit mit Booleschen Algebren gemacht hat, aber es ist wirklich nicht der richtige Weg (definitiv nicht im Computer) Wissenschaft).∃ ⋂ ⋃∀ ∃ ⋂ ⋃
Sie möchten diese als Sets betrachten. Ok, aber dann müssen wir Größenprobleme ignorieren und so tun, als gäbe es eine Menge aller Mengen. (Es ist möglich, die Größenprobleme zu beheben, indem Sie an eine andere Kategorie übergeben.) Der Typ ist wirklich wie das kartesische Produkt Das heißt, ein Element von ist eine Funktion von Mengen zu Mengen: Für jede Menge gibt es ein Element vom Typ . Zum Beispiel ist ein Element von eine Funktion die eine Menge annimmt∀ X . T : = ∏ S : S e t T [ X ↦ S ] . ∀ X . T f S f ( S ) T [ x ↦ S ] ∀ X . ( X → X ) → ( X → X ) f S ( S → S ) →∀x.T
Als nächstes betrachten wir die existenziellen Typen. Zunächst wird die richtige Codierung hinsichtlich ist wobei die Variable nicht in erscheint ! (Dies sollte in Pierces TAPL erwähnt werden.) Bevor wir uns diese Codierung ansehen, lassen Sie uns tun direkt in Mengen. Diesmal ist es ein Nebenprodukt: Ein Element von ist ein Paar wobei eine Menge und ein Element von ist∃ ∀
Lassen Sie uns sehen, wie die Codierung von in Bezug auf funktioniert. Es ist falsch zu erwarten, dass wir eine Gleichheit zwischen und (NB: ist frisch) - nur die Mengenlehre würde den Menschen solche Erwartungen geben. Wir sollten erwarten, dass die beiden isomorph sind . Die Aufgabe besteht also darin, eine Bijektion zwischen und Dies ist eine Übung in∃ ∀ ∃X.T ∀Y.(∀X.(T→Y))→Y Y
Es stellt sich heraus , dass in der Mengenlehre die Codierung in Bezug auf funktioniert nicht. Es funktioniert jedoch auch in anderen Setups, in denen Typen keine Sets sind. Sie können sich beispielsweise davon überzeugen, dass in der Logik die Anweisungen entspricht wobei über alle Sätze (Wahrheitswerte, logische Aussagen) reicht. Auch hier sollte die Variable in nicht vorkommen .∀ ∃ x . ϕ ( x ) ∀ P : P r o p . ( ∀ x . ( Φ ( x ) ⇒ P ) ) ⇒ P , P.∃ ∀
quelle
Zu Frage 1): Die Variable darf nicht in erscheinen , sondern muss nicht eingeschränkt werden. Wenn Sie hoffen möchten, dass die lhs gleich den rhs sind, sollten Sie auf jeder Seite die gleiche Anzahl freier Variablen haben, was unmöglich ist, wenn in erfasst wird . Die Intuition ist, dass gleich der unendlichen Konjunktion sein sollte für jeden möglichen Typ . In der Tat ist es nicht schwer, für einen bestimmten Typ zu zeigen, dassY Y Y T ∃T
In Worten:
Beachten Sie, dass selbst nicht von abhängen darf .U x
Die Intuition hinter der Gleichheit ist, dass diese Tatsache für jedes möglicheU ausreicht, um den existenziellen Quantifizierer zu charakterisieren.
Für 2) ist die satztheoretische Intuition hier leider etwas schwierig. Es ist nicht naiv möglich, Typen als Mengen von Elementen und Pfeilen als satztheoretische Funktionen zwischen ihnen zu betrachten. Wenn jedoch eine Kreuzung nicht leer ist, sollte intuitiv nicht leer sein. In Ihrem Fall ergibt dies⋂SA(S) A(∅)
(Beachten Sie die Klammern), die nicht leer sein dürfen. Der einzige Weg dafür ist, dass es ein so dass leer ist, was bedeutet, dass nicht leer sein muss.R T[x:=R]→∅ T[x:=R]
quelle
Ich schlage vor, die operative Intuition nicht aufzugeben. Operativ ist primär, alle Semantiken werden abgeleitet und sind nur Beweisverfahren für die operative Semantik. Die Schlüsselideen sind wie folgt.
Ein Programm verwendet eine Variable universell-polymorph , vorausgesetzt, macht nichts mit , was Kenntnisse über den Typ von erfordert . Zum Beispiel könnten im Kalkül die folgenden Operationen polymorph sein (ob sie sind oder nicht, hängt von der genauen Sprachsemantik ab).P x P x x λ
Der existenzielle Polymophismus ist nun das exakte Dual des universellen Polymorphismus: Ein Programm verwendet eine Variable existenziell-polymophial , wenn nur für Kontexte bereitstellt , die keine Kenntnis des Typs von erfordern . Mit anderen Worten, liefert nur für Kontexte, die universell-polymorph verwenden.x P x x P x xP x
P x x P x x
Meiner Meinung nach wird diese schöne Symmetrie verdeckt, wenn man über universellen / existenziellen Polymorphismus im Kalkül nachdenkt. Der Grund ist die starke Abhängigkeit vom Funktionsraumoperator, der leider kein Dualisierungsoperator ist, sondern etwas Komplizierteres (Kovariante in einem Argument, Kontravariante im anderen).λ
quelle