Automi a stati finiti

Note

Gli automi a stati finiti sono dei semplici modelli operativi di calcolo. Modellano il calcolo come una serie di passi discreti da una condizione (stato) alla successiva. Gli FSA hanno memoria del calcolo formata da un insieme finito di stati.
Formalmente, è costituito da:

  • L'insieme finito dei suoi stati
  • L'alfabeto dei simboli in ingresso
  • Una funzione di transizione, che mappa una coppia in uno stato di destinazione
  • Stato iniziale dell'automa
  • L'insieme di stati finali

È possibile usare un FSA per riconoscere le parole di un linguaggio. Se l'automa, leggendo una stringa, partendo da termina in uno stato finale, la stringa appartiene al linguaggio.

FSA Riconoscitore

Note

Possiamo formalizzare l'accettazione di un linguaggio su , da parte di un FSA come: Dove , è una sequenza di mosse, estensione di induttivamente definita come:

Esempio

Di seguito un FSA riconoscitore per un linguaggio
center

Esempio

Di seguito un FSA riconoscitore del linguaggio degli identificatori del linguaggio c. Si ha che è definito su :
center

FSA Traduttore

Note

Un FSA traduttore da a associa un simbolo letto e uno scritto a ogni transizione.
center
Formalmente un FSA traduttore è una -upla , dove:

  • sono come nell'FSA riconoscitore
  • è l'alfabeto di uscita
  • è la funzione di traduzione.

Formalizziamo, analogamente a , come successione di traduzioni di elementi, e quindi come traduzione di stringhe: Di conseguenza l'intero calcolo della traduzione è formalizzato come:

Esempio

Di seguito un FSA traduttore che traduce da a , entrambi definiti su , con un numero di pari, aventi funzione di traduzione che dimezza gli e raddoppia gli .
center

Pumping lemma

Note

Il pumping lemma è la formalizzazione di un comportamento ciclico in un FSA, cioè l'esistenza di un ciclo percorribile volte.
Il pumping lemma afferma che se , dove è un linguaggio riconosciuto da un FSA, con (dove è l'insieme degli stati), allora esistono e tali che con e , cioè esiste una sottostringa di che viene riconosciuta dall'automa effettuando un'iterazione su un ciclo di stati.

Dal pumping lemma consegue che , che segue dal poter effettuare zero o più iterazioni del ciclo.

Si può dire, con la condizione , se allora , cioè che se una parola ha "cicli di riconoscimento" è possibile eliminarli, ed è possibile dare in pasto le all FSA e verificare se almeno una appartiene a .

Inoltre si può dire, se , allora , cioè ha un ciclo di riconoscimento.

Limitazioni degli FSA

Un FSA non può riconoscere un linguaggio .
Per dimostrarlo, sia con . Applicando il pumping lemma si ha che , con una tra le seguenti forme:

  • , pompando ottengo che è assurdo.
  • , pompando ottengo che è assurdo.
  • , pompando ottengo che è assurdo.

Linguaggi regolari

Note

La famiglia di linguaggi riconoscibili con un FSA è detta famiglia dei linguaggi regolari o REG. Si ha che è chiusa rispetto a .

Famiglie di linguaggi

Una famiglia di linguaggi è un insieme i cui elementi sono linguaggi . è chiusa rispetto ad un operazione binaria se vale .

Intersezioni tra linguaggi regolari

Note

Dati due FSA riconoscitori:
center
È possibile ottenere il riconoscitore del linguaggio intersezione facendoli funzionare insieme, con la condizione che di effettuare una transizione solo se c'è in entrambi:
center
Formalmente, dati due FSA e , si ha che l'automa intersezione è dato da:

  • Insieme degli stati
  • Alfabeto
  • Funzione di transizione
  • Insieme degli stati finali

Inoltre si ha che:

Esempio

Dati due FSA:
center
Si ha nel FSA intersezione che lo stato in rosso non è raggiungibile dallo stato iniziale e quindi può essere eliminato, e che con la costruzione a punto fisso a partire da non viene neppure aggiunto:
center

Unione di linguaggi regolari

Note

Formalmente, dati due automi e , l'automa unione è dato da:

  • Insieme degli stati
  • Alfabeto
  • Funzione di transizione
  • Insieme degli stati finali

In alternativa è possibile applicare la legge di De Morgan:

Complemento di linguaggi regolari

Note

Si ha che in ogni FSA esiste uno stato non accettante implicito, detto stato di errore. Aggiunto quello è possibile scambiare gli stati finali e gli stati non finali .