Gibt es eine nützliche Beschreibung von Futures oder Versprechungen im Sinne der Kategorietheorie? Was könnte insbesondere das kategorische Doppel der Zukunft sein?
quelle
Gibt es eine nützliche Beschreibung von Futures oder Versprechungen im Sinne der Kategorietheorie? Was könnte insbesondere das kategorische Doppel der Zukunft sein?
Wie es passiert, schreibe ich gerade einen Artikel darüber. IMO, eine gute Möglichkeit, über Zukünfte oder Versprechungen nachzudenken, ist die Curry-Howard-Entsprechung für zeitliche Logik .
Grundsätzlich besteht die Idee hinter Futures darin, dass es sich um eine Datenstruktur handelt, die eine laufende Berechnung darstellt und mit der Sie synchronisieren können. In Bezug auf die zeitliche Logik ist dies die schließlich Operator . Dies hat eine monadischen Struktur:
then
Die duale zum schließlich Operator ist der immer Operator ◻ A der zeitlichen Logik, die besagt , dass man in jedem Augenblick einen bekommt ein . Wenn Sie von einer Kripke-Semantik der zeitlichen Logik (bei der Sie nur die Beweisbarkeit modellieren) zu einer kategorialen Semantik eines λ- Kalküls übergehen (bei der Sie auch Lambda-Terme / Beweise modellieren), gibt es tatsächlich mehrere Möglichkeiten, dies zu tun.
A
Am natürlichsten ist es, , wodurch Sie zu jedem Zeitpunkt ein (möglicherweise anderes) . Dann können Sie den comonadischen Stil der funktionalen reaktiven Programmierung (FRP) (zuerst vorgeschlagen von Tarmo Uustalu und Varmo Vene ) als den dualen bis monadischen Stil der Programmierung mit Zukunft sehen.A
Der comonadic -calculus, wie sie vermuten lassen, führt trotz seiner Eleganz zu einem gravierenden Ausdrucksverlust in Bezug auf die explizite Programmierung mit Streams, da die Kategorie der von ihnen verwendeten freien Kohlegebren zu wenige globale Elemente aufweist, um viele interessante Programme zu bezeichnen , vor allem Fixpunkte.
Nick Benton und ich haben in unserer Arbeit Ultrametric Semantics of Reactive Programs dafür plädiert, explizit mit Streams zu programmieren . Anschließend schlug Alan Jeffrey die Verwendung von LTL als Typensystem in seiner Arbeit LTL types FRP vor , eine Beobachtung, die Wolfgang Jeltsch auch in seiner Arbeit Towards a Common Categorical Semantics for Linear-Time Temporal Logic und Functional Reactive Programming machte .
Der Unterschied zwischen der Ansicht Nick und ich nehme, und der Computer , Alan und Wolfgang Take wird am besten verstanden , (IMO) durch den Aufbau in Birkedal et gegeben Vergleich ALs. Die ersten Schritte in der synthetischen bewachten Domäne Theorie: Schritt-Indizierung in den Topos von Bäumen mit Alans Papier. Die Topos von Bäumen (Prägarben über der natürlichen Anzahl, sortiert nach Größe) sind der von Nick und mir verwendeten Kategorie von ultrametrischen Räumen sehr ähnlich, lassen sich jedoch viel einfacher mit der von Alan (Prägarben über eine diskrete Zeitkategorie) vergleichen, da beide Prägarben sind Kategorien.
Wenn Sie an Futures speziell für Parallelität interessiert sind, ist es möglicherweise eine bessere Idee, sich CTL als LTL anzusehen . AFAIK, das ist derzeit unerforschtes Gebiet!
BEARBEITEN: Hier ist ein Link zum Entwurf . In dem Artikel geht es hauptsächlich um die Implementierung von typisiertem FRP, daher ist die Sprache synchron. Der größte Teil der Diskussion über Zukünfte / Ereignisse in Abschnitt 3.3 sollte jedoch grundsätzlich auch für wirklich konkurrierende Sprachen gelten.
Try[T]
undFuture[T]
Dual sind, aber ich habe nicht ganz verstanden, was dies bedeutet / in welchem Sinne.