Der Grund für das Verbot negativer Vorkommen kann in Analogie zum Knaster-Tarski-Theorem verstanden werden. Dieser Satz sagt das
Wenn ein vollständiges Gitter ist und f : L → L eine monotone Funktion auf L ist , dann ist die Menge der Fixpunkte von f auch ein vollständiges Gitter. Insbesondere gibt es einen kleinsten Fixpunkt μ f und einen größten Fixpunkt ν f .L.f: L → L.L.fμ fνf
In der traditionellen Modelltheorie können Gitter als Sätze angesehen werden, und die Ordnungsbeziehung p ≤ q kann als Folge verstanden werden (dh, dass die Wahrheit von q durch die Wahrheit von p verbunden ist ).L.p ≤ qqp
Wenn wir von der Modelltheorie zur Beweistheorie übergehen, verallgemeinern sich Gitter auf Kategorien. Typen können als Objekte einer Kategorie , und eine Karte e : P → Q repräsentiert einen Beweis dafür, dass Q von Q abgeleitet werden kann .Ce:P→QQQ
Wenn wir versuchen, durch rekursive Gleichungen definierte Typen zu interpretieren, ist ee, ist es naheliegend, nach einer Verallgemeinerung des Knaster-Tarski-Theorems zu suchen. Anstelle einer monotonen Funktion auf einem Gitter möchten wir also einenFunktor F : C → C , der Objekte an Objekte sendet, aber die Monotoniebedingung verallgemeinert, so dass jede Karte e : P → Q eine Karte F ( e ) : F erhält ( P ) → F ( Q ) (mit den Kohärenzbedingungen, dass F Identitäten an Identitäten sendet und Kompositionen beibehält, so dass F.N=μα.1+α F:C→Ce:P→QF(e):F(P)→F(Q)F ).F(g∘f)=F(g)∘F(f)
Wenn Sie also einen induktiven Datentyp μ α möchten . müssen Sie auch eine Funktionsaktion zu Begriffen für den Typoperator F bereitstellen, um sicherzustellen, dass der gewünschte Fixpunkt vorhanden ist. Die strenge Positivitätsbedingung in Agda und Coq ist einesyntaktischeBedingung, die diesesemantischeEinschränkungimpliziert. Wenn Sie einen Typoperator aus Summen und Produkten erstellen, können Sie die Funktionsaktion immer zusammenstellen. Daher sollte jeder auf diese Weise gebildete Typ einen festen Punkt haben.μα.F(α)F
In Sprachen mit abhängiger Eingabe haben Sie auch indizierte und parametrisierte Typen, sodass Ihre eigentliche Aufgabe komplizierter ist. Bob Atkey (der hier und hier darüber gebloggt hat ) sagt mir, dass ein guter Ort, um nach der Geschichte zu suchen, ist:
Wie Andrej bemerkt, hängt es grundsätzlich davon ab, welches Modell der Typentheorie Sie verwenden, ob ein negatives Auftreten in Ordnung ist oder nicht. Wenn Sie eine rekursive Definition haben, suchen Sie grundsätzlich nach einem Fixpunkt, und in der Mathematik gibt es viele Fixpunktsätze.
Eines, von dem ich persönlich viel Gebrauch gemacht habe, ist Banachs Fixpunktsatz, der besagt, dass wenn Sie eine streng kontraktive Funktion auf einem metrischen Raum haben, er einen eindeutigen Fixpunkt hat. Diese Idee wurde von (IIRC) Maurice Nivat in die Semantik eingeführt, von Amerika und Rutten eingehend untersucht und kürzlich von Birkedal und seinen Mitarbeitern mit einer beliebten Operationstechnik namens "Step-Indexing" in Verbindung gebracht.
Dies führt zu Typentheorien, bei denen negative Vorkommen in rekursiven Typen zulässig sind, jedoch nur dann, wenn die negativen Vorkommen unter einem speziellen Konstruktor vom Typ "Schutz" auftreten. Diese Idee wurde von Hiroshi Nakano eingeführt, und die Verbindung zu Banachs Theorem wurde sowohl von mir und Nick Benton als auch von Lars Birkedal und seinen Mitautoren hergestellt.