Finora abbiamo parlato di azioni ed operatori ai quali non è associato alcun valore. Ci siamo infatti riferiti al calcolo di base per modellare sistemi concorrenti. Esiste però la possibilità di utilizzare calcoli con Value-Passing nei quali, oltre alla pura sincronizzazione, si esprime la comunicazione di valori di qualsiasi tipo; infatti questo tipo di calcolo tramite opportuni accorgimenti può essere ricondotto al calcolo base.
Per semplificare lo studio, assumiamo che tutti i valori appartengono ad un fissato insieme V che può contenere qualunque tipo di elementi. L'esempio più immediato che si può fare è il seguente:
Le derivazioni di questo sistema saranno le seguenti:
Se l'insieme V è finito, allora si può tradurre qualunque processo in uno descritto con il calcolo senza Value-Passing. Nell'esempio sopra basta dare la possibilità a P di scegliere uno qualunque degli elementi di V da prendere in input e questo si fa utilizzando la seguente sommatoria:
Nel caso visto sopra la variabile è associata ad un'azione visibile ( non può riferirsi a nessun valore), ma essa può anche essere collegata ad un processo. La forma generica può essere tradotta nel seguente insieme di definizioni del calcolo di base:
Altri operatori che subiscono modifiche in questa traduzione sono la restrizione e il relabelling. Nel primo caso l'insieme di restrizione L diventa V; la funzione di relabelling f è modificata in modo che .
COUNTDOWN(x) | .COUNTDOWN(x-1) con | |
COUNTDOWN(0) |
COUNTDOWN | . COUNTDOWN | |
COUNTDOWN | . COUNTDOWN | |
COUNTDOWN | . COUNTDOWN | |
COUNTDOWN |
Morpheus 2004-02-10