Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
??
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
start
off on
start
off on
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