UNIVERSITA’ DEGLI STUDI DI PADOVA Facoltà di Scienze Matematiche Fisiche Naturali Corso di laurea specialistica in Informatica TESI DI LAUREA Strutture ad eventi e strategie: un ponte fra teoria della concorrenza e semantica dei giochi Laureando: Mauro Piccolo Relatore: prof. Claudia Faggian Co-relatore: prof. Daniele Varacca 2 Indice 1 Introduzione 1.1 Gli ambiti studiati . . . . . . . . 1.1.1 Teoria della concorrenza . 1.1.2 Semantica dei giochi . . . 1.1.3 Teoria della dimostrazione 1.2 Strutture con ordine parziale . . . 1.2.1 Strutture di eventi . . . . 1.2.2 Strategie lineari: . . . . . 1.3 Scopi, contributi e risultati . . . . 1.4 Struttura della tesi . . . . . . . . . . . . . . . . . . . . . . . . . . 7 8 8 8 9 9 10 10 11 12 2 Modelli per la concorrenza 2.1 Modelli ad interleaving vs modelli causali . . . . . . . . . . . 2.2 Strutture di eventi . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Definizioni . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Strutture di eventi senza conflitto e senza confusione 2.2.3 Operazioni con le event structure . . . . . . . . . . . 2.2.4 Composizione parallela di strutture di eventi . . . . . 2.3 Discussione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 17 18 22 24 26 33 3 Semantica dei giochi 3.1 Introduzione informale alle 3.2 Modello HO . . . . . . . . 3.2.1 Arene . . . . . . . 3.2.2 Partite . . . . . . . 3.2.3 Strategie . . . . . . 3.3 Strategie lineari . . . . . . 3.3.1 L-nets . . . . . . . 3.3.2 Composizione . . . 3.4 Da MALL alle L-nets . . 3.4.1 Logica lineare . . . . . . . . . . . . . 35 36 39 39 40 41 44 45 48 51 52 . . . . . . . . . strategie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 INDICE 3.4.2 Un calcolo dei sequenti focalizzato per MALL . . . . . 54 3.4.3 Da MALL alle L- nets . . . . . . . . . . . . . . . . . . 56 3.5 Discussione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4 Strutture di eventi tipate 4.1 Strategie come strutture ad eventi senza confusione 4.2 Sistema di etichette . . . . . . . . . . . . . . . . . . 4.2.1 Soggetti e nomi . . . . . . . . . . . . . . . . 4.2.2 Interfacce . . . . . . . . . . . . . . . . . . . 4.3 Strutture di eventi tipate . . . . . . . . . . . . . . . 4.3.1 Proprietà dell’etichettaggio . . . . . . . . . . 4.4 Composizione globale . . . . . . . . . . . . . . . . . 4.4.1 Definizione . . . . . . . . . . . . . . . . . . . 4.4.2 Proprietà della composizione . . . . . . . . . 4.5 Composizione senza conflitti . . . . . . . . . . . . . 4.5.1 Definizione . . . . . . . . . . . . . . . . . . . 4.5.2 Lavorare con le slice . . . . . . . . . . . . . 4.6 Discussione . . . . . . . . . . . . . . . . . . . . . . 5 Risultati di equivalenza 5.1 Composizione con hiding . . 5.2 Composizione di strutture di 5.3 Risultato di isomorfismo . . 5.4 Risultato di equivalenza . . 5.5 Discussione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 60 62 63 63 64 66 69 69 71 72 72 75 77 . . . . . . . . . . . . . . . 79 80 82 84 88 91 6 CCS polarizzato 6.1 Definizioni, regole di transizione etichettata . . . . . . . . 6.1.1 Bisimulazione . . . . . . . . . . . . . . . . . . . . . 6.2 Typing system . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Risultati di type safety . . . . . . . . . . . . . . . . . . . . 6.4 La codifica in strutture di eventi tipate di CCS polarizzato 6.4.1 Definizione del modello . . . . . . . . . . . . . . . . 6.4.2 Teorema di validità . . . . . . . . . . . . . . . . . . 6.4.3 Corrispondenza fra le semantiche . . . . . . . . . . 6.5 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 94 95 96 98 99 100 101 102 104 . . . . . . . . eventi tipate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A A Graph Abstract Machine Describing Event Structure Composition 111 A.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 A.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 INDICE A.2.1 A sketch of strategies composition . . . . . . . . . . . A.2.2 Event structures . . . . . . . . . . . . . . . . . . . . A.2.3 Confusion free event structures . . . . . . . . . . . . A.3 Typed event structures . . . . . . . . . . . . . . . . . . . . . A.3.1 Names and actions. . . . . . . . . . . . . . . . . . . A.3.2 Interfaces. . . . . . . . . . . . . . . . . . . . . . . . A.3.3 Typed event structures. . . . . . . . . . . . . . . . . A.3.4 Properties of the labelling . . . . . . . . . . . . . . . A.4 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.1 Compatible interfaces . . . . . . . . . . . . . . . . . . A.4.2 Conflict free composition . . . . . . . . . . . . . . . . A.4.3 Local rewriting rules . . . . . . . . . . . . . . . . . . A.4.4 Reducing composition to conflict free composition . . A.4.5 Global composition . . . . . . . . . . . . . . . . . . . A.5 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5.1 Relating with standard event structure composition . A.5.2 Linear strategies with parallel composition are a subclass of typed event structures . . . . . . . . . . . . . A.5.3 More comments and future work . . . . . . . . . . . 5 . . . . . . . . . . . . . . . . 114 116 117 118 119 119 120 120 122 122 123 124 124 125 129 129 . 130 . 130 6 INDICE Capitolo 1 Introduzione Teoria della concorrenza, semantica dei giochi e teoria della dimostrazione sono tre importanti aree dell’informatica teorica e della logica. Esse hanno motivazioni diverse, e ciascuna ha strumenti, risultati, ed un linguaggio proprio, ma esse hanno anche molti punti in comune. In particolare, un approccio comune consiste nello studio di un determinato fenomemo o oggetto, visto non come una singola entità, ma come parte di un universo in cui differenti istanze di questo oggetto interagiscono: si pensi ad esempio ai processi che eseguono in parallelo in teoria della concorrenza e dunque al fenomeno del parallelismo. Si parla dunque, per ogni singola area, di interazione fra gli oggetti. Una convinzione presente in diversi ambienti di ricerca è che ci possano essere connessioni profonde tra teoria della concorrenza da una parte, e semantica dei giochi/ teoria della dimostrazione dall’altra. La ricerca di tali connessioni alimenta in effetti una crescente attività. Parallelamente, e più specificatamente, nell’ambito della semantica dei giochi, un consistente numero di progetti mira a generalizzare in senso concorrente le strutture esistenti, per catturare non-determinismo e calcolo parallelo [AM99, Mel04, HS02, MW05, SPP05, FM05, CF05, Lai05, GM04]. Questo lavoro si colloca nella linea di entrambe tali direzioni. In particolare, il nostro studio si è concentrato sull’analisi di una struttura comune, che appare sia nei modelli causali della concorrenza, che in semantica dei giochi. Infatti, le due aree usano entrambe strutture di ordini parziali: da una parte abbiamo le strutture di eventi, dall’altra le strategie linari. Questo capitolo si strutturerà come segue: anzitututto verrà data una breve introduzione sulla teoria della conocorrenza, semantica dei giochi e teoria della dimostrazione, specificando per ciascun ambito quale è l’oggetto di studi e che cosa si intende per interazione. Poi si entrerà nei dettagli di ciascuna area allo scopo di precisare quali strutture sono prese in con7 8 Introduzione siderazione e in particolare ci si concentrerà su teoria della concorrenza e semantica dei giochi analizzando rispettivamente le strutture di eventi e le strategie lineari. Infine si entrerà nei dettagli del lavoro svolto, precisandone lo scopo iniziale e i risultati ottenuti. 1.1 1.1.1 Gli ambiti studiati Teoria della concorrenza In teoria della concorrenza, l’oggetto di studio è il processo (intuitivamente un processo è un insieme di azioni svolte in un certo ordine), visto non come singola entità, ma come parte di un sistema attraverso il quale può interagire con altri processi. Utilizzando le parole di Edsger Dijkstra (1930 - 2002) Concurrency occurs when two or more execution flows are able to run simultaneouslyγ (La concorrenza accade quando due o più flussi di esecuzione sono in grado di eseguere simmultaneamente) L’interazione è l’essenza stessa della teoria: si intende studiare tutte le problematiche che occorrono quando due o più processi eseguono in parallelo e comunicano tra loro. 1.1.2 Semantica dei giochi In semantica dei giochi, l’oggetto di studio è il programma (processo di calcolo o funzione calcolabile). In questo contesto la computazione è modellata come una partita, un gioco tra due entità che sono l’opponente, che rappresenta l’ambiente e il proponente (detto anche player) che rappresenta il programma. L’oggetto principale, usato per modellare un programma, è la strategia, che di fatto rappresenta un insieme di possibili partite fra opponente e proponente. Il concetto di interazione qui è dato dalla composizione di strategie, che corrisponde alla composizione di due programmi o alla composizione di funzioni (se si pensa in termini di funzioni calcolabili). La semantica dei giochi è divenuta recentemente un ambito di ricerca fiorente a causa della sua versatilità: infatti il modello a giochi, pur essendo sufficentemente astratto, descrive molto bene il comportamento operazionale dei programmi e questa sua peculiarità ha reso possibile la costruzione di numerosi modelli fully abstract per parecchi linguaggi di programmazione, tra i quali il più famoso è certamente quello per PCF [HO00, AJM00, Cur06]. Strutture con ordine parziale 1.1.3 Teoria della dimostrazione La teoria della dimostrazione è una branca della logica matematica che rappresenta prove sotto forma di oggetti matematici formali, come ad esempio liste oppure alberi, i quali sono costruiti seguendo delle regole ben precise. Utilizzando le parole di Gehart Gentzen (1909 - 1945) Ich wollte zunächst einmal einen Formaulismus aufstellen, der dem wirklichen Schliessen möglichst nahe kommt. So ergab sich ein ‘Kalkül des natürlichen Schliessens’γ1 (Io volevo anzitutto costruire un formalismo che sia il più possibile vicino al ragionamento vero. Questo ha portato al calcolo della deduzione naturale) L’interazione fra prove qui assume un’aspetto fondamentale: intuitivamente se si hanno le prove, descritte utilizzando un certo sistema, di A ⇒ B e di B ⇒ C allora esiste una prova di A ⇒ C e tale prova è ottenuta, nel caso del calcolo dei sequenti, utilizzando una procedura detta eliminazione del taglio.2 1.2 Strutture con ordine parziale Ciascun ambito ha un oggetto di studio, descritto utilizzando determinate costruzioni matematiche: in particolare, in tutte e tre gli ambiti è possibile descrivere gli oggetti di studio mediante ordini parziali. Più precisamente, in teoria della concorrenza, vi è un’importatante sottoclasse dei modelli utilizzati, detta classe dei modelli causali, in cui strutture dotate di ordini parziali sono utilizzate per modellare processi (si pensi ad esempio alle reti di Petri o alle strutture di eventi). In semantica dei giochi, un’importante sottoclasse delle strategie, detta classe delle strategie lineari [Gir01], è utilizzata come modello per la logica lineare ed esse sono descritte mediante ordini parziali. Infine, in teoria della dimostrazione, vi sono le reti di prova che sono rappresentazioni a grafo delle prove in calcolo dei sequenti della logica lineare [Gir87]. Tutte queste strutture possono essere dunque descritte utilizzando degli ordini parziali oppure utilizzando strutture ben note in teoria dei grafi, ovvero dei grafi diretti acliclici (d.a.g.) con nodi etichettati (dove 1 39 Gentzen - Untersuchungen über das logische Schliessen - Mathematische Zeitschrift 2 Il teorema di eliminazione del taglio è un risultato molto importante all’interno di un qualunque sistema formale. Una sua importante conseguenza è la consistenza del sistema stesso. 9 10 Introduzione le etichette sono azioni in teoria della concorrenza, mosse in semantica dei giochi, regole in teoria della dimostrazione). In particolare, in questo elaborato, ci si concentrerà sulla corrispondenza fra teoria della concorrenza e semantica dei giochi, e più precisamente sulla corrispondenza fra strutture di eventi (che sono un modello causale) e strategie lineari. 1.2.1 Strutture di eventi Le strutture di eventi sono modelli per la concorrenza causali (detti anche modelli veramente concorrenti), i.e. modelli dove la causalità, concorrenza e conflitti sono direttamente rappresentati, in opposizione ai modelli ad interleaving, che descrivono un sistema mediante tutte le possibili sequenzializzazioni delle azioni concorrenti. Una struttura di eventi modella la computazione parallela per mezzo di • eventi che sono occorrenze di azioni • un ordine parziale che esprime la dipendenza causale Il non determinismo è modellato per mezzo di • una relazione di conflitto che esprime come l’occorrenza di certi eventi escluda l’occorrenza di altri Due eventi sono concorrenti se non sono nè causalmente correlati, nè in conflitto. Eventi in conflitto vivono in differenti evoluzioni del sistema. In particolare, in questo elaborato, si parlerà di strutture ad eventi senza confusione, che sono una sotto-classe delle strutture ad eventi, nella quale il non-determinismo ‘si comporta bene’, ovvero la scelta non determinista è ben ‘localizzata’ in un ben preciso punto della struttura. Questa sotto-classe è inoltre utilizzata in [VY06] per costruire un modello a strutture di eventi di π-calcolo. 1.2.2 Strategie lineari: Le strategie lineari sono delle strategie introdotte come modello per la logica lineare. Esse sono state introdotte da Girard in [Gir01] ed estese sotto forma di d.a.g. etichettati, dunque ordini parziali in [FM05]. L’uso di ordini parziali per descrivere strategie è utilizzato non per descrivere l’ordine con cui le mosse veranno eseguite, bensı̀ quello di esprimere vincoli di causalità. Scopi, contributi e risultati 1.3 Scopi, contributi e risultati Il problema dal quale questo lavoro è partito è il seguente: confrontare le strutture di eventi senza confusione in teoria della concorrenza e le strategie lineari in semantica dei giochi allo scopo di poter mappare l’ultima struttura nella prima. Una volta descritte le strategie lineari come strutture di eventi senza confusione, ci interessava studiare la nozione di composizione, e in particolare determinare se ci fosse equivalenza tra • la composizione di strategie propria alla semantica dei giochi • la composizione delle stesse strategie interpretate come strutture di eventi, utilizzando la composizione di struture di eventi data in [VaraccaYoshida]. Tale corrispondenza fra strategie lineari e strutture ad eventi senza confusione è stata effettivamente stabilita. Tale primo risultato è stato inoltre esteso, arrivando ad ottenere una definizione di una struttura generale equipaggiata con una nozione di interazione che è tale per cui: • se portata nell’ambito semantica dei giochi, di incarnare una strategia lineare e l’operazione di interazione definita sarà equivalente alla composizione di strategie lineare • se portata nell’ambito teoria della concorrenza, di incarnare una struttura di eventi senza confusione e l’operazione di interazione definita sarà equivalente alla definizione di composizione di strutture ad eventi data in [Varacca-Yoshida]. Tale risultato rappresenta il principale contributo della tesi. La nozione di interazione, che nella tesi è denominata composizione globale, è una generalizzazione della procedura di composizione di strategie lineari data in [Fag02] e denominata macchina LAM. In questo lavoro sono inoltre stati ottenuti i seguenti risultati specifici • definizione di un typing system per le strutture ad eventi senza confusione che garantisce la preservazione dell’assenza di confusione per composizione. • applicazione della tecnica ‘working by slice’ propria della semantica dei giochi e usata per la normalizzazione delle L-nets, alle strutture ad eventi senza confusione, allo scopo di ridurre la procedura di composizione globale al caso senza conflitto. 11 12 Introduzione • riformulazione della definizione di composizione di strutture di eventi senza conflitto mediante regole di riscrittura di grafo. In particolare questo permette di mostrare la confluenza e l’associatività della composizione. • analisi di un frammento di CCS, del quale si è fornito un modello a strutture ad eventi tipate, del quale si sono mostrate validità e dei risultati di corrispondenza con la semantica operazionale, fra i quali spicca la full abstraction Inoltre, la definizione di composizione elaborata in questa tesi apporta un contributo nuovo anche in semantica dei giochi, in quanto la composizione globale qui introdotta realizza in particolare la composizione globale di strategie lineari, per le quali la composizione era stata definita in [FM05] e [CF] solo in termini di slices3 . 1.4 Struttura della tesi Questa tesi si struttura in 6 capitoli. I capitoli 2 e 3 sono capitoli di introduzione all’argomento. Il contributo di questa tesi è riportato nei capitoli 4, 5, 6. Il presente elaborato si strutturerà come segue. Nel capitolo 2 si introdurranno in modo generale le due classi principali dei modelli per la concorrenza, che sono i modelli ad interleaving e i modelli causali, per poi passare ad introdurre le strutture ad eventi, le relative proprietà e la nozione di composizione. Nel capitolo 3 si introdurrà la semantica dei giochi stile Hyland-Ong, parlando anzitutto della parte di quest’ultima utilizzata per costruire modelli per linguaggi di programmazione. Poi si introdurrà la semantica dei giochi stile Girard (strategie lineari), che è la semantica dei giochi HO utilizzata per costruire modelli per la logica lineare. Ci si concentrerà principalmente su quest’ultima, introducendo una struttura detta L-net, introdotta da Claudia Faggian e Francois Maurel in [FM05]. Questa sarà la struttura di riferimento nel capitolo 4 nel quale si mostrerà appunto la corrispondenza fra L-net e strutture ad eventi, in particolare mostrando che una L-net è una particolare struttura ad eventi senza confusione. Si procederà dunque a studiare le strutture ad eventi senza confusione costruendo un sistema di tipi e dando una definizione di composizione, che è la generalizzazione di una definizione di composizione di strategie in semantica dei 3 Come conseguenza, ci aspettiamo di avere un’analoga procedura di composizione ‘globale’ per le reti di prova additive che sono attualmente sviluppate a partire dagli L-nets Struttura della tesi giochi. Nel capitolo 5 si mostrerà che questa definizione di composizione è effettivamente equivalente alla composizione di strutture ad eventi data in [VY06]. Infine nel capitolo 6 si mostrerà la versatilità della struttura studiata nel capitolo 4, definiendo un modello fully abstract di un frammento di CCS, detto CCS polarizzato, in questa struttura. Questa tesi è stata realizzata all’interno di una attività di stage svolta presso l’Università di Parigi 7 nel laboratorio P.P.S. (Preuves Programmes et Systèmes). La parte inizile di questa tesi è stata presentata a GT-VC (Graph Transformation for Verification and Concurrency) che è un workshop satellite della conferenza internazionale CONCUR’06 sulla teoria della concorrenza, svoltasi a Bonn (Germania) dal 27 al 30 agosto. Il relativo articolo appare nei Proceedings del workshop ed è riportato in appendice alla tesi. 13 14 Introduzione Capitolo 2 Modelli per la concorrenza Lo studio dei fenomeni e delle problematiche legate alla concorrenza sono di fatto un’attività basilare che interessa differenti ambiti nella realtà e in molti livelli, dal microchip fino ai sistemi multiprocessore. Il multitasking, ovvero la capacità di eseguire più di un compito parallelamente, da parte dei moderni sistemi reattivi è divenuto caratteristica essenziale. Tuttavia un concetto che a prima vista può apparire semplice come eseguire due o più azioni (o insiemi di azioni) in modo contemporaneo, può essere fonte di problemi, spesso di difficile soluzione: problemi come il deadlock, il livelock, la starvation, l’inconsistenza dovuta all’accesso a risorse condivise, la mutua esclusione sono molto studiati soprattutto dai progettisti di sistemi concorrenti in quanto di difficile individuazione. Quindi, dire che un sistema concorrente è corretto (ovvero libero dai problemi sopra citati) è difficile da mostrare. Ecco dunque che si rende necessario studiare il problema ad un livello più alto creando un modello astratto del sistema che si vuole costruire, sul quale verranno dimostrate le proprietà di correttezza desiderate, e (se il modello è abbastanza accurato) tali proprietà si riflettono sul sistema concreto. In letteratura sono stati utilizzati vari formalismi per modellare sistemi reattivi concorrenti, come riportato in [WN95]. Lo scopo di questo capitolo è dare un’introduzione generale, per poi concentrarsi in uno specifico modello molto utilizzato per studiare processi concorrenti non deterministici, ovvero le strutture di eventi [NPW81, Win87, Win82]. 2.1 Modelli ad interleaving vs modelli causali I modelli per la concorrenza possono essere classificati in base a vari criteri. Una possibile classificazione prevede la distinzione fra modelli ad interleaving 15 16 Modelli per la concorrenza e modelli causali. Nei modelli ad interleaving, la concorrenza è modellata attraverso la scelta non deterministica tra tutte le possibili sequenzializzazioni delle azioni concorrenti compiute dal sistema, mentre nei modelli causali viene definita una relazione di concorrenza e di mutua esclusione (conflitto) fra le azioni che compongono i vari task. Esempio: Siano P1 e P2 due processi che devono eseguire in parallelo (indicato come P1 P2 ) e che compongono un sistema concorrente reattivo1 . Il processo P1 svolge prima l’azione a1 e poi l’azione a2 , mentre il processo P2 svolge l’azione b. Vediamo ora come P1 P2 possa essere modellato in ciascuna delle due istanze di modello modelli ad interleaving: in questa tipologia di modello, P1 P2 viene modellato esprimendo tutte le possibili schedulazioni delle azioni compiute dai due processi in parallelo. Ciò può essere espresso dando tutte le possibili tracce del sistema, che nel nostro caso sono {a1 a2 b, a1 ba2 , ba1 a2 } oppure mediante un automa a2 b a2 b a1 b a1 .a2 b b b a1 .a2 a1 0 a2 a2 modelli causali: in questa tipologia di modello, P1 P2 viene modellato esplicitando le relazioni di ordine e di conflitto che vi sono fra le azioni, per poter identificare quali azioni possono essere svolte in concorrenza. Nel nostro caso, abbiamo un insieme di azioni A = {a1 , a2 , b} su cui è definita una relazione <= {(a1 , a2 )} e da questo possiamo inferire che, l’azione b può essere svolta contemporaneamente (in concorrenza) con le azioni a1 ed a2 1 Un sistema concorrente è difficile da caratterizzare: nel seguito utilizzeremo una sintassi CCS-like per descrivere un sistema concorrente con i relativi task. Strutture di eventi 17 a2 a1 b I modelli ad interleaving sono ideali per evidenziare aspetti osservazionali del sistema: ad esempio sono utili per focalizzare l’attenzione su tutte le possibili interazioni del sistema con l’ambiente esterno. In particolare, l’utilizzo di modelli ad interleaving è utile per delineare equivalenze osservazionali di due o più sistemi, modellate tramite relazioni di bisimulazione: nella realtà, due sistemi sono equivalenti osservazionalmente se essi si comportano allo stesso modo a partire da una stessa condizione2 : nel modello significa che due oggetti sono bisimili se anch’essi, nel modello si evolvono allo stesso modo a partire da una data condizione3 . Vi sono tuttavia interessanti proprietà di un sistema concorrente, come ad esempio l’assenza di conflitto fra azioni, l’indipendenza delle scelte da eventuali politiche di scheduling e la sequenzialità che non sono percepite come proprietà osservazionali e che, utilizzando un modello ad interleaving, sono difficili da esprimere. Queste sono proprietà legate alla causalità delle azioni, che è una caratteristica catturata dai modelli causali, utilizzando i quali è possibile esprimere queste proprietà in modo semplice. Al contrario per i modelli ad interleaving, tali proprietà sono di difficile espressione, in quanto la causalità delle azioni non è una proprietà osservabile. Quindi i modelli ad interleaving sono pensati per caratterizzare un sistema dal punto di vista osservazionale, mentre i modelli causali vengono utilizzati per esprimere proprietà legate alla causalità delle azioni. 2.2 Strutture di eventi Nell’ambito dei modelli causali, le strutture di eventi sono state oggetto di numerosi studi, in quanto esse costituivano un framework generale, in cui 2 In un contesto macchina a stati, si intende dallo stesso stato oppure espresso in modo più concreto, dallo stesso contenuto di dati in memoria, i quali sono situati in una stessa posizione. 3 più precisamente, se un oggetto è in grado di effettuare una determinata azione e ad arrivare ad un determinato stato (che nella realtà rappresenta una data configurazione del sistema), allora anche l’altro oggetto è in grado di fare altrettanto e di giungere ad uno stato che sia comparabile con lo stato a cui è arrivato l’oggetto precedente 18 Modelli per la concorrenza altre strutture potevano trovare espressione [WN95]. Esse furono introdotte da Nielsen, Plotkin e Winskel [NPW81, Win80] come un modello per sistemi concorrenti non deterministici e sono apparse in forme differenti. Quella che verrà utilizzata nel seguito sarà la nozione di struttura di eventi prima [Win87]. 2.2.1 Definizioni Come affermato precedentemente, le strutture di eventi sono utilizzate per modellare sistemi concorrenti non deterministici. Informalmente, una struttura di eventi modella la computazione parallela attraverso • eventi che sono occorrenze di azioni • un ordinamento parziale che esprime la dipendenza causale delle azioni mentre il non determinismo è espresso attraverso • una relazione di conflitto che esprime come l’occorrenza di determinate azioni escluda l’occorenza di altre. Quindi due eventi sono detti concorrenti se non sono nè legati causalmente e nemmeno in conflitto, e due eventi sono in conflitto se vivono in differenti evoluzioni del sistema. Definitione 2.2.1 (Struttura di eventi). Una struttura di eventi è una tripla E = E, ≤, dove • E è un insieme finito o numerabile di eventi • E, ≤ è un ordine parziale, detto ordine causale • per ogni e ∈ E, l’insieme [e) = {e |e ≤ e}, detto insieme abilitante di e, è finito • è una relazione non riflessiva e simmetrica, detta relazione di conflitto, soddisfacente la proprietà di ereditarietà ∀e1 , e2 , e3 ∈ E.e1 ≤ e2 ∧ e1 e3 ⇒ e2 e3 (2.1) Con un abuso di notazione, nel seguito, data una strutura ad eventi E si scriverà che e ∈ E per indicare che e appartiene all’insieme degli eventi di E. Inoltre dato e ∈ E si denoterà • parents(e) l’insieme degli eventi massimali secondo ≤ di [e). Strutture di eventi 19 • e = [e) ∪ {e} In base all’ereditarietà è possibile distinguere i conflitti tra eventi tra conflitti ereditati e non: quindi dati e1 , e2 , e3 ∈ E diciamo che e2 e3 è un conflitto ereditato da e1 e3 se e1 < e2 . Se e1 e3 non è ereditato da nessun altro conflitto allora esso si dice immediato e si indica con e1 µ e3 . La chiusura riflessiva dei conflitti (risp. dei conflitti immediati) si indica con (risp. µ ). Si noti inoltre che il conflitto e l’ordinamento causale sono mutualmente esclusivi. Due eventi si dicono concorrenti se non sono nè in conflitto, nè legati causalmente. E’ importante notare che gli eventi qui sono intesi come occorrenze di azioni. Si prenda ad esempio la seguente situazione. Esempio 1: si intende modellare con una strutura di eventi la seguente semplice situazione: si supponga che un processo consumatore richieda due volte l’accesso ad una risorsa R: la prima volta la trova libera e vi accede e poi ne esce e poi la accede di nuovo. Dunque le azioni che compie sono ask(R) e exit(R) e poi nuovamente ask(R). La corrispondente struttura di eventi è dunque: ask(R) e3 exit(R) e2 ask(R) e1 Si noti che gli eventi e1 ed e3 sono occorrenze della stessa azione ask(R). Esempio 2: un esempio più strutturato un sistema concorrente può eseguire in modo mutualmente esclusivo le azioni a e b e può eseguire l’azione c solo dopo l’esecuzione di una delle due azioni precedenti. Vogliamo costruire la corrispondente struttura di eventi E. Ovviamente avremo due eventi ea , eb ∈ E corrispondenti alle azioni a e b con ea eb , le quali occorrono una sola volta. L’azione c invece occorre due volte: o dopo a o dopo b e quindi avremo due eventi ec1 , ec2 ∈ E con ea ≤ ec1 ed eb ≤ ec2 : si noti che 20 Modelli per la concorrenza per ereditarietà abbiamo ec1 ec2 . Nel seguito vi è una rappresentazione grafica della struttura di eventi costruita: i conflitti immediati sono indicati con linee ondulate. e c1 e c2 c c a b ea eb Il precedente esempio induce ad introdurre una nozione di struttura di eventi, a cui ad ogni evento è associata l’azione (etichetta) corrispondente: abbiamo dunque la seguente Definitione 2.2.2 (Struttura di eventi etichettata). Una struttura di eventi etichettata è una quadrupla E = E, ≤, , λ dove: • E, ≤, è una struttura di eventi. • λ : E → L è una funzione di etichettaggio, in cui L è un insieme di etichette (azioni). Nel seguito, ove non specificato diversamente, quando si parlerà di struttura di eventi si intenderà una struttura di eventi etichettata, ovvero una struttura di eventi con una funzione di etichettatura. Esempio: Prendendo come riferimento il precedente esempio, possiamo costruire la relativa event structure etichettata Elab con λ : E → L dove L = {a, b, c}, con l’etichettatura λ(ea ) = a, λ(eb ) = b, λ(ec1 ) = c, λ(ec2 ) = c. Il precedente esempio e la naturale interpretazione aiutano a formulare una nozione di stato (traccia) della computazione di una struttura di eventi E. Una nozione ragionevole può essere data dall’insieme di azioni che sono occorse nella computazione (gli eventi) e in particolare per insiemi sı̀ fatti ci si aspetta che • se un evento appartiene a questo insieme, allora tutti gli eventi dai quali esso dipende causalmente devono appartenere a questo insieme • non ci sono due eventi in conflitto fra loro che appartengono a questo insieme Strutture di eventi 21 Da qui quindi abbiamo la seguente: Definitione 2.2.3 (configurazione). Sia E una struttura di eventi e sia C ⊆ E un insieme di eventi. C è una configurazione se valgono le seguenti proprietà assenza di conflitto ∀e, e ∈ C.e e chiusura verso il basso ∀e, e ∈ E . (e ≤ e ∧ e ∈ C) ⇒ e ∈ C Data una struttura di eventi E, si denota con L(E) l’insieme delle configurazioni di E. Si noti che dato e ∈ E, [e), e sono configurazioni. Un evento e si dice abilitato da una configurazione C se x ∪ {e} è una configurazione. Due configurazioni C1 , C2 si dicono compatibili se C = C1 ∪C2 è una configurazione. Lemma 2.2.1 (compatibilità). Sia E una struttura di eventi e siano e1 , e2 due eventi distinti. e1 e2 se e solo se e1 e e2 non sono compatibili. Dimostrazione. Si supponga e1 e2 : allora e1 e e2 non possono essere compatibili. Dall’altro lato, si prendano e1 ed e2 tali che e1 e e2 non sono compatibili. Allora esistono d1 ∈ e1 , d2 ∈ e2 tali che d1 d2 . Allora per ereditarietà e1 e2 La relazione di transizione da una configurazione all’altra, data come sistema di transizione etichettato è pertanto definita come segue: Definitione 2.2.4 (Labelled Transition System). Sia E una struttura di eventi, siano C, C ∈ L(E) due configurazioni e sia a ∈ L un’etichetta. Si scrive C → C ⇐⇒ ∃e ∈ E . λ(e) = a ∧ e ∈ C ∧ C = C ∪ {e} a Esempio: prendendo come riferimento il precedente esempio, il sistema di transizione etichettata indotto dalla struttura di eventi E è il seguente: 22 Modelli per la concorrenza {eb , ec2 } {ea , ec1 } c c {eb } {ea } a b ∅ 2.2.2 Strutture di eventi senza conflitto e senza confusione Una sottoclasse importante delle strutture di eventi è la seguente: Definitione 2.2.5 (Struttura di eventi senza conflitto). Una struttura di eventi E si dice senza conflitto se non contiene due eventi distinti che sono tra loro in conflitto Ovvimaente una struttura di eventi senza conflitto E ha la relazione vuota ed è semplicemente un ordine parziale. Inoltre la proprietà di assenza di conflitti è la versione secondo i modelli causali della confluenza: è infatti semplice dimostrare che data E senza conflitti, il sistema di transizione etichettato dedotto da E è confluente. L’introduzione del conflitto serve, come detto sopra, per modellare il non determinismo. Per poter meglio studiare la natura del non determinismo, si intende studiare nel seguito una forma di non determinismo che si ‘comporta bene’, ovvero che garantisca delle proprietà di indipendenza dallo scheduling delle azioni (la scelta del sistema in un certo stato è invariante rispetto alla politica di schedulazione delle azioni non legate causalmente effettuata dal sistema). Per studiare questa proprietà è stata introdotta un’importante sottoclasse delle strutture di eventi con conflitto, che è la seguente Definitione 2.2.6 (Struttura di eventi senza confusione). Sia E una struttura di eventi. Essa è senza confusione se valgono le seguenti transitività per ogni e, e , e ∈ E distinti, e µ e e e µ e implica e µ e cellularità per ogni e, e ∈ E, e µ e implica [e) = [e ) Si osservi che, in base a quanto detto sopra, l’assenza di confusione comporta una forma di non determinismo controllata e localizzata in una determinata configurazione del sistema. Tale localizzazione è detta cella ed è Strutture di eventi 23 definita come un insieme di eventi che sono tra loro in conflitto e che hanno lo stesso insieme abilitante: più formalmente Definitione 2.2.7 (cella). Una cella c è un insieme massimale di eventi tale che per ogni e, e ∈ c vale e µ e e [e) = [e ) Lemma 2.2.2. Sia E una struttura ad eventi senza confusione. Allora la relazione µ è una relazione di equivalenza e le classi di equivalenza sono le celle della strutura di eventi Dimostrazione. µ è per definizione riflessiva, simmetrica e transitiva, pertanto è un’equivalenza. Sia dunque Ce = {e |e µ e}. Per cellularità tutti gli e ∈ Ce hanno lo stesso insieme abilitante. Inoltre Ce è massimale per costruzione. Le strutture ad eventi senza confusione, dunque, modellano una forma di non determinismo controllata, molto utile per caratterizzare quei sistemi in cui le scelte non deterministiche non dipendono dalla schedulazione di componenti indipendenti da tali scelte: per illustrare meglio questo concetto, si consideri il seguente esempio: Esempio: di seguito diamo una rappresentazione grafica di due strutture di eventi, una con e una senza confusione (1.) Senza confusione t3 t4 (2.) Confusione t5 t3 t4 t2 t2 t1 t1 t5 Si supponga che esse modellano ciascuna un sistema concorrente non deterministico in cui vengono eseguiti un insieme di task T = {t1 , t2 , t3 , t4 , t5 } e ciascuna struttura di eventi definisce un ordine causale e una relazione di conflitto fra questi task. Si supponga che il sistema debba schedulare tali task. Nel caso senza confusione (1.), lo scheduler deve partire con t1 . Poi la situazione è la seguente: • dopo t1 , lo scheduler può scegliere o t5 o uno fra t2 , t3 , t4 24 Modelli per la concorrenza • se lo scheduler sceglie t1 e uno fra t2 , t3 , t4 , esso può ancora scegliere t5 • se lo scheduler sceglie t1 e t5 , allora esso può ancora scegliere uno tra t2 , t3 , t4 Il caso (2.) invece descrive una situazione che è confusa: cambiando lo scheduling dei task, alcune scelte che erano disponibili, potrebbero non esserlo più. Se si osserva la figura, si vede che sia t1 che t4 non hanno task propedeutici e quindi possono essere schedulati per primi. Dopo t1 è possibile scegliere uno tra t2 , t3 , t4 oppure t5 . Ma se si sceglie t4 e poi t1 , la scelta tra t2 , t3 non risulta essere più disponibile. 2.2.3 Operazioni con le event structure Di seguito si definiscono alcune operazioni sulle strutture di eventi etichettate: prefissamento: Sia E = E, ≤, , λ una struttura di eventi e sia a un’etichetta. Si definisce a.E = E , ≤ , , λ come segue: • E = E ∪ {e} con e ∈ E • ∀d, d ∈ E . d ≤ d ⇒ d ≤ d . Inoltre ∀d ∈ E . e ≤ d • = • λ (d) = a se d = e λ(d) altrimenti a.E E a e somma prefissata: Siano ai .Ei = Ei ∪ {ei }, ≤i , i, λi con i ∈ I una famiglia di strutture di eventi prefissate (dove ei è l’evento aggiunto a causa dell’operazione di prefissamento e ai = aj , ei = ej , Ei ∩ Ej = ∅ con i = j). Si definisce i∈I ai .Ei = E, ≤, , λ dove Strutture di eventi • E= 25 i∈I (Ei ∪ {ei }). • ∀i ∈ I . ∀d1 , d2 ∈ ai .Ei . d1 ≤i d2 ⇐⇒ d1 ≤ d2 • ∀d1 , d2 ∈ E.d1 d2 se e solo se valgono le seguenti – d1 , d2 ∈ ai .Ei con d1 i d2 – ei ∈ d1 e ej ∈ d2 con i = j • λ(d) = λi (d) se d ∈ ai .Ei n j=1 E1 aj .Ej Ei a1 En ai ... ... an unione: Siano Ei = Ei , ≤i , i, λi con i ∈ I una famiglia di strutture di eventi tali che Ei ∩ Ej = ∅ se i = j. Si definisce i∈I Ei = E, ≤, , λ dove: • E = i∈I Ei • ∀i ∈ I . ∀d1 , d2 ∈ Ei . d1 ≤i d2 ⇐⇒ d1 ≤ d2 • ∀i ∈ I . ∀d1 , d2 ∈ Ei . d1 i d2 ⇐⇒ d1 d2 • λ(d) = λi (d) se d ∈ Ei restrizione: Sia E = E, ≤, , λ una struttura di eventi e sia X un insieme di etichette. Ponendo up(EX ) = {e ∈ E|e ≥ d con d ∈ EX } dove EX = {e ∈ E|λ(e) ∈ X}, si definisce E \ X = E , ≤ , , λ dove: • E = E \ up(EX ) • ∀d1 , d2 ∈ E . d1 ≤ d2 ⇐⇒ d1 ≤ d2 • ∀d1 , d2 ∈ E . d1 d2 ⇐⇒ d1 d2 • λ (d) = λ(d) E \ {a, b} i g h c d f e a b 26 Modelli per la concorrenza rietichettatura: Sia E = E, ≤, , λ una struttura di eventi e sia f : L → L. Si definisce E[f ] = E, ≤, , f ◦ λ E’ facile vedere che tutte le suddette operazioni preservano la classe delle strutture di eventi senza confusione. Inoltre, con l’ovvia eccezione della somma prefissata, esse preservano la classe delle strutture di eventi senza conflitto. 2.2.4 Composizione parallela di strutture di eventi Fare interagire tra loro due o più sistemi concorrenti comporta determinate problematiche: occorre infatti considerare il fatto che le azioni compiute possano essere in qualche modo dipendenti tra loro (ad esempio il risultato parziale di una azione di un sistema deve essere utilizzato in input da una procedura dell’altro sistema). In un certo senso, dunque occorre modellare queste interdipendenze e capire come esse possano influire nel sistema globale; in particolare occorre capire se e come determinate proprietà di correttezza4 , effettuando l’interazione di più sistemi, che singolarmente le rispettano, vengano preservate. Questo è un problema interessante, in quanto le interdipendenze che si instaurano fra le azioni dei sistemi coinvolti potrebbero causare l’insorgere di problemi che minano la correttezza del sistema complessivo. In particolare, ciò che si intende definire in questa sezione, è la composizione parallela di due strutture di eventi (che modellano sistemi), e discutere se tale operazione preserva le classi delle strutture di eventi senza conflitto e senza confusione. Azioni polarizzate Nelle sezioni precedenti un’azione è stata modellata come un’etichetta, anche se non è stata data alcuna definizione formale. A questo scopo, dunque si cercherà dunque di caratterizzare meglio un’azione, fornendo all’etichetta che la rappresenta le informazioni aggiuntive per capire come essa si relaziona con l’ambiente in cui opera. Si consideri per iniziare il seguente esempio: Esempio: Si intende qui modellare una semplice macchina distributrice di caffè M: essa è in grado di eseguire due azioni, nell’ordine: • inizialmente richiede l’inserimento di una moneta (evento e1 ) 4 esse possono essere assenza di deadlock, livelock, confusione, inconsistenza dovuta ad accesso contemporaneo a risorse condivise e tutti i problemi già citati Strutture di eventi 27 • poi produce un bicchiere pieno di caffè (evento e2 ) Essa interagisce con un processo cliente C che, nell’ordine • inizialmente inserisce una moneta nella macchina (evento e3 ) • poi prende il bicchiere di caffè prodotto dalla macchina (evento e4 ) Gli eventi e1 ed e3 corrispondono ad azioni che operano sul medesimo soggetto (l’uso della moneta), ma la natura di questo utilizzo è duale nei due processi (C la rende, la dà in output mentre M la richiede, la vuole in input). Lo stesso anche per gli eventi e2 ed e4 , per i quali la risorsa dell’azione a cui essi corrispondono è il caffè. Si descrive ora il comporamento dei due processi in analisi: per farlo si utilizzerà una sintassi che ricorda quella di CCS: M = moneta.caf f è C = moneta.caf f è A questo punto, si intende far interagire i due processi M e C, costruendo il processo MC. Si noti che i due processi componenti del processo MC eseguono azioni duali: si consideri ad esempio l’azione moneta compiuta da M e l’azione moneta compiuta da C. Queste due azioni sono in grado di interagire nel processo composto e di produrre un azione non osservabile, privata in quanto frutto dell’interazione delle due entità M e C, avente sempre come soggetto la moneta. Ciò è detto sincronizzazione. Quindi, sempre ispirandosi a CCS, il processo MC può essere cosı̀ descritto: MC = τmoneta .τcaf f è L’esempio precedente mette in evidenza il fatto che ci sono due aspetti fondamentali, quando si sta trattando di azioni: aspetto 1: come un’azione singolarmente si relaziona con il mondo esterno (ovvero su quale soggetto e come essa opera) aspetto 2: come due o più azioni possano interagire tra loro tramite la sincronizzazione. Questi due aspetti verranno nel seguito discussi separatamente, anche se essi sono comunque legati tra loro. 28 Modelli per la concorrenza Analisi di un’azione: Si intende qui dare una definizione formale di azione. Partendo dalle intuizioni date dal precendente esempio, un’azione dovrebbe avere un soggetto ovvero un ambito, un’entità su cui essa agisce e una polarità ovvero il modo con cui l’azione agisce sul soggetto. Anzitutto si ha un insieme universo di soggetti di un’azione, denotato con S. Per quanto concerne invece le polarità, si hanno in tutto tre possibili modi con cui un’azione si relaziona con il suo soggetto, che sono un input (denotato con −), un output (denotato con +) e un modo non osservabile (denotato con ±). L’insieme di tutte le possibili polarità è denotato con Π ed è il seguente: Π = {+, −, ±} Un’azione è dunque cosı̀ definita: Definitione 2.2.8 (azione). Si definisce azione una coppia α = a, dove • a ∈ S è il soggetto dell’azione • ∈ Π è la polarità dell’azione Nel seguito, al posto della notazione pesante a, , si utilizzerà la notazione a per denotare un’azione. Data un’azione a , si definisce subj(a ) = a e π(a ) = . All’occorrenza, un’azione può implicare un passaggio o un utilizzo di valori: un valore può essere o un tipo di base ovvero un naturale o un booleano (denotiamo l’insieme dei tipi di base con B), oppure una risorsa ovvero un soggetto. L’insieme universo di tutti i valori è denotato con V ed è V=SB Tenendo conto di ciò, si ha la seguente definizione di azione con passaggio di valori, denominata azione estesa: Definitione 2.2.9 (azione estesa). Un’azione estesa è una tripla αv = a, , v dove • a, è un’azione • v ∈ V è un valore Nel seguito, al posto della notazione pesante a, , v, si utilizzerà la notazione a v per denotare un’azione estesa. Data un’azione estesa a v, si definiscno subj e π nel modo analogo al caso dell’azione semplice. Inoltre si definsce val(a v) = v. Strutture di eventi Sincronizzazione: Una sincronizzazione è determinata da una interazione di due azioni di polarità opposta e genera una azione neutra. Essa modella l’interdipendenza di due azioni eseguite dai due sistemi che si vuole far interagire. Intuitivamente, due azioni polarizzate si possono sincronizzare se esse operano su uno stesso soggetto, hanno polarità opposta e il risultato della sincronizzazione è un’azione apolare che opera sullo stesso soggetto delle suddette due azioni. La provenienza delle azioni che si sincronizzano è anch’essa importante: esse infatti possono provenire dai due sistemi in parallelo che si stanno analizzando, ma possono anche provenire dall’ambiente esterno5 . Tenendo conto di ciò, l’insieme universo delle azioni, denotato con U(A), è cosı̀ definito: U(A) = {a |a ∈ S, ∈ Π} ∪ {} Le strutture di eventi che si considereranno nel seguito saranno etichettate in sottoinsiemi di U(A). La costante è un’azione speciale e modella la ‘non azione’ ovvero serve per modellare il fatto che il processo con cui sto eseguendo in parallelo non risponde ad una determinata azione, non si sincronizza: ciò singifica che lo fa l’ambiente esterno, dunque è come dire che è l’azione dell’ambiente esterno. Si noti che nessun evento verrà mai etichettato con . Per modellare la sincronizzazione, viene definito un operatore binario parziale commutativo e associativo su U(A), denotato con •6 e cosı̀ definito: • ∀α ∈ U(A) . α • = • α = α • ∀a ∈ S . a+ • a− = a− • a+ = a± • indefinito per tutte le altre coppie Si ha una definizione analoga anche nel caso delle azioni estese. Si noti che + e − sono polarità opposte. Composizione In questa sezione si intende fornire la definizione formale di composizione di strutture di eventi. Un approccio usuale, usato in [VY06] da cui è stata tratta la definizione seguente, è di definire la composizione utilizzando un’operazione di prodotto categoriale, seguita da una restrizione e da un rietichettaggio. 5 Occorre considerare il fatto che i due sistemi concorrenti non operano in un ambiente isolato, ma assieme a loro operano in parallelo altri sistemi che potrebbero interagire con uno o entrambi i sistemi in oggetto 6 in letteratura, la coppia U(A), • è conosciuta come algebra di sincronizzazione 29 30 Modelli per la concorrenza Il prodotto categoriale corrisponde intuitivamente ad una giustapposizione delle due strutture di eventi in questione, dalla quale vengono esclusi tutti gli eventi che non possono interagire tra loro. Il rietichettaggio si occupa di applicare la sincronizzazione fra le azioni. Ovviamente si devono modellare anche le azioni dell’ambiente esterno e come esse possano interagire con le azioni dei due sistemi concorrenti che hanno come modello le strutture di eventi da mettere in parallelo. Prodotto categoriale: Siano E1 = E1 , ≤1 , 1 , λ1 ed E2 = E2 , ≤2 , 2 , λ2 due strutture di eventi etichettate in sottoinsiemi di U(A) che non contengono . Si aggiunga a ciascun Ei un evento fittizio ei con λ(ei ) = che rappresenta l’occorrenza di un’azione effettuata dall’ambiente esterno (si denota con Ei l’insieme degli eventi della struttura di eventi Ei con aggiunto l’evento fittizio ei ). ottenuto come soluzione iniziale dell’equazione Si consideri l’insieme E X = Pf in (X) × E1 × E2 . I suoi elementi hanno la forma (x, e1 , e2 ) con x Questo permette di definire induttivamente una nozione di finito, x ⊆ E. 7 altezza di un elemento di E. h(∅, e1 , e2 ) = 0 h(x, e1 , e2 ) = max{h(e)|e ∈ x} + 1 e λ : E → U(A) × U(A) come Si definisce E1 × E2 = E, ≤, , λ, con E ⊆ E segue, per induzione sull’altezza di e ∈ E: caso base: si ha che (∅, e1 , e2 ) ∈ E se 1. e1 ∈ E1 , e2 ∈ E2 e e1 minimale in E1 e e2 minimale in E2 o 2. e1 ∈ E1 , e2 = e2 e e1 minimale in E1 o 3. e1 = e1 , e2 ∈ E2 e e2 minimale in E2 Gli elementi di altezza 0 non sono confrontabili. Infine, per il conflitto, si ha (∅, e1 , e2 ) (∅, d1, d2 ) se e1 1 d1 o e2 2 d2 passo induttivo: si assuma che tutti gli elementi in E di altezza ≤ n siano stati definiti e su di essi siano definiti ordine e conflitto. Sia (x, e1 , e2 ) un elemento di altezza n+1. Sia y l’insieme degli elementi massimali in x. Siano y1 = {d1 ∈ E1 |(z, d1 , d2 ) ∈ y} e y2 = {d2 ∈ E2 |(z, d1 , d2 ) ∈ y} 7 Gran parte delle prove che coinvolgeranno il prodotto categoriale di strutture di eventi saranno per induzione sull’altezza degli elementi Strutture di eventi 31 le proiezioni di y sulle due componenti. Abbiamo che(x, e1 , e2 ) ∈ E se x è chiuso verso il basso e senza conflitti e inoltre: 1. Si supponga e1 ∈ E1 , e2 = e2 . parents(e1 ) Allora deve valere che y1 = 2. Si supponga e2 ∈ E2 , e1 = e1 . parents(e2 ) Allora deve valere che y2 = 3. Si supponga e1 ∈ E1 , e2 ∈ E2 . Allora • se (z, d1 , d2 ) ∈ y allora d1 ∈ parents(e1 ) o d2 ∈ parents(e2 ) • per ogni d1 ∈ parents(e1 ), esiste un (z, d1 , d2 ) ∈ x • per ogni d2 ∈ parents(e2 ), esiste un (z, d1 , d2 ) ∈ x 4. Sia x1 = {d1 ∈ E1 |(z, d1 , d2 ) ∈ x} e x2 = {d2 ∈ E2 |(z, d1 , d2 ) ∈ x}. Allora per nessun d1 ∈ x1 , d1 1 e1 e per nessun d2 ∈ x2 , d2 2 e2 . L’ordine parziale è esteso con e ≤ (x, e1 , e2 ) se e ∈ x o e = (x, e1 , e2 ). Si noti che se e < e allora h(e) < h(e ). Infine, per i conflitti si prenda e = (x, e1 , e2 ) e d = (z, d1 , d2) dove o h(e) = n + 1, o h(d) = n + 1 o entrambi. Allora si ha e d se vale una delle seguenti: • e1 1 d1 o e2 2 d2 con e = d • esiste un e = (x , e1 , e2 ) ∈ x tale che e1 1 d1 o e2 2 d2 e e = d • esiste un d = (z , d1 , d2) ∈ z tale che d1 1 e1 o d2 2 e2 e e = d • esiste un e ∈ x , d ∈ z tali che e d Per quanto concerne l’etichettatura, si ha λ(x, e1 , e2 ) = (λ1 (e1 ), λ2 (e2 )). Si può dimostrare che questa costruzione è effettivamente un prodotto della categoria delle strutture di eventi. Il punto di vista categoriale è comunque al di là dello scopo del presente elaborato. Sul prodotto categoriale di strutture di eventi si ha un lemma abbastanza importante che è il seguente: Lemma 2.2.3 (stabilità). Se (x, e1 , e2 ), (x , e1 , e2 ) ∈ E e x = x allora esiste d ∈ x, d ∈ x tali che d d La dimostrazione è data in [VY06] 32 Modelli per la concorrenza Composizione: La composizione parallela di strutture di eventi è definita come segue, a partire dal prodotto categoriale: Definitione 2.2.10 (composizione). Siano E1 , E2 due strutture di eventi. Si definisce E1 |E2 = ((E1 × E2 ) \ X)[f ] dove • X = {(α1 , α2 ) ∈ U(A)2 |α1 • α2 è indefinito} • f : U(A)2 → U(A) con f (α1 , α2 ) = α1 • α2 Esempio: b− b− d1 a− a+ e1 E1 b− d a− e2 E2 d a± e e a+ e E3 Si consideri la figura sovrastante: siano E1 , E2 due strutture di eventi con E1 = {e1 , d1 } ed E2 = {e2 }. I conflitti e l’ordine come da figura, e λ(e1 ) = a− , λ(d1 ) = b− , λ(e2 ) = a+ . La struttura di eventi E3 = E1 |E2 è cosı̀ definita: • E3 = {e := (∅, e1 , ), e := (∅, , e2), e := (∅, e4 , e5 ), d := ({e}, d4 , ), d := ({e }, d4 , )} • l’ordine è definito con e ≤ d, e ≤ d • i conflitti sono e e , e e e tutti quelli ereditati da loro. L’esempio precedente rende noti alcuni aspetti importanti della composizione parallela. Anzitutto essa modella fedelmente tutte le possibili evoluzioni dei due sistemi concorrenti le cui strutture di eventi qui sopra costituiscono il modello: infatti le azioni che coinvolgono il soggetto a effettuate dai due sistemi si possono sincronizzare tra loro, ma è anche possibile che esse si sincronizzino con azioni dell’ambiente esterno, in quanto a è un soggetto pubblico. Se si vuole escludere la sincronizzazione sul soggetto da Discussione 33 parte di azioni dell’ambiente esterno occorre nasconderlo: in questo caso la composizione diventerebbe: b− b− d d1 a− a+ e1 E1 a± e e2 E2 E3 Abbiamo dunque Definitione 2.2.11 (composizione con occultamento). Sia S ⊆ S. Si definisce (νS)(E1 |E2 ) = (E1 |E2 ) \ LS con LS = {s |s ∈ S, ∈ {+, −}}. Un’altro aspetto importante è che la composizione parallela non preserva la classe delle strutture di eventi senza conflitto e senza confusione. L’esempio ne è un caso importante. 2.3 Discussione In questo capitolo, dunque, si è data una panoramica delle principali classi di modelli per la concorrenza utilizzati, concentrandosi in particolare sui modelli causali e sulle strutture di eventi. Le strutture ad eventi sono una struttura molto generale e utilizzata per modellare CCS [Win82] e recentemente anche π-calcolo [VY06, RBM06]. In particolare in questa sezione, ci si è concentrati sulle strutture ad eventi senza confusione, come riferimento per lo studio del fenomeno del nondeterminismo: le strutture ad eventi senza confusione infatti modellano una forma di non determinismo che si comporta bene, in quanto ben localizzato nella struttura. Si sono studiate infine le dinamiche che avvengono durante la composizione di strutture di eventi, per capire quali proprietà inerenti al nondeterminismo (assenza di confusione) preservasse la composizione: si è concluso che la composizione non preserva la classe delle strutture ad eventi senza conflitto e senza confusione, come ha testimoniato l’esempio fatto nella sezione precedente. 34 Modelli per la concorrenza Le strutture ad eventi sono uno strumento molto versatile per studiare la concorrenza e il non determinismo: a conferma di ciò nel prossimo capitolo si vedrà un formalismo matematico utilizzato per interpretare programmi, in cui si utilizzano strutture e aspetti similari di quelli qui visti per le strutture ad eventi. Le strutture ad eventi non sono solo utilizzate per per lo studio del non determinismo in concorrenza, ma anche come framework astratto in teoria dei domini e in numerosi altri campi. Per il lettore interessato il riferimento principale è [Win87]. Capitolo 3 Semantica dei giochi Nello studio dei linguaggi di programmazione, lo scopo della semantica è quello di dare significato ai costrutti sintattici del linguaggio in questione. In particolare vi sono due aspetti importanti che, a questo scopo, vengono studiati aspetto operazionale: Si analizza un programma dal punto di vista delle operazioni che esso esegue su una macchina. Esse vengono usualmente descritte mediante regole di riduzione. aspetto denotazionale: Il significato di un costrutto è specificato da oggetti matematici più o meno complessi, ad esempio funzioni di una certa tipologia o costruzioni particolari (poset, grafi, ...). Ciò è fatto per poter studiare i programmi da un livello di astrazione più alto e in modo indipendente dai linguaggi con cui essi sono stati scritti. Questi due aspetti danno vita a due stili di semantiche dette appunto semantica operazionale e semantica denotazionale. Nozione di equivalenza e relazione fra le due semantiche Data una semantica denotazionale di un programma, un problema importante è valutarne il suo livello di corrispondenza con la semantica operazionale, in particolare in tema di equivalenza: in semantica operazionale l’equivalenza di due programmi è definita in termini delle computazioni che essi fanno (informalmente due programmi sono operazionalmente equivalenti se quando essi eseguono ‘immersi in un uguale contesto’, si comportano allo stesso modo) mentre in semantica denotazionale due programmi sono equivalenti se vengono ‘interpretati’ nello stesso oggetto. Un problema importante e usualmente difficile da risolvere è quello di dire se, data una semantica operazionale 35 36 Semantica dei giochi e denotazionale di un linguaggio di programmazione, le nozioni di equivalenza operazionale e denotazionale siano equivalenti. Questa proprietà della semantica denotazionale data è detta full abstraction. Semantica dei giochi La semantica dei giochi, introdotta da P. Lorenzen con l’appellativo dialogische Logik [Lor60, Lor61] negli anni ’50, è stata riscoperta recentemente appunto per risolvere questo problema, in particolare per lo studio del linguaggio funzionale PCF, per il quale è stato dato un modello a giochi fully abstract [Cur06]. In semantica dei giochi la computazione è modellata come un dialogo, una partita fra due differenti giocatori che sono l’opponente , (spesso indicato con O), rappresenta l’ambiente in cui il programma viene eseguito. il proponente , o player (spesso indicato con P), rappresenta il programma. A questo punto, il programma è modellato come un insieme di partite fra questi due soggetti detto strategia. Questo approccio porta con sè un’importante vantaggio: infatti pur essendo una rappresentazione ad alto livello di un programma, esso tiene conto, attraverso il concetto di partita, di interazione, di contenuti operazionali che ne riguardano la dinamica, soprattutto flussi di calcolo e aspetti algoritmici. La semantica dei giochi è stata applicata anche allo scopo di costrure modelli per la logica: in questo contesto la partita avviene fra proponente di una formula (il quale ne sostiene la verità) e un falsificatore (il quale cerca appunto di falsificarla). In particolare essa è stata utilizzata per costruire modelli per la logica lineare [Gir87] e ad essa è molto legata la ludica [Gir01]. Il presente capitolo intende introdurre la semantica dei giochi, dapprima descrivendone le applicazioni alla semantica dei linguaggi di programmazione e poi parlando delle sue applicazioni alla logica lineare e in particolare descrivendo le strategie lineari. 3.1 Introduzione informale alle strategie Contrariamente ai modelli classici basati sulla teoria dei domini, i modelli a giochi di programmi non sono modelli di funzioni, ma sono modelli di tracce: l’intrerpretazione di un programma è dunque l’insieme di tracce di esecuzione possibili di quel programma in tutti i possibili ambienti. Una traccia, o partita, non è altro che una sequenza di mosse (una stringa), in cui ciascuna mossa può essere giocata o dall’opponent (O) o dal Introduzione informale alle strategie 37 player (P), la sequenza di mosse è alternante (se una mossa è giocata da un determinato giocatore, la mossa successiva è giocata dall’altro giocatore), la mossa iniziale è giocata dall’opponent e la sequenza di mosse è di lunghezza pari. Inoltre tale sequenza di mosse è corredata da puntatori, dove una mossa ha un puntatore alla mossa precedente che la rende possibile (la relazione di giustificazione è data dall’arena, che l’interpretazione di un tipo). Esempio 1: (tipo bool) Un programma di tipo bool corrisponde o al valore V (vero) o al valore F (falso) Vero Falso bool bool O q O q P T P F In questi due esempi, alla domanda dell’opponent di fornire un valore booleano, il player risponde con il corrispondente valore, a seconda dei casi. Esempio 2: (tipo bool → bool) Un programma di tipo bool → bool, richiede un valore booleano in input, esegue il calcolo e fornisce in output il valore booleano calcolato. Nel seguito sono riportate le due tracce di esecuzione che assieme modellano la funzione booleana NOT NOT bool1 O bool1 bool2 q1 O bool2 q1 P q2 P q2 O T2 O F2 P F1 P T1 In queste due tracce, si vede che alla domanda dell’opponent di fornire un valore booleano, che corrisponde al risultato del calcolo (mossa q1 ), il player 38 Semantica dei giochi risponde domandando il valore in input (mossa q2 ). Se l’opponent risponde F2 allora il player dà come risultato T1 ; dualmente se l’opponent risponde T2 allora il player dà come risultato F1 . Anche la seguente è una traccia di un programma di tipo bool → bool bool1 O q1 P T1 bool2 Essa corrisponde alla funzione costante (quella che ignora il proporio input e risponde sempre T1 ). Come si è visto nei due esempi, un programma è modellato da un opportuno insieme di tracce, il quale è detto strategia. Esso è l’oggetto fondamentale in semantica dei giochi. Nella letteratura solitamente si usa rappresentare una strategia sotto forma di albero. Esempio 3: la strategia NOT La strategia NOT, di cui si sono viste le tracce nell’esempio precedente, è rappresentata sotto forma di albero nel modo seguente (le mosse circondate da un cerchio sono le mosse Player, mentre quelle non cerchiate sono le mosse Opponent) F1 T1 T2 F2 q2 q1 La nozione centrale in semantica dei giochi che coinvolge le strategie è la nozione di interazione, espressa nell’operazione di composizione di strategie. Vediamone un esempio: Modello HO 39 Esempio 4: composizione di strategie Si consideri la strategia che modella la funzione booleana NOT (bool → bool) e la strategia false (bool). F1 T1 T2 F2 τ q2 F2 T1 q2 q1 τ q1 NOT FALSE NOT; FALSE Come si vede dalla figura la strategia composta ha tipo bool e corrisponde alla strategia true (come ci si aspetterebbe). Si noti il percorso seguito per costruirla (marcato con delle frecce a linea continua) e in particolare il fenomeno della sincronizzazione (marcato con dei rettangoli che racchiudono le mosse che si sincronizzano), che avviene fra due mosse delle due strategie, che sono la stessa ma che vengono giocate da giocatori diversi. 3.2 Modello HO In questa sezione si formalizzano i concetti espressi nella sezione precedente. Essa è scritta per completezza. 3.2.1 Arene Un’arena è una foresta finita dove i nodi sono chiamati mosse. La polarità di una mossa è la parità della lunghezza del cammino dalla radice a quella mossa. Le radici sono di polarità O o −, i loro figli di polarità P o + e cosı̀ via alternando fino alle foglie. Le radici n degli alberi sono chiamate mosse iniziali dell’arena e sono denotate con n. Se una mossa m è figlia di una mossa n, si dice che n giustifica m e si denota con n m. 40 Semantica dei giochi Costruzione Le arene sono costruite induttivamente nel modo seguente: Arena vuota: La foresta vuota è un’arena denotata con . Arena singoletto: La foresta avente un solo albero con un solo nodo è denotata con ⊥. Arena prodotto: Date due arene A e B, l’arena A × B è l’unione digiunta delle due arene A e B. Arena freccia: Date due arene A e B, l’arena A → B è ottenuta aggiungendo come figli di ciascuna radice di B le radici di A Si osservi che cosı̀ facendo, le polarità delle mosse di B rimarranno inalterate, mentre le polarità delle mosse di A risulteranno invertite. Esempio: arene Nel seguito sono raffigurate due arene A e B e l’arena A→B A 3.2.2 B A→B Partite Definitione 3.2.1 (sequenza giustificata). Una sequenza giustificata sull’arena A è una coppia (s, f ), dove s = n1 n2 . . . nk è una sequenza di mosse dell’arena A, f : {1, . . . , k} → 0, . . . , k − 1 tale che 1. f (i) < i 2. se f (i) = 0 allora ni è una mossa iniziale dell’arena A 3. se f (i) = j allora nj ni Si noti che la mossa iniziale di una sequenza puntata è una mossa O. Modello HO 41 Definitione 3.2.2 (partita). Una partita sull’arena A è una sequenza puntata sull’arena A in cui la polarità delle mosse è alternata. L’inisieme delle partite sull’arena A è denotato con PA . Si noti inoltre che data una partita (s, f ), se i è pari (risp. dispari) allora f (i) è dispari (risp. pari). Esempio: partite Sull’arena bool → bool, se s = q1 q2 V2 q2 F2 F1 q1 V1 q1 q2 F2 e f :1 2 3 4 5 6 7 8 9 10 11 → → → → → → → → → → → 0 1 2 1 4 1 0 7 0 7 4 Allora (s, f ) è una partita rappresentata da q1 q2 V2 q2 F2 F1 q1 V1 q2 Sulle sequenze puntate è definita l’operazione di proiezione. Essa è cosı̀ definita: Definitione 3.2.3 (proiezione). Sia (s, f ) una sequenza puntata sull’arena A → B (o A × B). Si definisce s A la sottosequenza puntata ottenuta da s togliendo tutte le mosse che non appartengono ad A. 3.2.3 Strategie In questa sottosezione si darà la definizione formale di strategia. Come già anticipato, essa consiste di un insieme di partite soddisfacenti determinate proprietà. Anzitutto esse devono terminare con una mossa P , dunque devono F2 42 Semantica dei giochi essere di lunghezza pari. Inoltre, poichè il player rappresenta il programma, esso, rispondendo ad una determinata mossa dell’opponent che rappresenta l’ambiente, deve giocare una ben precisa mossa. In altre parole una strategia descrive il comportamento deterministico del player parametrizzato su tutte le mosse sconosciute dell’opponent. Formalizzando questo concetto si ha dunque la seguente Definitione 3.2.4 (strategia). Una strategia σ sull’arena A è un’insieme di partite sull’arena A chiuso per prefisso pari, soddisfacente la seguente proprietà determinismo se sm, sn ∈ σ allora m = n ed esse puntano alla medesima mossa Composizione di strategie Siano σ : A → B e τ : B → C due strategie. Come dall’esempio riportato nella sottosezione precedente, la strategia che risulta dalla composizione delle due strategie è il risultato dell’interazione fra le due strategie dove la sincronizzazione avviene sulle mosse di B. Essa risulta essere il risultato di due operazioni eseguite in cascata che sono l’interazione e l’hiding (si noti che vi sono medesime operazioni anche per definire la composizione di strutture di eventi). Vediamole in dettaglio: si definisce I(A, B, C) = {(s, f )|s A→B ∈ PA→B , s B→C ∈ PB→C , s A→C alternante} L’operazione di interazione di due strategie σ : A → B e τ : B → C è cosı̀ definita στ = {u ∈ I(A, B, C)|u A→B ∈ σ, u B→C ∈ τ } mentre la composizione è σ; τ = {u A→C |u ∈ στ } la quale è ottenuta dall’interazione nascondendo le mosse private in B. Per quanto concerne la composizione delle strategie, abbiamo le seguenti Proposizione 3.2.1 (buona definizione). Siano σ : A → B e τ : B → C due strategie. Allora σ; τ : A → C è una strategia Proposizione 3.2.2 (associatività). Siano σ : A → B , τ : B → C , ν : C → D tre strategie. Allora σ; (τ ; ν) = (σ; τ ); ν Le dimostrazioni di questi asserti sono date in [Lau04, Har05]. Modello HO 43 Strategia identità Sia A un’arena. Si definisce idA strategia sull’arena A → A nel modo seguente idA = {s ∈ PA1 →A2 |∀t prefisso di s.t A1 = t A2 } Rispetto a idA si hanno le seguenti Proposizione 3.2.3 (buona definizione). idA : A → A è una strategia Proposizione 3.2.4 (neutralità). Sia σ : A → B una strategia. Allora idA ; σ = σ; idB = σ Le dimostrazioni di questi asserti sono date in [Lau04, Har05]. Innocenza In questa sottosezione si introdurrà una sottoclasse delle strategie, detta classe delle strategie innocenti. Intutitivamente una strategia innocente è una strategia che non dipende dai calcoli intermedi dell’Opponente: nelle partite di una strategia innocente, le mosse dell’Opponente dipendono solamente dalle mosse del Proponente giocate immediatamente prima. Si definisce pertanto: Definitione 3.2.5 (view). Sia s una sequenza puntata sull’arena A. La view di s, denotata con s è una sottosequenza puntata definita come segue: • = • snP = snP • snO = nO se n è iniziale • smtno = smn = smn se m giustifica n in smtn Una strategia si dice innocente se essa contiene solo view: in una view ogni mossa dell’Opponente deve puntare alla mossa (del proponente) immediatamente precedente. In particolare, una mossa mimimale nell’arena (che è giocata dall’Opponente) deve essere la prima mossa in una view. 44 Semantica dei giochi Esempio: la traccia seguente non è innocente in quanto usa più della sua view per determinare la risposta (bool bool) O P bool q q O q P V O q P F La classe delle strategie innocenti è inoltre chiusa per composizione [Lau04]. Le strategie innocenti sono molto importanti e sono usate come modello per molti linguaggi funzionali, in particolare PCF [Cur06]. 3.3 Strategie lineari In questa sezione si introdurranno le strategie lineari ovvero la semantica dei giochi utilizzata come modello per la logica lineare Le strategie lineari sono strategie HO (innocenti) senza ripetizioni di mosse durante l’esecuzione, ma la struttura additiva rende possibile la presenza di copie di mosse (anche se in ‘tracce’ differenti del sistema). Esse sono strategie della ludica ([Gir01]), che è un setting astratto per la teoria della dimostrazione. In ludica giocano un ruolo fondamentale i puntatori (indirizzi, che possono essere visti come nomi) e l’interazione. Essi sono in grado di catturare la nozione di concorrenza in logica, allo scopo di aprire un ponte con la teoria della concorrenza. A questo scopo verrà introdotta una struttura generale, estensione delle strategie lineari, detta L-net ([FM05]). Essa si presenta come una struttura versatile, che se portata nel contesto semantica dei giochi, corisponde ad una strategia, mentre se portata nel contesto ludica, corrisponde ad un disegno. Come si vedrà nel seguito, le L-net sono rappresentate sotto forma di d.a.g., quindi sono ordini parziali definiti sulle mosse (azioni). Strategie lineari 3.3.1 45 L-nets Azioni (mosse) Un puntatore (indirizzo) è una sequenza di indici (numeri naturali). Un’azione (o mossa) è una coppia k = (ξ, I) data da un puntatore ξ e da un insieme finito di indici I. Si dice che k usa il puntatore ξ, e che un’azione (ξ, I) genera i puntatori ξi con i ∈ I. Questa nozione di generazione induce una relazione d’ordine sulle azioni: in particolare date due azioni k1 = (ξ, I) e k2 = (σ, J) si definisce k1 ≤ k2 se ξ è un prefisso di σ. Si scriverà k1 k2 se il puntatore di k2 è stato generato dal puntatore di k1 Un’azione polarizzata è un’azione assieme ad una polarità, positiva (k + ) o negativa (k − ). Interfacce Un’interfaccia è una coppia di insiemi finiti disgiunti Ξ, Λ di puntatori, scritti come un sequente Ξ Λ. Λ è l’insieme dei puntatori positivi (che daranno vita ad azioni positive), e Ξ l’insieme dei nomi negativi. Si impone che Ξ sia vuoto oppure un singoletto. Data un’interfaccia Ξ Λ e un’azione k = (σ, I), essa si dice iniziale se σ appartiene all’interfaccia. Se σ ∈ Ξ, l’azione è negativa, altrimenti, se σ ∈ Λ, l’azione è positiva. Siano k1 k2 due azioni: allora k2 ha polarità opposta rispetto a k1 . Un’azione k è generata dall’interfaccia Ξ Λ se è iniziale oppure se esiste k ≤ k generata dall’interfaccia. L-nets Si ricorda che un d.a.g. G è un grafo orientato senza cicli (orientati). Si considererà ogni grafo diretto aciclico G senza considerare gli archi transitivi. Infatti, si è interessati solo alle proprietà degli archi non transitivi. Per questa ragione, nelle figure che verranno disegnate si disegnerà soltanto lo scheletro del grafo. Dati due nodi c e d si scriverà c ← b se c’è un arco non transitivo da b a + c. Si utilizzerà la notazione ← per la chiusura transitiva di ←. Un nodo n si dice minimale (risp. massimale) se non esiste nessun nodo a tale che a ← n (risp. n ← a). + Dato un nodo n, si denota n = {n |n ← n} la chiusura verso il basso di n. Dato un d.a.g. G, si definisce in modo diretto un ordine stretto sui nodi ponendo a <1 b se a ← b. L’ordine parziale ≤ invece si ottiene dalla chiusura riflessiva e transitiva di <1 . 46 Semantica dei giochi Nel seguito si parlerà di d.a.g. con nodi etichettati con azioni. Quindi, come per gli eventi nelle strutture di eventi, qui i nodi rappresentano occorrenze di azioni. Si ha dunque la seguente Definitione 3.3.1 (L-net). Sia Ξ Λ un’interfaccia. Una L-net D sull’interfaccia Ξ Λ è data da: Un insieme X di nodi che sono etichettati con azioni polarizzate generate da Ξ Λ. Nel seguito, quando si parlerà di nodo, si farà riferimento all’azione con la quale quel nodo è etichettato. Una struttura su X di grafo bipartito diretto aciclico (se k ← k , le corrispondenti azioni hanno polarità opposta) che soddisfa le condizioni 1-6 sottostanti 1. Lin. Dato un nodo k, tutti gli indirizzi usati in k sono distinti 2. Giustificazione. Ogni nodo k è o iniziale o esiste un nodo predecessore c (il giustificatore) tale che c k. 3. Innocenza. Se k è negativo e c è suo predecessore immediato allora ck 4. Positività. Se a è massimale, allora a è positivo. Si definiscono fratelli due nodi x1 , x2 che hanno lo stesso genitore e usano lo stesso puntatore, i.e. x1 = (σ, I1 ) e x2 = (σ, I2 ). Si definisce coppia additiva una coppia di nodi fratelli negativi. Per innocenza, il genitore di due nodi fratelli negativi è lo stesso. 5. Coppia additiva. Due nodi fratelli negativi sono distinti (nell’esempio sopra si ha I1 = I2 ) 6. Duplicazione additiva. Dati due nodi fratelli positivi k1 , k2 , esiste una + + coppia additiva w1 , w2 tale che w1 ← k1 e w2 ← k2 . Regole e conclusioni Una regola è un insieme massimale di nodi fratelli negativi. Una regola è unaria se è un singoletto. Quando non è unaria, essa è detta regola additiva. Una regola i cui nodi sono minimali è detta conclusione. L-nets come insieme di view Cosı̀ come per le strategie innocenti (e per i disegni in ludica [Gir01]), una L-net può essere presentata come un insieme di view. In questo contesto, una view è un ordine parziale con elemento massimo. Strategie lineari 47 Definitione 3.3.2 (view/chronicle). Sia Ξ Λ un’interfaccia e sia C = C, ≤ un ordine parziale dove C è un’insieme di azioni generate dall’interfaccia Ξ Λ. C è una view se soddisfa: top element: C ha un elemento massimo alternanza: definendo <1 la relazione di predecessore immediato fra elementi di C rispetto a ≤ (a <1 b se a è un massimale dell’insieme {b |b ≤ b e b = b}), se a <1 b allora essi hanno polarità opposte. giustificazione innocenza Con un abuso di notazione, data una view C = C, ≤, si scriverà c ∈ C inteso come c ∈ C. Una view si dice positiva o negativa in base alla polarità del suo elemento massimo. Si definisce inoltre sulle view un ordine parziale come segue: date due view C1 e C2 si definisce C1 C2 e si dice che C1 è la restrizione di C2 , se esiste a ∈ C2 tale che C1 = {x ∈ C2 |x ≤ a}. Definitione 3.3.3 (strategia). Una strategia σ è un insieme di view soddisfacente le seguenti chiusura per restrizione: se C2 ∈ σ e C1 C2 allora C1 ∈ σ. positività: se C è una view massimale rispetto a allora C è positiva. coppia additiva: definendo la nozione di view sorelle allo stesso modo dei nodi fratelli nelle L-nets, ogni view sorella negativa è distinta. duplicazione additiva: date due view sorelle positive C1 e C2 , esiste una coppia additiva D1 e D2 tale che D1 C1 e D2 C2 Le definizioni 3.3.1 e 3.3.3 sono equivalenti. Infatti data una L-net D, si può costruire il relativo insieme di view V iew(D) = {n : n è un nodo di D} ed è un lavoro di routine dire che V iew(D) è una strategia. Data invece una strategia σ, è possibile costruire il grafo Graph(σ) dove i nodi sono le view e vengono etichettati con l’elemento massimo della relativa + view e dati due nodi n1 e n2 si ha n1 ← n2 se e solo se n1 n2 . Anche in questo caso è evidente che Graph(σ) è una L-net (per i dettagli si veda [FM05]). 48 Semantica dei giochi Infine definiamo l’operazione di sovrapposizione di L-nets: date due L-nets D1 e D2 la loro sovrapposizione D1 ∪ D2 è l’unione insiemistica dei loro insiemi di view. D1 ∪ D2 = Graph(V iews(D1 ) ∪ V iews(D2 )) 3.3.2 Composizione In questa sezione si discuterà della normalizzazione di L-net, ovvero la composizione di strategie. Essa è definita utilizzando una tecnica detta working by slices, molto comune in ludica, usata soprattutto per la normalizzazione delle strategie additive [Gir01]. Definitione 3.3.4 (slice). Una slice S su una L-net D è un sotto-grafo chiuso verso il basso di D in cui tutte le regole negative sono singoletti ovvero non ci sono coppie additive Si noti che, per la condizione duplicazione additiva, tutti gli indirizzi usati in una slice sono distinti: quindi tutte le azioni sono distinte, pertanto in una slice vi è una corrispondenza uno-a-uno fra nodi ed azioni, pertanto una slice può essere identificata come un ordine parziale sulle sue azioni ; questo è fondamentale per la definizione della composizione. NOTA: una L-net in cui tutte le regole negative sono singoletti è detta puramente moltiplicativa (ed è una slice). La tecnica ‘working by slices’ La tecnica ‘working by slice’ è la tecnica che verrà utilizzata per definire la composizione di L-net. La principale difficoltà nel comporre due L-net sta nella gestione degli additivi e in particolare nel fenomeno della duplicazione additiva (ci sono due nodi etichettati con la stessa azione). Nelle L-net puramente moltiplicative, cosı̀ come nelle slice, non è presente questo fenomeno, pertanto è semplice dare una definizione di composizione: ciò che fa la tecnica ‘working by slice’ è di ridurre la composizione delle L-net generali (additive) alla composizione di L-net puramente moltiplicative e lo fa nel modo seguente: 1. decomporre le due L-net da comporre in tutte le sue slices 2. per ogni coppia di slices, effettuarne la composizione 3. sovrappore tutti i risultati della fase precedente allo scopo di ottenere la L-net composta Strategie lineari Nel seguito i dettagli. L-net compatibili: Si possono comporre due L-nets D1 e D2 che hanno interfacce compatibili, ovvero quando un nome positivo ξ nell’interfaccia di D1 coincide con il nome negativo nell’interfaccia di D2 , come ad esempio in Ξ Λ, ξ e ξ ∆. Il nome condiviso σ è detto taglio. Una rete di tagli è un insieme finito R = {D1 , . . . , Dn } di L-nets tale che 1. ogni indirizzo occorre al massimo in due interfacce, una volta come nome positivo e una volta come nome negativo; 2. il grafo i cui vertici sono le interfacce e i cui archi sono i tagli è connesso e aciclico Si definisce interno un indirizzo che è un sotto-indirizzo di un taglio, visibile altrimenti. La definizione si estende alle azioni. L’interfaccia di una rete di taglio è l’interfaccia indotta dagli indirizzi visibili dell’interfaccia (Ξ Λ, ∆ con riferimento all’esempio sopra). Una rete di taglio la cui interfaccia è il sequente vuoto (non ci sono azioni visibili) è detta rete di taglio chiusa. Due interfacce complementari che messe assieme producono un’interfaccia vuota sono dette opposte ( ξ e ξ sono interfacce opposte). Una slice di una rete di taglio R è una rete di taglio S ⊆ R tale che S è una rete di taglio di slices. Data una rete di taglio R = {D1 , . . . , Dn } si dice slice di R l’insieme {S1 , . . . , Sn } dove Si è una slice di Di . Si denota con [[R]] la forma normale di R. Si avrà [[S]] [[R]] = S slice di R Normalizzazione di slices: in questo paragrafo si farà estensivo uso del fatto che una slice è un ordine parziale sulle azioni. La normalizzazione segue il paradigma standard dell’interazione più occultamento dell’informazione interna. La definizione data nel seguito sarà operazionale: dunque verrà definita una macchina astratta, che è un’adattamento della macchina LAM [Fag02]. L’interazione tra le L-nets, formante una rete di taglio, è descritta mediante un multi-gettone che lavora sulla rete di taglio. Questo gettone si muove verso l’alto visitando le azioni visibili, mentre sulle azioni interne si muove dall’azione positiva k + verso l’azione negativa corrispondente k − . L’ordine con cui i nodi sono raggiunti durante l’interazione stabilisce un nuovo ordine parziale, che al termine sarà quello della forma normale. 49 50 Semantica dei giochi La procedura è molto simile alla procedura di composizione delle strutture di eventi o delle reti di Petri. Si definiscono parents(k) = {k |k ← k} i nodi che precedono immediatamente k (le precondizioni di k). Il concetto chiave è che è possibile raggiungere un’azione k solo dopo che sono state raggiunte tutte le azioni in parents(k): un’azione è abilitata (acceduta) dall’abilitazione di tutte le azioni in parents(k). A causa della struttura di una L-net, muovere da un’azione positiva a una negativa è ‘asincrono’, mentre raggiungere un’azione positiva k ha bisogno di una sincronizzazione tra tutti i nodi negativi in parents(k). Sia R una rete di taglio di slice. R è l’ordine parziale associato al grafo (V, E) sulle azioni (non polarizzate) di R ottenuto come segue • Se k è un’azione visibile di R (positiva o negativa) e parents(k) ⊆ V allora k ∈ V e k ← k ∈ E per ogni k ∈ parents(k). Si osservi che se k è iniziale allora k ∈ V . • Se k + è un’azione interna di R, parents(k) ⊆ V e k − ∈ R, allora k ∈ V e k ← k per ogni k ∈ parents(k + ) Il grafo (V, E) è un d.a.g. Se R è chiusa, si chiama R una partita. Se R = {S, I} chiamiamo R = [S I]. La forma normale [R] di R è ottenuta nascondendo • le azioni interne (corrispondenti a comunicazioni interne) • le azioni negative che sono massimali (corrispondenti a eventuale spazzatura derivante da comunicazioni fallite) Proposizione 3.3.1. [R] è una L-net Dimostrazione. Diretto per induzione sui passi di costruzione effettuati dall’algoritmo In particolare vale la seguente Proposizione 3.3.2 (assiciatività). Siano A, B, C slices. Allora [[A, B], C] = [A, B, C] = [A, [B, C]] La dimostrazione è data in [FM05]. Da MALL alle L-nets 51 Normalizzazione di L-nets Si è ora in grado di definire la normalizzazione di L-nets: Definitione 3.3.5 (Normalizzazione). Sia R una rete di taglio. Si definisce [[R]] come segue [S] [[R]] = S slice di R ˙ Poiche [S] = [[S]], da ora in poi si utilizzerà la notazione [[]]. Per la normalizzazione si hanno gli usuali risultati di buona definizione e di associatività, per i quali si fa riferimento a [FM05]. Esempio : nella figura sottostante si dà un esempio di normalizzazione di L-net. Si consideri la L-net in alto a sinistra: le azioni (ξ0, I) e (ξ0, J) formano una coppia additiva. Si pensi ad esse come una componente di una regola & (vedi sezione successiva) e ad α come una formula dell’environment che viene duplicata nelle premesse. Si separano le azioni in due slice e si normalizzano separatamente. Infine si sovrappongono le slice. α0 α0 ξ0, I ξ0, J D: α0 α α ξ, {0} ξ, {0} τ2 τ1 ξ, {0} .... τ MLL normalization [ S1 ] ξ0, I S2 τ2 τ1 α0 α α τ slicing S1 α0 ξ0, I τ2 τ1 [ S2 ] τ τ2 τ1 ξ0, J ξ, {0} τ superposing [ S1 ] 3.4 [ S2 ] : ξ0, I ξ0, J ξ, {0} τ2 τ1 τ Da M ALL alle L-nets In questa sezione si considereranno le strategie lineari viste come modello per la logica lineare. Si introdurrà anzitutto la logica lineare, suddivisa in fram- 52 Semantica dei giochi mento moltiplicativo, additivo ed esponenziale spiegando le regole di calcolo dei sequenti standard. Ci si concentrerà poi su MALL, ovvero sul frammento moltiplicativo additivo, introducendo un calcolo, detto calcolo focalizzato, adatto per costruire un modello a giochi. Infine si darà un’intuizione su ciò che è il modello a strategie lineari di prove in MALL focalizzato. 3.4.1 Logica lineare La logica lineare è stata introdotta da Girard in [Gir87]. Essa differisce dall’approccio classico soprattutto per il fatto che le ipotesi sono interpretate come risorse e come tali devono essere utilizzate esattamente una volta nella prova. Quest’approccio è particolarmente adatto per modellare realtà del tipo ‘Ho 1 euro, con 1 euro compero i biscotti’ BASE DI CONOSCENZA (K.B.): euro, euro ⇒ biscotti Un agente logico (basato dunque sui principi della logica proposizionale [RN05]), effettuando una ask sulla base di conoscenza, sarebbe in grado di inferire euro∧biscotti, il che non risulta rispondere ai criteri di ragionevolezza che inferirebbero soltanto biscotti, poichè euro è stato consumato. Di seguito diamo le regole di calcolo dei sequenti classiche A, A⊥ Ax 1 1 Γ ⊥ Γ, ⊥ , Γ Γ, A, B Γ1 , A Γ2 , B ⊗ Γ1 , Γ2 , A ⊗ B Γ, A B Γ, A Γ, A Γ, B Γ, B ⊕1 ⊕ & Γ, A & B Γ, A ⊕ B Γ, A ⊕ B 2 Γ, A A⊥ , ∆ cut Γ, ∆ La logica linerare si suddivide in frammento moltiplicativo: con i connettivi ⊗ e e le costanti 1 e ⊥ Da MALL alle L-nets 53 congiunzione moltiplicativa (⊗): detta anche tensore Γ1 , A Γ2 , B ⊗ Γ1 , Γ2 , A ⊗ B Derivare A ⊗ B significa dire che si hanno a disposizione simmultaneamente sia la risorsa A che la risorsa B. Per esempio, se si scrive euro ⊗ euro si intende modellare il fatto che si hanno due euro. La costante 1 è l’elemento neutro 1 1 A⊗1≡ 1⊗A≡A e dunque rappresenta l’assenza di una risorsa. disgiunzione moltiplicativa ( ): detta anche par Γ, A, B Γ, A B Derivare A B significa dire che si vuole richiedere di consumare la risorsa A, o la risorsa B o entrambe. Per esempio, se si scrive biscotti latte si intende dire che si vorrebbe dei biscotti, oppure del latte oppure entrambi. La costante ⊥ è l’elemento neutro Γ ⊥ Γ, ⊥ A ⊥≡⊥ A≡A e dunque rappresenta l’assenza di richiesta. frammento additivo: con i connettivi & e ⊕ e le costanti e 0. congiunzione additiva (&): Γ, A Γ, B & Γ, A & B Il connettivo & esprime una scelta fra più alternative di cui si ha il controllo: si supponga ad esempio di avere 50 euro e dopo averli 54 Semantica dei giochi dati ad un cassiere esso ci dica che è possibile scegliere se comperare l’abito rosso o l’abito blu. Quindi abitor & abitob significa che sono a disposizione sia l’abito rosso che l’abito blu e che spetta a noi sceglierne uno dei due. L’elemento neutro è , Γ &A≡A&≡A il quale rappresenta l’assenza di alternativa. disgiunzione additiva (⊕): Γ, B Γ, A ⊕ ⊕ Γ, A ⊕ B 1 Γ, A ⊕ B 2 Il connettivo ⊕ esprime una scelta fra alternative di cui non si ha il controllo: riprendendo l’esempio del caso precedente, dal punto di vista del cassiere vi è una situazione in cui egli verrà ⊥ privato dell’abito blu (abito⊥ b ) o dell’abito rosso (abitor ), ma siamo noi ad avere la scelta, non lui (dal suo punto di vista dunque ⊥ abito⊥ r ⊕ abitob ). L’elemento neutro è 0 A⊕0≡0⊕A≡A e rappresenta qualcosa che non deve accadere, ad esempio la distruzione della Terra o l’assimilazione della razza umana da parte dei Borg [Fra96]. Esiste anche il frammento esponenziale con i connettivi ! e ?, che qui non sono trattati. 3.4.2 Un calcolo dei sequenti focalizzato per MALL Focalizzazione Il calcolo dei sequenti moltiplicativo additivo (MALL) soddisfa una proprietà chiamata focalizzazione, scoperta da Andreoli [And92]. Una dimostrazione π di un sequente Γ può essere trasformata in una dimostrazione π f oc dello stesso sequente, ottenuta da π mediante permutazione di regole, soddisfancente una proprietà detta appunto focalizzazione. Essa si basa sulla distinzione dei connettivi della logica lineare in due famiglie, che sono le seguenti: Da MALL alle L-nets 55 • connettivi positivi: ⊗, ⊕, 1, 0 • connettivi negativi: &, , ⊥, Una prova soddisfa la proprietà della focalizzazione se segue le seguenti discipline: • una volta che la prova inizia a decomporre una formula applicando una regola di un certo connettivo, essa continua a farlo finchè non incontra un connettivo di polarità opposta oppure un atomo • se c’è una formula negativa (ovvero il connettivo più esterno è negativo) nel sequente allora la prova inizia a decomporre da quella. Una conseguenza della focalizzazione è che data una prova focalizzata, è possibile vedere un gruppo di connettivi con la stessa polarità come un singolo connettivo e una cascata di applicazioni di regole riguardanti connettivi con la stessa polarità, come una singola applicazione. In questo modo, la divisione di connettivi in positivi e negativi corrisponde perfettamente all’alternanza Opponent/Player nella Semantica dei Giochi. Il calcolo In questa sottosezione definiremo il calcolo utilizzato: esso è tratto da [Fag]. La sintassi delle formule è dunque cosı̀ definita: P ::= 0|1| ⊕I∈I (⊗i∈I (Ni )) N ::= |⊥| &I∈I ( i∈I (Pi )) Dove Pi e Ni sono rispettivamente formule positive e negative. Per quanto concerne le regole, si hanno le seguenti: Assiomi: A, A⊥ e le regole per le costanti. regole di inferenza: ∆j , Nj ∀j ∈ J con J ∈ I (P, N J ) ⊕I∈I(⊗i∈I (NiI )), . . . , ∆j , . . . , ∆k , . . . Dove P = ⊕I∈I(⊗i∈I (Ni )). P1J , . . . , PnJJ , ∆ ∀J ∈ I con J = {1, . . . , nJ } &I∈I( Dove N = &I∈I( I i∈I (Pi )), ∆ i∈I (Pi )). {(N, P J )|J ∈ I} 56 Semantica dei giochi taglio: Γ, A A⊥ , ∆ (cut) Γ, ∆ condizione di polarità: ogni sequente ha al massimo una formula negativa. Le coppie utilizzate nelle etichette delle regole sono chiamate azioni. Si noti che presa un’azione, essa ci dà una visione locale esaustiva dicendoci la formula sulla quale in quel momento la prova sta lavorando e le sottoformule su cui lavorerà nel passo immediatamente successivo. Si noti che all’applicazione di una regola positiva corrisponde una sola azione, mentre all’applicazione di una regola negativa corrispono un cluster di azioni operanti sulla stessa formula (si noti l’analogia con le coppie additive). 3.4.3 Da MALL alle L- nets Volendo ridurre al minimo l’informazione, si può pensare di non voler lavorare direttamente con le formule, ma ad esempio di immagazzinarle in una struttura dati indicizzata, alle quali è possibile accedere mediante dei puntatori. Si consideri il sequente seguente: a⊥ ⊗ b⊥ , c d Di seguito, si ha la prova in calcolo dei sequenti focalizzato, a0 , c ⊥ b0 , d ⊥ a b a⊥ , c b⊥ , d ⊥ a ⊗ b⊥ a⊥ ⊗ b⊥ , c, d c d a⊥ ⊗ b⊥ , c d Nel seguito si dà una versione ad albero della prova con indicazione, per ogni nodo, delle sottoformule, cerchiando le formule positive (ovvero quelle che hanno un connettivo positivo come connettivo più esterno) Da MALL alle L-nets 57 c {c0 ⊥ } d {d0 ⊥ } a⊥ {a0 } b⊥ {b0 } a⊥ ⊗ b⊥ {a⊥ , b⊥ } c {c, d} d d, a⊥ ⊗ b⊥ c A questo punto, si ‘immagazzinano’ le formule in una struttura dati indicizzata, in questo modo, per poterle associare a dei puntatori Addresses c c a⊥ d σ1 d σ2 σ b⊥ ξ2 ξ1 a ⊥ ⊗ b⊥ ξ E ora si considera l’albero e si sostituiscono le formule e le sottoformule coi relativi puntatori. σ1 σ2 ξ1 ξ2 ξ σ Ora si memorizza in ogni nodo, oltre al puntatore alla formula, anche l’informazione necessaria a ricavare i puntatori alle sottoformule. Si noti che per ricavare i puntatori alle sottoformule a partire da un puntatore σ a una data formula basta solamente concatenare a σ l’indice della sottoformula. Dunque, per ogni nodo basta memorizzare il puntatore alla formula e l’insieme di indici che genereranno i puntatori alle sottoformule (quindi la coppia (σ, I), la quale genera i puntatori σi con i ∈ I). 58 Semantica dei giochi σ1 {0} σ2 {0} ξ1 {0} ξ2 {0} ξ {1, 2} σ {1, 2} σξ In ogni caso, una L-net modella un oggetto in teoria della dimostrazione più astratto della prova in calcolo dei sequenti focalizzato. Questo oggetto è detto rete di prova. In una rete di prova l’ordine con cui le regole del calcolo sono applicate è ridotto al minimo. Le reti di prova sono state introdotte da Girard in [Gir87], ed esse sono adatte a catturare l’idea di concorrenza all’interno della teoria della dimostrazione. 3.5 Discussione In questo capitolo, dunque, sono stati introdotti i principali aspetti della semantica dei giochi. Si è parlato anzitutto di semantica dei giochi HO, ovvero quella usata per costruire modelli per i linguaggi di programmazione: si è introdotto il concetto di strategia, la quale è descritta tramite l’insieme di tutte le tracce possibili della computazione. Poi si è parlato di semantica dei giochi utilizzata per costruire modelli per la logica lineare, e in particolare si è parlato di strategie lineari, le quali sono descritte mediante ordini parziali. Di ambedue le tipologie di strategie, si è discusso anche della composizione La distinzione strategie a traccia/strategie lineari ricorda molto la distinzione modelli ad interleaving/modelli causali in teoria della concorrenza. Cosı̀ come vi sono somiglianze nella nozione di interazione: il fenomeno della sincronizzazione è presente in entrambi gli ambiti (sincronizzazione fra mosse = sincronizzazione fra azioni). Inoltre il fatto che, in entrambi gli ambiti la composizione parallela sia un risultato di due sotto-operazioni (giustapposizione più occultamento) è un’aspetto comune molto importante. Nei prossimi capitoli si intenderà approfondire maggiormente questo legame, prendendo in esame le strutture di eventi, in teoria della concorrenza e le Lnets in semantica dei giochi e si vedrà che esse sono strutture molto simili tra loro. In particolare, si metterà in evidenza la stretta corrispondenza fra nozione la di conflitto e la coppia additiva. Capitolo 4 Strutture di eventi tipate Nei primi due capitoli si è data una panoramica di due differenti aree dell’informatica teorica, che sono la teoria della concorrenza e la semantica dei giochi. In particolare la discussione si è soffermata su due strutture particolari utilizzate, che sono le strutture ad eventi e le L-nets: pur essendo utilizzate in contesti completamente differenti, esse sono accomunate dal fatto che possono essere descritte mediante ordini parziali: infatti, cosı̀ come riportato nella definizione 2.2.2 una struttura ad eventi etichettata non è altro che un insieme di eventi con un’etichetta su cui è definita una relazione d’ordine parziale, mentre una L-net (vedi definizione 3.3.1) non è altro che un d.a.g. con nodi etichettati, ovvero un’ordine parziale. Dunque una costruzione comune (un ordine parziale) è utilizzata per descrivere due differenti strutture situate in due differenti aree (struture di eventi in teoria della conocrrenza e L-nets in semantica dei giochi). Pertanto, lo scopo di questo capitolo è studiare questa similitudine allo scopo di approfondire il legame fra strutture di eventi e L-nets per poter poi costruire una struttura versatile, che se portata nei due ambiti di studio (teoria della concorrenza e semantica dei giochi), essa possa essere identificata con le strutture già note. Questa struttura versatile è qui denominata struttura ad eventi tipata: essa è • una struttura ad eventi senza confusione • una generalizzazione delle strategie lineari In particolare si stabilirà, tramite la nozione di struttura ad eventi tipata, un legame di stretta similitudine fra le L-nets e le strutture ad eventi senza confusione, mostrando che le L-nets sono una sotto-classe di queste ultime. Di conseguenza, il presente capitolo si articolerà come segue: anzitutto si analizzerà la similitudine fra L-net e strutture di eventi mostrandone il legame 59 60 Strutture di eventi tipate con le strutture ad eventi senza confusione. Poi, sfruttando tecniche presenti nelle strategie lineari, si costruirà un typing system per le strutture ad eventi per garantirne l’assenza di confusione e se ne analizzeranno le proprietà. Dopo di che, si definirà una nozione globale di composizione di strutture ad eventi tipate, per la quale si mostrerà la buona definizione, ovvero l’assenza di confusione (la tipatura) è preservata per composizione. Infine si darà una definizione equivalente di composizione di strutture ad eventi tipate basata sulla tecnica ‘working by slice’, largamente utilizzata in semantica dei giochi. 4.1 Strategie come strutture ad eventi senza confusione Come si è visto nel capitolo 3, una L-net è una struttura versatile, in grado di descrivere un disegno se portata nell’ambito ludico e in grado di descrivere una strategia lineare se portata nell’ambito semantica dei giochi. Nel capitolo 2, invece sono state introdotte le strutture di eventi (etichettate), descrivendole come strutture generali in grado di modellare sistemi concorrenti non deterministici. Si è inoltre parlato di una forma di non determinismo localizzata modellata da una particolare sotto-classe di strutture ad eventi detta classe delle strutture ad eventi senza confusione.1 Come già detto queste due strutture possono essere descritte mediante ordini parziali (la corrispondenza tra d.a.g. e ordini parziali è ben nota in letteratura): in questa sezione si intende analizzare meglio questa similarità allo scopo di stabilire se il legame va ben oltre questo fatto. Sia dunque D una L-net di interfaccia Ξ Λ. Si costruisca la struttura ED = ED, ≤D, D, λD cosı̀ definita: • ED è dato dall’insieme di nodi X di D + • siano n, m ∈ ED: si pone n ≤ m se n ← m. • si etichetta ciascun nodo con la corrispondente azione k = (ξ, I) • siano n, m ∈ ED distinti: si pone n m se vale una delle seguenti 1. se n ed m sono una coppia additiva 2. se esistono n ≤ n, m ≤ m tali che m ed n sono coppie additive. 1 Si invita il lettore a rivedere le definizioni di L-net, strutture di eventi e strutture ad eventi senza confusione Strategie come strutture ad eventi senza confusione La struttura cosı̀ costruita è una struttura ad eventi senza confusione: infatti per costruzione m µ n se e solo se m ed n sono coppie additive: inoltre sono mosse negative e per la costrizione di innocenza i genitori sono gli stessi, per cui anche gli antenati lo sono. Inoltre la relazione di coppia additiva è ovviamente transitiva, per cui anche la seconda condizione che caratterizza le strutture ad eventi senza confusione è soddisfatta. Remark 4.1.1. Si osservi inoltre che il ‘luogo‘ in cui è localizzata la scelta in una struttura di eventi senza confusione (la cella) ha chiaramente la regola additiva nelle L-net come sua controparte: infatti se si pensa al significato del connettivo & in logica lineare, il quale esprime la scelta, la cosa non dovrebbe sorprendere. Quindi una L-net è una particolare struttura di eventi senza confusione: tra le innumerevoli proprietà che essa gode, colpisce particolarmente il fatto che per esse la composizione è ben definita, cosa che non è affatto vera per le strutture ad eventi senza confusione. Esempio: Si considerino le seguenti strutture di eventi senza confusione, per le quali si stabilisce che il nome privato sia b E2 E1 a b b c La loro composizione risulta essere E1 E2 a τb c che chiaramente non è senza confusione Il problema di questo controesempio stà nel fatto che le azioni di una cella non sono uniformi dal punto di vista della visibilità (nell’esempio a è privato mentre b è pubblico). Una delle peculiarità chiave delle L-nets è che i nodi di una regola additiva (cella) sono occorrenza di uno stesso nome, dal quale però può generare successori diversi a seconda del nodo. Dunque l’aspetto chiave sta nell’identificare una cella (ovvero un insieme di eventi tra loro in 61 62 Strutture di eventi tipate conflitto immediato e con gli stessi predecessori) con uno stesso nome (per cui se quel nome venisse dichiarato privato, tutti gli eventi di quella cella diventerebbero automaticamente privati). Esempio: Rivisitiamo l’esempio precedente applicando questa intuizione: si hanno dunque le due strutture di eventi da comporre in cui gli eventi appartenenti alla stessa cella sono etichettati con lo stesso nome b e dunque entrambi privati. Quindi la struttura composta è E1 E2 τb c Dunque l’idea è di utilizzare un modo di etichettare le strutture di eventi senza confusione in cui gli eventi che appartengano ad una stessa cella siano etichettati con uno stesso nome. Infatti nelle sezioni successive si introdurrà un sistema di tipi che etichetterà gli eventi in questo modo e si mostrerà come, cosı̀ facendo, tutte le proprietà delle L-nets che sono importanti per la buona definizione della composizione (Lin. e duplicazione additiva), in questo contesto siano invece derivabili dal sistema di tipi. 4.2 Sistema di etichette In questa sezione si introdurrà una nozione di struttura di eventi etichettata con particolari proprietà, le quali garantiscono che la composizione di due strutture di eventi senza confusione sia senza confusione. L’etichettaggio utilizzato può essere visto come una variante minimalista del sistema di tipi in [VY06] senza l’utilizzo di tipi lineari e morfismi; questo perchè si è interessati nella preservazione dell’assenza di confusione durante la composizione. Richiamiamo alcuni concetti e notazione visti in precedenza: nella sezione 2.2.4 è stato descritto il concetto di etichetta. Come già visto, data un’etichetta a , essa rappresenta un’azione2 che ha come soggetto subj(a ) = a e viene eseguita secondo la modalità dettattata da ∈ {+, −, ±}. Nel seguito verrà utilizzato il termine azione non polarizzata come sinonimo di soggetto. L’insieme universo dei soggetti era denotato con S, l’insieme delle polarità con Π e l’insieme universo delle azioni era denotato con U(A) = {s |s ∈ S, ∈ 2 Nel seguito si tratterà il caso di azioni senza passaggio di valori Sistema di etichette 63 Π} ∪ {} e le strutture di eventi erano etichettate in sottoinsiemi di U(A), che non contengono . Nel seguito si intenderà dare maggiore struttura alle etichette, in modo da costruire insiemi di etichette che godono di determinate proprietà e che verranno utilizzati per etichettare strutture di eventi. In particolare, per garantire l’assenza di confusione occorre un etichettaggio che sia in grado di identificare le celle della struttura di eventi (in pratica una cella della struttura di eventi verrà etichettata con un nome). 4.2.1 Soggetti e nomi Sia N un insieme di nomi avente come elementi α, β, . . . e sia I ⊆ N un insieme di indici. L’insieme universo di soggetti S è caratterizzato come segue S= Ni = {(α, i)|α ∈ N, i ∈ I} i∈I Su S si definisce una relazione binaria #. Intuitivamente due soggetti s1 , s2 sono in relazione # se hanno lo stesso nome: più formalmente (α, i)#(β, j) se α = β Dato a = (α, i) ∈ S si dice che α è il nome di a e si denota name(a) = α. E’ facile vedere che # è una equivalenza. E’ inoltre ovvio che dato α ∈ N esso identifica in modo univoco la classe di equivalenza Cα = {(α, i)|i ∈ I}.3 4.2.2 Interfacce Le strutture di eventi saranno tipate con interfacce: le interfacce forniscono un insieme di nomi sui quali le strutture di eventi comunicano e la loro rispettiva polarità. Si ha dunque la seguente Definitione 4.2.1 (Interfaccia). Un’interfaccia è una coppia A = A, πA dove • A ⊆ N è un insieme di nomi • πA : A → Π è una funzione che fornisce la polarità di un nome 3 Un’appproccio leggermente differente e comunque equivalente può essere dato dicendo che su S è definita un’opportuna relazione di equivalenza # e che i nomi sono le classi di equivalenza indotte da # (dato un s ∈ S la classe di equivalenza indotta da s è [s] = {s ∈ S|s#s }). Tenendo conto di ciò, la funzione name, che restituisce il nome dell’azione diventerebbe la proiezione del soggetto nella sua classe di equivalenza (dunque name(s) = [s]) 64 Strutture di eventi tipate L’interfaccia vuota è denotata con I = ∅, ∅. Nel seguito, data un’interfaccia A, identificheremo il suo insieme di nomi con A, ovvero con la corrispondente lettera in forma maiuscola e la sua funzione di polarità con πA . Data un’interfaccia A, l’insieme di soggetti generato da essa è dato da Subj(A) = {(α, i)|α ∈ A, i ∈ I}, mentre l’insieme di azioni da essa generata è dato da Acts(A) = {(α, i) |α ∈ A, i ∈ I, = πA (a)}. Si noti due aspetti importanti rigurado al suddetto insieme di azioni: • ogni azione che coinvolge un soggetto appare con una singola polarità, o positiva, o negativa, o neutra. • le azioni che coinvolgono insiemi di soggetti che sono tra loro in relazione di mutua esclusione (ovvero hanno lo stesso nome) appaiono con una stessa polarità, o positiva, o negativa, o neutra. Operazioni con le interfacce Si definiscono di seguito le seguenti operazioni sulle interfacce: unione: Siano A, B due interfacce tali per cui A ∩ B = ∅. Si definisce A ∪ B = A ∪ B, π dove πA (s) se s ∈ A π(s) = πB (s) altrimenti In particolare se A = {a} è un singoletto con πA (a) = , si definisce a ∪ B = A ∪ B. dualizzazione: Sia A un’interfaccia tale che per ogni a ∈ A, πA (a) = ±. Si definisce A⊥ = A, π dove π(s) = −πA (s) neutralizzazione: Sia A un’interfaccia. Si definisce A± = A, π dove π(s) = ± per ogni s. 4.3 Strutture di eventi tipate Una struttura di eventi di interfaccia A è una struttura di eventi etichettata con azioni generate da A. Più formalmente essa è una tripla E, A, λ dove: • E = E, ≤, è una struttura di eventi • A = A, πA è un’interfaccia Strutture di eventi tipate 65 • λ : E → Acts(A) è la funzione di etichettatura Sia e ∈ E: se λ(e) = (α, i) allora • si dice che e usa il nome α e si scrive name(e) = α • si dice che e ha come soggetto (α, i) e si scrive subj(e) = (α, i) • si dice che e ha polarità e si scrive π(e) = Una struttura di eventi di interfaccia A viene tipata se • tutti gli eventi nella stessa cella usano lo stesso nome (e hanno la stessa polarità) • due eventi che usano lo stesso nome (e hanno la stessa polarità) sono in conflitto • gli eventi in conflitto immediato hanno gli stessi predecessori. Più formalmente Definitione 4.3.1 (struttura di eventi tipata). Una struttura di eventi E di interfaccia A ha tipo A, e si scrive E : A se soddisfa le seguenti, per ogni e1 , e2 ∈ E distinti: 1. se e1 µ e2 e subj(e1 ) = (α, i) allora subj(e2 ) = (α, j) con j = i 2. se subj(e1 )#subj(e2 ) allora e1 e2 3. se e1 µ e2 allora parents(e1 ) = parents(e2 ) La condizione di assenza di confusione è già garantita dalle tre proprietà suddette: abbiamo infatti la seguente: Proposizione 4.3.1 (assenza di confusione). Sia E : A una struttura di eventi tipata. Allora E è senza confusione. Dimostrazione. La condizione di cellularità è diretta conseguenza della proprietà 3. Per quanto riguarda la condizione di transitività, siano e1 , e2 , e3 distinti tali che e1 µ e2 e e2 µ e3 : questo implica subj(e1 )#subj(e2 ) e subj(e2 )#subj(e3 ) per la proprietà 1 e per transitività di # si ha subj(e1 )#subj(e3 ) e questo significa per la proprietà 2 che e1 e3 . Se e1 µ e3 si conclude. Altrimenti, facciamo vedere che non è mai il caso che il conflitto e1 e3 sia ereditato. Se fosse ereditato allora esisterebbero e1 ‘ ≤ e1 , e3 ‘ ≤ e3 tali che e1 ‘ µ e3 ‘. Senza perdita di generalità si assume e1 ‘ = e1 . Per la proprietà 3 applicata al conflitto e1 µ e2 si ha e1 ‘ ≤ e2 e sempre per la proprietà 3 applicata al conflitto e2 µ e3 abbiamo e1 ‘ ≤ e3 : contraddizione. 66 Strutture di eventi tipate Inoltre la polarizzazione è rispettata. Si ha infatti la seguente Proposizione 4.3.2. Sia E : A una struttura di eventi tipata e siano e1 , e2 ∈ E due eventi distinti tali che e1 µ e2 oppure name(e1 ) = name(e2 ). Allora π(e1 ) = π(e2 ) Dimostrazione. Se name(e1 ) = name(e2 ), π(e1 ) = π(e2 ) è immediato per costruzione. Se e1 µ e2 , per la proprietà 1 si ha name(e1 ) = name(e2 ) e si conclude. 4.3.1 Proprietà dell’etichettaggio L’etichettaggio di una struttura di eventi tipata garantisce due importanti proprietà che sono • l’identificazione di un evento tramite un insieme di etichette • la relazione di conflitto calcolabile osservando l’etichettaggio La notazione utilizzata sarà la seguente: data una struttura di eventi E e un S ⊆ E, si indicherà con • λ(S) = {λ(s)|s ∈ S} • subj(S) = {subj(s)|s ∈ S} Alcuni lemmi utili, che verranno utilizzati nel seguito, sono i seguenti: Lemma 4.3.1 (iniettività sulle configurazioni). Sia E : A una struttura di eventi tipata e sia X ⊂ E una configurazione. Siano x1 , x2 ∈ X: se subj(x1 ) = subj(x2 ) allora x1 = x2 . Dimostrazione. Siano x1 , x2 ∈ X tali che subj(x1 ) = subj(x2 ). Se x1 = x2 allora si è finito. Se x1 = x2 , poiche subj(x1 )#subj(x2 ), per la proprietà 2, si ha x1 x2 ma questo non può essere poiché X è una configurazione. Si noti qui l’analogia con la nozione di slice in L-net: i nodi che appartengono ad una slice sono etichettati in modo distinto. Lemma 4.3.2 (stabilità 2). Sia E : A una struttura di eventi tipata. Siano e1 e2 ∈ E tali che subj(e1 ) = subj(e2 ). Allora esistono e1 ∈ e1 , e2 ∈ e2 tali che e1 µ e2 e subj(e1 ) = subj(e2 ). Dimostrazione. Poiche e1 e2 , devono esistere e1 ∈ e1 , e2 ∈ e2 tali che e1 µ e2 . Inoltre per la proprieta 1 si ha subj(e1 )#subj(e2 ) con subj(e1 ) = subj(e2 ) come si voleva. Strutture di eventi tipate Si noti il lemma di stabilità: riformulandolo utilizzando una terminologia appartenete al dominio L-nets, esso stabilisce che se esistono due nodi distinti n1 , n2 etichettati con la stessa azione, allora esiste una coppia additiva k1 , k2 + + tale che k1 ← n1 e k2 ← n2 , ovvero la condizione duplicazione additiva. Insiemi di etichette identificano eventi Ogni evento e ∈ E è univocamente identificato dall’insieme di etichette λ e , come si evince dalla seguente proposizione: Proposizione 4.3.3. Sia E : A una struttura di eventi tipata e siano e1 , e2 ∈ E due eventi distinti. Allora subj(e1 ) = subj(e2 ). Dimostrazione. Siano e1 , e2 ∈ E due eventi distinti. Se e1 e2 allora per il lemma di compatibilità, e1 ∪ e2 è una configurazione e si conclude per il lemma di iniettività sulle configurazioni. Se e1 e2 , il caso meno semplice è quando subj(e1 ) = subj(e2 ): in questo caso, per il lemma di stabilità 2 si ha che esistono e1 ≤ e1 , e2 ≤ e2 tali che subj(e1 ) = subj(e2 ) e e1 µ e2 . Inoltre subj(e1 ) ∈ subj(e2 ): infatti per 1 si ha subj(e1 )#subj(e2 ) e ciò significa (se subj(e1 ) ∈ subj(e2 )) che esiste d ∈ e2 tale che subj(d) = subj(e1 ) ma in tal caso per la proprietà 2 tale d sarebbe in conflitto con e2 ∈ e2 , ma e2 è una configurazione e ciò non può valere. Nel dominio L-net, questa proprietà è presente ed è conseguenza della condizione Lin.. E’ interessante notare che quest’ultima condizione è presente nelle strutture di eventi tipate: infatti si ha la seguente Proposizione 4.3.4 (Lin). Sia E : A e sia e ∈ E. Allora i nomi in e sono utilizzati esattamente una volta. Dimostrazione. Dal capitolo 2, si sa che e è una configurazione. Quindi si procede per assurdo, per cui esistono e1 , e2 ∈ e tali che name(e1 ) = name(e2 ). Ma per la proprietà 2 si ha e1 e2 contro il fatto che e è una configurazione. Contraddizione. E’ dunque possibile dare una dimostrazione alternativa della proposizione 4.3.3, che deriva direttamente da quella data per le L-nets. Dimostrazione della proposizione 4.3.3 Si supponga che non sia il caso, ovvero esistono e1 , e2 tali che subj(e1 ) = subj(e2 ). Allora in particolare subj(e1 ) = subj(e2 ) e per il lemma di stabilità esistono e1 ≤ e1 , e2 ≤ e2 tali che e1 µ e2 . Allora per l’assunzione di partenza, esiste d1 ∈ e1 con subj(d1 ) = subj(e2 ), ma ciò viola la proprietà Lin. Contraddizione. 2 67 68 Strutture di eventi tipate Conflitti La relazione di conflitto in strutture di eventi tipate può essere inferita dall’etichettaggio: si ha infatti la seguente Proposizione 4.3.5. Sia E : A una struttura di eventi tipata e siano e1 , e2 ∈ E. Allora vale la seguente e1 e2 ⇐⇒ ∃e1 ≤ e1 , e2 ≤ e2 : name(e1 ) = name(e2 ) (4.1) Dimostrazione. Si supponga e1 e2 : allora esistono e1 ≤ e1 , e2 ≤ e2 tali che e1 µ e2 e per la proprietà 1 si ha name(e1 ) = name(e2 ) come si voleva. Dall’altro lato, siano e1 , e2 tali per cui esistono e1 ≤ e1 , e2 ≤ e2 tali che name(e1 ) = name(e2 ): allora e1 e2 per la proprietà 2 e per ereditarietà si conclude e1 e2 come si voleva. Come conseguenza della proposizione precedente, nelle strutture di eventi tipate il conflitto è deducibile dall’etichettaggio e dunque, da questo momento in avanti sarà possibile trattare il conflitto implicitamente. Quindi Remark 4.3.1. Data una struttura di eventi tipata E : A e dati e1 , e2 ∈ E distinti, si può dedurre e1 e2 se e solo se esistono e1 ∈ e1 , e2 ∈ e2 tali che name(e1 ) = name(e2 ) Inoltre si ha un’altro risultato Proposizione 4.3.6. Sia E una struttura di eventi etichettata in A tale per cui valgono la proprietà 3 e 4.1. Allora E : A. Dimostrazione. Occorre far vedere che valgono 2 e 1. Per quanto concerne 1, siano e1 µ e2 . Quindi e1 e2 e per 4.1 esistono e1 ≤ e1 , e2 ≤ e2 tali che name(e1 ) = name(e2 ). Se e1 = e1 ed e2 = e2 allora si è finito. Si supponga dunque almeno uno dei due diversi: senza perdita di generalità e1 = e1 : questo significa per 4.1 e1 e2 e dunque e1 e2 sarebbe ereditato, contro l’ipotesi che il conflitto fosse immediato. Per quanto concerne 2, siano e1 , e2 distinti tali che name(e1 ) = name(e2 ). Ma allora per 4.1 e1 e2 come si voleva In conclusione si ha il seguente: Corollario 4.3.1. Sia E una struttura di eventi etichettata in A tale per cui vale la proprietà 3. E : A se e solo se vale 4.1 Composizione globale 4.4 Composizione globale In questa sezione verrà definita la composizione tra due strutture di eventi tipate. La definizione è data ‘operazionalmente’ ed è basata sulla definizione di composizione di strategie in semantica dei giochi e in particolare sulla macchina LAM introdotta in [Fag02] e definita nel capitolo 3. Tale definizione può essere vista come una generalizzazione della macchina suddetta: infatti essa si basa sul fatto che uno o più eventi vengono ‘raggiunti’ (il che significa che possono essere aggiunti alla struttura che si sta costruendo e che alla fine del processo diverrà la struttura ad eventi composta) solo quando i suoi predecessori lo sono (ovvero sono presenti nella struttura che si sta costruendo) e la costruzione della struttura continua finchè tutti gli eventi non saranno ‘raggiunti’ (come si vedrà nel seguito, non è stato usato il verbo ‘visitare’ in quanto un evento potrebbe essere visitato più di una volta). Si illustrerà in modo migliore questo concetto nelle successive sezioni. 4.4.1 Definizione In questa sezione si definirà la composizione tra due strutture di eventi tipate. Siano E1 : A ∪ B ed E2 : B⊥ ∪ C due strutture ad eventi tipate: si definisce la struttura ad eventi E1 E2 etichettata in A∪B± ∪C ricorsivamente a partire dalla struttura vuota come segue: 1. Sia e ∈ Ei tale che name(e) ∈ A (risp. C). Si assuma S ⊆ E soddisfacente le seguenti condizione sui genitori subj(S) = subj([e)) condizione sul conflitto S è senza conflitti4 In questo caso si ha evento ed etichetta: v ∈ E nouvo evento con λ(v) = λ(e) ordine: per tutti i vi ∈ S si pone vi ≤ v 2. Siano e1 ∈ E1 , e2 ∈ E2 tali che subj(e1 ) = subj(e2 ) = b e name(b) ∈ B. Si assuma S = S1 ∪ S2 con S1 ⊆ E1 e S2 ⊆ E2 (...) soddisfacente le seguenti condizione sui genitori subj(S1 ) = subj([e1 )), subj(S2 ) = subj([e2 )) 4 In base alla proprietà 4.1 questo significa che per ogni s1 , s2 distinti non deve valere che esistono s1 ∈ s1 , s2 ∈ s2 tali che subj(s1 )#subj(s2 ) 69 70 Strutture di eventi tipate condizione sul conflitto S è senza conflitti5 In questo caso si ha evento ed etichetta: v ∈ E nuovo evento con λ(v) = b± ordine: per tutti i vi ∈ S si pone vi ≤ v Come detto in sezioni precedenti, si noti che la relazione di conflitto nella struttura composta è trattata implicitamente in quanto automaticamente dedotta dall’etichettaggio. Inoltre la struttura è costruita in modo che gli eventi siano univocamente identifati dalla loro storia etichettatata, come nella proposizione 4.3.3. La macchina genera E = E1 E2 passo per passo; ogni volta si aggiunge ad E un evento v che si riferisce ad (viene da) un evento (o una coppia di eventi in grado di sincronizzarsi) x in E1 E2 . Si aggiunge v ad E solo se • l’insieme abilitante di x ha già un’immagine in E • questa immagine è senza conflitto Per capire la condizione di conflitto, si ricordi che eventi in conflitto sono eventi mutualmente esclusivi. Se si ha bisogno che un insieme di precondizioni accadono assieme, devono stare in una struttura di eventi senza conflitti S ⊆ E. Come si vedrà successivamente sarà possibile analizzare e anche calcolare la composizione di strutture di eventi tipate attraverso la composizione di strutture di eventi senza conflitti (si osservi che se si effettua la composizione di strutture di eventi senza conflitti, la condizione di conflitto è vacuamente soddisfatta). Esempio di composizione Si consideri le seguenti strutture di eventi: • E1 = {e1 , e2 , e3 , e4 } con e1 < e3 , e2 < e4 e e1 µ e2 • E2 = {e5 , e6 } con e5 < e6 e interfacce A = {a+ }, B = {b+ }, C = {c+ }. Si abbrevierà (a, i) con ai e similmente per b e c. Si consideri + + • E1 : A ∪ B con λ(e1 ) = a+ 1 , λ(e2 ) = a2 , λ(e3 ) = λ(e4 ) = b1 . 5 vedi nota 4 Composizione globale 71 + • E2 : B⊥ ∪ C con λ(e5 ) = b− 1 , λ(e6 ) = c1 Qui si ha una rappresentazione grafica delle due strutture di eventi: e3 b1 e1 a1 e4 b1 a2 E1 e2 e6 c1 e5 b1 E2 E qui il calcolo della struttura composta passo-passo E 1 E 2 ∅ e1 ∈ E 1 name(λ(e1 )) ∈ A S =∅ v1 a1 v3 4.4.2 v6 c1 v3 τb v4 τb v1 a1 a2 v2 a1 v2 a2 name(λ(v1 ) = name(λ(v2 )) e3 ∈ E 1 e5 ∈ E 2 λ(e3 ) = λ(e5 ) = b1 S1 = {v1 } S2 = ∅ v5 c1 v3 τb a1 v1 e6 ∈ E 1 name(λ(e6 )) ∈ C S = {v3 , v1 } v3 τb v4 τb a2 v2 v4 τb τb a1 v1 c1 e6 ∈ E 1 name(λ(e6 )) ∈ C S = {v2 , v4 } e2 ∈ E 1 name(λ(e2 )) ∈ A S =∅ v1 v5 a2 e4 ∈ E 1 e5 ∈ E 2 λ(e4 ) = λ(e5 ) = b1 S1 = {v2 } S2 = ∅ v2 a1 v1 a2 v2 Proprietà della composizione La composizione di due strutture di eventi tipate è ben definita, come testimonia il seguente: Teorema 4.4.1. Siano E1 : A ∪ B ed E2 : B⊥ ∪ C. Allora E1 E2 : A ∪ B± ∪ C. Dimostrazione. Si osservi che basta dimostrare la proprietà 3, in quanto da questa e dalla proprietà 4.1 si conclude utilizzando il corollario 4.3.1. Siano u µ v e siano Su , Sv i due sottoinsiemi ottenuti per aggiungere i due eventi a E1 E2 . Si noti che [v) = [v) se e solo se Su = Sv . Per costruzione 72 Strutture di eventi tipate si ha name(u) = name(v) pubblico (name(u) ∈ A o name(u) ∈ C) o privato (name(u) ∈ B). caso pubblico: Senza perdita di generalità assumiamo name(u) ∈ A (l’altro caso è duale). Ciò significa che esistono e, d ∈ E1 tali che subj(Su ) = subj([e)) e subj(Sv ) = subj([e)). Si ha che e µ d: questo vale (per la proprietà 2) e questo conflitto non può essere ereditato perchè altrimenti anche u v lo sarebbe. Poichè E1 è senza confusione, si ha subj(Su ) = subj(Sv ) e come conseguenza immediata della proposizione 4.3.3 si ha Su = Sv come si voleva. caso privato: In questo caso esistono eu , ev ∈ E1 e du , dv ∈ E2 tali che esistono Seu , Sdu , Sev , Sdv tali che • Su = Seu ∪ Sdu , Sv = Sev ∪ Sdv • subj(Seu ) = subj([eu )) , subj(Sdu ) = subj([du )) , subj(Sev ) = subj([ev )) , subj(Sdv ) = subj([dv )). Per considerazione analoghe al caso precedente si ha eu µ ev e du µ dv e per l’assenza di confusione si ha subj(Seu ) = subj(Sev ) e subj(Sdu ) = subj(Sdv ) e come conseguenza della proposizione 4.3.3 si conclude Seu = Sev e Sdu = Sdv che implica Su = Sv come si voleva. 4.5 Composizione senza conflitti In questa sezione si analizzerà la definizione di composizione nel caso in cui le strutture di eventi da comporre siano senza conflitto. In particolare, si riformulerà la definizione di composizione di strutture di eventi, per definire la quale verranno date regole di riscrittura di grafo. Il caso senza conflitto è molto importante perchè, utilizzando una tecnica detta ‘working by slice’ (vedi capitolo 3) è possibile ridurre la composizione globale di strutture di eventi con conflitto alla composizione senza conflitto. 4.5.1 Definizione Definiamo anzitutto la composizione di strutture di eventi tipate senza conflitto. Questo caso è molto semplice e chiaro in quanto le strutture prese in considerazione sono semplici ordini parziali, tuttavia per le ragioni sovraesposte, merita di essere analizzato a fondo. Un concetto chiave molto importante è il seguente: Composizione senza conflitti 73 Se E : A senza conflitto allora tutti gli eventi usano nomi distinti6 In tutta questa sezione si assumerà E1 : A ∪ B ed E2 : B⊥ ∪ C senza conflitti e la loro composizione E1 E2 : A ∪ B± ∪ C anch’essa senza conflitti (si mostra in modo diretto per costruzione). Istanziando la definizione di composizione globale al caso senza conflitti si ottiene la macchina LAM definita nel capitolo 3. Essa può essere descritta per mezzo di un gettone che visita la struttura ad eventi E1 E2 . Quando un’azione privata è raggiunta, per continuare occorre sincronizzarsi con l’azione di polarità opposta. Si osservi, che per costruzione vi può essere una sola di azione sı̀ fatta. Remark 4.5.1. Si osservi che in E1 E2 ogni evento è etichettato con una differente azione polarizzata, quindi è possibile identificare univocamente un evento con l’azione polarizzata con cui è etichettato. La procedura è descritta come segue: 1. Se a ∈ A o a ∈ C e i suoi predecessori sono stati abilitati, allora a è abilitato. Si illustra ciò nella figura qui in basso in cui nodi quadrettati denotano azioni abilitate. → a a 2. se a ∈ B, a+ e a− sono entrambe presenti e i loro genitori abilitati, allora a è abilitato e il grafo è trasformato come segue a a → τa end. I nodi che non sono abilitati si cancellano (garbage collection). Il procedimento descritto sopra genera una nuova struttura di eventi senza conflitti (E, ≤) dove E è un insieme di eventi etichettato con etichette generate dall’interfaccia A ∪ B⊥ ∪ C e con azioni che sono state abilitate. 6 Si osservi che questo fatto è una conseguenza del lemma di iniettività delle configurazioni 74 Strutture di eventi tipate Regole di riscrittura locali La procedura descritta nella sezione precedente può essere riscritta mediante regole di riscrittura di grafo locali, come illustrato nel seguito Private a: 1. There are a, a, parallel → a a τa 2. Otherwise: → a Proposizione 4.5.1 (Church-Rosser). Sia G = (V, E) un grafo generato da un passo intermedio della procedura sopra illustrata. Si supponga G → G1 e G → G2 . Allora esiste G3 tale che G1 → G3 e G2 → G3 . Dimostrazione. Si procede per casi: quello più problematico è il seguente a e b privati G a b a regola 1 su a regola 2 su b G2 τa G1 regola 2 su b b Ma in questo caso basta prendere G3 = G1 e chiaramente G2 → G1 applicando la regola (2.) Composizione senza conflitti Si osservi che a questo punto l’associatività discende come corollario: infatti date E1 : A ∪ B, E2 : B⊥ ∪ C1 ∪ C2 , E3 : C⊥ 2 ∪ D , si ha (E1 E2)E3 = E1 E2E3 Infatti al primo membro si fa anzittto E1 E2 e poi si eseguono le regole di riscrittura di grafo e poi si fa (E1 E2 ) E3 e si eseguono le regole di riscrittura di grafo. Ma ciò posso simularlo anche in E1 E2 E3 : difatti a partire da E1 E2 E3 eseguo le regole di riscrittura di grafo nel medesimo ordine che ho seguito per calcolare E1 E2 e poi faccio lo stesso per termiare il calcolo: la confluenza garantisce l’unicità di E1 E2 E3 qualunque ordine io prenda. Analogamente dimostro E1 (E2E3 ) = E1 E2E3 Quindi ho Corollario 4.5.1 (associatività). Se E1 : A ∪ B, E2 : B⊥ ∪ C1 ∪ C2 , E3 : C⊥ 2 ∪ D, sono tre strutture ad eventi senza conflitti allora (E1 E2 )E3 = E1 E2 E3 = E1 (E2 E3 ) 4.5.2 Lavorare con le slice Cosı̀ come per la composizione delle L-nets, è possibile applicare la tecnica ‘working by slice’ per definire la composizione di strutture di eventi e far vedere che tale definizione è equivalente a quella globale data sopra. Lo scopo principale di tale operazione è quello di provare l’associatività della composizione, che è facile da mostrare slice per slice (corollario 4.5.1). In questa sezione non verranno dati i dettagli per applicare questa tecnica, che sono descritti nel capitolo 3, ma ne verrà descritta la procedura generale allo scopo di convincere il lettore della validità della tecnica. Una struttura di eventi senza confusione E può essere vista come una sovrapposizione di strutture di eventi senza conflitto, ovvero una sovrapposizione di slice. Una slice S di E è un sottoinsieme chiuso verso il basso di E, con l’ordine indotto da E. La tecnica di riduzione consta di tre passi: • scomporre E = Ei nelle sue slice (Ei sono le strutture ad eventi da comporre) • comporre a due a due le slices ottenute • sovrapporre le slice composte cosı̀ ottenute 75 76 Strutture di eventi tipate La proposizione 4.3.3 gioca un ruolo chiave, soprattutto per quanto concerne la sovrapposizione, in quanto permette di utilizzare le stesse tecniche usate in [Gir01, FM05]. L’equivalenza della definizione di composizione cosı̀ ottenuta con la composizione globale sta nel fatto che la composizione globale è di fatto una ‘composizione per slice intelligente’: essa infatti è in grado di unire il passo 2 con il passo 3 effettuando la composizione classica LAM assieme con la duplicazione additiva, cosa che nella composizione per slice viene fatto solo nel passo 3. Si consideri ad esempio le due strutture di eventi raffigurate nella figura sottostante: vi sono due struture di eventi E1 ed E2 costruite in questo modo • E1 è composta da tre sottostrutture senza conflitto S1 , S2 eS3 e si ha che S1 è collegata a S2 e S3 da due nodi in conflitto. • E2 è composta da un un’unica sottostruttura senza conflitto S4 E1 E2 S2 S3 S4 S1 E ora si confrontano le due procedure di composizione (per slice e globale) in questa figura, in cui si ha V1 , V2 , V3 , V4 sottostrutture senza conflitto della struttura composta. Inoltre si assume che i due nodi in conflitto immediato contengano azioni pubbliche. Discussione 77 Composizione per slice E1 E2 S2 Composizione globale S3 S4 S1 passi macchiina astratta slicing S3 S2 V1 S4 S4 S1 S1 V1 V2 composizione slice per slice V1 V3 V2 V1 V2 V1 V1 unione ultimo passo V2 V3 V1 E1 E2 4.6 Discussione In questo capitolo, dunque, si sono descritte le strutture ad eventi senza confusione come strutture generali e versatili, di cui le L-net ne sono un caso particolare. E’ stato definito un typing system per le strutture ad eventi senza confusione e si sono descritte le loro principali proprietà. Inoltre si è definita 78 Strutture di eventi tipate una nozione di composizione che è una generalizzazione della definizione di composizione di L-net. Quindi di fatto in questo capitolo si sono fornite alle strutture di eventi senza confusione tecnologie provenienti dalla semantica dei giochi, in particolare per quel che riguarda la composizione. La composizione di strutture ad eventi senza confusione qui definita, se portata nel contesto semantica dei giochi, è la composizione di L-net. Rimane da controllare che la composizione cosı̀ definita sia effettivamente la composizione di strutture ad eventi senza confusione definita nel capitolo 2. Questo risultato, che è molto importante in quanto completa l’opera di edificazione del ponte fra semantica dei giochi e teoria della concorrenza, è dato nel capitolo successivo. Capitolo 5 Risultati di equivalenza In questa sezione si intende dimostrare l’equivalenza della composizione di strtture di eventi tipate illustrata nel capitolo 4 con la composizione di strutture di strutture di eventi vista nel capitolo 2, in particolare la composizione con occultamento, dove i soggetti che sono dichiarati nascosti sono quelli generati dai nomi comuni dichiarati nelle interfacce. L’equivalenza è stabilita mostrando l’isomorfismo fra le due strutture, ovvero mostrando che esiste una funzione biettiva che preserva e riflette ordine e conflitti: più formalmente, si ha il seguente risultato. Teorema 5.0.1. Siano E1 : A∪B , E2 : B⊥ ∪C due strutture di eventi tipate. Allora E1 E2 ! (ν Subj(B))E1 |E2 La dimostrazione dell’asserto è data nel seguito ed è molto articolata, data la natura differente delle due definizioni in gioco. Essa è strutturata nel modo seguente: • verrà rianalizzata la definizione di composizione con hiding di strutture di eventi senza confusione, riformulandola in un modo ‘più costruttutivo’ • verrà data una definizione di composizone di strutture di eventi tipate che è uno step intermedio fra le due definizioni in gioco. • verrà dimostrato l’isomorfismo della definizione intermedia con la composizione con hiding di strutture di eventi. • verrà dimostrata l’uguaglianza della definizione intermedia con la composizone di struture di eventi tipate. 79 80 Risultati di equivalenza 5.1 Composizione con hiding Siano E1 : A ∪ B, E2 : B⊥ ∪ C due strutture di eventi tipate. Allo scopo di costruire (ν Subj(B))E1|E2 , occorre costruire il prodotto categoriale e poi effettuare delle restrizioni in base alle sincronizzazioni e alla specifica delle azioni nascoste. Questa visione però è abbastanza limitante nel caso in cui occorra studiare nel dettaglio la struttura di eventi composta. Anzitutto occorre capire esattamente quali eventi del prodotto categoriale restano nella struttura composta. A questo scopo, date due strutture ad eventi tipate E1 : A ∪ B ed E2 : B⊥ ∪ C , si definisce la struttura ad eventi Comp(E1 , E2 ) ⊆ E1 × E2 , dove per ogni e ∈ Comp(E1 , E2 ) • se e ≡ (x, e1 , ) allora name(e1 ) ∈ A. • se e ≡ (x, , e2 ) allora name(e2 ) ∈ C. • se e ≡ (x, e1 , e2 ) allora subj(e1 ) = subj(e2 ) con name(e1 ) ∈ B. Si ha la seguente: Proposizione 5.1.1. Siano E1 : A ∪B ed E2 : B⊥ ∪C due strutture ad eventi tipate. Allora (ν Subj(B))E1 |E2 = Comp(E1 , E2) Dimostrazione. Per dimostrare l’asserto basta far vedere che l’insieme degli eventi delle due strutture sono uguali, in quanto entrambi sono sottostrutture del prodotto categoriale. Siano dunque EComp(E1 ,E2 ) ed E(ν Subj(B))E1 |E2 gli insiemi di eventi delle rispettive strutture di eventi. Si dimostra la doppia inclusione: EComp(E1 ,E2 ) ⊆ E(ν Subj(B))E1 |E2 : Sia (x, e1 , e2 ) ∈ EComp(E1 ,E2 ) : esso appartiene a E(ν Subj(B))E1 |E2 in quanto per costruzione, la coppia (e1 , e2 ) è in grado di sincronizzarsi (anche nel caso e1 , e2 = si ha name(x, e1 , e2 ) ∈ B ma la polarità dell’azione associata è per costruzione ±). Inoltre sempre per costruzione non vi è nessun (x, e1 , ) o (x, , e2 ) con name(ei ) ∈ B e dunque anche nessun evento al di sopra di un evento sı̀ fatto, e quindi si conclude. E(ν Subj(B))E1 |E2 ⊆ EComp(E1 ,E2 ) : Sia e ∈ E(ν Subj(B))E1 |E2 : si hanno tre casi • e ≡ (x, e1 , ): in questo caso si ha subj(x, e1 , ) ∈ Subj(B) per costruzione e poiche e1 appare nella prima componente deve essere subj(x, e1 , ) ∈ Subj(A), il che implica name(e1 ) ∈ A come si voleva. Composizione con hiding • e ≡ (x, , e2 ): duale al caso precendente. • e ≡ (x, e1 , e2 ): in questo caso si ha subj(x, e1 , e2 ) ∈ Subj(B) con polarità dell’azione neutra (±). Ciò puo accadere solo se subj(e1 ) = subj(e2 ) e π(e1 ) = −π(e2 ) che è ciò che si voleva E’ utile tuttavia avere una definizione più strutturata di Comp(E1 , E2 ), la quale è derivata direttamente dalla procedura di costruzione del prodotto categoriale, allo scopo di sfruttare la nozione di induzione sull’altezza dell’elemento. Date E1 = E1 , ≤1 , 1, λ1 : A ∪ B ed E2 = E2 , ≤2 , 2 , λ2 : B⊥ ∪ C, ottenuto come soluzione iniziale dell’equazione X = si consideri l’insieme E Pf in (X) × E1 × E2 . I suoi elementi hanno la forma (x, e1 , e2 ) con x finito, nel modo Si definisce Comp(E1 , E2 ) = E, ≤, , λ con E ⊆ E x ⊆ E. seguente per induzione sull’altezza di e ∈ E: caso base: 1. (∅, e1 , ∗) ∈ E se name(e1 ) ∈ A e minimale in E1 2. (∅, ∗, e2) ∈ E se name(e2 ) ∈ C è minimale in E2 3. (∅, e1 , e2 ) ∈ E se e1 , e2 sono minimali, con name(e1 ) = name(e2 ) ∈ B e tali che subj(e1 ) = subj(e2 ) Gli elementi di altezza 0 non sono confrontabili. Infine, per il conflitto, si ha (∅, e1 , e2 ) (∅, d1 , d2 ) se e1 1 d1 o e2 2 d2 passo induttivo: Assumendo che tutti gli elementi di altezza ≤ n siano stati definiti, sia (x, e1 , e1 ) di altezza n+1. Sia y l’insieme degli elementi massimali di x e siano y1 = {d1 ∈ E1 |(x, d1 , d2 ) ∈ y} e y2 = {d2 ∈ E2 |(x, d1, d2 ) ∈ y}. Si ha che (x, e1 , e2 ) ∈ E se x è chiuso verso il basso e (privo di conflitti) e 1. si supponga e1 ∈ E1 e e2 ≡ ∗: allora name(e1 ) ∈ A e y1 = parents(e1 ) 2. si supponga e2 ∈ E2 e e1 ≡ ∗: allora name(e2 ) ∈ C e y2 = parents(e2 ) 3. si supponga e1 ∈ E1 e e2 ∈ E2 : allora: (a) (b) (c) (d) name(e1 ) = name(e2 ) ∈ B e tali per cui subj(e1 ) = subj(e2 ) se (z, d1 , d2 ) ∈ y allora d1 ∈ parents(e1 ) o d2 ∈ parents(e2 ) per ogni d1 ∈ parents(e1 ), esiste (z, d1 , d2 ) ∈ x per ogni d2 ∈ parents(e2 ), esiste (z, d1 , d2 ) ∈ x 81 82 Risultati di equivalenza 4. Siano x1 = {d1 ∈ E1 |(z, d1 , d2 ) ∈ x} e x2 = {d2 ∈ E2 |(z, d1 , d2 ) ∈ x}. Allora per nessun d1 ∈ x1 e d2 ∈ x2 ho che d1 e1 o d2 e2 L’ordine parziale è esteso con e ≤ (x, e1 , e2 ) se e ∈ x o e = (x, e1 , e2 ). Si noti che se e < e allora h(e) < h(e ). Infine, per i conflitti si prenda e = (x, e1 , e2 ) e d = (z, d1 , d2 ) dove o h(e) = n + 1, o h(d) = n + 1 o entrambi. Allora si ha e d se vale una delle seguenti: • e1 1 d1 o e2 2 d2 con e = d • esiste un e = (x , e1 , e2 ) ∈ x tale che e1 1 d1 o e2 2 d2 e e = d • esiste un d = (z , d1, d2 ) ∈ z tale che d1 1 e1 o d2 2 e2 e e = d • esiste un e ∈ x , d ∈ z tali che e d Tenendo conto del fatto che, per la proposizione 4.3.1, E1 ed E2 sono strutture di eventi senza confusione, la condizione 4 è ridondante: infatti non è mai il caso che esista d1 ∈ x1 tale che d1 e1 e lo stesso per x2 ; si supponga infatti che sia il caso, ovvero che esista d1 ∈ x1 tale d1 e1 : allora, a causa della chiusura verso il basso di x e per il fatto che µ è cellulare, non si può avere d1 µ e1 , quindi il conflitto non è immediato ma è ereditato da un altro conflitto. Quindi esistono d1 ∈ d1 , e1 ∈ e1 tali che e1 µ d1 . Senza perdita di generalità si assume e1 = e1 . Dunque e1 ∈ h1 ∈parents(e1 ) h1 ⊆ x1 ; si noti anche che d1 ⊆ x1 . Questo significa che ci sono due elementi in x1 che sono in conflitto, ma questo contraddice il fatto che x1 sia senza conflitto. 5.2 Composizione di strutture di eventi tipate In questa sezione si fornirà una definizione di composizione che costituisce un passo intermedio fra le due definizioni sulle quali si vuole dimostrare l’equivalenza. Tale composizione, date due strutture di eventi tipate, fornisce una coppia dove la prima componente è la struttura di eventi composta, mentre la seconda componente è una funzione di etichettatura che assegna a ciascun evento della struttura di eventi composta gli eventi delle strutture di eventi di partenza dai cui quell’evento ‘proviene’. Più formalmente, date due strutture di eventi tipate E1 = E1 , ≤1 , 1 , λ1 : A∪B ed E2 = E2 , ≤2 , 2 , λ2 : B⊥ ∪C si definisce Int(E1 , E2 ) = E, ϕ dove E = E, ≤, , λ è una struttura di eventi e ϕ : E → (E1 + {e1 }) × (E2 + {e2 }) è una funzione di etichettatura. Si introdurrà qui la notazione nel seguito utilizzata: Composizione di strutture di eventi tipate 83 • Dato e ∈ E tale che πi (ϕ(e)) = ei 1 , si definisce e Ei = πi (ϕ(e)). • Dato S ⊆ E, tale che per ogni s ∈ S, s Ei è definito, si definisce S Ei = {s Ei |s ∈ S}. La struttura composta è definita ricorsivamente nel seguente modo: 1. Sia e ∈ Ei tale che name(e) ∈ A (risp C). Si assuma S ⊆ E soddisfacente le seguenti proprietà: condizione etichettata sui genitori: S Ei = parents(ei ) condizione etichettate sui conflitti: S è un insieme senza conflitti In questo caso si ha evento: v ∈ E nuovo evento con λ(v) = λ(ei ) e ϕ(v) = (e, e2 ) se i = 1 (e1 , e) se i = 2 ordine: per tutti i vi ∈ S si pone vi ≤ v conflitti: • per tutti i d ∈ E tali che d Ei ei si pone d v • per tutti i d1 d2 con d1 ≤ v, si pone v d2 2. Siano e1 ∈ E1 , e2 ∈ E2 tali che name(e1 ), name(e2 ) ∈ B e subj(e1 ) = subj(e2 ) = b. Sia S = S1 ∪ S2 ⊆ E soddisfacente le seguenti condizione etichettata sui genitori: S1 E1 = parents(e1 ) e S2 E2 = parents(e2 ). condizione etichettata sui conflitti: S è un insieme senza conflitti. In questo caso si ha: evento: v ∈ E nuovo evento con λ(v) = b± e ϕ(v) = (e1 , e2 ) ordine: per ogni vi ∈ S si pone vi ≤ v conflitti: • per ogni d ∈ E tale che d E1 1 e1 o d E2 2 e2 si pone vd • per tutti i d1 d2 con d1 ≤ v, si pone v d2 Un lemma importante sulla composizione cosı̀ definita è il seguente: Lemma 5.2.1 (stabilità). Siano u, v ∈ E distinti tali che ϕ(u) = ϕ(v). Allora esistono u ∈ u , v ∈ v tali che u v e ϕ(u ) = ϕ(v ) 1 Qui si usa π come funzione di proiezione nelle coppie 84 Risultati di equivalenza Dimostrazione. Il lemma si dimostra per induzione sulla grandezza congiunta di u , v . Il caso base è vacuamente vero. Siano u = v con ϕ(u) = ϕ(v) = (e1 , e2 ). Poichè u e v sono insiemi chiusi verso il basso, essi coincidono se e solo se l’insieme degli elementi massimali coincidono (si denota con yu e yv i rispettivi insiemi di elementi massimanli). Dunque esiste u ∈ yu con ϕ(u) = (d1 , d2 ) tale che u ∈ yv . Per la condizione sui genitori etichettati e senza perdita di genralità si può assumere d1 ∈ parents(e1 ). Quindi sempre per la condizione sui genitori etichettati esiste v ∈ v con ϕ(v ) = (d1 , d2 ). Se d2 = d2 allora sono proprio u e v gli eventi cercati e si noti che u v . Altrimenti si applica l’ipotesi induttiva a u ⊂ u e v ⊂ v e si conclude. Dato S ⊆ E, si definisce ϕ(S) = {ϕ(s)|s ∈ S}. Un’ulteriore lemma importante è inoltre il seguente: Lemma 5.2.2 (iniettività sulle confiugurazioni). Sia S ⊆ E un insieme senza conflitto e siano s, s ∈ S tali che ϕ(s) = ϕ(s). Allora s = s Dimostrazione. Siano s, s ∈ S con ϕ(s) = ϕ(s). Si supponga per assurdo s = s . Ma allora per la condizione sui conflitti si ha s s contro l’ipotesi che S sia senza conflitti. Dati i due lemmi precedenti, è possibile ricavare un risultato analogo rispetto a quello esposto nella sezione 4.3.1: si ha dunque il seguente Corollario 5.2.1. Siano e, e ∈ E distinti. Allora ϕ(e ) = ϕ(e ). 5.3 Risultato di isomorfismo In questa sezione si mostrerà che la struttura di eventi composta precedente è isomorfa alla struttura definita nella prima sezione. Per non appesantire la notazione, nel seguito non si distinguerà più l’ordine,il conflitto e l’etichettatura di diverse strutture di eventi e si utilizzerà sempre la medesima notazione che è ripsettivamente ≤, e λ. Proposizione 5.3.1 (isomorfismo). Siano E1 : A ∪ B ed E2 : B⊥ ∪ C due strutture di eventi tipate. Siano Comp(E1 , E2 ) la struttura ad eventi composta ottenuta dalla definizione in sezione 5.1. Sia Int(E1 , E2 ) la struttura ad eventi composta con la funzione di etichettatura ϕ ottenuta dalla definizione in sezione 5.2. Allora esiste una funzione biettiva f : Comp(E1 , E2 ) → Int(E1 , E2 ) soddisfacente le seguenti proprietà: Risultato di isomorfismo riflessione e preservazione dell’ordine: ∀e, e ∈ Comp(E1 , E2), e ≤ e ⇐⇒ f (e) ≤ f (e ) riflessione e preservazione dei conflitti: ∀e, e ∈ Comp(E1 , E2), e e ⇐⇒ f (e) f (e ) preservazione dell’etichettaggio: ∀e ∈ Comp(E1 , E2), λ(e) = λ(f (e)) Dimostrazione. Si definisce f : Comp(E1 , E2 ) → Int(E1 , E2) per induzione sull’altezza di e ∈ Comp(E1 , E2 ) caso base: f (∅, e1 , e2 ) = v ∈ Int(E1 , E2 ) : ϕ(v) = (e1 , e2 ) passo induttivo: f (X, e1 , e2 ) = v ∈ Int(E1 , E2 ) : ϕ(v) = (e1 , e2 ) e {f (x)|x ∈ X} ∪ {v} = v Per dimostrare l’isomorfismo, f deve essere ben definita, iniettiva, suriettiva e devono valere le tre condizioni suddette. buona definizione: Sia e ∈ Comp(E1 , E2 ). Si mostrerà f (e) ∈ Int(E1 , E2 ) per induzione sull’altezza di e. caso h = 0: Posti e1 ∈ E1 , e2 ∈ E2 , si hanno i seguenti casi • e ≡ (∅, e1 , e2 ): allora si ha name(e1 ) ∈ A e parents(e1 ) = ∅ e dunque applicando il caso 1 della procedura esiste v ∈ Int(E1 , E2 ) con ϕ(v) = (e1 , e2 ). Tale v è unico per il corollario 5.2.1 e dunque si ha f (∅, e1, e2 ) = v • e ≡ (∅, e1 , e2 ): simmetrico al precedente. • e ≡ (∅, e1 , e2 ): allora si ha name(e1 ), name(e2 ) ∈ B, subj(e1 ) = subj(e2 ) e parents(e1 ) = parents(e2 ) = ∅ e dunque applicando il caso 2 della procedura v ∈ Int(E1 , E2 ) con ϕ(v) = (e1 , e2 ). Tale v è unico per il corollario 5.2.1 e dunque si ha f (∅, e1 , e2 ) = v caso h = n + 1: Posti e1 ∈ E1 , e2 ∈ E2 , si hanno i seguenti casi 85 86 Risultati di equivalenza • e ≡ (X, e1 , e2 ): allora si ha name(e1 ) ∈ A e, posto Y l’insieme degli elementi massimali di X e Y1 = {d1 |(z, d1 , d2 ) ∈ Y }, Y1 = parents(e1 ) dove Y1 = {d1 |(z, d1 , d2 ) ∈ Y } (5.1) (5.2) Per ipotesi induttiva si ha f (Y ) ⊆ Int(E1 , E2 ). Inoltre per 5.1 si ha f (Y ) E1 = parents(e1 ). Inoltre è un insieme senza conflitti per costruzione. Dunque applicando il caso 1 della procedura esiste v ∈ Int(E1 , E2 ) tale che ϕ(v) = (e1 , e2 ). Inoltre per costruzione v = {f (x)|x ∈ X} ∪ {v} e tale v è unico per il corollario 5.2.1. Dunque f (X, e1 , e2 ) = v. • e ≡ (X, e1 , e2 ): simmetrico al caso precendente. • e ≡ (X, e1 , e2 ): allora si ha name(e1 ), name(e2 ) ∈ B, subj(e1 ) = subj(e2 ). Inoltre per costruzione esiste S ⊆ X tale che per ogni (z, d1 , d2 ) ∈ S, d1 ∈ parents(e1 ) o d2 ∈ parents(e2 ). Si ponga dunque S = {(z, d1 , d2 ) ∈ S|d1 ∈ parents(e1 )} ed S = {z, d1 , d2 ) ∈ S|d2 ∈ parents(e2 )}. Si noti che S1 = parents(e1 ) e S2 = parents(e2 )(5.3) dove S1 = {d1 |(z, d1 , d2 ) ∈ S } e S2 = {d2 |(z, d1 , d2 ) ∈ S }(5.4) Quindi per ipotesi induttiva f (S ) ∪ f (S ) ⊆ Int(E1 , E2 ). Inoltre per 5.3 vale la condizione etichettata sui genitori (quella sul conflitto vale per costruzione) e dunque esiste v ∈ Int(E1 , E2 ) tale che ϕ(v) = (e1 , e2 ). Inoltre per costruzione v = {f (x)|x ∈ X} ∪ {v} e tale v è unico per il corollario 5.2.1. Dunque f (X, e1 , e2 ) = v. iniettività: Vera in quanto due eventi che hanno predecessori uguali sono uguali per costruzione. suriettività Sia v ∈ Int(E1 , E2 ). Occorre dimostrare che esiste e ∈ Comp(E1 , E2) tale che f (e) = v, per induzione sui passi della procedura. Vi sono due casi: v generato dal passo 1: In questo caso vi sono due sottocasi, ovvero ϕ(v) = (e1 , e2 ) con e1 ∈ E1 e name(e1 ) ∈ A oppure ϕ(v) = (e1 , e2 ) con e2 ∈ E2 e name(e2 ) ∈ C. Verrà sviluppato solo il primo caso in quanto il secondo è simmetrico rispetto al primo. In questo caso esiste S ⊆ Int(E1 , E2 ) tale che S E1 = parents(e1 ). Poiche Risultato di isomorfismo 87 tali elementi sono stati generati in un passo precedente è possibile applicare su di essi l’ipotesi induttiva, pertanto per ogni s ∈ S esiste es ∈ Comp(E1 , E2 ) tale che f (es ) = s. Si denota con Y = {es ∈ Comp(E1 , E2 )|f (es ) = s, s ∈ S} l’insieme di questi elementi. Si noti che per costruzione Y1 = {d1 |(z, d1 , d2) ∈ Y } = parents(e1 ): quindi da qui è possibile costruire l’evento (Y , e1 , e2 ) ∈ Comp(E1 , E2 ) che è l’evento cercato in quanto f (Y , e1 , e2 ) = v. v generato dal passo 2: In questo caso si ha ϕ(v) = (e1 , e2 ) con e1 ∈ E1 , e2 ∈ E2 , name(e1 ), name(e2 ) ∈ B e subj(e1 ) = subj(e2 ). In questo caso esistono S1 , S2 ⊆ Comp(E1 , E2 ) tali che Si Ei = parents(ei ). Poichè tali elementi sono stati generati in un passo precedente è possibile applicare su di essi l’ipotesi induttiva, pertanto per ogni si ∈ Si esiste un esi tale che f (esi ) = si . Si denota con Xi = {esi ∈ Comp(E1 , E2 )|f (esi ) = si , si ∈ Si }. Si costruisca l’insieme X1 ∪ X2 ; si noti che per costruzione valgono: • se Y è l’insieme degli elementi massimali di X1 ∪ X2 allora per ogni (z, d1 , d2) ∈ Y , d1 ∈ parents(e1 ) o d2 ∈ parents(e2 ) • per ogni d1 ∈ parents(e1 ) esiste (z, d1 , d2 ) ∈ X1 ∪ X2 • per ogni d2 ∈ parents(e2 ) esiste (z, d1 , d2 ) ∈ X1 ∪ X2 Da qui è possibile costruire l’evento (X1 ∪ X2 , e1 , e2 ) ∈ Comp(E1 , E2 ). Si noti che f (X1 ∪ X2 , e1 , e2 ) = v come si voleva. riflessione e preservazione dell’ordine: Siano (x, e1 , e2 ) ≤ (z, d1 , d2 ) ∈ Comp(E1 , E2 ). Vi sono due casi: • (X, e1 , e2 ) = (Z, d1, d2 ): in questo caso si conclude in modo banale. • (X, e1 , e2 ) ∈ Z. In questo caso si ha f (z, d1 , d2 ) = v tale che v = {v} ∪ {f (z)|z ∈ Z} e da qui si conclude. L’altra direzione vale banalmente per costruzione. riflessione e preservazione del conflitto: Siano (x, e1 , e2 ) (z, d1 , d2 ) ∈ Comp(E1 , E2 ). Si hanno i seguenti casi • e1 d1 o e2 d2 con e = d: in questo caso è immediato che f (x, e1 , e2 ) f (z, d1 , d2 ). • esiste un e = (x , e1 , e2 ) ∈ x tale che e1 1 d1 o e2 2 d2 e e = d: in questo caso f (x , e1 , d1 ) f (z, d1 , d2 ) e poichè (x , e1 , e2 ) ≤ (x, e1 , e2 ) si conclude per ereditarietà dei conflitti. 88 Risultati di equivalenza • esiste un d = (z , d1, d2 ) ∈ z tale che d1 1 e1 o d2 2 e2 e e = d : analogo al precedente. • esiste un e ∈ x , d ∈ z tali che e d : analogo al precedente Nell’altra direzione, siano u = f (x, e1 , e2 ) v = f (z, d1 , d2 ).Si procede per induzione sui passi dell’algoritmo con i seguenti casi: • e1 d1 o e2 d2 : immediato • esiste u v con u ≤ u: per suriettività esiste e ∈ Comp(E1 , E2 ) tali che f (e) = u . Per ipotesi induttiva si ha e (z, d1 , d2 ). Per riflessione dell’ordine si ha e ≤ (x, d1 , d2 ) e si conclude per ereditarietà. preservazione dell’etichettaggio Vera per costruzione. 5.4 Risultato di equivalenza In questa sezione si dimostrerà l’equivalenza della composizione illustrata nella sezione 4.4 con la composizione di strutture di eventi tipate illustrata nel capitolo 4. Si intende qui mostrare che le strutture generate dalle due definizioni in realtà sono la stessa: per fare ciò si mostrerà che quando viene aggiunto un evento alla struttura di eventi composta usando una definizione, il medesimo evento viene aggiunto utilizzando l’altra definizione. Si hanno dunque i seguenti: Lemma 5.4.1. Sia S ⊆ Int(E1 , E2 ) senza conflitti e sia ei ∈ Ei. Se subj(S) = subj(e1 ) allora esiste t ∈ S tale che t Ei = ei Dimostrazione. Conseguenza immediata del corollario 5.2.1 e della proposizione 4.3.3. Proposizione 5.4.1. Siano E1 : A ∪ B ed E2 : B⊥ ∪ C due strutture di eventi tipate. Sia v ∈ E1 E2 . Allora v ∈ Int(E1 , E2 ). Dimostrazione. La prova è per induzione sui passi della procedura. Sia v ∈ E1 E2 : esso è stato generato utilizzando il caso 1. in questo caso name(v) ∈ A o name(v) ∈ C: si sviluppa solo il caso name(v) ∈ A poiché l’altro è duale. In questo caso esiste e1 ∈ E1 tale che λ(e1 ) = λ(v) ed esiste S ⊆ E1 E2 tale che subj([e1 )) = subj(S). Per ipotesi induttiva si ha S ⊆ Int(E1 , E2 ). Si mostrerà nel seguito che Risultato di equivalenza 89 esiste S ⊆ S soddisfacente la condizione sui genitori etichettate e sui conflitti da cui segue v ∈ Int(E1 , E2 ) e si mostrerà che S = S . Si noti anzitutto che [e1 ) = d d∈parents(e1 ) che implica subj([e1 )) = subj(d ) d∈parents(e1 ) = subj(S) Quindi esitono S1 , . . . , Sn ⊆ S (n = |parents(e1 )|) tali che n i=1 subj(Si ) = subj(d ) d∈parents(e1 ) = subj(S) di ∈ parents(e1 ) i ∈ {1, . . . , n} con subj(Si ) = subj(di ) Per il lemma 5.4.1 esiste ui ∈ Si tale che ui E1 = di per ogni i. Quindi si ha che S = {ui|i ∈ {1, . . . , n}}. S è senza conflitti per la proposizione 4.3.5. Infine si noti che per costruzione si ha S = S . 2. in questo caso name(v) ∈ B: quindi esistono e1 ∈ E1 , e2 ∈ E2 tali che subj(e1 ) = subj(e2 ) = subj(v) ed esistono S1 , S2 ⊆ E1 E2 tali che subj([e1 )) = subj(S1 ) e subj([e2 )) = subj(S2 ). Per ipotesi induttiva S1 , S2 ⊆ Int(E1 , E2) e utilizzando argomenti analoghi al caso precedente si costruiscono S1 , S2 cercati. Proposizione 5.4.2. Siano E1 : A ∪ B ed E2 : B⊥ ∪ C due strutture di eventi tipate. Sia v ∈ Int(E1 , E2 ). Allora v ∈ E1 E2 . Dimostrazione. La prova è per induzione sulla costruzione di Int(E1 , E2 ). Si hanno due casi: 1. in questo caso v ∈ Int(E1 , E2) con name(v) ∈ A o name(v) ∈ C. Si sviluppa solo il caso name(v) ∈ A in quanto l’altro è duale. Quindi esiste e1 ∈ E1 tale subj(e1 ) = subj(v) ed esiste S ⊆ Int(E1 , E2) tale che S E1 = parents(e1 ). Per ipotesi induttiva S ⊆ E1 E2 e questo significa che per ogni s ∈ S esiste d ∈ parents(e1 ) tale che esiste Vs ⊆ [s) tale 90 Risultati di equivalenza che subj(Vs ) = subj([d)). Quindi si costruisce S = s∈S Vs ∪ {s} e per costruzione si ha subj(S ) = subj([e1 )) come si voleva. Inoltre esso è senza conflitti per la proposizione 5.4.3. Infine si noti, sempre per costruzione che S = S . 2. in questo caso v ∈ Int(E1 , E2) con name(v) ∈ B. Quindi esistono e1 ∈ E1 , e2 ∈ E2 tali che subj(e1 ) = subj(e2 ) = subj(v) ed esistono S1 , S2 ⊆ Int(E1 , E2 ) tali che S1 E1 = parents(e1 ) ed S2 E2 = parents(e2 ). Per ipotesi induttiva S1 , S2 ⊆ E1 E2 e si costruiscono S1 , S2 utilizzando argomenti analoghi al caso precedente. Le proposizioni precedenti permettono di mostrare che le due strutture di eventi composte sono uguali rispetto all’insieme degli eventi e all’ordine che su di essi è definito: occorre mostrare che anche le due relazioni di conflitto sono equivalenti. Si denotano con Int e la relazioni di conflitto definite ripsettivamente in Int(E1 , E2) e E1 E2 . Si ha la seguente: Proposizione 5.4.3. v1 Int v2 ⇐⇒ v1 v2 Dimostrazione. Si dimostra la doppia implicazione: (⇒): per induzione sulla definizione di v1 Int v2 . • v1 Int v2 perchè v1 Ei = e1 v2 Ei = e2 . Poichè Ei è tipata allora vale uno dei seguenti – name(e1 ) = name(e2 ) e allora conseguentemente name(v1 ) = name(v2 ) e si conclude – esistono e1 ≤ e1 , e2 ≤ e2 tali che name(e1 ) = name(e2 ). Ma allora per costruzione esistono v1 ≤ v1 , v2 ≤ v2 tali che name(v1 ) = name(v2 ) e si conclude. • v1 Int v2 perchè esiste v1 ≤ v1 tale che v1 Int v2 . Per ipotesi induttiva si ha v1 v2 e si conclude per ereditarietà. (⇐): Sia v1 v2 : allora si hanno due casi • name(v1 ) = name(v2 ). Ma allora per costruzione v1 Ei v2 Ei • esistono v1 ≤ v1 , v2 ≤ v2 tali che name(v1 ) = name(v2 ). Ma allora per costruzione v1 Ei v2 Ei e si conclude per eriditarietà. Discussione 5.5 Discussione Con questo capitolo, si chiude il cerchio attorno alle strutture di eventi tipate, mostrando che la definizione di composizione data è equivalente alla composizione di strutture di eventi definita nel capitolo 2. L’intenzione qui è quella di esporre la portata di questo risultato: infatti, dopo tutte le analisi e le considerazioni fatte nei capitoli 4 e 5, è stata definita una struttura generale e versatile, la quale ‘vive’ in due differenti ambiti: teoria della concorrenza: dove essa incarna le strutture ad eventi senza confusione e la composizione data qui è la composizione di strutture ad eventi senza confusione. semantica dei giochi: dove essa incarna le L-net e la composizione data qui è la normalizzazione delle L-net definita in [FM05]. Dunque è possibile utilizzare questa struttura generale come mezzo di trasferimento di tecnologie da un ambito ad un ambito all’altro: in particolare questo trasferimento inizierà già nel prossimo capitolo dove verrà dato un modello a strutture ad eventi tipate per un frammento di CCS, detto CCS polarizzato. 91 92 Risultati di equivalenza Capitolo 6 CCS polarizzato In questo capitolo si introdurrà una forma di calcolo dei processi che può essere identificato in un frammento di CCS di R. Milner. Questo calcolo sarà utilizzato come linguaggio di riferimento per darne una codifica a strutture di eventi tipate , il quale verrà impostato al termine di questo capitolo. Le modifiche principali del linguaggio, che nel seguito si chiamerà CCS polarizzato, rispetto al CCS standard sono le seguenti e sono introdotte allo scopo di facilitarne uno studio attraverso le strutture ad eventi senza confusione: polarizzazione: la scelta non deterministica, resa dall’operatore +, è data in forma prefissa con azioni che sono tutte della medesima polarità. uso controllato degli operatori di parallelo e restrizione: l’operatore di parallelo fra processi è utilizzato in modo controllato assieme all’operatore di restrizione in modo da mettere in evidenza i soggetti su cui i processi in questione si sincronizzeranno. mancanza dell’operatore di ricorsione. Questo frammento si ispira a NCCS, introdotto in [VY06], come passo intermedio per la codifica di un frammento di π-calcolo in strutture di eventi, il quale riporta fra le sue caratteristiche gli stessi aspetti sopra citati. Inoltre, un’altra affinità di CCS polarizzato con NCCS è la nozione di equivalenza strutturale di processi che non prevede nessuna nozione di α-equivalenza. Questo aspetto è molto importante e verrà chiarito nel seguito. Tuttavia CCS polarizzato differisce da NCCS per due aspetti 1. le azioni di NCCS sono costruite in modo da riferirsi ad una precisa arena e costituire una sequenza giustificata stile semantica dei giochi, mentre le azioni di CCS polarizato sono meno strutturate in quanto esse non si riferiscono a nessuna arena in particolare. 93 94 CCS polarizzato 2. in NCCS è previsto un costrutto per effettuare la replicazione dei processi, mentre in CCS polarizzato ciò non è realizzato. Il capitolo si articolrerà come segue: inizialmente verrà definito il linguaggio con le relative regole di transizione etichettata e la nozione di equivalenza strutturale. Dopo di che verrà formalizzato il concetto di equivalenza osservazionale definendo la nozione di bisimulazione. Succssivamente verrà introdotto un sistema di tipi per CCS polarizzato il quale serve per garantire che la codifica in strutture di eventi tipate sia ben definito. Infine si costruirà il modello in strutture di eventi tipate per il quale si dimostrerà la correttezza. 6.1 Definizioni, regole di transizione etichettata In questa sezione verrà introdotto CCS polarizzato. Posto N un insieme di nomi, I, J insiemi di indici, ∈ Π, la sintassi è la seguente: α ::= P ::= | | | ai con a ∈ N, i ∈ I α con ∈ {+, −, ±} j∈J αj .Pj P1 |P2 (νX)P 0 azioni non polarizzate azioni polarizzate somma prefissata operatore di parallelo restrizione con X ⊆ N zero Dato un processo P , si definiscono f n(P ) ⊆ N per induzione sulla struttura di P : • f n(0) = ∅ • f n( i∈I ai .Pi ) = {a} ∪ i∈I f n(Pi ) • f n(P |Q) = f n(P ) ∪ f n(Q) • f n((νX)P ) = f n(P ) \ X Sui processi generati dalla sintassi è definita una relazione di congruenza strutturale ≡ cosı̀ definita: 1. α .P + β .Q ≡ β .Q + α .P Definizioni, regole di transizione etichettata 2. P |0 ≡ P, P |Q ≡ Q|P, P |(Q|R) ≡ (P |Q)|R 3. (νX)(P |Q) ≡ P |(νX)Q se f n(P ) ∩ X = ∅ (νX)0 ≡ 0, (νX)(νY )P ≡ (νX ∪ Y )P La congruenza strutturale qui definita è uguale alla definizione standard eccetto per il fatto che non è ammesso nessun tipo di α-equivalenza. Questo aspetto è molto importante in quanto, se l’operatore ν ha il compito di stabilire quali soggetti sono da dichararsi privati, effettuare il renaming significa cambiare i soggetti (ovvero le azioni non polarizzate) da rendersi privati. Tenendo conto di ciò, si ha la seguente semantica operazionale, data in forma di LTS (sumj ) αj α .P → P j i∈I i i (a,i) P → P (a,i) (νX)P → (νX)P (pub) a ∈ X, ∈ {+, −} (a,i)± P → P (priv) (a,i)± (νX)P → (νX)P a∈X α P1 → P1 α P1 |P2 → P1 |P2 (par − l) α P2 → P2 α P1 |P2 → P1 |P2 α (par − r) α− P1 → P1 , P2 → P2 α± P1 |P2 → P1 |P2 6.1.1 (sync) Bisimulazione Occorre formalizzare una nozione di equivalenza osservazionale di due o più processi che descrivono sistemi. Intuitivamente due processi sono osservazionalmente equivalenti se si comportano allo stesso modo, ovvero essi si evolvono in egual maniera. Se un processo esegue una determinata azione e 95 96 CCS polarizzato raggiunge uno stato allora anche l’altro processo esegue la stessa azione e raggiunge uno stato comparabile con quello raggiunto dal processo precedente. Più formalmente si ha la seguente: Definitione 6.1.1 (bisimulazione). Sia R una relazione binaria simmetrica fra processi. Si dice che R è una bismulazione se è soddisfatta la seguente α α • nel caso P RQ e P → P allora esiste Q tale che Q → Q e P RQ Due processi P e Q si dicono bismili e si scrive P ∼ Q se esiste una bisimulazione che li contiene. Si noti che, in base alla definizione data qui sopra, la relazione di bisimiarità gode delle seguenti proprietà • ∼ è l’unione di tutte le relazioni di bisimulazione • ∼ è una bisimulazione • ∼ è una relazione di equivalenza 6.2 Typing system In questa sezione si introdurrà un typing system per CCS lineare polarizzato. Esso si ispira al typing system lineare dato in [VY06] e garantisce in particolare le stesse proprietà di confluenza e non determinismo localizzato, necessarie per poterlo modellare in strutture di eventi tipate. Si hanno CAPABILITIES σ, τ ::= +| − |± ENVIRONMENTS/INTERFACCE ∆, Γ ::= ∅|a1 : τ1 , a2 : τ2 . . . ai ∈ N L’insieme delle capabilities è denotato con C = {+, −, ±}. Per non appesantire la notazione, si è deciso di utilizzare la stessa notazione per denotare capabilities e polarità delle azioni: ovviamente ∈ C è inteso come capability se usato in un ambiente, mentre è inteso come polarità se usato in una azione. Sulle capabilities è definita l’operazione di dualizzazione (τ ), dove + = − e − = + e indefinita per ±. Inoltre sui type environment sono definite le seguenti operazioni: dualizzazione (Γ): Typing system 97 • ∅=∅ • Γ , a : τ = Γ , a : τ neutralizzazione (Γ± ): • ∅± = ∅ • (Γ , a : τ )± = Γ± , a : ± Si hanno le seguenti regole di buona costruzione dei type environment ∅$ (empty) Γ $ a ∈ Dom(Γ) (single) Γ, a : τ $ Dato un environment Γ $, l’insieme dei nomi che vi appaiono si denota con Dom(Γ). Se Γ ≡ Γ , a : τ , si denota Γ(a) = τ . Dati due environment ∆ $ e Γ $ essi si dicono disgiunti se Dom(∆) ∩ Dom(Γ) = ∅ Lemma 6.2.1 (unione). Siano Γ $ e ∆ $ disgiunti. Allora Γ, ∆ $. Dimostrazione. Per induzione sul giudizio Γ $ caso (empty): Allora si conclude immediatamente caso (single): In questo caso Γ = Γ , a : τ e Γ$ diretta conseguenza di Γ $ e a ∈ Dom(Γ ). Poichè Γ e ∆ sono disgiunti, anche Γ e ∆ lo sono e dunque si può applicare l’ipotesi induttiva e si ha Γ , ∆$. Inoltre per il fatto a ∈ Dom(Γ ) e poiche Γ e ∆ sono digiunti, si ha a ∈ Dom(Γ , ∆) e dunque si può applicare la regola (single) per concludere a : τ, Γ , ∆ $ come si voleva Lemma 6.2.2. Sia Γ $. Allora • Γ$ • Γ± $ Dimostrazione. Diretto per induzione sul giudizio Γ $. 98 CCS polarizzato Sia Γ $ e sia α con α = (a, i) un’azione polarizzata. Si dice che Γ autorizza α se Γ(a) = . Le regole di typing dei processi sono le seguenti 0∆ zero P ∆ . . . Pn ∆ n 1 sum i=1 (a, i) .Pi a : , ∆ Con ∆ $ e a ∈ Dom(∆). P Γ, Ξ Q Ξ, ∆ X = Dom(Ξ) comp (νX)P |Q Γ, Ξ± , ∆ Con Γ $∆ $Ξ $ disgiunti. Si notI che se, come caso particolare di (comp), se P Γ e Q ∆ con Γ $ e ∆ $ disgiunti allora P |Q Γ, ∆. Si noti inoltre, che la regola (comp) forza un utilizzo controllato dell’operatore di parallelo, usato in combinazione con l’operatore di restrizione. Cio’ fa si che le sincronizzazioni fra le azioni avvengano in un contesto locale, restringenedo tutti i nomi comuni ai due processi impendendone la sincronizzazione con l’ambiente esterno (composizione con occultamento). 6.3 Risultati di type safety In questa sezione si mostrerà che il typing è preservato in ogni passo di transizione etichettata. In particolare si ha la seguente: α Proposizione 6.3.1. Sia P Γ e sia P → Q con Γ che autorizza α . Allora Q Γ \ α (dove Γ \ α è lo stesso environment Γ senza il nome di α) α Dimostrazione. Per induzione sulla derivazione di P → Q e per casi sull’ultima regola utilizzata. caso (sumj ) Quindi P = i∈I αi .Pi e Q = Pj con j ∈ I. P Γ può essere derivato solamente da (sum) con Γ = Γ a : in cui fra le premesse figura Pj Γ come si voleva. α caso (pub): Dunque P = (νX)P1 e Q = (νX)P2 e P → Q dove α = (a, i) α diretta conseguenza di P1 → P2 con a ∈ X e ∈ {+, −}. In questo caso, (νX)P1 Γ deve essere stato derivato dalla regola (comp) con La codifica in strutture di eventi tipate di CCS polarizzato 99 Γ = Γ1 , Γ± 2 , Γ3 , P1 = P1 |P1 e con premesse P1 Γ1 , Γ2 e P1 Γ2 , Γ3 . Poichè ∈ {+, −}, l’azione α può essere stata eseguita o da P1 o da P1 . Si assume che sia stata eseguita da P1 (l’altro caso è analogo): allora α è autorizzata in P1 e in particolare a ∈ Dom(Γ1 ) e quindi applicando α l’ipotesi induttiva su P1 → P2 (con P2 = P2 |P2 con P2 = P1 ) ho che P2 Γ1 \α, Γ2 (per il fatto che a ∈ X = Dom(Γ2 )). Dunque riapplicando la regola (comp) con premesse P2 Γ1 \ α, Γ2 e P2 Γ2 , Γ3 si ottiene (νX)P2 |P2 Γ1 \ α, Γ± 2 , Γ3 come si voleva. α± caso (priv): Dunque P = (νX)P1 e Q = (νX)P2 e P → Q con α = (a, i) α± diretta conseguenza di P1 → P2 con a ∈ X. In questo caso, (νX)P1 Γ deve essere stato derivato dalla regola (comp) con Γ = Γ1 , Γ± 2 , Γ3 , P1 = P1 |P1 e con premesse P1 Γ1 , Γ2 e P1 Γ2 , Γ3 . Poichè l’azione α α− è neutra, deve essere stato P1 → P2 e P1 → P2 dove P2 = P2 |P2 . Osservando che a ∈ X = Dom(Γ2 ), per costruzione α (risp α− ) è abilitata in Γ2 (risp Γ2 ), dunque applicando l’ipotesi induttiva si ha P2 Γ1 , Γ2 \ α e P2 Γ2 \ α, Γ3 : Quindi riapplicado (comp) si ottiene (νX)P2 |P2 Γ1 , Γ± 2 \ α, Γ3 come si voleva. α caso (par − l): Dunque P = P1 |P2 e Q = P1 |P2 e P → Q diretta conseguenα za di P1 → P1 . P1 |P2 Γ deve essere conseguenza della regola (comp) (con environment disgiunti) con P1 Γ1 e P2 Γ2 . Quindi per ipotesi induttiva P1 Γ1 \ α e riapplicando (comp) si ottiene P1 |P2 Γ1 \ α, Γ2 come si voleva. caso (par − r): Analogo al precedente α caso (sync): Si noti che questo caso non può mai accadere, in quanto P1 → α P1 e P2 → P2 implica che gli environment non sono digiunti, condizione richiesta dalla regola (comp) 6.4 La codifica in strutture di eventi tipate di CCS polarizzato In questa sezione si definirà una codifica di CCS polarizzato in strutture di eventi tipate. Esso si ispira alla codifica per NCCS dato in [VY06], il quale deriva dal modello intuitivo definito da Winskel in [Win82]. La funzione [[ · ]] 100 CCS polarizzato mapperà environment ben formati in interfacce e processi CCS tipati con dato environment in strutture di eventi di corrispondente interfacccia e il risultato più importante che verrò nel seguito dimostrato sarà la validità del modello, data nel teorema omonimo. 6.4.1 Definizione del modello La semantica di CCS polarizzato in strutture di eventi tipate è descritta nel seguito. In particolare verranno utilizzate le operazioni sulle strutture di eventi definite nel capitolo 1 e la composizione parallela definita nel capitolo 3. Inoltre per quanto concerne i nomi, [[ · ]] interpreterà i nomi utilizzati per identificare un cluster di azioni nella somma prefissata definita sui processi CCS in nomi identificanti celle, nel contesto strutture di eventi tipate: conseguentemente le azioni polarizzate e non di CCS verranno interpretate nelle etichette polarizzate e non usate nelle strutture di eventi etichettate. Si osservi anzitutto che vi è un’esatta corrispondenza fra nomi, polarità e azioni nel contesto strutture di eventi (per tanto per essi [[ · ]] è la mappa identità). Per le interfacce e i processi, essa è la seguente: ENVIRONMENT/INTERFACCE [[∅ $]] = I [[Γ, a : τ $]] = aτ ∪ [[Γ]] PROCESSI CCS/STRUTTURE AD EVENTI [[ [[0 ∆]] = ∅ n (a, i) .Pi a : , ∆]] = (a, i) .[[Pi ∆]] n i=1 i=1 ± [[(νX)P |Q Γ, Ξ , ∆]] = [[P Γ, Ξ]][[Q Ξ, ∆]] con P Γ, Ξ e Q Ξ, ∆ Alcuni lemmi utili: Lemma 6.4.1. Sia Γ $ un’interfaccia e sia a ∈ Dom(Γ). Allora [[a]] ∈ [[Γ]]. Dimostrazione. Per costruzione si ha Γ = Γ , a : τ . Inoltre [[Γ]] = [[Γ , a : τ ]] = aτ ∪ [[Γ ]] Chiaramente [[a]] ∈ [[Γ]] La codifica in strutture di eventi tipate di CCS polarizzato 101 Lemma 6.4.2 (correttezza sui tipi). Sia Γ $ un environment ben formato. Allora [[Γ $]] è un’interfaccia. Dimostrazione. Per induzione sulla derivazione di Γ $. caso (empty): Ovvio caso (single): quindi Γ = Γ , a : τ e Γ $ diretta conseguenza di Γ $ con a ∈ Dom(Γ ). Per ipotesi induttiva [[Γ $]] = A, πA è un’interfaccia. Inoltre per il fatto a ∈ Dom(Γ ) e per il lemma precedente si ha a ∈ A e quindi aτ ∪ [[Γ ]] è un’interfaccia. Lemma 6.4.3 (morfismi sulle operazioni). Siano Γ $ e ∆ $ due environment disgiunti. Allora 1. [[Γ, ∆]] = [[Γ]] ∪ [[∆]] 2. [[Γ]] = [[Γ]]⊥ 3. [[Γ± ]] = [[Γ]]± Dimostrazione. 1. Conseguenza diretta dei lemmi 6.2.1 e 6.4.1 2. Conseguenza diretta del lemma 6.2.2 e per costruzione 3. Conseguenza diretta del lemma 6.2.2 e per costruzione 6.4.2 Teorema di validità Siamo ora in grado di dare il risultato più importante, concernente la semantica di CCS polarizzato, ovvero che i processi CCS tipati vengono interpretati in strutture di eventi tipate con la corrispondente interfaccia. Si ha dunque Teorema 6.4.1 (validità). Sia P Γ. Allora [[P Γ]] : [[Γ]]. Dimostrazione. Per induzione sul giudizio P Γ. caso (zero): Ovvio. n caso (sum): Quindi P = i=1 (a, i) .Pi , Γ = a : , ∆ e P Γ diretta coseguenza di Pi ∆. Per ipotesi induttiva [[Pi ∆]] : [[∆]]. Quindi (a, i) .[[P i ∆]] senza confusione poichè la somma di strutture di i∈I eventi preserva la classe delle strutture di eventi senza confusione. Si noti inoltre che per costruzione i∈I (a, i) .[[Pi ∆]] : [[Γ]] come si voleva. 102 CCS polarizzato caso (comp): Quindi P = (νX)P1 |P2 , Γ = Γ1 , Γ± 2 , Γ3 e P Γ diretta conseguenza di P1 Γ1 , Γ2 e P2 Γ2 , Γ3 . Per ipotesi induttiva e per il lemma 6.4.3 [[P1 Γ1 , Γ2 ]] : [[Γ1 ]] ∪ [[Γ2 ]] e [[P2 Γ2 , Γ3 ]] : [[Γ2 ]]⊥ ∪ [[Γ3 ]] e si conclude per il teorema 4.4.1. 6.4.3 Corrispondenza fra le semantiche In questa sezione si mostrerà il risultato di full-abstraction relativo al modello dato. Per farlo, ci si servirà di una nozione di ‘transizione etichettata’ definita sulle strutture di eventi tipate. Ciò è fondamentale, in quanto permette di definire nel modello una relazione di bisimulazione, che sarà utile per mostrare la proprietà desiderata. Transizioni etichettate di strutture di eventi In questa sezione si definisce un sistema di transizione etichettato sulle strutα ture di eventi. Intuitivamente, se E1 → E2 significa che α è l’etichetta di un evento minimale in E1 e che quindi E1 puo ‘eseguire’ α e ridursi ad una sua sottostruttura, in cui α è stato tolto e, con lui tutti gli eventi in conflitto con α. Formalmente si ha Definitione 6.4.1. Sia E = E, ≤, , λ una struttura di eventi e sia e ∈ E un evento minimale. Si definisce E %e = E , ≤ , , λ dove: • E = {d ∈ E|d e} • ∀d1 , d2 ∈ E .d1 ≤ d2 ⇐⇒ d1 ≤ d2 • ∀d1 , d2 ∈ E .d1 d2 ⇐⇒ d1 d2 • ∀d ∈ E .λ (d) = λ(d) Informalmente, E %e è la struttura di eventi E senza l’evento e e senza tutti gli eventi in conflitto con lui. E’ possibile generare un LTS di strutture di eventi come segue. Sia e ∈ E evento minimale con λ(e) = β . Allora β E → E %e La relazione fra l’LTS nel linguaggio e nel modello è dato dalle seguenti proposizioni α Proposizione 6.4.1. Sia P Γ e sia P → Q con Γ che autorizza α . Allora α [[P Γ]] → [[Q Γ \ α]] La codifica in strutture di eventi tipate di CCS polarizzato 103 α Dimostrazione. Per induzione sulla derivazione di P → Q α Proposizione 6.4.2. Sia P Γ. Se [[P Γ]] → E : A allora esiste Q ∆ α tale che P → Q con [[Q ∆]] = E Dimostrazione. Per induzione sulla derivazione del giudizio P Γ Entrambe le prove sopra citate utilizzano il seguente lemma: Lemma 6.4.4. Siano E1 : A ∪B e E2 : B⊥ ∪C due strutture di eventi. Allora α α− α± E1 → E1 %e1 e E2 → E1 %e2 se e solo se E1 E2 → E1 E2 %v (dove λ(v) = α± ). Inoltre, in questo caso E1 %e1 E2 %e2 = E1 E2 %v . Esso si dimostra utilizzando la definizione di composizione per slice. In modo analogo con gli LTS standard, definiamo una nozione di bisimulazione di strutture di eventi. Definitione 6.4.2 (Bisimulazione di strutture di eventi). Sia R una relazione binaria simmetrica fra strutture di eventi. R è una bisimuazione se vale la seguente: β β se E1 RE2 ed E1 → E1 allora esiste E2 tale che E2 → E2 e E1 RE2 Due strutture di eventi E1 , E2 si dicono bisimili e si scrive E1 ∼ E2 se esiste una bisimulazione di strutture di eventi che le contiene. Si può dimostrare il seguente teorema chiave: Teorema 6.4.2. Siano E1 , E2 : A. Allora E1 ∼ E2 ⇐⇒ E1 = E2 Dimostrazione. Poichè E1 ∼ E2 allora esiste una relazione R che è una bisimulazione tale che E1 RE2 . Il risultato si ottiene per induzione sulla struttura di E1 e E2 , sfruttando il fatto che se E1 ed E2 sono bisimili, hanno gli stessi elementi minimali. A questo segue il seguente Teorema 6.4.3 (full abstraction). P Γ ∼ Q Γ ⇐⇒ [[P Γ]] = [[Q Γ]] Dimostrazione. (⇒): Se P ∼ Q allora esiste una bisimulazione R che contiene (P, Q). Ma allora per la proposizione 6.4.1 posso costruire una bisimulazione di strutture di eventi che contiene ([[P ]], [[Q]]). Ma allora per il teorema 6.4.2, [[P ]] = [[Q]]. (⇐): Se [[P ]] = [[Q]] allora per il teorema 6.4.2, esite una bisimulazione di strutture di eventi. Ma allora per la proposizione 6.4.2, posso costruire una relazione che contiene (P, Q) e mostrare che è una bisimulazione 104 CCS polarizzato 6.5 Conclusioni In questo capitolo, si è introdotto un frammento di CCS, detto appunto CCS polarizzato. Si è definito un typing system che garantisce l’assenza di confusione, ovvero un processo ben tipato ha la proprietà che la scelta non deterministica è localizzata in un ben preciso punto del processo e non dipende dalle politiche di schedulazione adottate per farlo eseguire. Si è mostrato che il tipaggio è preservato per riduzione. Infine per dimostrare la presenza di questa proprietà si è pertanto definito un modello a strutture ad eventi tipate e si è fatto vedere che il modello dato è corretto e si è dato un risultato di full abstraction (vedi Sezione 3). Un typing system che garantisce questa proprieta era già stato dato in [VY06] sia per CCS che per π-calcolo (e per quanto concerne CCS, per un frammento più ampio rispetto a quello coperto da CCS polarizzato)1 . Ciò che è nuovo qui è l’approccio: si sono applicate tecniche provenienti dalla semantica dei giochi e in particolare dalle strategie lineari in un contesto di teoria della concorrenza, in particolare per dare una semantica a strutture di eventi di un frammento di CCS. Inoltre il typing system dato qui è una semplificazione del typing system lineare dato in [VY06]. In questa tesi, è stata introdotta una struttura generale, che se portata in un contesto teoria della concorrenza, è una struttura di eventi senza confusione e se portata in un contesto semantica dei giochi è un’estensione delle L-net. Tale struttura comune apre la strada ad un trasferimento di tecnologie tra le due aree. Il lavoro presentato in questo capitolo rappresenta una prima tappa verso la costruzione di modelli fully asbstract per (frammenti di) CCS o π-calcolo. Per raggiungere questo fine, ci proponiamo in lavoro futuro di: • ampliare il frammento di CCS qui studiato, includendo l’operatore di replicazione oppure la ricorsione • estendere il lavoro ad un frammento di π-calcolo, per esempio il πcalcolo polarizzato in [Bef05] Il lavoro presentato nel capitolo 4 apre la strada anche ad una trasferimento di tecnologie dalla teoria della concorrenza alla semantica dei giochi: lo scopo di ottenere una generalizzazione del concetto di strategia, che permetta di studiare il non determinismo e la concorrenza in semantica dei giochi. 1 In realtà nel lavoro di Daniele Varacca e Nobuko Yoshida è dato un risultato di adequacy, per quanto concerne la corrispondenza fra le semantiche Conclusioni 105 Infine un altro ambito che ci interessa investigare, anche se non approfondito qui, è la connessione fra teoria della concorrenza e teoria della dimostrazione: vi sono infatti interessanti techiche delle reti di prova concernenti criteri di correttezza e deadlock il cui proposito è che possano essere applicate per mostrare proprietà analoghe in teoria della concorrenza. 106 CCS polarizzato Bibliografia [AJM00] S. Abramsky, R. Jagadeesan, and P. Malacaria. Full abstraction for PCF. Information and Computation, 2000? [AM99] S. Abramsky and P.-A. Mellies. Concurrent games and full completeness. In Proceedings 15th Annual Symposium on Logic in Computer Science, 1999. [And92] J-M. Andreoli. Logic programming with focusing proofs in linear logic. Journal of Logic and Computation, 2(3), 1992. [Bef05] E. Beffara. Logique, Réalisabilité et Concurrence. PhD thesis, UFR d’Informatique, Université Paris 7 - Denis Diderot, 2005. [CF] P.-L. Curien and C. Faggian. An approach to innocent strategies as graphs. submitted to journal. [CF05] P.-L. Curien and C. Faggian. L-nets, strategies and proof-nets. In CSL 05 (Computer Science Logic), LNCS. Springer, 2005. [Cur06] P. L. Curien. Semantica dei giochi. Note del corso di Semantica dei giochi, 2006. [Fag] C. Faggian. Linear games: sequential and parallel. submitted. [Fag02] C. Faggian. Travelling on designs: ludics dynamics. In CSL’02 (Computer Science Logic), volume 2471 of LNCS. Springer Verlag, 2002. [FM05] C. Faggian and F. Maurel. Ludics nets, a game model of concurrent interaction. In Proc. of LICS’05 (Logic in Computer Science). IEEE Computer Society Press, 2005. [Fra96] J. Frakes. Star trek 7: First contact. con P. Stewart, J. Frakes. Soggetto: R. Berman, B. Braga, R. D. Moore. Sceneggiatura: B. Braga, R.D. Moore, 1996. 107 108 BIBLIOGRAFIA [Gir87] Jean-Yves Girard. Linear logic. Theoretical Computer Science, 50:1–102, 1987. [Gir01] Jean-Yves Girard. Locus solum. Mathematical Structures in Computer Science, 11:301–506, 2001. [GM04] Dan R. Ghica and Andrzej S. Murawski. Angelic semantics of fine-grained concurrency. In FOSSACS, 2004. [Har05] Russ Harmer. Innocent game semantics. CNRS & PPS, 2005. [HO00] M. Hyland and L. Ong. On full abstraction for PCF. Information and Computation, 2000. [HS02] M. Hyland and A. Schalk. Games on graphs and sequentially realizable functionals. In LICS 02, pages 257–264. IEEE, 2002. [Lai05] J. Laird. A game semantics of the asynchronous pi-calculus. In Concur 05, volume 3653 of LNCS, 2005. [Lau04] Olivier Laurent. Semantique des jeux. Note du cours de semantique des jeux du DEA de Programmation, page 43 pages, 2004. [Lor60] P. Lorenzen. Logik und agon. In Atti del Congresso Internazionale di Filosofia, pages 193–200. Sansoni, 1960. [Lor61] P. Lorenzen. Ein dialogisches konstruktivitätskriterum. In Infinitistic Methods, pages 193–200. PWN. Proceed. Symp. Foundations of Math, 1961. [Mel04] P.-A. Mellies. Asynchronous games 2 : The true concurrency of innocence. In CONCUR 04, volume 3170 of LNCS. Springer Verlag, 2004. [MW05] G. McCusker and M. Wall. Categorical and game semantics for scir. In Galop 2005, pages 157–178, 2005. [NPW81] M. Nielsen, G. Plotkin, and G. Winskel. Event structures and domains 1. Theoretical Computer Science, 13:85–108, 1981. [Pic06] M. Piccolo. Event structures and strategies. Master’s thesis, Dip. Matematica Pura e Applicata, Universitá di Padova, 2006. BIBLIOGRAFIA 109 [RBM06] Hernan Melgratti Roberto Bruni and Ugo Montanari. Event structure semantics for nominal calculi. In Proceedings of CONCUR 2006, 17th International Conference on Concurrency Theory, LNCS, page 15 pages. SV, 2006. To Appear. [RN05] S. Russel and P. Norvig. Intelligenza Artificiale: un Approccio Moderno. Seconda Edizione, volume 1, chapter Agenti Logici. Pearson Prentice Hall, 2005. [SPP05] A. Schalk and J.J. Palacios-Perez. Concrete data structures as games. In CTCS 04, volume 122 of Electr. Notes Theor. Comput. Sci., 2005. [VY06] D. Varacca and N. Yoshida. Typed event structures and the picalculus. In MFPS, 2006. [Win80] G. Winskel. Events in computation. PhD thesis, Dept. of Computer Science, University of Edinburgh, 1980. [Win82] G. Winskel. Event structure semantics for ccs and related languages. In Proceedings of 9th ICALP, volume 140 of LNCS, pages 561–576. Springer, 1982. [Win87] G. Winskel. Event structures. Advances in Petri Nets 1986, Part II, volume 140 of LNCS:561–576, 1987. [WN95] G. Winskel and M. Nielsen. Handbook of Logic in Computer Science, volume 4, chapter Models for concurrency. Clarendon Press, 1995. 110 BIBLIOGRAFIA Appendice A A Graph Abstract Machine Describing Event Structure Composition Claudia Faggian and Mauro Piccolo Questo è l’articolo inerente alla parte inizile di questa tesi. Esso è stato presentata a GT-VC (Graph Transformation for Verification and Concurrency) che è un workshop satellite della conferenza internazionale CONCUR’06 sulla teoria della concorrenza, svoltasi a Bonn (Germania) dal 27 al 30 agosto. Abstract: Event structures, Game Semantics strategies and Linear Logic proof-nets arise in different domains (concurrency, semantics, proof-theory) but can all be described by means of directed acyclic graphs (dag’s). They are all equipped with a specific notion of composition, interaction or normalization. We report on-going work, aiming to investigate the common dynamics which seems to underly these different structures. In this paper we focus on confusion free event structures on one side, and linear strategies [Gir01, FM05] on the other side. We introduce an abstract machine which is based on (and generalizes) strategies interaction; it processes labelled dag’s, and provides a common presentation of the composition at work in these different settings. 111 112 A Graph Abstract Machine Describing Event Structure Composition A.1 Introduction Event structures [NPW81], Game Semantics strategies and Linear Logic proof-nets [Gir87] arise in different domains (concurrency, semantics, prooftheory) but can all be described by means of directed acyclic graphs (dag’s). They are all equipped with a specific notion of composition, interaction or normalization. In this paper we report ongoing work whose first aim is to investigate the common dynamics which appears to underly all these different structures, and eventually to transfer technologies between these settings. As a first step in this direction, here we present an abstract machine which processes labelled dag’s. The machine is based on the dynamics at work when composing Game Semantics strategies. When applied to linear strategies (in the form introduced in [Gir01] or [FM05]) the machine implements strategies composition. When applied to event structures, the result is the same as the paralle composition of event structures defined by Varacca and Yoshida in [VY06]. Event structures. Event structures are a causal model of concurrency (also called true concurrency models), i.e. causality, concurrency and conflict are directly represented, as opposite to interleaving models, which describe the system by means of all possible scheduling of concurrent actions. An event structure models parallel computation by means of • occurrence of events; • a partial order expressing causal dependency. Non-determinism is modelled by means of: • a conflict relation, which expresses how the occurrence of certain events rules out the occurrence of others. Two events are concurrent if they are neither causally related, nor in conflict. Events which are in conflict live in different possible evolutions of the system. In this paper we will consider two classes of event structures: confusion free event structure (where conflict, and hence non-determinism, is well behaving) conflict free event structures (where there is no conflict, and hence no non-determinism). Introduction 113 Confusion free event structure, are an important class of event structures because the choices which a process can do are “local” and not influenced by independent actions. In this sense, confusion freeness generalizes confluence to systems that allow nondeterminism. A point which is central to our approach is that a confusion free event structure E can be seen as a superposition of conflict-free event structures (which we will call the slices of E): each slice represents a possible and independent evolution of the system. Because of this, if E is confusion free, the study of several properties can be reduced to the study of such properties in conflict free event structures. Game Semantics Games and strategies provide denotational models for programming languages and logical systems; games correspond to types (formulas), and strategies to programs (proofs). The central notion is that of interaction, which models program composition (normalization of proofs). A distinction between causal and interleaving models is appearing also in Game Semantics. In this setting, a strategy describes in an abstract way the operational behaviour of a term. In the standard approach, a strategy is described by sequences of actions (plays), which represent the traces of the computation. However, there is an active line of research in Game Semantics aiming at relaxing sequentiality, either with the purpose to have “partial order” models of programming languages or to capture concurrency [AM99, Mel04, HS02, MW05, SPP05, FM05, CF05, Lai05, GM04]. The underlying idea is to not completely specify the order in which the actions should be performed, while still being able to express constraints. Certain tasks may have to be performed before other tasks; other actions can be performed in parallel, or scheduled in any order. A strategy of this kind can be presented as a directed acyclic graph. Confusion free event structures and linear strategies We are interested in relating strategies and event structures. Abramsky, Mellies, Schalk have already used event structures in Game Semantics as arenas (i.e. types, or objects). However, our aim is to see event structures as strategies (i.e. as morphisms). We focus on the class of linear strategies, i.e. strategies which correspond to the multiplicative-additive structure of Linear Logic. Linear strategies (as defined in [Gir01] and then [FM05]) can be described as partial orders with a conflict relation, i.e. as a sort of event structures, which satisfy a number 114 A Graph Abstract Machine Describing Event Structure Composition of conditions. In particular, they are confusion free. Many of the properties which make the composition work appear to depend only on confusion freeness . Our aim is therefore to see confusion free event structures as a generalization of strategies, and the composition of such event structures as strategies composition. An idea which underlies the work on types by Honda and Yoshida is that typed processes should be seen as a sort of Hyland-Ong strategies; this is implicit also in [VY06], on which our work builds. In [VY06], Varacca and Yoshida provide a typing system which guarantees that the composition of confusion free event structures is confusion free. The typing is inspired by Linear logic and Hyland-Ong strategies, and allows the authors to give an event structure semantics for (a variant of) Sangiorgi’s πI-calculus. In this paper we define composition “operationally”, in such a way that when restricted to strategies the machine implements strategies composition. Applied to confusion free event structures, the result is the same as the composition obtained in a more standard way. In particular, we prove the equivalence with the composition in [VY06]. We believe that the machine provides a simple and direct implementation of event structures composition. A.2 A.2.1 Background A sketch of strategies composition In Game Semantics, the execution of a program is modelled as interaction between two players; let us call them P (Proponent) and O (Opponent). The role of a strategy is to tell the player how to respond to a counter-player move. The dialogue between the two players will produce an interaction (a play). Figure ?? presents a simplified example of two (sequential) strategies. A specific move is played by (belongs to) only one of the players, so there are P-moves and O-moves. The active (positive) move of P are those that P plays, while its passive (negative) moves are those played by O, and to which P has to respond. In the picture, for each player strategy we distinguish the actives (positive) moves, i.e. those which belong to that player, with circles. Background 115 Let us look at the strategies (1). According to the P-player strategy, it will start with b0 , then respond with a0 to Opponent move b1 , and with † (termination) to Opponent move b2 . Let us make it interact with the Oplayer strategy. The interaction goes as follows: O answer to b0 is b1 , P answer to b1 is a0 , O answer to a0 is a1 , and so on. The algorithm to calculate the interaction is simple. (i.) Start from Pplayer initial move, (ii.) Check counter-player answer to that move, that is, go to the corresponding opposite action, and take the following move. (iii.) Repeat step (ii.) until terminating on †. Figure A.1 illustrates the same ideas for more parallel strategies [FM05]. Interaction : Strategies : Player: Opponent: † b3 a1 a0 b1 b2 b0 b3 a1 a0 † b2 b2 .. . b1 b0 b3 a1 a0 .. . b1 b0 Figura A.1: Graph strategies The strategies are here graphs. The way to make them interact is similar to the previous one, but (1.) there are several threads running in parallel, (2.) on certain moves we need to synchronize. 116 A Graph Abstract Machine Describing Event Structure Composition A.2.2 Event structures Event structures were introduced by Nielsen, Plotkin, and Winskel [NPW81, Win87, WN95], as a theory combining Petri nets and domain theory. Let E, ≤ be a partially ordered set. Elements of E are called events; we assume that E is at most countable. The order relation is called causality relation. The downward closure of a subset S ⊆ E is defined by S = {e : e ≤ e, e ∈ S}. For a singleton, we write e . An event structure1 is a triple E, ≤, such that • E, ≤ is a partial order, as above; • For every e ∈ E, e is finite. • is an irreflexive and symmetric relation, called conflict relation, which satisfies the following: for every e1 , e2 , e3 ∈ E, if e1 ≤ e2 and e1 e3 then e2 e3 . If e1 ≤ e2 we say that the conflict e2 e3 is inherited from the conflict e1 e3 . If a conflict is not inherited, we say that it is immediate, written µ Causal order and conflict are mutually exclusive. With a slight abuse of notations, we identify an event structure E, ≤, and its set E of events. A labelled event structure is an event structure E together with a labelling function λ : E → L, where L is a set of labels. Conflict free A set S ⊆ E is conflict free if it does not contain any two elements in conflict; in particular, an event structure E is conflict free if its conflict relation is empty. Hence, a conflict free event structure is simply a partial order. Observe that, if e ∈ E, then e is conflict free. 1 In this paper we say event structures always meaning prime event structures. Background 117 Parents and enabling set. Let us introduce two notations that will be useful. Given e ∈ E • Parents(e) denotes the set of immediate predecessors of e w.r.t. ≤ (the preconditions of that event); • [e) = e \ {e} is the enabling set of e. A.2.3 Confusion free event structures Confusion free event structures are a class of event structures where every choice is localized to cells, where a cell is a set of events that are pairwise in immediate conflict, and have the same enabling set. Definition A.2.1 (Cell). A cell c is a maximal set of events such that e, e ∈ c implies e m e and [e) = [e ). Definition A.2.2 (Confusion free). E is confusion free if the following holds: (a.) for all distinct e, e , e ∈ E, e µ e and e µ e implies e µ e (b.) for all e, e ∈ E, e µ e implies [e) = [e ) The notion of cell express the idea that choices are local. Example. Below, we give an example (1.) of event structure which is confusion free, and an example (2.) of an event structure which is not. Waved lines denote conflict. The event structure in (2.) is not confusion free because t4 is in conflict with t2 , t3 , but fails to have the same parents. (1.) Senza confusione t3 t4 (2.) Confusione t5 t3 t4 t2 t2 t1 t1 t5 118 A Graph Abstract Machine Describing Event Structure Composition The intuition behind. Let T = {t1 , t2 , t3 , t4 , t5 } be a set of tasks on which an order (propedeuticity) and a conflict relation are defined. We have to schedule them. In the confusion free case (1.), the scheduler must start with t1 . Then the situation is the following: • after t1 , the scheduler can choose t5 or either one of t2 , t3 , t4 . • if the scheduler choose t1 and then one of t2 , t3 , t4 , then it can still schedule t5 . • if the scheduler choose t1 and then t5 , then it can still choose to schedule either of t2 , t3 , t4 . The case (2.), instead, describe a state which is confused: changing the scheduling of the tasks, some choices which were available may be no longer available. If we look at the picture, we see that both t1 and t4 have no precondition, and hence can be scheduled first. After t1 , we can schedule either of t2 , t3 , t4 if we start with t1 . However, if we schedule t4 first, and then t1 , after t1 the choices t2 , t3 are no longer available. Proof-theoretical intuition A cell, being a set of events in conflict and with the same preconditions, closely correspond to the notion of additive choice in Linear Logic. A.3 Typed event structures In this section we introduce a notion of labelled event structure, where the labelling guarantees that the composition of confusion free event structures is a confusion free event structure. Our labelling can be seen as a minimalist variant of the typing in [VY06], without the whole setting of linear types and morphisms; this because here we are only interested in the preservation of confusion freeness via composition. Our labelling is indeed a straightforward generalization of the technique developed in [Gir01] to deal with additive strategies. A key features of the labelling is that a name identifies a cell (rather than a single event). Typed event structures A.3.1 119 Names and actions. We assume a countable set of names N, ranged over by α, β, . . . . We are going to label a confusion free event structure with actions on these names. Let S be an index set. We define the alphabet N as follows: N= Ni = {(α, i) : α ∈ Nand i ∈ S} i∈S We say that a = (α, i) uses the name α, and also write name(a) = α. A (polarized) action is given by an element a ∈ N and a polarity, which can be positive (a+ ), negative (a− ), or neutral (a± ). Remark A.3.1. Actions of opposite polarity (a+ , a− ) denote matching dual actions, such as c and c in CCS, or Player/Opponent moves in Game Semantics. We think of a± as a pair of matching actions a+ , a− which have synchronized. A more traditional and suggestive denotation for a± would be τa . We use the variable to vary over polarities: ∈ {+, −, ±}. When clear from the context, or not relevant, we omit the explicit indication of the polarity. The polarities + and − are said opposite. If a is a positive or negative action, a will denote its opposite action. A.3.2 Interfaces. We are going to type event structures with an interface. The interface provides in particular the set of names on which the event structure communicate, and their polarity. An interface A, πA is given by a finite set of names A, and a polarity (positive, negative, neutral) for each name. The polarization partitions A into three disjoint sets: positive, negative and neutral names. Remark A.3.2. The positive names can be thought of as sending, the negative name as receiving, and the neutral names as private. The interface (A, π) generates the set of actions A = i∈S Ai = {(α, i) : α ∈ A}. The polarization of the names extends to the actions with that name. 120 A Graph Abstract Machine Describing Event Structure Composition A.3.3 Typed event structures. An event structure of interface A is a tuple E, A, λ, π where • E is an event structure; • A = (A, πA ) is an interface; • λ : E → {(α, i) : α ∈ A, i ∈ S} is a labelling function; • π : E → {+, −, ±} is the polarization induced on the actions by πA . If λ(e) = (α, i), we say that the event e uses the name α, and write name(e) = α. Remark A.3.3. If λ(e) = a, with a = (α, i), and πA (α) = , then e is labelled by the action a . We type an event structure of interface A only when it is confusion free; we ask that: • all the events in the same cell use the same name (and hence also have the same polarity). • two events which use the same name (and the same polarity) are in conflict. Definition A.3.4. An event structure E of interface A has type A, written E : A if it satisfies the following, for all distinct e1 , e2 ∈ E. 1. if e1 µ e2 and λ(e1 ) = (α, i), then λ(e2 ) = (α, j), with i = j. 2. if name(e1 ) = name(e2 )then e1 e2 . 3. e1 µ e2 ⇒ Parents(e1 ) = Parents(e2 ) Remark A.3.5. E can receive a type if and only if it is confusion free. Properties 1. and 2. imply A.2.2.i; property 3. is equivalent to A.2.2.ii. A.3.4 Properties of the labelling Given a labelled event structure E, and a set of events S ⊆ E, we use the notation λS = {λ(s)|s ∈ S}. Typed event structures 121 Set of labels identify events Each event e ∈ E is uniquely identified by the set of labels λ e = {λe , e ≤ e}. Proposition A.3.6. Given e1 = e2 ∈ E, we have that λ e1 = λ e2 Conflicts The conflict relation in typed event structures can be inferred from the labels: Proposition A.3.7. Let E : A a typed event structure and let e1 , e2 ∈ E. Then the following holds: (∗∗) e1 e2 ⇐⇒ ∃e1 ≤ e1 , e2 ≤ e2 : name(e1 ) = name(e2 ) Since in a typed event structure the labels carry all the information on the conflict relation, from now on, we deal with the conflict implicitly: two distinct events e1 and e2 are in conflict iff (**) holds. This allows us to only focus on the partial order. It is easy to see that Proposition A.3.8. Given e1 = e2 ∈ E : A, we have that e1 µ e2 iff • e1 , e2 use the same name • [e1 ) = [e2 ) Typed event structures as dag’s As seen in the previous section, given a typed event structure, we can deal with the conflict implicitly; we are left to deal only with the partial order E, ≤. In the following, it will be convenient to identify the partial order on E : A with the associated dag. This in particular allows us to describe composition in terms of graph rewriting. A directed acyclic graph (dag) G is an oriented graph without (oriented) cycles. We will write c ← b if there is an edge from b to c. It is standard to represent a strict partial order as a dag, where we have a (non transitive) edge a ← b whenever there is no c such that a < c and c < b. Conversely (the transitive closure of) a dag is a strict partial order on the nodes. In the following, we will identify the partial order on E : A with the associated dag. We take as canonical representative of E its skeleton (the minimal graph whose transitive closure is the same as that of E). 122 A Graph Abstract Machine Describing Event Structure Composition Remark A.3.9. Observe that, by construction, the skeleton is always defined, even if E can have a countable number of events (in particular, a cell can have a countable number of events). In fact, for each event e ∈ E, e does not contain any conflict, and it is finite. A.4 Composition We define composition “operationally”, in such a way that when restricted to strategies this procedure produces strategies composition. Composition between event structures relies on two notions: synchronization and enabling (reachability). Intuitively, to compose, we synchronize (match) events which are labelled by the same action, and opposite polarity. The synchronization is possible only between events which have been enabled. We enable (reach) an action only if all the actions before it have been enabled (reached). We better illustrate this in Section A.4.2. A.4.1 Compatible interfaces We compose two event structures when their interfaces are able to communicate. Definition A.4.1 (Compatible interfaces). Let A, πA and C, πC be two interfaces. The interfaces A and C are compatible if for all b ∈ A ∩ C, the polarity of b in A is opposite to the polarity of b in C. If the interfaces are compatible, we A ∪ C, π where ⎧ ⎨ πA (α) πC (α) π(α) = ⎩ ± define their composition A & C = if α ∈ A \ C if α ∈ C \ A otherwise Definition A.4.2 (Private and public names). Given two compatible interfaces A, C, we say that the name α is private if α ∈ A ∩ C, public otherwise. Example. If A = {a− , b+ } and C = {b− , c+ }, then A & C = {a− , c+ , b± }. The name b is private, while the names a, c are public. Composition is only defined on event structures which have compatible interfaces. Composition A.4.2 123 Conflict free composition Let us first analyze composition in the case of conflict free event structures, i.e. when no two events are in conflict. This case is very simple and clear, but contains all the dynamics of the general case. The key property of this case is the following If E : A is conflict free, no two events use the same name. Through this section, let us assume that E1 : A and E2 : C are conflict free and have compatible interfaces. Their composition E1 E2 is a conflict free event structure of interface A & C. Let us describe the composition by means of a wave of tokens travelling up on E1 E2 . When a private action is reached, to continue, it is necessary to synchronize it with an action of opposite polarity. Observe that, by construction, there is at most one such action. Remark A.4.3. In E1 E2 there is only one occurrence of each polarized action. For this reason, in this section, we can identify each event with the polarized action which labels it. 1. If a is public, and its parents have been enabled, then a is enabled. We illustrate this in the picture below, where the squares mark the enabled nodes. → a a 2. If a is private, a+ , a− are both present, and their parents have been enabled, then a is enabled, and the graph is transformed as follows: a a → τa end: The actions which have not been enabled are deleted (garbage collection). 124 A Graph Abstract Machine Describing Event Structure Composition The process described above generates a new conflict free event structure E, ≤, where E is a set of events labelled by the actions which have been enabled; the actions have the polarity induced by the new interface A & C. It is straightforward to give a direct recursive definition of E1 E2 . We do not do this in this Section, but in Section A.4.5 we use a definition of this kind to describe composition in the general case, and to establish the equivalence of our procedure with more standard definitions. A.4.3 Local rewriting rules The process described in Section A.4.2 can be expressed by means of a set of local graph rewriting rules on E, which we describe in FigureA.4.3. Private a: 1. There are a, a, parallel a a → τa 2. Otherwise: a → Figura A.2: Graph Rewriting Rules It is straightforward to show these rules are confluent. By using this fact, one can prove associativity for the composition. Proposition A.4.4 (Associativity). Let E1 : A, E2 : C, E3 : D be conflict free event structures. If the interfaces allow the composition, we have that (E1 E2 )E3 = E1 (E2 E3 ) A.4.4 Reducing composition to conflict free composition A confusion free event structures E can be seen as a superposition of conflictfree event structures (which we call the slices of E). The study of confusion Composition 125 free event structures can be reduced to the study of conflict free event structures. In particular, composition of confusion free event structure can be reduced to the composition of its slices. Slices A slice S of E is a downward closed, conflict free subset of E, with the order induced by E. To choose a (maximal) slice of E corresponds to the selection of a single element in each cell of E. Studying composition by slices A key feature of the composition is that it takes place independently inside each single slices (Proposition A.4.10) . Several interesting properties of the composition of two event structures (such as confluence, or deadlocks) can be analyzed as properties of their slices (see A.4.9). Actually, following an approach which is well studied for proof nets and linear strategies, the process of composition itself could be reduced purely to conflict free composition: • decompose E into its slices • compose all slices pairwise • superpose the composed slices Proposition A.3.6 allows us to perform the superposition, by using the same technique developed in [Gir01, FM05]. We do not give details here; however, after providing a direct description of composition in the general case, we show that the study of the composition can be reduced to the study of conflict free composition (Proposition A.4.10). A.4.5 Global composition In this section, we provide a direct description of composition of typed event structures, in the general case. Let E1 : A and E2 : C be typed event structures with compatible interfaces. E1 E2 is an event structure of interface A & C, obtained as follows. 126 A Graph Abstract Machine Describing Event Structure Composition Case 1. Let e ∈ Ei such that λ(e) = a and name(a) is public. If S ⊆ E satisfies the following conditions: parent condition: λS = λ[e). conflict condition: the set S is conflict free add to E an event v such that label: λ(v) = a edges: for all vi ∈ S we have vi ← v Case 2. Let e1 ∈ E1 and e2 ∈ E2 such that λ(e1 ) = λ(e2 ) = b and name(b) is private. If S = S1 ∪ S2 where S1 , S2 ⊆ E satisfy the following conditions parent condition: λS1 = λ[e1 ), λS2 = λ[e2 ). conflict condition: the set S is conflict free add to E an event v such that label: λ(v) = b (this should be thought as τb , since π(b) = ± ) edges: for all vi ∈ S we have vi ← v Remark A.4.5. The parent condition checks that the enabling set of e ∈ Ei has been considered, and relies on Proposition A.3.6. Remark A.4.6. The conflict condition says that in S there are no two events using the same names (we are using Proposition A.3.7. ) The conflict condition, essentially guarantees that we are working slice by slice, i.e. independently in each slice (see Proposition A.4.10) The machine generates E = E1 E2 step by step; each time we add to E an event v which refers to [comes from] an event (or a pair of matching events) x in E1 E2 . We add v to E only if: • the enabling set of x has already an “image” in E; • this image is conflict free. To understand the conflict condition, remember that events in conflict are events which are mutually exclusive. If we need a set of precondition to occur together, they must live in a conflict free event structure S ⊆ E. In fact, we can analyze, and even calculate, composition, only by means of conflict free event structures, as we see in Section Composition 127 Example of composition Consider the following event structures • E1 = {e1 , e2 , e3 , e4 } with e1 < e3 , e2 < e4 and e1 µ e2 . • E2 = {e5 , e6 } with e5 < e6 and the interfaces A = {α− , β − } and C = {β + , γ − }. We abbreviate (α, i) into ai , and similarly use bj , ck for actions on β, γ. Let us consider • E1 : A with λ(e1 ) = a1 , λ(e2 ) = a2 , λ(e3 ) = λ(e4 ) = b1 • E2 : C with λ(e5 ) = b1 , λ(e6 ) = c1 . Here is a graphical representation of the two event structures: e3 b1 e1 a1 e4 b1 a2 E1 e2 e6 c1 e5 b1 E2 And here we run the machine: E 1 E 2 ∅ e1 ∈ E 1 name(λ(e1 )) ∈ A S =∅ v1 a1 v1 v3 v6 c1 v3 τb v4 τb v1 a1 a2 v2 v2 a2 name(λ(v1 ) = name(λ(v2 )) e3 ∈ E 1 e5 ∈ E 2 λ(e3 ) = λ(e5 ) = b1 S1 = {v1 } S2 = ∅ v5 c1 v3 τb a1 v1 e6 ∈ E 1 name(λ(e6 )) ∈ C S = {v3 , v1 } v3 τb v4 τb a2 v2 v4 τb τb a1 v1 c1 e6 ∈ E 1 name(λ(e6 )) ∈ C S = {v2 , v4 } e2 ∈ E 1 name(λ(e2 )) ∈ A S =∅ a1 v5 a2 v2 e4 ∈ E 1 e5 ∈ E 2 λ(e4 ) = λ(e5 ) = b1 S1 = {v2 } S2 = ∅ a1 v1 a2 v2 128 A Graph Abstract Machine Describing Event Structure Composition Composition is well defined and associative Composition of typed event structures produces a typed event structure. Moreover, composition is associative. Theorem A.4.7. E1 E2 : A & C Dimostrazione. W.r.t. definition A.3.4, conditions 1. and 2. (the properties of the labelling) hold by construction. We have to verify 3., i.e. that u µ v implies [v) = [v). Let Su , Sv the two subset of the labelled parent condition. [u) = [v) if and only if Su = Sv . By labelling we have that name(λ(u)) = name(λ(v)) public or private. We develop the public case: the other is analogous. Without loss of generality we can assume name(λ(u)) ∈ A. Hence there exists e, d ∈ E1 such that λSu = λ[e) and λSv = λ[e). We have that e µ d: this holds (by 1. and 2.) and this conflict cannot be inherited because otherwise also u v should be inherited. Hence we have λSu = λSv by confusion freeness of E1 and as immediate consequence of Proposition A.3.6, we have Su = Sv , as required. Remark A.4.8. As a consequence, composition of confusion free event structures is confusion free. Proposition A.4.9 (Associativity). Given E1 : A, E2 : C, E3 : D, if the interfaces allow the composition, we have that (E1 E2)E3 = E1 (E2E3 ) = Dimostrazione. The result follows from Proposition A.4.4 and Proposition A.4.10. Working by slices Proposition A.4.10 (Slices). Let E = E1 : AE2 : C. We have the following. • If S ⊆ E is a slice of E, then there exist two slices S1 ⊆ E1 and S2 ⊆ E2 such that S = S1 : AS2 : C. • If S1 ⊆ E1 and S2 ⊆ E2 are slices, then S = S1 S2 is a slice of E. By reducing composition to composition of conflict free event structures, we can easily prove associativity. Discussion 129 A.5 Discussion A.5.1 Relating with standard event structure composition In this section we want to argument that the abstract machine we have defined produces the same result as a “standard” approach to event structure composition. To do this, we choose a specific synchronization algebra, which is that defined in [VY06]. The typing defined by Varacca and Yoshida guarantees that the composition preserves confusion freeness, and allows the interpretation of a linear fragment of the π calculus. The labelling induced by their typing is easily seen as a case of the labelling we define here, hence in particular we can apply our machine. We have that Proposition A.5.1. If E1 , E2 are confusion free event structures typed in the sense of [VY06], they are also typed in the sense defined here, and their composition E1 E2 as defined here is isomorph to the parallel composition as defined in [VY06]. The details are given in [Pic06] Let as briefly resume what a “standard approach” looks like. Parallel composition of event structures A more standard definition for the parallel composition of event structures is that used [VY06], based on the following ingredients: 1. fix through a synchronization algebra the events which will synchronize and those which will not. Two events synchronize if they have dual labels (for example one event has label a and the other a); 2. build the categorical product of the event structures 3. discard some events, and everything above them: (a) discard all the events of the product which are generated from pair which are not able to synchronize because they do not have matching labels (b) discard all the events of the product which are generated from a single private event: these are events which are private but not “consumed”. 130 A Graph Abstract Machine Describing Event Structure Composition A.5.2 Linear strategies with parallel composition are a sub-class of typed event structures Linear strategies as introduced in [Gir01] and extended to dag’s in [FM05] are labelled dag’s. The labels are taken in Ni = {(α, i) : α ∈ Nand i ∈ Pf in (N)} i∈Pf in (N) where N are the strings of natural numbers. The labelling satisfies a certain discipline, which in particular satisfies all the constraints in Definition A.3.4. As for composition, the machine introduced here extends the LAM machine defined in [Fag02, FM05] to implement the composition of linear strategies. The new machine has the same behaviour of the LAM when restricted to strategies. This in particular means that there is a morphism from strategies to typed event structures, which preserves the parallel composition. More precisely, strategies composition decomposes into parallel composition plus hiding, where parallel composition is the operation we have described here, and the hiding concerns the τ actions. A.5.3 More comments and future work The dynamics The machine we have presented makes it immediate what is going on when composing two labelled event structures E1 , E2 : we merge together the structure (events, order and conflicts) of E1 , E2 to create a new event structure E. The dynamics appears the same as that which takes place when composing strategies, λ-terms or Linear Logic proof-nets. Bridging Game Semantics and event structures. In future work, we plan to use event structure as a guide to generalize the definition of strategies. We hope to build on the work on event structures to extend the approach of Game Semantics, in order to deal with non determinism, concurrency and process calculi. Event structures and proof-nets This work meet also another line of research, which is bringing together graph strategies and proof-nets. Proofnets are a graph representation of proofs introduced by Girard in Linear Logic [Gir87] and which are powerful tool for the analysis of normalization. Discussion 131 In particular, they have been a fertile tool in the study of functional programming, in particular for optimization. Observe that proof-net normalization is performed via local rewriting rules. We see event structures as a form of multiplicative-additive proof-nets, and hope to be able to apply some of the technology developed for proofnets. For example, a key notion in proof-nets is that of correctness criterion, which states that there are no cyclic path, for a certain definition of path which is sensitive to the polarity of the nodes. The correctness criterion has a crucial role in guaranteeing that the normalization (composition) works, and in fact it guarantees that there are no deadlocks. We intend to investigate if a similar notion could be used on event structure, for an opportune typing, to guarantee that there are no deadlocks. Acknowledgments This work was motivated from discussion with Nabuko Yoshida and Daniele Varacca. We are in debt with Daniele Varacca for many explanations, comments, and suggestions. We are grateful to Martin Hyland, Emmanuel Beffara, and Pierre-Louis Curien for interesting discussions. We also wish to thank the referees for many usefull remarks and suggestions. RINGRAZIAMENTI Questo è il capitolo più importante della mia tesi, checché ne dicano dotti e tonti. Ringrazio anzitutto la mia relatrice Claudia Faggian per tutti gli aiuti, i consigli, le opportunità e l’assistenza che mi ha dato (e per avermi sopportato, nel bene e nel male). Ringrazio inoltre il mio co-relatore Daniele Varacca, il cui apporto a questa tesi è stato fondamentale. Ringrazio inoltre tutti i componenti del laboratorio PPS di Chevaleret a Parigi, in particolare Ugo dal Lago, Fabio Mancinelli, Luca Fossati, Giulio Manzonetto, Emmanuel Beffara, Russ Harmer, l’olandese compagno di ufficio di Fabio di cui non mi ricordo il nome, eccetera eccetera. Ringrazio Pierre-Louis Curien che mi ha dato la possibilità di lavorare a Parigi 7. Ringrazio l’ufficio 5A16, del quale ho potuto vantarmi presso i miei amici padovani. Ringrazio inoltre Paolo di Giamberaldino, il quale mi ha dato una settimana di vita sociale parigina. Un ringraziamento particolare va alla macchinetta del caffè del sesto piano che mi ha sostenuto nei momenti di sconforto e stanchezza nella redazione della tesi. Ringrazio inoltre tutti i Bruxellesi compagni di ufficio di mia sorella e compagni di appartamento. In particolare ringrazio Sara per avermi fatto innamorare anche se poi non ho concluso niente. Per i miei viaggi, ringrazio Trenitalia, Ryan Air, My Air, SNCF, Germanwings e Thalyss. Di quel di Padova, ringrazio anzitutto la segreteria didattica dell’Università, che al modico prezzo di una giornata infernale e colma di umiliazione, ha acconsentito di soprassedere ad una mia popotaggine e di permettere la mia laurea. Ringrazio quindi tutti i miei parenti, mamma Fiorenza, papa Giancarlo, Claudio, Mara, gli zii, i cugini, i nonni e tutti i professori del corso di laurea in informatica. And last but not least tutti i miei amici, in particolare il Macca, Giulio, Arturo, Mahesh, Alberto, Milo, Riccardo, Matteo, Marco e Marco, Elisa, Silvia, Nicodemo, il Peroni, Jari, Stefania, Valentina e tutti quelli che avrei dovuto ringraziare e che non sono qui nominati.