Frage

Ich schaue in das Hindler-Milney-Typ-System und versuche, Unterstützung für den Paartyp hinzuzufügen. In Pierces Book stellt er spezielle Sprachkonstrukte für die Erstellung von Paaren und das Erhalten ihrer Elemente vor.

Was mich interessiert, ist Folgendes. Was ist, wenn ich keine neuen Konstrukte einführe, aber spezielle Funktionen mit diesen Unterschriften verwenden, aber mit diesen Unterschriften verwende:

$$ Paar: Alpha rightarrow Beta rightarrow alpha times Beta $$

$$ proj1: alpha times beta rightarrow alpha $$

$$ proj2: alpha Times Beta rightarrow Beta $$

Wenn ich den Algorithmus von Wand für Typinferenz verwende, erhalte ich nach dem Sammeln aller Gleichungen zwischen Typausdrücken und Lösung ein bisschen die folgende Gleichung für $ ((Paar ; 2 ;) 4): Tau $:

acht

Es scheint mir, dass der Vereinigungsalgorithmus am Ende schließen sollte, dass $ tau = int mal int $. Ist das wahr?

Benötige ich wirklich ein spezielles Konstrukt für Paare? Gibt es etwas konzeptionell falsch daran? Wahrscheinlich ist ihre, also wäre es großartig, wenn mich jemand darauf hinweisen könnte.

Beachten Sie, dass ich es auch vorziehen würde, spezielle Konstrukte zu verwenden, da so sauberer und einfacher aussieht. Diese Frage ist nur für mein vollständiges Verständnis des Themas.

War es hilfreich?

Lösung

Sie können Dinge wie verwenden wie Paar, Proj ... nur als Konstanten. Das funktioniert sehr gut konzeptionell. Dennoch gibt es Gründe, warum Programmiersprachen dazu neigen, spezielle syntaktische Formen für die ähnlichen Produkte zu verwenden:

  • Lesbarkeit, z (M, n) liest natürlicher als Paar Mn für manchen.

  • Für effiziente Reduzierungen. Es ist möglich, die Reduzierungen für Paare in reinem $ lambda $ -Calculus zu codieren, aber das ist normalerweise nicht so effizient.

  • Schließlich benötigen Sie ein polymorphes Schreibsystem, damit dies funktioniert.

Abgesehen davon die Formalisierung der Logik in interaktiven Proof -Assistenten mögen Isabelle basiert auf einer ähnlichen Idee, genannt Logische Frameworks.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top