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 :

  1. Condizione necessaria ()

    Si può dimostrare che è regolare per induzione sulla struttura di , infatti:

    1. Sia per qualche allora è regolare perchè:

    2. Sia allora è regolare perchè:

    3. Sia allora è regolare perchè:

    4. Sia allora è regolare per ipotesi induttiva, ovvero perchè l'operazione di unione è chiusa e a causa dei casi precedenti e sono già regolari

    5. Sia allora è regolare per ipotesi induttiva

    6. Sia allora è regolare per ipotesi induttiva

  2. 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:

    1. Aggiungere un nuovo stato iniziale che va verso con una -transizione
    2. Aggiungere un nuovo stato finale verso cui vanno gli stati di con -transizioni
    3. Modificare il GNFA rimuovendo uno stato di e usando le regex perchè riconosca
    4. Ripetere l'ultimo punto finchè non rimangono più stati di

    Per esempio, partendo con un DFA: