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.