Esiste una descrizione utile di futuri o promesse in termini di teoria delle categorie? In particolare, quale potrebbe essere il doppio categorico di Future?
Esiste una descrizione utile di futuri o promesse in termini di teoria delle categorie? In particolare, quale potrebbe essere il doppio categorico di Future?
Risposte:
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 . Questo ha una struttura monadica:
then
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.
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.
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.
Try[T]
e Future[T]
sono duale, ma non ho capito bene che cosa questo significa / in che senso.