Come vengono descritti i future in termini di teoria delle categorie?


Risposte:


25

Come succede, sto scrivendo un articolo su questo ora. IMO, un buon modo di pensare a futuri o promesse è in termini di corrispondenza Curry-Howard per la logica temporale .

Fondamentalmente, l'idea alla base dei futures è che si tratta di una struttura di dati che rappresenta un calcolo in corso e su cui è possibile sincronizzare. In termini di logica temporale, questo è l'operatore casualmente A . Questo ha una struttura monadica:

return:AAbind:(AB)AB
in cui returnspawn funzionamento di un processo che restituisce immediatamente il suo argomento, e crea un nuovo processo, che attende un 's valore, si applica f a quel valore, e quindi attende il B -value prima di tornare. The Promises / Una proposta per CommonJS chiama l'operazione di associazione monadica e Scala 2.10 le fornisce solo l'interfaccia monadica standard .bindafBthen

Il doppio all'operatore eventualmente è l'operatore di sempre A di logica temporale, che dice che in ogni istante, si ottiene un A . Quando passi da una semantica di Kripke della logica temporale (dove modelli solo la provabilità) a una semantica categoriale di un calcolo λ (dove modelli anche termini / prove lambda), si scopre che in realtà ci sono molti modi per farlo.AAAλ

AAA

La cosa più naturale (IMO) da fare è prendere , che ti permette di ottenere una (potenzialmente diversa) in ogni istante. Quindi, puoi vedere lo stile comonadico della programmazione reattiva funzionale (FRP) (proposto per la prima volta da Tarmo Uustalu e Varmo Vene ) come lo stile di programmazione da doppio a monadico con i futures.AStreamAA

Tuttavia, il comonadic -calculus come suggeriscono, nonostante la sua eleganza, provoca una grave perdita di espressività rispetto alla programmazione esplicita con flussi, poiché la categoria di coalgebre libere che usano risulta avere troppi elementi globali per indicare molti programmi interessanti , in particolare punti fissi.λ

Nick Benton e io abbiamo discusso esplicitamente della programmazione con flussi nel nostro articolo Ultrametric Semantics of Reactive Programs . Successivamente, Alan Jeffrey ha suggerito di utilizzare LTL come sistema di tipi nel suo articolo Tipi di FRL FRP , un'osservazione che Wolfgang Jeltsch ha anche fatto nel suo articolo Verso una semantica categorica comune per la logica temporale temporale e la programmazione reattiva funzionale .

La differenza tra l'opinione che io e Nick assumiamo e quella che Alan e Wolfgang assumono è meglio compresa (IMO) confrontando la costruzione fornita in Birkedal et al. I primi passi nella teoria dei domini protetti sintetici: l'indicizzazione dei passi nei topos di alberi con il foglio di Alan. Il topos degli alberi (presaga sopra i numeri naturali ordinati per dimensione) è molto simile alla categoria di spazi ultrametrici che io e Nick abbiamo usato, ma molto più facile da confrontare con la categoria di Alan (presaga su una categoria di tempo discreta), dal momento che entrambi sono presheaf categorie.

Se sei interessato a futuri specifici per la concorrenza, potrebbe essere un'idea migliore guardare CTL piuttosto che LTL. AFAIK, questo è attualmente un territorio inesplorato!

EDIT: ecco un link alla bozza . L'articolo riguarda principalmente l'implementazione di FRP tipizzato, quindi il linguaggio è sincrono. Ma la maggior parte della discussione sui futuri / eventi nella sezione 3.3 dovrebbe sostanzialmente valere anche per le lingue realmente concorrenti.


1
Mi piacerebbe ottenerne una copia una volta finito.
Dave Clarke,

1
Sembra che questo perda un'importante caratteristica dei futures: una volta ottenuto un valore, non può cambiare. Proverei ad esprimerlo prendendo come un assioma, ma questo non è quello che vogliamo se significhi un flusso ... E vorrei anche una copia del foglio quando è finito: )AA
Alexey Romanov,

Di recente ho letto che il tipo Scala Try[T]e Future[T]sono duale, ma non ho capito bene che cosa questo significa / in che senso.
Giorgio,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.