λ Teoria del calcolo

Minimizzare un automa: Myhill-Nerode e stati equivalenti

Come si riduce un DFA al numero minimo di stati: stati indistinguibili, algoritmo per raffinamento di partizioni e teorema di Myhill-Nerode con esempi.

Due automi diversi possono riconoscere lo stesso linguaggio. Uno può avere tre stati, l'altro trenta. Fra tutti i DFA equivalenti ne esiste uno con il minimo numero di stati, ed è unico a meno di rinominare gli stati. Questo fatto, insieme al teorema di Myhill-Nerode che lo spiega, è uno dei risultati più eleganti della teoria degli automi e ha ricadute pratiche immediate: automi più piccoli occupano meno memoria e si confrontano facilmente.

Stati indistinguibili

Dato un DFA, due stati p e q sono indistinguibili se per ogni stringa w l'automa, partendo da p e leggendo w, accetta esattamente quando, partendo da q e leggendo w, accetta. In altre parole, nessun esperimento sul futuro dell'input può separarli.

Se invece esiste una stringa w che porta uno dei due in uno stato accettante e l'altro no, i due stati sono distinguibili, e w è una stringa testimone.

Gli stati indistinguibili sono ridondanti: si possono fondere in un solo stato senza cambiare il linguaggio. Minimizzare significa proprio:

  1. eliminare gli stati non raggiungibili dallo stato iniziale;
  2. fondere fra loro tutti gli stati indistinguibili.

L'algoritmo per raffinamento di partizioni

Il metodo più diffuso per trovare gli stati indistinguibili procede per raffinamenti successivi.

  1. Si parte da due blocchi: gli stati accettanti e quelli non accettanti. Sono certamente distinguibili dalla stringa vuota.
  2. Si esamina ogni blocco: due stati dello stesso blocco restano insieme solo se, per ogni simbolo, le loro transizioni portano in stati dello stesso blocco.
  3. Se un blocco contiene stati che vanno in blocchi diversi, lo si divide.
  4. Si ripete finché nessun blocco si divide più.

I blocchi finali sono gli stati del DFA minimo. Le transizioni si ereditano da qualunque rappresentante del blocco, perché per costruzione tutti i suoi membri si comportano allo stesso modo.

Un esempio svolto

Consideriamo un DFA su {a, b} con stati 1, 2, 3, 4, 5, dove 1 è iniziale e 4 e 5 sono accettanti. Le transizioni sono:

Stato a b
1 2 3
2 4 3
3 2 3
4 5 3
5 5 3

Partizione iniziale: {1, 2, 3} e {4, 5}.

Esaminiamo {1, 2, 3}. Con a, lo stato 1 va in 2 (primo blocco), lo stato 2 va in 4 (secondo blocco), lo stato 3 va in 2 (primo blocco). Lo stato 2 si separa: otteniamo {1, 3}, {2}, {4, 5}.

Esaminiamo {1, 3}: con a entrambi vanno in 2, con b entrambi in 3. Restano insieme. Esaminiamo {4, 5}: con a entrambi in 5, con b entrambi in 3. Restano insieme.

Nessun blocco si divide più. Il DFA minimo ha tre stati: A = {1, 3}, B = {2}, C = {4, 5}. Riconosce le stringhe che terminano con «aa», e si vede subito che tre stati bastano: «nessuna a finale», «una a finale», «almeno due a finali».

Il teorema di Myhill-Nerode

Il teorema sposta il discorso dagli automi ai linguaggi. Dato un linguaggio L, due stringhe x e y sono equivalenti rispetto a L se per ogni stringa z vale: xz ∈ L se e solo se yz ∈ L. È una relazione di equivalenza, e conta quante «situazioni diverse» il linguaggio richiede di distinguere.

Il teorema afferma:

L è regolare se e solo se questa relazione ha un numero finito di classi di equivalenza. In tal caso il numero di classi è esattamente il numero di stati del DFA minimo per L.

Il collegamento con l'algoritmo è diretto: ogni stato del DFA minimo corrisponde a una classe di stringhe che il linguaggio non sa distinguere.

Usare Myhill-Nerode per la non regolarità

Il teorema fornisce una tecnica spesso più pulita del pumping lemma. Basta trovare un insieme infinito di stringhe a due a due distinguibili.

Per L = {aⁿbⁿ : n ≥ 0}, consideriamo le stringhe a, aa, aaa, … Prese aⁱ e aʲ con i ≠ j, la stringa z = bⁱ le distingue: aⁱbⁱ è in L, aʲbⁱ no. Le classi sono infinite, quindi L non è regolare. Non ci sono quantificatori alternati né scomposizioni da analizzare.

Perché la minimizzazione conta in pratica

  • Equivalenza: per sapere se due DFA riconoscono lo stesso linguaggio si minimizzano entrambi e si verifica che siano identici a meno di rinominare gli stati.
  • Efficienza: gli analizzatori lessicali generati automaticamente passano spesso per una fase di minimizzazione, perché la costruzione dei sottoinsiemi può produrre molti stati ridondanti.
  • Comprensione: il DFA minimo rivela la struttura essenziale del linguaggio, cioè quante informazioni sul passato bisogna davvero conservare.

In sintesi

  • Due stati sono indistinguibili se nessuna stringa futura li separa; fonderli non cambia il linguaggio.
  • L'algoritmo parte da accettanti e non accettanti e divide i blocchi finché le transizioni sono coerenti.
  • Il DFA minimo è unico a meno di rinominare gli stati.
  • Myhill-Nerode: L è regolare se e solo se le classi di stringhe indistinguibili sono finite.
  • Trovare infinite stringhe a due a due distinguibili è un modo pulito per provare la non regolarità.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche