Gli automi a stati finiti, o DFA (Deterministic Finite-state Automaton) sono macchine a stati finiti in grado di accettare o rifiutare stringhe date loro in input carattere per carettere. Sono usati per applicazioni come parser dei compilatori e riconoscimento dei pattern nei dati.

Definizione formale

Un DFA è una tupla tale che:

  • è un insieme finito di stati;
  • è un insieme finito di caratteri dell’alfabeto che compongono tutti gli input possibili;
  • è la funzione di transizione;
  • è l’insieme degli stati finali;
  • è lo stato iniziale.

Riconoscere/accettare una stringa vuol dire consumare tutti i suoi caratteri, trovandosi in uno stato finale al termine dell’esecuzione. Rifiutare una stringa vuol dire terminare l’esecuzione in uno stato non finale.

Nonostante un DFA abbia un numero finito di stati, esso può processare stringhe di lunghezza infinita in tempo finito. Ad esempio, se si dà una stringa infinita a un automa che riconosce le stringhe che iniziano con , l’automa accetterà la stringa appena riceverà .

A ogni DFA corrisponde un linguaggio

Ad ogni DFA corrisponde un linguaggio detto regolare, cioé l’insieme di tutte le stringhe che esso può riconoscere. Formalmente, (ad esempio , cioè tutte le stringhe binarie di lunghezza )

Esempi di automa

1.

            0       1
           +-+     +-+
           | |     | |
           | v  1  | v   0
start ---> q1 ----> q2 ----> q3
                    ^        |
                    |  0, 1  | 
                    +--------+
  • è l’insieme di tutti gli stati
  • è l’alfabeto
  • sono le frecce nel diagramma
  • è lo stato finale
  • è lo stato iniziale

N.B.: Se si disegna un automa incompleto (per semplicità) che raggiunto un carattere non sa che fare, per convenzione allora quella stringa non è contenuta nel linguaggio.

Esempio di esecuzione con input :

L’automa termina il processing in , che è lo stato finale, quindi la stringa viene riconosciuta.

2. progettare un DFA che accetta solo le stringhe che iniziano con “1”

             1
start -> q0 ---> [q1] --+
          |       ^     |
          | 0     |     | 0, 1
          v       +-----+
      +-> q2
 0, 1 |   |
      +---+

è lo stato finale.

N.B.: Per far rifiutare la stringa, bisogna far andare l’automa in loop su un vicolo cieco, detto stato pozzo.

Correttezza

Bisogna dimostrare entrambe le tesi:

Si può dimostrare sia per induzione che con , ma è scontato e noioso.

3. Esercizio per casa