Sei sulla pagina 1di 42

Giuseppa Castiglione

Il libro
Informazioni
• giuseppa.cas1glione@unipa.it
• giusi.cas1glione@gmail.com
• Pagina personale nel portale unipa.
• Registrarsi al corso

– Prenotazione ricevimento
– Materiale dida;co
– Avvisi
Svolgimento delle lezioni
• Slides;
• Lavagna;
• Uso di JFLAP;
Esami
• Prova scritta
• Prova orale
• Prova in itinere – durante la pausa didattica di
novembre
• Nella scheda di trasparenza il metodo di
valutazione
Cos’è l’informatica teorica
L'informatica teorica si pone come obbiettivo lo
studio dei fondamenti dell’informatica.
E’ fortemente legata a domande circa
• l'esistenza di soluzioni algoritmiche per un
problema,
• limiti fisici del calcolo automatico,
• le metodologie usate nella progettazione di
algoritmi.
Cos’è l’informa9ca teorica
La necessità di formalizzare un processo di
calcolo, sia mediante la definizione di una
macchina calcolatrice che aNraverso sistemi
formali di calcolo, ha portato all’analisi della
calcolabilità di Turing e Church nel 1936.
Cos’è l’informatica teorica
• Uno degli obiettivi principali dell’informatica teorica è
lo studio matematico della computazione
• calcolabilità : cosa è calcolabile ??
complessità: cosa posso calcolare in maniera efficiente
??

• Per studiare la calcolabilità è necessario


- sviluppare modelli astratti di calcolo : teoria degli
automi
- sviluppare una rappresentazione dei problemi
informatici e studiare le loro proprietà : teoria dei
linguaggi formali
Obbiettivi del corso
In questo corso si introducono i seguenti strumenti
formali:
automi a stati finiti e linguaggi regolari

linguaggi formali e gerarchia di grammatiche di


Chomsky
macchine di Turing e macchina di Turing universale
nozioni sulle funzioni ricorsive, sulla teoria generale della
calcolabilità, sulla teoria della complessità, sui problemi
NP-completi nel contesto della teoria della trattabilità.
E’ un modello di calcolo astratto usato per
• per la progettazione di circuiti digitali.
• Analizzatori lessicali di un compilatore.
• Ricerca di parole in un testo (in un file o sul
web).
• Modellare e verificare un qualunque sistema a
stati finiti
• Automa a sta1 fini1 : Insieme finito di sta1 con
regole di transizione che portano da uno stato
all’altro
• Li rappresen1amo tramite grafi i cui nodi
rappresentano gli sta1 e gli archi
rappresentano le transizioni
p

start
off on

p
• Un sistema che modella meccanismo capace di
ricevere un messaggio in ingresso e dare una
risposta in uscita.
• Un esperimento sul sistema consiste in due passi:
– Viene proposta una sequenza di messaggi in ingresso,
descri; da parole.
– Al termine, viene effeNuata una osservazione: se il sistema
si trova in un determinato stato specificato il risultato è 1 e
la parola viene acceNata, altrimen1 respinta.
• Poiché possiamo accedere al sistema solo aNraverso
esperimen1, il comportamento del sistema è descriNo
dall’insieme di parole acceNate;
• Per questo vediamo l’automa come riconoscitore di
linguaggi.
Nota
il comportamento del sistema può essere descritto

dall’insieme delle parole accettate da un automa

attraverso un espressione regolare

attraverso una grammatica


p

start
off on

• Lo stato ‘iniziale del sistema è off


• Intendiamo lo stato di ‘accesso’ come risposta positiva.
Quali esperimenti riceveranno una risposta positiva?
p

start
off on

{p,ppp,ppppp,ppppppp,…….} linguaggio riconosciuto


la testina non possa produrre degli output (eventualmente sul nastro) non è es-
senziale (si vedano, ad esempio, le macchine di Moore e di Mealy (Capitolo 8 e
[13]). Intuitivamente, anche se scrivesse qualcosa sul nastro, non lo potrebbe più
riutilizzare.
Neppure il permettere la bidirezionalità aumenterebbe di fatto la potenzialità del
dispositivo (two-way automata [13]). Intuitivamente, la testina andrebbe su e giù
ma sempre sugli stessi dati e con un controllo finito.
E’ la somma delle due caratteristiche che permette di passare da questo formalismo
al più potente formalismo di calcolo costituito dalle Macchine di Turing.

3. Automi deterministici
Un automa a stati finiti deterministico (DFA) è una quintupla hQ, ⌃, , q0 , Fi
dove:
• Q è un insieme finito di stati ;
34 • ⌃ è un alfabeto (alfabeto di input);
3. AUTOMI A STATI FINITI
• : Q ⇥ ⌃ ! Q è la funzione di transizione;
• q0 è lo stato iniziale;
• F ✓ Q è l’insieme degli stati finali.
Notazione 3.4. Useremo p, q, r con o senza pedici per denotare stati, P, Q, R, S
per insiemi di stati, a, b con o senza pedici per denotare simboli di ⌃, x, y, z, u, v, w
sempre con o senza pedici per denotare stringhe.
Dalla funzione si ottiene in modo univoco la funzione ^ : Q ⇥ ⌃⇤ ! Q nel modo
seguente: 8
< ^(q, ") = q
:
Il modello:
• un insieme di possibili sta1 Q:
a
– Ad ogni istante il sistema si trova in un
preciso stato q∈Q ;
start
q r – questo stato può essere modificato solo
aNraverso un messaggio a∈Σ inviato in
ingresso.
b • La legge che descrive la modifica di stato
interno causata dall’arrivo di un messaggio è
data dalla funzione di transizione δ. Se il
sistema si trova nello stato q ed arriva il
messaggio ‘a’, il sistema passa nello stato
δ(q, a).
• Prima dell’arrivo di ogni messaggio, il sistema
si trova in uno stato iniziale qo∈Q.
• Gli sta1 di acceNazione sono gli sta1 in cui
terminano gli esperimen1 posi1vi
Σ={p}
p
Q={off,on}
start
off on q0=off
F={on}
p
d(off,p)=on
d(on,p)=off
p

start
off on

p
off on
on off
La teoria dei linguaggi formali studia gli insiemi di
stringhe, cioè le frasi di un linguaggio, al fine di definire
quelle da considerare corrette e con quale significato.
Ma non è facile specificare un linguaggio completamente
e rigorosamente, essendo impossibile elencare tutte le
frasi valide, che sono infinite e di lunghezza a priori
illimitata.
• È necessario pertanto ricorrere ad un algoritmo, che,
attraverso un insieme finito di
• regole, permetta di produrre le frasi del linguaggio –
eventualmente infinite o, in
• alternativa, di verificare la loro correttezza.
L’approccio generativo
In questo caso si ricorre ad un algoritmo di enumerazione, che, attraverso un insieme
finito di regole di calcolo, permette di produrre le frasi del linguaggio – eventualmente
infinite.
Le regole dell’algoritmo di enumerazione costituiscono la cosiddetta grammatica (o
sintassi) generativa del linguaggio.

L’approccio riconoscitivo
In questo caso si ricorre ad un algoritmo che riconosce se una frase è corretta o no, e
ne determina il significato.
In pratica, invece di far uso di un algoritmo, si preferisce ricorrere ad una descrizione
più astratta, mediante il concetto di automa riconoscitore.
Gli approcci indica1 non sono gli unici impiega1 dalla teoria dei linguaggi
formali, che studia le proprietà dei linguaggi seguendo vari approcci:
Approccio genera,vo: un linguaggio viene definito come l'insieme di tuNe e sole le
stringhe che vengono prodoNe da una gramma1ca genera1va o da qualche altro
sistema di riscriNura. Questo approccio è quello normalmente usato nel manuale o nei
documen1 che descrivono il linguaggio.
Approccio riconosci,vo: un linguaggio viene definito come l'insieme di tuNe e sole
le stringhe che vengono acceNate da un automa. È l’approccio anali1co usato per
descrivere il compilatore (o interprete) di un linguaggio.
Approccio denotazionale : un linguaggio viene definito mediante espressioni
simboliche compaNe, come le espressioni regolari, che ne denotano (tuNe e sole) le
stringhe in forma concisa.
Approccio algebrico: un linguaggio viene definito aNraverso sue proprietà
algebriche.
Approccio trasformazionale: un linguaggio viene definito come oNenuto
soNoponendo a una data trasformazione un altro linguaggio, tendenzialmente più
semplice.
In matematica, logica, informatica e linguistica,
per linguaggio formale si intende
un insieme di stringhe di lunghezza finita
costruite sopra un alfabeto finito (insieme finito
di caratteri che possiamo anche chiamare
simboli dell’alfabeto o lettere dell’alfabeto).
Esempi:
{a, b, c}
{0, 1}
{α, β, γ, δ}
La cardinalità di un alfabeto è il numero di simboli
dell’alfabeto.
Se Σ denota un alfabeto, |Σ| denota la sua cardinalità.
Esempi:
|{a, b, c}| = 3
|{0, 1}| = 2
|{α, β, γ, δ}| = 4
Una stringa o parola s su un alfabeto è una sequenza (o lista)
di simboli appartenenti all’alfabeto.
Esempi:
- aabb, cac, cba, abba sono stringhe sull’alfabeto {a, b, c}
- i numeri scritti in binario sono stringhe sull’alfabeto {0, 1}
La lunghezza di una stringa s, denotata da |s| è il numero dei
suoi caratteri.
Esempi:
|aabb| = 4 |cac| = 3 |101011| = 6
La stringa vuota ε (talvolta denotata da λ) è la stringa che non
contiene nessun simbolo.
La lunghezza della stringa vuota è 0: |ε| = 0
Un linguaggio su un alfabeto è un insieme di stringhe su
quell’alfabeto.
Esempi:
- {aabb, cac, cba, abba} è un linguaggio sull’alfabeto {a, b, c}
- l’insieme dei numeri scri; in binario è un linguaggio
sull’alfabeto {0, 1}
- l’insieme vuoto è un linguaggio.
- {ε} è il linguaggio contenente la sola stringa vuota.
- L’insieme di tu; i possibili programmi C è un linguaggio.
- L’insieme di tu; i possibili iden1ficatori in un linguaggio è un
linguaggio.
La cardinalità di un linguaggio è il numero delle sue stringhe.
Se L denota un linguaggio, |L| denota la sua cardinalità.
Esempi:
-|{aabb, cac, cba, abba}| = 4
- |l’insieme dei numeri scritti in binario|=∞
Un linguaggio è finito se la sua cardinalità è finita.
Un linguaggio è infinito se la sua cardinalità è infinita.
Il linguaggio vuoto (denotato da Ø) è il linguaggio che non
contiene alcuna stringa.
|Ø| = 0
Attenzione!!!
Ø ≠ {ε}, in quanto |Ø| = 0 ≠ |{ε}| = 1
• Concatenazione di due stringhe
• Potenza di una stringa
La concatenazione di 2 stringhe è la stringa formata da tutti i simboli
della prima stringa seguiti da tutti quelli della seconda stringa.
xoy oppure xy
denota la concatenazione delle stringhe x e y
Se x = a1 . . . ah e y = b1 . . . bk allora xy = a1 . . . ah b1 . . . bk

La concatenazione non è commutativa: xoy ≠ y0x


La concatenazione è associativa: x (y z) = (x y) z
o o o o

La stringa vuota è l’elemento neutro della concatenazione:


εx = x = xε
La potenza m-esima della stringa x è la
concatenazione di x con se stessa m volte.
xm denota potenza m-esima di x
Se m=0 xm =ε
Esempi:
(abbc)3 = abbcabbcabbc
(abbc)6 = abbcabbcabbcabbcabbcabbc
La potenza ha la precedenza sulla concatenazione:
abbc3 = abbccc
I linguaggi sono insiemi!
unione
intersezione
differenza insiemistica
unione
L È M l’insieme delle stringhe di L o di M
intersezione
L Ç M è l’insieme delle stringhe sia di L che di M
differenza Ç
L – M è l’insieme delle stringhe di L che non appartengono a
M
Esempi:
{ab, abc} È {ab, aa, cb} = {ab, abc, aa, cb}
{ab, abc} Ç {ab, aa, cb} = {ab}
{ab, abc} - {ab, aa, cb} = {abc}
{ab, aa, cb} - {ab, abc} = {aa, cb}
Ç
La concatenazione
La concatenazione
LL={xy/ x,yÎL}
{xx/ xÎL}

La concatenazione

Potrebbero piacerti anche