Sintesi modulare

La sintesi modulare è la costruzione di un sistema complesso composto da più sottosistemi semplici detti moduli.

In un automa DFA i moduli sono collegati tra loro tramite composizione concorrente.

Ogni modulo è un automa semplice, ha un proprio alfabeto e i propri stati.

$$ E' = \{ a,b \} \\ E" = \{ b,c \} $$

L'alfabeto complessivo è dato dall'unione di tutti gli alfabeti dei moduli.

$$ E=E'∪E" = \{ a,b,c \} $$

Nota. Se i moduli sono automi deterministici (DFA) allora anche la sintesi modulare è un automa deterministico. Tuttavia, le proprietà dei moduli non si trasferiscono alla sintesi. Ad esempio, se i moduli sono rifiniti, non è detto che la sintesi sia un automa rifinito, potrebbe anche essere bloccante e viceversa.

Gli eventi sincronizzati e non sincronizzati

L'alfabeto complessivo di un automa non è detto che sia un insieme delle parti perché alcuni alfabeti potrebbero intersecarsi tra loro.

un esempio pratico di alfabeti ed eventi sincronizzati

Quindi alcuni simboli dell'alfabeto (eventi) sono presenti in più moduli. $$ E' ⋂ E" $$

Questo mi permette di distinguere tra gli eventi sincronizzati e non.

  • Eventi sincronizzati
    Sono gli eventi che appartengono a due o più alfabeti (E' ⋂ E"). Questi eventi dipendono anche dallo stato simultaneo che si presenta in due o più moduli.
  • Eventi non sincronizzati
    Sono gli eventi che appartengono a un solo alfabeto. Determinano la transizione da uno stato all'altro in un modulo, indipendentemente dallo stato negli altri moduli.

I sottoinsiemi sincronizzati e non sincronizzati formano una partizione dell'alfabeto complessivo.

La composizione concorrente

La composizione concorrente di due moduli G' e G" è un automa G con un linguaggio generato e un linguaggio accettati uguale alla composizione concorrente dei linguaggi generati dai moduli che lo compongono. $$ L(G) = L(G') || L(G") $$ $$ L_m(G) = L_m(G') || L_m(G") $$

Come creare un automa modulare

Per creare un automa modulare ho bisogno di almeno due automi G' e G".

  • Unisco i due alfabeti E' e E" in un unico alfabeto E
  • Seleziono come stato iniziale il prodotto cartesiano (x'0,x"0) degli stati iniziali dei due automi.
  • Creo un insieme X = {} con gli stati esplorati
  • Creo un insieme W = { } con gli stati da esplorare
  • Inserisco lo stato (x'0,x"0) in W
  • Estraggo uno stato w da esplorare da W
  • Controllo le transizioni in uscita dallo stato w per ogni evento dell'alfabeto E={a,b,c}
    • Se l'evento è sincronizzato
      x'=(x',e)
      x"=(x",e)
    • Se l'evento non è sincronizzato
      se e∈E' → x'=(x',e)
      se e∈E"→ x"=(x",e)
  • Se le transizioni precedenti sono definite, aggiungo la transizione d(x,e)=(x',x") alla sintesi modulare. Poi aggiungo lo stato (x',x") in W nell'insieme degli stati da esplorare se non è già presente in X e in W.

    Nota. Se le transizioni non sono definite (a seconda del caso) non aggiungo alcun nuovo stato alla sintesi modulare, né agli stati da esplorare.

  • Estraggo un nuovo stato dall'insieme degli da esplorare W e ricomincio la procedura.
  • L'algoritmo termina quando l'insieme W è vuoto.

Un esempio pratico

Voglio usare i due automi come moduli di un automa complesso G tramite la procedura di sintesi modulare.

Ho due automi semplici G' e G".

esempio di automi semplici

I due automi hanno alfabeti diversi

$$ E' = \{ a,b \} \\ E" = \{ b,c \} $$

L'alfabeto complessivo è

$$ E=E'∪E" = \{ a,b,c \} $$

Quindi l'evento b è un evento sincronizzato mentre gli eventi a,c non lo sono.

Scelgo come stato iniziale dell'algoritmo complesso il prodotto cartesiano degli stati iniziali x0 e x2 dei due automi semplici.

$$ x_5 = < x_0, x_2> $$

Il digrafo della sintesi modulare comincia così

il primo stato del digrafo

Creo due insiemi X e W.

In X inserisco i gli stati analizzati mentre in W gli stati da esplorare.

Inizialmente in W inserisco lo stato iniziale x5 = <x0,x2>.

$$ X = \{ \} \\ W = \{x_5\} $$

1] Analisi del primo stato <x0,x2>

Prelevo uno stato da W, lo elimino da W e lo sposto in X.

$$ X = \{ x_5 \} \\ W = \{ \} $$

E' lo stato x5.

$$ x_5 = < x_0, x_2> $$

Poi analizzo le transizioni dallo stato per ogni evento dell'alfabeto.

  • evento "a" = non simmetrico
    L'evento "a" appartiene soltanto all'automa G'. Pertanto, modifico soltanto il primo membro del prodotto cartesiano <x0,x2> $$ δ(x_0, a) = x_1 $$ La transizione è definita. Ho così trovato un nuovo stato <x1,x2> dell'automa di sintesi $$ x_6 = <x_1, x_2> $$ Lo aggiungo agli stati da visitare W = { x6 }.
    la costruzione dell'automa di sintesi modulare
  • evento "b" = simmetrico
    L'evento "b" è simmetrico perché appartiene sia a G' che a G". Quindi, devo modificare entrambi i membri del prodotto cartesiano <x0,x2> $$ δ(x_0, b) = ND \\ δ(x_2, b) = ND $$ Le transizioni non sono definite. Non faccio nulla.
  • evento "c" = non simmetrico
    L'evento "c" non è simmetrico e appartiene soltanto all'automa G". Pertanto, modifico solo il secondo membro del prodotto cartesiano <x0,x2> $$ δ(x_2, c) = ND $$ La transizione non è definita in G". Non faccio nulla

2] Analisi dello stato <x1,x2>

Prelevo uno stato da W, lo elimino da W e lo sposto in X.

$$ X = \{ x_5, x_6 \} \\ W = \{ \} $$

E' lo stato x6.

$$ x_6 = < x_1, x_2> $$

Poi analizzo le transizioni dallo stato per ogni evento dell'alfabeto.

  • evento "a" = non simmetrico
    Modifico soltanto il primo membro del prodotto cartesiano <x1,x2> $$ δ(x_1, a) = ND $$ Non è definito. Non faccio nulla.
  • evento "b" = simmetrico
    Modifico entrambi i membri del prodotto cartesiano <x1,x2> $$ δ(x_1, b) = x_0 \\ δ(x_2, b) = x_3 $$ Le transizioni sono definite e puntano verso il prodotto cartesiano <x0,x3>. Non esiste ancora. Quindi creo un nuovo stato x7=<x0,x3> e lo aggiungo in W.
    aggiungo un nuovo stato
  • evento "c" = non simmetrico
    Modifico solo il secondo membro del prodotto cartesiano <x1,x2> $$ δ(x_2, c) = ND $$ La transizione non è definita in G". Non faccio nulla

3] Analisi dello stato <x0,x3>

Prelevo uno stato da W, lo elimino da W e lo sposto in X.

$$ X = \{ x_5, x_6, x_7 \} \\ W = \{ \} $$

E' lo stato x7.

$$ x_7 = < x_0, x_3> $$

Poi analizzo le transizioni dallo stato per ogni evento dell'alfabeto.

  • evento "a" = non simmetrico
    Modifico soltanto il primo membro del prodotto cartesiano <x0,x3> $$ δ(x_0, a) = x_1 $$ E' definita. Sostituisco x1 a x0 e ottengo <x1,x3>. Il prodotto cartesiano non esiste ancora. Quindi creo un nuovo stato x8=<x1,x3> e lo aggiungo a W.
    il nuovo stato X8
  • evento "b" = simmetrico
    Modifico entrambi i membri del prodotto cartesiano <x0,x3> $$ δ(x_0, b) = ND \\ δ(x_3, b) = x_4 $$ Una transizione non è definita. Quindi, non faccio nulla.
  • evento "c" = non simmetrico
    Modifico solo il secondo membro del prodotto cartesiano <x0,x3> $$ δ(x_3, c) = x_2 $$ E' definita. Sostituisco x2 a x3 e ottengo <x0,x2>. Il prodotto cartesiano esiste già, è lo stato x5. Quindi aggiungo soltanto una transizione per "c" da x7 a x5.
    la transizione da x7 a x5

4] Analisi dello stato <x1,x3>

Prelevo uno stato da W, lo elimino da W e lo sposto in X.

$$ X = \{ x_5, x_6, x_7, x_8 \} \\ W = \{ \} $$

E' lo stato x8.

$$ x_8 = < x_1, x_3> $$

Poi analizzo le transizioni dallo stato per ogni evento dell'alfabeto.

  • evento "a" = non simmetrico
    Modifico soltanto il primo membro del prodotto cartesiano <x1,x3> $$ δ(x_1, a) = ND $$ Non è definita. Non faccio nulla.
  • evento "b" = simmetrico
    Modifico entrambi i membri del prodotto cartesiano <x1,x3> $$ δ(x_1, b) = x_0 \\ δ(x_3, b) = x_4 $$ E' definita. Ottengo il prodotto cartesiano <x0,x4>. Il prodotto cartesiano non è definito. Quindi creo un nuovo stato x9=<x0,x4> e lo aggiungo a W.
    il nuovo stato X9
  • evento "c" = non simmetrico
    Modifico solo il secondo membro del prodotto cartesiano <x1,x3> $$ δ(x_3, c) = x_2 $$ E' definita. Sostituisco x2 a x3 e ottengo <x1,x2>. Il prodotto cartesiano esiste già, è lo stato x6. Quindi aggiungo soltanto una transizione per "c" da x8 a x5.
    la transizione da x8 a x5

5] Analisi dello stato <x0,x4>

Prelevo uno stato da W, lo elimino da W e lo sposto in X.

$$ X = \{ x_5, x_6, x_7, x_8, x_9 \} \\ W = \{ \} $$

E' lo stato x9.

$$ x_9 = < x_0, x_4> $$

Poi analizzo le transizioni dallo stato per ogni evento dell'alfabeto.

  • evento "a" = non simmetrico
    Modifico soltanto il primo membro del prodotto cartesiano <x0,x4> $$ δ(x_0, a) = x_1 $$ E' definita. Il prodotto cartesiano è <x1,x4>. Non esiste ancora, quindi creo un nuovo stato X10 e lo aggiungo a W.
    aggiungo il nodo x10
  • evento "b" = simmetrico
    Modifico entrambi i membri del prodotto cartesiano <x0,x4> $$ δ(x_0, b) = ND \\ δ(x_4, b) = ND $$ Non è definita. Non faccio nulla.
  • evento "c" = non simmetrico
    Modifico solo il secondo membro del prodotto cartesiano <x0,x4> $$ δ(x_4, c) = x_3 $$ E' definita. Sostituisco x3 a x4 e ottengo <x0,x3>. Il prodotto cartesiano esiste già, è lo stato x7. Quindi aggiungo soltanto una transizione per "c" da x9 a x7.
    la transizione da x8 a x5

6] Analisi dello stato <x1,x4>

Prelevo uno stato da W, lo elimino da W e lo sposto in X.

$$ X = \{ x_5, x_6, x_7, x_8, x_9, x_{10} \} \\ W = \{ \} $$

E' lo stato x10.

$$ x_{10} = < x_1, x_4> $$

Poi analizzo le transizioni dallo stato per ogni evento dell'alfabeto.

  • evento "a" = non simmetrico
    Modifico soltanto il primo membro del prodotto cartesiano <x1,x4> $$ δ(x_1, a) = ND $$ Non è definita. Non faccio nullo.
  • evento "b" = simmetrico
    Modifico entrambi i membri del prodotto cartesiano <x1,x4> $$ δ(x_1, b) = x_0 \\ δ(x_4, b) = ND $$ Una transizione non è definita. Non faccio nulla.
  • evento "c" = non simmetrico
    Modifico solo il secondo membro del prodotto cartesiano <x1,x4> $$ δ(x_4, c) = x_3 $$ E' definita. Sostituisco x3 a x4 e ottengo <x1,x3>. Il prodotto cartesiano esiste già, è lo stato x8. Quindi aggiungo soltanto una transizione per "c" da x10 a x8.
    la transizione da x10 a x8

Non ci sono più stati da esplorare in W. L'algoritmo termina qui.

Ho creato la sintesi modulare dei due automi.

la transizione da x10 a x8

La sintesi è composta da 6 stati.

Nota. Il numero degli stati della sintesi è legato al numero degli stati nei moduli. Il primo automa ha n1=2 stati. Il secondo automa ha n2=3 stati. La composizione concorrente è composta da n1·n2 stati ossia 2·3=6 stati. Quindi, la cardinalità dello spazio degli stati cresce in modo esponenziale. Se avessi n moduli con k stati ciascuno, la composizione concorrente avrebbe nk stati. Questo problema è detto esplosione dello spazio degli stati. Posso evitarlo usando le reti di Petri.

E così via

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base