Un automa non deterministico è un’automa che in qualsiai stato corrente può avere più stati prossimi.

Il non determinismo è una generalizzazione del determinismo, quindi ogni NFA è automaticamente un automa deterministico a stati finiti (DFA).

Un Non deterministic Finite state Automaton è una quintupla , dove corrispondono a quelle del DFA, mentre la differenza della funzione di transizione è che da ogni stato del NFA si può transitare verso più stati.

  • è l’insieme delle parti di .
  • è un’etichetta degli archi che procedono da uno stato al prossimo automaticamente, senza dover ricevere un input .

Dal punto di vista dei cammini di computazione, i DFA ne compiono solo uno, e alla fine rifiutano o accettano la stringa in input. Invece gli NFA, i cammini di computazione possono “sdoppiarsi”: a ogni transizione da uno a stati, l’automa crea copie di se stesso, le quali continuano l’esecuzione in parallelo.

I linguaggi riconosciuti da un NFA sono quelli le cui stringhe sono riconosciute da almeno un suo cammino di computazione.

Gli NFA possono avere degli -archi, cioè archi che portano da uno stato all’altro a prescindere dall’input, cioè sempre e in automatico.

Esempio

Esempio di input

Esecuzione:

Dimostrazione che i linguaggi riconosciuti dagli NFA sono gli stessi riconosciuti dai DFA, cioè i linguaggi regolari

Due automi si dicono equivalenti se riconoscono lo stesso linguaggio.

Teorema: I DFA e i NFA riconoscono gli stessi linguaggi, cioè i linguaggi regolari.

Dimostrazione:

  1. Banalmente perchè, per definizione, un DFA è un caso speciale di un NFA.
  2. Ora bisogna dimostrare .
    1. Sia un NFA tale che . Devo mostrare che esiste un DFA tale che . Per costruire il DFA bisogna unire tutti i possibili cammini di computazione esplorati dal NFA in un singolo DFA.
    2. Quindi , cioè quando sta in più stati contemporaneamente, è in uno solo stato . Ogni elemento di questo insieme (delle parti) rappresenta più stati di allo stesso tempo.
    3. Definiamo i componenti della tupla di che ci mancano:
      1. : Per lo stato iniziale vale .
      2. : Quand’è che accetta una stringa? Quando almeno uno dei suoi cammini la accetta. Di conseguenza, deve accettare una stringa quando almeno uno dei cammini di la accetta. (cioè contiene almeno uno stato finale di ).
      3. la funzione di transizione deve essere definita come . Inoltre ogni stato di contenuto all’interno di uno stato di deve puntare all’insieme dato dall’unione di tutti gli stati di raggiungibili da esso, cioè .
    4. Aggiungiamo gli -archi. Cosa cambia? (nota: è l’insieme di stati di raggiungibili tramite 0 o più archi).
      1. Definiamo .
      2. Definiamo
    5. Abbiamo ottenuto il DFA Equivalente al NFA .

Esercizio

1. Definizione degli stati

2. Definizione dello stato iniziale

3. Definizione degli stati finali

4. Definizione della funzione di transizione

Considero i diversi casi:

  • Nello stato :
    • se legge può transitare in , cioè .
    • se legge va in uno stato pozzo, cioè .
  • Nello stato :
    • se legge può transitare in e , cioè .
    • se legge può transitare in , cioè .
  • Nello stato :
    • se legge può transitare in , cioè . Nell’insieme c’è anche perché si prende immediatamente l’-arco da .
    • se legge va in uno stato pozzo, cioè .

N.B.: Per un qualsiasi stato si deve MAI definire , ma accorpare la destinazione dell’-arco nella degli altri input, cioè .

Disegno del DFA