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
-
$\delta$ , una funzione$\delta (Q,I) \rightarrow Q$ -
$q_0$ , stato iniziale (unico) - F, l'insieme di stati finali
Formalmente le stringhe appartenenti al linguaggio sono
Ricordati che l'automa si ferma solo quando la stringa è finita. Dopo di che controllerà se si trova in uno stato di accettazione.
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.
Importante teorema che ci dice che se digerisco una stringa S, la quale
Se
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:
$A \cup B = \neg (\neg A \cap \neg B)$ ovvero: due complementi, la loro intersezione e un altro complemento in serie.
Linguaggi dove viene richiesta 'una memoria' creano problemi.