Equivalenza
NFA e DFA
Si può dimostrare che per ogni NFA , esiste un DFA tale che .
Dato con possibili -transizioni, si vuole costruire :
- , per cui ogni stato di rappresenta un livello dell'albero di computazione di
dove è l'insieme degli stati raggiungibili da qualche con o più -transizioni.
Per esempio, l'NFA
è convertibile nel seguente DFA:
che è il risultato delle seguenti transizioni, che partono da :
Regex
L'equivalenza si dimostra perchè è regolare sse esiste una regex tale che :
-
Condizione necessaria ()
Si può dimostrare che è regolare per induzione sulla struttura di , infatti:
-
Sia per qualche allora è regolare perchè:
-
Sia allora è regolare perchè:
-
Sia allora è regolare perchè:
-
Sia allora è regolare per ipotesi induttiva, ovvero perchè l'operazione di unione è chiusa e a causa dei casi precedenti e sono già regolari
-
Sia allora è regolare per ipotesi induttiva
-
Sia allora è regolare per ipotesi induttiva
-
-
Condizione sufficiente ()
Essendo regolare, esiste un DFA associato e lo si potrà trasformare in GNFA (o NFA generalizzato):
La riduzione è possibile perchè ogni arco del GNFA è etichettato da regex, e il processo consisterà nel:
- Aggiungere un nuovo stato iniziale che va verso con una -transizione
- Aggiungere un nuovo stato finale verso cui vanno gli stati di con -transizioni
- Modificare il GNFA rimuovendo uno stato di e usando le regex perchè riconosca
- Ripetere l'ultimo punto finchè non rimangono più stati di
Per esempio, partendo con un DFA: