Classe REG dei linguaggi

Un linguaggio è regolare se esiste un macchina a stati finiti che ne riconosce tutte le stringhe.

significa che l’automa riconosce .

Definire un linguaggio regolare tramite la funzione di transizione estesa

Per definire rigorosamente un , cioè il linguaggio regolare associato ad un DFA, si usa la funzione di transizione estesa.

Così un linguaggio regolare si può definire come l’insieme .

Delta star si può definire ricorsivamente in modo elegante partendo da :

N.B.: La stringa vuota sta in (Star di Kleene di ) per definizione, ma non per forza nel linguaggio, che è un sottoinsieme di .

Il linguaggio riconosciuto da un DFA è .

Proprietà dei linguaggi regolari

I linguaggi regolari hanno una chiusura rispetto ad alcune operazioni:

  • unione:
  • intersezione:
  • complemento:
  • concatenazione: dati e , si ha = ; ricorsivamente:

Per i linguaggi

Dimostrazioni

Unione

  • Tesi: e
  • Ipotesi:

Si assume che .

Difficoltà: non posso eseguire e su e vedere che succede. In qualche modo invece, bisogna costruire un DFA che li “esegue in parallelo”.

Devo definire tale che:

  • (se uno dei due stati o sono finali non ci interessa dell’altro, stiamo ragionando sull’unione)

Il resto della dimostrazione è inutile per il corso.

Ri-dimostrazioni usando gli NFA

REG è chiuso per

Dati due NFA che riconoscono rispettivamente costruisco un NFA che riconosce .

REG è chiuso per (concatenazione)

Dati due NFA che riconoscono rispettivamente costruisco un NFA che riconosce .

REG è chiusa per

Dato un NFA tale che (che riconosce ) costruisco un NFA tale che .

Mettiamo conto che riconosce , implementato con un albero di caratteri:

Per fare un DFA che riconosce bisogna copiare l’albero di e “attaccarlo” su ogni sua foglia:

Si potrebbe provare a ripetere il procedimento all’infinito per :

Ma questo non sarebbe un DFA, perché ha stati infiniti.

Però si può costruire un NFA analogo a questo partendo dal caso iniziale :

Nel caso generale, vale che: