Einführung in die Martin-Löf-Typentheorie


36

Was wäre die beste Einführung in Per Martin-Löfs Ideen zur Typentheorie? Ich habe mir einige Vorlesungen der Oregon PL Summer School angesehen, bin aber immer noch verwirrt über die folgende Frage:

Was ist ein Typ?

Ich weiß, was eine Menge ist, da man sie mit den üblichen ZF-Axiomen definieren kann und sie ein sehr intuitives konkretes Modell haben. man denke nur an einen Korb voller Sachen. Ich habe jedoch noch keine vernünftige Definition eines Typs gefunden und mich gefragt, ob es eine Quelle gibt, die diese Idee für Dummy destillieren würde.


4
Das HoTT-Buch enthält eine Einführung, in der Typen und Mengen verglichen werden. Vielleicht hilft dies, siehe Abschnitt 1.1 von homotopytypetheory.org/book . Vor allem aber möchten Sie, dass wir die richtige Idee von Typen direkt in Ihren Kopf implantieren, während Sie sich bei Mengen glücklich schätzen, sie durch Axiome beschreiben zu lassen, ohne darauf zu bestehen, dass Sie wissen, "was sie wirklich sind". Nun, Typen werden durch die Inferenzregeln für Typen beschrieben. Und sie haben ein sehr intuitives konkretes Modell, einen Korb voller Legoblöcke. Was immer Sie daraus bauen können, liegt in der Art.
Andrej Bauer

Ich denke, es ist das größte Problem, mein Gehirn von der Mengenlehre abzuhalten. Ich bin mir jedoch nicht sicher, wie gut die Lego-Analogie ist. Was sind die Blöcke? Wenn x: A und y: A, kann ich normalerweise nichts daraus bauen, es sei denn, A ist ein rekursiver Pfeiltyp. Natürlich kann ich oft Sachen verschiedener Art mischen, um etwas von einer dritten Art zu bauen ...
30.

4
Die Lego-Blöcke sind die Typkonstruktoren. So zum Beispiel von und y : A können Sie bauen ( x , y ) und ( x , x ) und i n l ( x ) und r e l f x und λ z : A . x . Sie können auch neue Typen erstellen, zum Beispiel I d ( x , y ) : A Ix:EINy:EIN(x,y)(x,x)inl(x)relfxλz:A.xId(x,y) und und so weiter. Menschen haben unterschiedliche Vorstellungen von Typen. Sets ist einer von ihnen, aber roh. Typen sind auch topologische Räume. Sie sind auch wie strukturierte Daten in der Programmierung. Sie ähneln auch ω- Groupoiden. Das ist das Schöne daran, der Reichtum an Möglichkeiten. Wähle eine Möglichkeit und laufe damit. z:AId(x,z)ω
Andrej Bauer

Antworten:


31

Ein Typ ist eine Eigenschaft von Berechnungen. Es ist das, was Sie auf der rechten Seite eines Doppelpunkts schreiben.

Lassen Sie mich darauf näher eingehen. Beachten Sie, dass die Terminologie nicht vollständig standardisiert ist: In einigen Artikeln oder Büchern werden für bestimmte Konzepte möglicherweise unterschiedliche Wörter verwendet.

Ein Begriff ist ein Element einer abstrakten Syntax, die die Berechnung darstellen soll. Intuitiv ist es ein Analysebaum. Formal ist es ein endlicher Baum, in dem die Knoten zu einem Alphabet gehören. Ein untypisierter Kalkül definiert eine Syntax für Terme. Beispielsweise enthält der (untypisierte) Lambda-Kalkül Terme (geschriebenes , N usw.), die aus drei Knotentypen aufgebaut sind:MN

  • Variablen der Arität 0 (eine zählbare Sammlung davon), geschrieben , y usw .;xy
  • Anwendung einer Variablen der Arität 1 (eine denumerierbare Sammlung davon mit einer Bijektion auf Variablen), geschrieben λx.M usw .;
  • Anwendung, von Arity 2, geschrieben .MN

Ein Begriff ist eine syntaktische Konstruktion. Eine Semantik bezieht sich auf Berechnungen. Es gibt viele Arten von Semantiken, von denen die häufigsten operationell sind (die beschreiben, wie Begriffe in andere Begriffe umgewandelt werden können) oder denotational sind (die Begriffe durch Umwandlung in einen anderen Raum beschreiben, der normalerweise aus Mengenlehre aufgebaut ist).

Ein Typ ist eine Eigenschaft von Begriffen. Ein Typ - System für eine nicht typisierte Kalkül beschreibt , welche Begriffe haben , welche Arten. Mathematisch gesehen ist ein Typensystem im Kern eine Beziehung zwischen Begriffen und Typen. Genauer gesagt ist ein Typensystem eine Familie solcher Beziehungen, die durch Kontexte indiziert sind. In der Regel stellt ein Kontext mindestens Typen für Variablen bereit (dh ein Kontext ist eine Teilfunktion von Variablen zu Typen), sodass ein Begriff möglicherweise nur einen Typ hat in Kontexten, die einen Typ für alle seine freien Variablen bereitstellen. Welche Art von mathematischem Objekt ein Typ ist, hängt vom Typensystem ab.

Einige Typensysteme werden mit Typen als Mengen beschrieben, wobei Begriffe der Mengenlehre wie Schnittmenge, Vereinigung und Verständnis verwendet werden. Dies hat den Vorteil, auf vertrauten mathematischen Grundlagen zu beruhen. Eine Einschränkung dieses Ansatzes ist, dass es nicht erlaubt, über äquivalente Typen zu argumentieren.

Viele Typensysteme beschreiben Typen selbst als Terme in einer Typenkalkulation. Je nach Typsystem können dies gleiche oder unterschiedliche Begriffe sein. Ich werde den Ausdruck Basisausdruck verwenden , um auf einen Ausdruck des Kalküls zu verweisen, der die Berechnung beschreibt. Beispielsweise verwendet der einfach eingegebene Lambda-Kalkül den folgenden Kalkül von Typen (geschriebenes usw.):τ

  • Basentypen der Arität 0 (eine endliche oder unzählige Sammlung davon), geschrieben , B usw .;AB
  • Funktion der Arität 2, geschrieben .τ0τ1

Die Beziehung zwischen Begriffen und Typen, die den einfach typisierten Lambda-Kalkül definiert, wird normalerweise durch Typisierungsregeln definiert . Tippregeln sind nicht die einzige Möglichkeit, ein Typsystem zu definieren, sie sind jedoch weit verbreitet. Sie eignen sich gut für kompositorische Typensysteme, dh für Typensysteme, bei denen der Typ (die Typen) eines Terms aus den Typen von Unterbegriffen aufgebaut ist (sind). Typisierungsregeln definieren ein Typisierungssystem induktiv: Jede Typisierungsregel ist ein Axiom, das besagt, dass für jede Instanziierung der Formeln über der horizontalen Regel auch die Formel unter der Regel wahr ist. Siehe So lesen Sie Tippregeln? für mehr Details. Gibt es eine Turing-vollständige typisierte Lambda-Rechnung?kann auch von Interesse sein.

ΓM:τMτΓ

x:τΓΓx:τ(Γ)Γ,x:τ0M:τ1Γλx.M:τ0τ1(I)ΓM:τ0τ1ΓN:τ0ΓMN:τ1(E)

ABλx.λy.xy(AB)AB in any context (from bottom to top, apply (I) twice, then (E), and finally (Γ) on each branch).

It is possible to interpret the types of the simply typed lambda calculus as sets. This amounts to giving a denotational semantics for the types. A good denotational semantics for the base terms would assign to each base term a member of the denotation of all of its types.

Intuitionistic type theory (also known as Martin-Löf type theory) is more complex that simply typed lambda calculus, as it has many more elements in the calculus of types (and also adds a few constants to the base terms). But the core principles are the same. An important feature of Martin-Löf type theory is that types can contain base terms (they are dependent types): the universe of base terms and the universe of types are the same, though they can be distinguished by simple syntactic rules (usually known as sorting, i.e. assigning sorts to terms, in rewriting theory).

Es gibt Typsysteme, die weiter gehen und Typen und Grundbegriffe vollständig mischen, so dass zwischen beiden kein Unterschied besteht. Solche Typsysteme werden als Systeme höherer Ordnung bezeichnet . In solchen Kalkülen haben Typen Typen - ein Typ kann auf der linken Seite von angezeigt werden:. Der Konstruktionskalkül ist das Paradigma von abhängigen Typen höherer Ordnung. Der Lambda-Würfel (auch als Barendregt-Würfel bekannt) klassifiziert Typsysteme dahingehend, ob sie zulassen, dass Begriffe von Typen abhängen ( Polymorphismus - einige Basisbegriffe enthalten Typen als Subtermen), Typen von Begriffen abhängen (abhängige Typen) oder Typen, die abhängen auf Typen ( Typoperatoren - die Berechnung von Typen hat einen Begriff der Berechnung).

Die meisten Typsysteme wurden mit einer satztheoretischen Semantik versehen, um sie mit den üblichen Grundlagen der Mathematik zu verbinden. Wie hängen Programmiersprachen und Grundlagen der Mathematik zusammen? und Was ist der Unterschied zwischen der semantischen und der syntaktischen Sichtweise von Funktionstypen? kann hier von Interesse sein. Es wurde auch daran gearbeitet, die Typentheorie als Grundlage für die Mathematik zu verwenden - die Mengenlehre ist das historische Fundament, aber es ist nicht die einzig mögliche Wahl. Die Homotopietypentheorie ist ein wichtiger Meilenstein in dieser Richtung: Sie beschreibt die Semantik der absichtlichen intuitionistischen Typentheorie im Sinne der Homotopietheorie und konstruiert in diesem Rahmen die Mengenlehre.

I recommend Benjamin Pierce's books Types and Programming Languages and Advances Topics in Types and Programming Languages. They are accessible to any undergraduate with no prerequisite other than basic familiarity with formal mathematical reasoning. TAPL describes many type systems; dependent types are the subject of chapter 2 of ATTAPL.


+1 für TAPL. Ich konnte mir einiges über die Typen beibringen, die ich beim Lesen dieses Buches hatte.
Guy Coder

Ich bin nicht sicher, ob ATTAPL ein guter Ausgangspunkt ist, um abhängige Typen kennenzulernen.
Martin Berger

15

Vielleicht ist eine bessere Frage für jemanden, der aus der Mengenlehre kommt und sich mit dem Unterschied zwischen Mengenlehre und Martin-Löf-Typentheorie auseinandersetzt, zu überlegen, was Mengen sind. Ihre Intuitionen in die Mengenlehre und in die Grundlagen der Mathematik werden von unbestrittenen mengentheoretischen Annahmen geprägt sein, die Sie für selbstverständlich halten. Leider teilt die Martin-Löf-Typentheorie diese Annahmen nicht.

Contrary to conventional understanding, set theory is a theory of two relations: equality and set membership, not just set membership. And these two relations are built in substantially distinct phases.

  1. We build up first-order logic as a theory of equality of arbitrary things (not just sets). First-order logic uses an informal notion of proof. The concept proof is not itself expressible formally in first-order logic alone.

  2. Then we build up set-theory on top of first-order logic as a theory of sets and set membership.

  3. Set membership and equality are then related by the axiom of extensionality which says that two sets are equal exactly when they have the same members.

  4. Finally, the informal concept of proof from (1) gets an ex-post rationalisation as certain sets (proof trees).

It is important thing to realise is that the notion of proof is thus a second-class citizen in set theory.

This set-up works fine for conventional small/medium sized mathematics, but as we are now tackling large-scale proofs, such as the classification of all finite simple groups, or the verification of non-trivial computer programs, it falls apart, because it does not lead itself to easy mechanisation.

Die Martin-Löf-Typentheorie ist anders: Sie baut den Begriff des Beweises und den des Typs (was ungefähr der Martin-Löf-Typentheorie entspricht, was Mengen der Mengen-Theorie sind) auf einen Schlag auf. Das heißt, Beweise sind erstklassige Bürger der Theorie. Während eine Menge von ihren Mitgliedern angegeben wird, wird in der Mengenlehre nicht angegeben, was als Beweis dafür gilt, dass etwas eine Menge ist. Im Gegensatz dazu ist ein Typ durch seine Bewohnernachweise gegeben. Sie verstehen also einen TypT genau dann, wenn Sie verstehen, worauf es ankommt T.

Was sind diese Beweise, die Typen bewohnen? Vereinfacht gesagt (und ohne Identitätstypen) handelt es sich um Funktionsprogramme, genauer gesagt um Begriffe in der λ-calculus that are typable. This is known as the Curry-Howard correspondence. It gives a beautiful new and less ad-hoc foundation of constructive mathematics. It doesn't work quite so well for classical mathematics tough.


This was extremely useful. I think one major issue of anyone coming into constructive mathematics is to unlearn a lot of things.
dst

Genau. Es dauert eine Weile, bis man seine nicht anerkannten satztheoretischen Annahmen verlernt. Das Programmieren mit Agda hat mir sehr geholfen und könnte auch für Sie funktionieren, wenn Sie einen Informatikhintergrund haben.
Martin Berger

10

Ich kenne keine einfachen Wege in die Martin-Löf-Typentheorie. Ich denke, das Folgende könnte als Einführung dienen.

Wenn Sie jedoch die Frage "Was ist ein Typ?" Jede getippte Programmiersprache reicht aus, aber zB Ocaml, F # und Haskell wären besonders nützlich. Ein bisschen vereinfacht könnte man sagen, dass die Martin-Löf-Typentheorie die Typen hinter den oben genannten Sprachen auf zwei Arten erweitert:

  1. Mit abhängigen Typen . Sie finden sie in zahmerer Form in verschiedenen Programmiersprachen.
  2. Mit Identitätstypen. Dies ist die Hauptinnovation von Martin-Löf gegenüber früheren abhängigen Typentheorien.

Die Schlüsselidee hinter abhängigen Typen ist einfach: Typen können durch Programme parametrisiert werden. Dies ist in konventionelleren Schreibsystemen wie den oben genannten nicht möglich (um es ein wenig zu vereinfachen). Die Konsequenzen sind zwar einfach, aber tiefgreifend: Abhängige Typen heben die Curry-Howard-Entsprechung zur konstruktiven Logik erster Ordnung auf. Identitätstypen sind etwas ungewöhnlich. Wenn Sie mit einer Sprache wie Haskell vertraut sind, können Sie Agda lernen , also Haskell mit Martin-Löf-Typentheorie. Ich bin der Meinung, dass Agda für einen Programmierer viel einfacher zu lernen ist als das Lesen der oben genannten Bücher.


Ich kenne Haskell tatsächlich. Mein Problem ist, dass in jedem Tutorial nur erklärt wird, wie Typen definiert werden, aber nie, was sie tatsächlich sind. Es scheint nur ein magisches Tag zu sein, das mit all Ihren Daten verknüpft ist, sodass der Typprüfer die richtige Version einer polymorphen Funktion auswählen und prüfen kann, ob die Dinge nicht auf eine Weise vermischt sind, die keinen Sinn ergibt. Sie lassen die Frage offen, was ein Typ ist. Das verwirrt mich besonders, da Voevodsky & Co. versucht, die gesamte Mathematik darauf aufzubauen, aber ich habe noch nie eine genaue Definition gesehen.
29.

2
In Haskell haben Sie Tippurteile ΓM:α woher M ist ein Programm, α ist die Art von M, vorausgesetzt, dass MDie freien Variablen von werden wie in der Typisierungsumgebung angenommen eingegeben Γ. In erster Näherung sind Haskell-Typen selbst "Blobs", syntaktische Marker. Das ist genau das gleiche in der Martin-Löf-Typentheorie. Es ist einfach so, dass die Typen, die 'Blobs', die syntaktischen Marker der Martin-Löf-Typentheorie komplizierter sind als die von Haskell.
Martin Berger

Types are very precisely defined in Haskell, in Martin-Löf type theory and in Voevodsky's homotopy type theory. There is no ambiguity whatsoever. For example Appendix A.2 gives a proof-system for all terms and types of homotopy type theory. If you want even more rigour, you can look at the Coq or Agda formalisations.
Martin Berger

2
Maybe you need to swallow that types have no essence other than how they are defined. This is not different with e.g. Sets, they are given by the axioms of set theory. (This is not quite true, but it is nevertheless important to understand.)
Martin Berger
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.