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:τ0⊢M:τ1Γ⊢λx.M:τ0→τ1(→I)Γ⊢M:τ0→τ1Γ⊢N:τ0Γ⊢MN:τ1(→E)
ABλx.λy.xy(A→B)→A→B 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.