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
∀X.T:=∏S:SetT[X↦S].
∀X.T fSf(S)T[x↦S]∀X.(X→X)→(X→X)fSund gibt eine Funktion vom Typ . Hier sind einige solcher Funktionen:
Wir erhalten also eine für jede natürliche Zahl, und es ist schwierig, sich andere Beispiele vorzustellen . (Übung: Google "Kirchencodierung natürlicher Zahlen".)
f 0 ( S ) ( g ) ( x ) : = x f 1 ( S ) ( g ) ( x ) : = g ( x ) f 2 ( S ) ( g ) ( x ) : = g ( g ( x ) ) f 3 ( S )(S→S)→(S→S)f0(S)(g)(x)f1(S)(g)(x)f2(S)(g)(x)f3(S)(g)(x):=x:=g(x):=g(g(x)):=g(g(g(x)))
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∃∀
∃X.T:=∀Y.(∀X.(T→Y))→Y
YT∃X.T∃X.T:=∐S:SetT[X↦S].
∃X.T (S,a)SaT[X↦S] . Ein Beispiel wäre der Typ , deren Elemente Paare wobei eine Menge ist und eine binäre Operation ist. Dies ist auch als
Magma bekannt . Wenn Sie etwas schicker werden, können Sie bekannte Strukturen wie Gruppen und Ringe ausdrücken (Sie müssen zuerst die
Identitätstypen erfinden ).
∃X.(X×X→X)(S,m)Sm:S×S→S
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))→YY
A:=∐S:SetT[X↦S]
B:=∏R:Set(∏S:Set(T[X↦S]→R))→R.
λ-Infinitesimalrechnung. In einer Richtung haben wir die Karte definiert als
und in der anderen eine Karte definiert durch
(Die Notation bedeutet die Funktion .) Nun können wir prüfen, ob und invers zueinander sind. Eine Richtung ist einfach:
Die andere Richtung sieht folgendermaßen aus:
f:A→Bf(S,a)(R)(h):=h(S)(a)
g:B→Ag(ϕ):=ϕ(A)(λS.λa.(S,a)).
λS.λa.(S,a)S↦a↦(S,a)fgg(f(S,a))=f(S,a)(A)(λS′.λa′.(S′,a′))=(λS′.λa′.(S′,a′)(S)(a)=(S,a).
f(g(ϕ))(R)(h)=h(π1(g(ϕ))(π2(g(ϕ))).
Wir könnten noch ein bisschen weiter machen, indem wir in umschreiben , aber dann würden wir stecken bleiben!
g(ϕ)ϕ(A)(λS.λa.(S,a))
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.∃∀
∃x.ϕ(x)
∀P:Prop.(∀x.(ϕ(x)⇒P))⇒P,
PPϕ