Automi a stati finiti
FSA o ASF
Astrazione del calcolo, che opera su un certo linguaggio e le sue stringhe. Tempo discreto, cioè quantizzato a passi. Passi che ci permettono di spostarci in un sistema finito di stati. Qualsiasi problema/comportamento scrivibile come una sequenza finita di stati può essere modellizzato da un FSA (Finite State Automaton). Un FSA è una tupla :
- Q , un insieme di stati finito
- I , un alfabeto d’ingresso
- , una funzione
- , stato iniziale (unico)
- F, l’insieme di stati finali
Formalmente le stringhe appartenenti al linguaggio sono Se l’FSA è un traduttore/trasduttore di linguaggi avrà anche una funzione dove O è un linguaggio di uscita.
Ricordati che l’automa si ferma solo quando la stringa è finita. Dopo di che controllerà se si trova in uno stato di accettazione.
Automa a stati finiti che riconosce numeri divisibili per 3 in base 10
Si basa sul concetto di tenere il conto delle cifre modulo 3. Ragionamento applicabile per qualsiasi altro ASF in cui bisogna valutare la divisibilità per un certo numero.
{width=75%}
Pumping Lemma
Importante teorema che ci dice che se digerisco una stringa S, la quale (dove |Q| è la cardinalità/numero degli stati della FSA) , allora posso digerire digerire un linguaggio infinito (fatto cioè di infinite stringhe di lunghezza finita).
{width=60%}
Se , allora esistono uno stato e una stringa tali che: con Perciò vale anche quanto segue: Cioé si può “pompare” w. Con il Pumping Lemma si puó ad esempio dimostrare che il linguaggio non è riconosciuto da nessun FSA. Ma ci permette anche di sapere se un FSA riconosce un linguaggio infinito con questa condizione: O se un FSA riconosce un linguaggio non vuoto tramite questa condizione:
Operazioni insiemistiche su FSA
Possiamo fare complemento (negazione), unione, intersezione di automi a stati finiti. Complemento: Riconoscere tutte le stringhe che non appartengono al linguaggio, e quindi non riconoscere neanche una stringa che apparteniene al linguaggio.
- scrivere la FSA completa (totale), cioè esplicitare tutti gli stati pozzo (cioè di errore)
- invertire gli stati finali con quelli di non accettazione della stringa
Intersezione: Riconoscere le stringhe che appartengono ad entrambi i linguaggi.
- Si fa il prodotto cartesiano degli stati dei due automi.
- Lo stato iniziale è quello deteterminato dal prodotto cartesiano dei due stati iniziali. Sono invece stati finali tutti quegli stati prodotti dagli stati finali.
Unione: Riconoscere le stringhe che appartengono o ad uno o all’altro linguaggio.
- Si realizza sfruttando de Morgan: ovvero: due complementi, la loro intersezione e un altro complemento in serie.
FSA belli fino a quando non bisogna riconoscere
Linguaggi dove viene richiesta ‘una memoria’ creano problemi.