Professional Documents
Culture Documents
.
Esempio. Dato lalfabeto = a, b, c, d x = aababc e y = dacadc sono due parole
costruite con simboli di .
Esempio. a, b, c
N. (1)
Denizione 1.4 Un presso di x `e una parola y
.
Esempio. x = aabaca allora aab, aa, , aabaca sono pressi di x.
Denizione 1.5 Un susso di x `e una parola y
.
Esempio. x = aabaca allora aca, ca, , aabaca sono sussi di x.
Denizione 1.6 Il fattore di x `e una parola w
.
Esempio. x = aabaca allora ab, bac, ac, sono fattori di x.
Denizione 1.7 Una sottoparola di x `e una parola y
tale che
1. x = a
1
a
2
a
n
(a
i
, i)
2. y = a
j1
a
j2
a
jm
1 j1 j2 . . . n
In altri termini, la parola y si deriva da x eliminando un numero di simboli h (0 h n) e
mantenendo lordine dei simboli della parola di partenza.
Esempio. = a, b, c, d, e x = eabbacd y = eabcd
1 NOZIONI DI BASE 2
Denizione 1.8 Ordine lessicograco Ricordiamo innanzitutto che una relazione di ordine to-
tale su `e una relazione binaria che gode delle seguenti propriet`a:
1. a a a,
2. a, b se a b e b a a = b,
3. a, b, c se a b e b c a c,
4. a, b a b oppure b a.
Data la relazione di ordine totale su , chiamiamo ordine lessicograco su
+
la relazione
dordine totale
L
su
+
tale che:
x, y
+
x
L
y se
x = uav e y = ubw dove
_
_
u, v, w
a, b
a b e a ,= b
oppure
z
tale che xz = y
(Questultima, vale nel caso in cui x `e presso di y)
Esempio.
x = bacb y = bacc x
L
y
x = bac y = bacd x
L
y
Denizione 1.9 Ordine militare(ranking): E denito su
e lo denotiamo con
R
.
x, y
x
R
y se :
[x[ < [y[
oppure
[x[ = [y[ e x
L
y
E facile provare che per ogni alfabeto , per ogni ordine totale su e per ogni parola x
+
,
linsieme y
+
: y
R
x `e nito. Quindi linsieme delle parole che precede x `e nito.
Denizione 1.10 Rank: E la funzione rank:
N
+
, dove N
+
= N 0, tale che per ogni
x
tali che y
R
x.
Denizione 1.11 Unrank: E la funzione unrank: N
+
ovvero L
. Ad esempio
, , ,
: x A oppure x B;
2. Intersezione: linsieme A B = x
: x A e x B;
3. Complementare: linsieme A
C
= x
: x / A;
4. Dierenza: linsieme AB, denotato anche con AB = x
: x A e x / B;
5. Prodotto: linsieme A B = x
: y A, z B : x = yz
Esempio.
a a, b, c
deniamo A
0
= , A
1
= A, A
2
= A A, . . . , ovvero:
k N, A
k
=
_
_
k = 0
A k = 1
A A
k1
k > 1
(2)
Questo signica che A
k
=
: =
1
2
. . .
k
con
i
A, i = 1, . . . , k per ogni k 1.
Esempio.
2
`e linsieme delle parole su di lunghezza 2.
3
`e linsieme delle parole su di lunghezza 3.
.
.
.
k
`e linsieme delle parole su di lunghezza k.
1 NOZIONI DI BASE 4
rappresentazione delloperazione potenza dellinsieme
A = ab, cd.
7. Operazione * : Unione di tutte le potenze di un linguaggio. Per ogni linguaggio A
denotiamo con A
_
k=0
A
k
. (3)
Osserviamo che linsieme delle parole in coincide proprio con:
_
k=0
k
. (4)
8. Operazione + : Unione di tutte le potenze positive di un linguaggio. Per ogni A
deniamo
A
+
=
_
k=1
A
k
e quindi A
+
= A
(5)
1 NOZIONI DI BASE 5
1.3 Semigruppo, Monoide e Semianello
Denizione 1.12 Semigruppo: E un insieme S dotato di una legge di composizione associativa
che rappresentiamo con la coppia < S, >.
Ricordiamo che una legge di composizione su S `e una funzione che associa ad ogni coppia x, y
S, un elemento x y S. Per esempio <
+
, > `e un semigruppo dove `e loperazione di
concatenazione tra parole.
Osserviamo che loperazione `e associativa, ma non commutativa; infatti per ogni x, y, z
vale
(x y) z = x (y z) ma in generale x y `e diverso da y x.
Denizione 1.13 Monoide: E un insieme M dotato di unoperazione associativa e di un
elemento unitario 1 rispetto a che denotiamo con la tripla < M, , 1 >.
Ricordiamo che per ogni x M, x 1 = 1 x = x.
Esempio. Linsieme
), , , , >
Dove denotiamo con P(
. Osserviamo che:
1. (A B) C = (A C) (B C),
2. A (B C) = (A B) (B C).
e che il prodotto di linguaggi non `e commutativo.
1.4 Funzione coppia
La funzione coppia stabilisce una corrispondenza biunivoca tra coppie di elementi e linsieme dei
numeri naturali.
Per semplicit`a consideriamo il caso di coppie di numeri appartenenti ad N
+
anche se in realt`a questa
funzione pu`o essere estesa ad una qualsiasi coppia di elementi. Rappresentiamo sui due lati di una
matrice innita rispettivamente i due insiemi N
+
che descrivono i possibili elementi della coppia
(Fig. 2).
1 NOZIONI DI BASE 6
A questo punto la numerazione delle coppie di elementi viene eettuata diagonalizzando a com-
inciare dal primo elemento in alto a sinistra (1) e proseguendo con la posizione immediatamente
sotto (2) e continuando a numerare seguendo la diagonale ascendente (3), e cos` via...
In questo modo, ad ogni coppia di elementi x, y N
+
viene associato un numero naturale che
denotiamo proprio con lespressione (x,y). In questo modo abbiamo denito una corrispondenza
biunivoca:
(, ) : N
+
N
+
N
+
che chiamiamo funzione coppia. Notiamo che l n-sima diagonale contiene n elementi, quindi per
trovare lelemento maggiore di ciascuna basta fare la somma dei primi n numeri naturali (come in
g.2, 15 = 1+2+3+4+5). Per trovare il valore della coppia (x,y), dobbiamo conoscere il massimo
elemento k della diagonale precedente e sommargli poi la coordinata y (come in g.2, 18 = 15+3).
Per calcolare quindi k, sapendo che si trova sulla diagonale numero x + y 2, dobbiamo sommare
i primi x + y 2 numeri naturali. Per far ci`o utilizziamo la famosa formula di Gauss:
n
k=1
k =
n(n + 1)
2
(6)
Formalizzando il tutto deniamo la funzione coppia in questo modo:
x, y N
+
(x, y) =
_
_
x+y2
j=1
j
_
_
+y =
(x +y 2)(x +y 1)
2
+y (7)
Viceversa possiamo introdurre due funzioni sin e des denite su N
+
a valori in N
+
tale che per ogni
x, y N
+
se n = (x, y) allora sin(n) = x e des(n) = y.
Sin(n) = n Max
_
k(k + 1)
2
:
k(k + 1)
2
< n
_
+ 1 (8)
Des(n) = Max
_
k :
k(k + 1)
2
< n
_
sin(n) + 2 (9)
2 LINGUAGGI FORMALI E GRAMMATICHE 7
2 Linguaggi formali e grammatiche
Tra i concetti principali alla base dellinformatica, il concetto di linguaggio riveste un ruolo partico-
larmente importante. Anche se da un punto di vista matematico un linguaggio `e semplicemente un
insieme di stringhe su un dato alfabeto, nellambito dellinformatica siamo interessati a linguaggi,
generalmente inniti, le cui stringhe sono caratterizzate da qualche particolare propriet`a: ad esem-
pio, il linguaggio dei programmi C `e costituito da tutte le stringhe di simboli che sono accettate da
un compilatore C senza che venga rilevato alcun errore sintattico. Lo studio formale dei linguaggi `e
una parte importante dellinformatica teorica e trova applicazione in varie direzioni. La prima, pi` u
evidente, `e appunto lo studio delle propriet`a sintattiche dei programmi, cio`e lo studio dei metodi
di denizione della sintassi di un linguaggio di programmazione, dei metodi per la verica che un
programma soddis le propriet`a sintattiche volute e dei metodi di traduzione da un linguaggio ad
un altro (tipicamente da un linguaggio di programmazione ad alto livello al linguaggio macchina).
2.1 Linguaggi ricorsivi e ricorsivamente numerabili
Denizione 2.1 Dato un alfabeto diciamo che un linguaggio L
`e ricorsivamente nu-
merabile se esiste una procedura P che stampa tutte le parole di L. Denotiamo con RN linsieme
di tutti i linguaggi ricorsivamente numerabili.
Denizione 2.2 Un linguaggio L
`e ricorsivo, allora L
C
`e ricorsivo.
Dimostrazione. Se esiste un algoritmo A che riconosce tutte le parole x L, invertendo i valori
di output otteniamo un algoritmo per riconoscere L
C
.
Proposizione 2.5 Per ogni L
begin
r = no
i = 1
while r = no do
y = i-esima parola stampata da P
if y = x then r = si
else i = i + 1
return 1
end
Tale procedura soddisfa le condizioni 1. e 2. dellenumerato. Diciamo anche che M `e una
procedura di semidecisione per il linguaggio L.
Viceversa, supponiamo che esista una procedura M che su input x
soddis le condizioni
1. e 2. dellenunciato e dimostriamo che L RN. Deniamo quindi una procedura P:
for n N do
i = sin(n)
j = des(n)
x = unrank(i)
if M su input x termina esattamente in j passi then
print x
Si verica facilmente che x L x `e stampato da P. Infatti se x L allora M su input x si
ferma dopo k passi per qualche k; quindi quando n =< rank(x), k >, P stampa x. Viceversa
se x / L, M non si ferma mai su input x e quindi P non stampa x. Questo prova che il
linguaggio L appartiene a RN.
2 LINGUAGGI FORMALI E GRAMMATICHE 9
Si pu`o inoltre provare che linsieme dei linguaggi ricorsivamente numerabili `e a sua volta numer-
abile. Basta elencare le procedure di semidecisione associate:
P
1
P
2
P
3
. . . P
n
. . .
L
1
L
2
L
3
. . . L
n
. . .
Per la proposizione precedente tali procedure P
1
, P
2
, . . . , P
n
esistono sempre. Si pu`o provare anche
che esistono procedure P
1
, P
2
, . . . , P
n
di semidecisione per L
1
, L
2
, . . . , L
n
.
Proposizione 2.6 Esistono linguaggi ricorsivamente numerabili che non sono ricorsivi.
Dimostrazione. Vogliamo dimostrare che esiste un linguaggio L RN che non appartiene a R.
Deniamo il linguaggio L tale che L = x : x L
rank(x)
. Denotiamo ora con x
n
la parola di
), e inoltre ,= .
2 LINGUAGGI FORMALI E GRAMMATICHE 10
Questi sono due esempi di gramatiche:
G
1
=< S, a, b, S, S aSb, S >
G
2
=< A, B, C, S, a, b, c, d, S, P >
P = S ABC, A aAB, A a, BC CB, B BB, B b, C c
Denizione 2.8 Data la grammatica G =< V, , S, P > chiamiamo relazione di derivazione
in un passo, la relazione
G
tale che:
1.
G
(V )
(V )
2. x, y (V )
, x
G
y se
x = ,
y = ,
( ) P.
dove , , , (V )
Esempio. Sia G la grammatica denita nel secondo punto degli esempio precedente, allora
AAaABC
G
AaABaABC
G
AaABaACB
dove A aAB e BC CB sono le produzioni applicate.
Denizione 2.9 La relazione di derivazione
G
, `e la chiusura riessiva e transitiva di
G
1. x (V )
G
x
2. x, y (con x ,= y) (V )
G
y se
1
,
2
. . .
n
(V )
:
1
G
2
. . .
G
n
(con x =
1
e y =
n
)
Esempio. Continuando lesempio precedente, si verica che:
S
G
ABC
G
aABBC
G
aaBBC
G
aaBCB
G
aaBBCB
G
. . .
G
aabbcb
e quindi
S
G
aabbcb
Denizione 2.10 Ogni grammatica G =< V, , S, P > genera il linguaggio cos` denito
L(G) = x
: S
G
x (10)
Esempio. Consideriamo i seguenti esempi:
1. L = x = a
n
b
n
: n N
+
G
1
=< S, A, B, a, b, S, S AB, AB AABB, A a, B b >
G
2
=< S, , a, b, S, S ab, ab aabb >
G
3
=< S, , a, b, S, S aSb, S ab >
G
1
, G
2
, G
3
sono tre diverse grammatice che generano lo stesso linguaggio L.
2 LINGUAGGI FORMALI E GRAMMATICHE 11
2. L = a, b
G
abbbAa
G
abbbaSa
G
abbbabAa
G
abbbabaa
S
G
bbaaab
2 LINGUAGGI FORMALI E GRAMMATICHE 13
S
G
bbaaba
2.3.3 Grammatiche regolari
Una grammatica G =< V, , S, P > si dice regolare se ogni produzione in P `e della forma
_
_
A aB
oppure
A a
(11)
dove A, B V a
Le grammatiche dipendenti da contesto vengono anche chiamate di tipo 3.
Si dice regolare un linguaggio L
+
per il quale esiste una grammatica G di tipo 3 tale che
L = L(G).
Propriet`a 2.14 Ogni linguaggio regolare `e libero da contesto e non vale sempre il viceversa.
Esempio. Il liguaggio L = x a, b
+
: [x[
a
`e pari `e generato dalla grammatica
G =< S, C, a, b, S, S bS, S aC, S b, C bC, C aS, C a >
2.4 Ricorsivit`a e parola vuota
Teorema 2.15 Ogni linguaggio dipendente da contesto `e ricorsivo.
Dimostrazione. Sia L
G
se k > 0 e con T
0
= S
Vediamo ora come si denisce lalgoritmo che risolve il nostro problema.
T
0
= S
For k = 1 . . . n do calcolo T
K
a partire da T
K1
If x T
n
then return 1
else return 0
Deniamo ora la procedura che calcola T
K
a partire da T
K1
.
V = T
K1
Repeat
U = V
for U AND ( ) P AND (y, z, w) : = yzw do
if (z = ) AND [yw[ k then
V = V yw
until V = U
return V
Le denizioni precedenti descrivono grammatiche che non generano la parola vuota. E per`o pos-
sibile estendere le denizioni precedenti considerando anche questo caso. A tale scopo introduciamo
il seguente lemma.
Lemma 2.16 Per ogni grammatica G =< V, , S, P > esiste una grammatica F =< V
, , S
, P
>
tale che L(G) = L(F) e nella quale S
.
Inoltre se G `e dipendente da contesto (rispettivamente libero da contesto o regolare) allora anche F
`e dipendente da contesto (rispettivamente libero da contesto o regolare)
Dimostrazione. Deniamo la grammatica F =< V
, , S
, P
nuova variabile / V ,
P
= S
: S P P
(oppure, pi` u semplicemente: P
= S
S P),
V
= V S
.
Dimostriamo che L(G) = L(F). Proviamo che per ogni x
se S
G
x allora S
F
x. Infatti
esiste una catena di derivazione
S
G
1
G
2
G
. . .
G
n
= x
inoltre (S
1
) P implica
(S
1
) P
e quindi
S
F
1
F
2
F
. . .
F
n
= x che implica
S
F
x.
2 LINGUAGGI FORMALI E GRAMMATICHE 15
Proviamo che per ogni x
se S
F
x allora S
G
x. Infatti esiste una catena di derivazione
S
F
1
F
2
F
. . .
F
n
= x
inoltre (S
1
) P
implica
(S
1
) P e quindi
S
G
1
G
2
G
. . .
G
n
= x cio`e
S
G
x.
Denizione 2.17 (Estensione delle precedenti, aggiungendo la possibilit`a di creare )
1. G =< V, , S, P > `e dipendente da contesto se :
ogni produzione ( ) P soddisfa
_
_
[[ [[
oppure
= S, =
(S ) P, S non compare in per ogni ( ) P
2. G = < V, , S, P > `e libera da contesto se :
ogni produzione ( ) P soddisfa
_
_
V, ,=
oppure
= S, =
(S ) P, S non compare in per ogni ( ) P
3. G = < V, , S, P > `e regolare se :
ogni produzione ( ) P soddisfa
_
_
V, = aB con a , B V
oppure
V,
oppure
= S, =
(S ) P, S non compare in per ogni ( ) P
Proposizione 2.18 .
1. Se L
: Q
Q dove
(q, ) = q q Q,
(q, xa) = ((q, x), a) x , a .
Quindi il linguaggio riconosciuto da A `e linsieme L(A) = x
(q
0,
x) F
3.1.1 Rappresentazione graca di un automa
Lautoma A =< Q, q
0
, , F > pu`o essere rappresentato da un grafo orientato con etichetta sui lati,
nel quale: Q `e linsieme dei nodi e per ogni q, p Q e ogni a , esiste un lato da q a p etichettato
con a se (q, a) = p. Denotiamo inoltre con una freccia entrante lo stato iniziale e con un doppio
cerchio gli stati nali.
Esempio. Dato lautoma qui di seguito rappresentato, denito sullalfabeto = a, b, c
Il linguaggio riconosciuto dallautoma `e cos` denito:
b
+
a a, b
: x = ybabbz, y, z
(quindi L =
babb
).
Rappresentiamo gracamente lautoma che lo riconosce:
3 LINGUAGGI REGOLARI 18
Esempio. Dato il liguaggio L = x a, b, c
: [x[
a
`e pari . Lautoma che riconosce il linguaggio
`e:
Esempio. Dato il linguaggio L = x a, b
: [x[
a
= 3k k N . Lautoma che lo riconosce `e:
Esempio. Dato il linguaggio L(A) = a
.bb.c
: [x[
a
= [x[
b
(12)
L
2
= x (, )
tale che:
x = uvz,
[uv[ n,
[v[ 1,
k N uv
k
z L.
Esempio. L = x a, b
: [x[
a
= 2 mod (3)
x = ab b aaaba
u v z
x ad L, anche x
k
= ab(b)
k
aaaba, (k N)
appartiene ad L.
3.3 Automi non deterministici
Denizione 3.4 Un automa a stati niti non deterministico sullalfabeto `e una quartupla
A = < Q, q
0
, , F > dove:
Q `e un insieme nito di stati,
q
0
Q `e lo stato iniziale,
`e la funzione di transizione cos` denita : Q P(Q),
F Q sottoinsieme degli stati di Q, chiamato insieme degli stati nali.
Estendiamo la denizione della funzione :
: Q
P(Q),
q Q,
(q, ) = q,
x
, a
(q, xa) =
(p, a) p
(q, x).
3 LINGUAGGI REGOLARI 21
Allora il linguaggio riconosciuto dallautoma `e linsieme:
L(A) = x
(q
0
, x) F ,= .
Osservazione: Poich`e lautoma `e non deterministico, la macchina ha possibilit`a di scelta, quindi
una parola viene accettata se tra le varie scelte, ne esiste almeno una che lo porti in uno stato nale.
Esempio. Dato il linguaggio
L = x a, b
(q
0
, abbabb) = q
0
, q
3
,
(q
0
, babaa) = q
0
, q
3
, q
5
,
(q
0
, ba) = q
0
, q
2
, q
4
,
(q
5,
a) = .
Esempio. Un automa non deterministico che riconosce a, b, c
a
(T, a) =
_
pT
b
(p, a) T P(Q), a e F
a
= T P(Q) : T F ,=
3.4 Automi e linguaggi regolari
Il seguente teorema dimostra che la classe dei linguaggi regolari coincide con la classe dei linguaggi
riconoscibili.
Teorema 3.6 Un linguaggio L
, , S
, P
= Q S
,
linsieme delle produzioni P
= P S
: q
0
P
Denendo la grammatica in questo modo si pu`o anche produrre la parola vuota che `e contenuta in
L.
Esempio.
Partendo dallautoma sopra rappresentato, costruiamo le produzioni della grammatica G (regolare)
che genera il linguaggio L riconosciuto dallautoma:
P = q aq, r br, s bt, t at, q br, r as, s b, t bt, t a, t b.
Assumiamo ora invece per ipotesi che L sia un linguaggio regolare, e quindi esiste una gram-
matica regolare G =< V, , S, P > che lo genera. Trattiamo ancora il caso in cui / L (la parola
vuota non appartine al linguaggio). Costruiamo un automa A =< Q, q
0
, , F > nel quale:
linsieme degli stati Q `e V f,
linsieme degli stati nale F `e f,
lo stato iniziale q
0
coincide con S
deniamo la funzione transizione come segue:
A V, a (A, a) =
_
B V : A aB P se (A a) / P
f B V : A aB P se (A a) P
(f, a) =
Osserviamo che lautoma denito `e non deterministico.
Possiamo ora aermare che se x `e una parola appartenente al linguaggio generato dalla grammatica
regolare G, allora x appartiene anche al linguaggio riconosciuto dallautoma A da noi costruito.
Questo perch`e se x = a
1
a
2
a
n
, allora esisteranno A
1
, A
2
, . . . , A
n1
V e una derivazione della
forma:
S a
1
A
1
a
1
a
2
A
2
a
1
a
2
a
3
A
3
. . . a
1
a
2
. . . a
n1
A
n1
a
1
a
2
. . . a
n1
a
n
Ma questo implica che:
3 LINGUAGGI REGOLARI 24
A
1
(S, a
1
)
A
2
(A
1
, a
2
)
. . .
A
n1
(A
n2
, a
n1
)
f (A
n1
, a
n
)
e quindi f
, possiamo ripartire
R
= [x]
R
: x
[x]
R
[y]
R
= [xy]
R
. Loperatore su
R
`e ben denita perch`e non dipende dai rappresentanti,
infatti se xRx
e yRy
, allora
[x
]
R
[y]
R
= [x
y]
R
= [xy]
R
= x
yRxy e [x]
R
[y
]
R
= [xy
]
R
= [xy]
R
= xy
Rxy
3 LINGUAGGI REGOLARI 25
perche R `e invariante destro e sinistro. Per ogni relazione R invariante destra e sinistra di
, si
pu`o dimostrare che <
R
, , []
R
> `e un monoide. Esso chiamato monoide quozionte di
rispetto
ad R. Si dice che R `e di indice nito se
R
`e un insieme nito. Pi` u in generale, lindice di R `e
il numero di classi di equivalenza [x
]
R
con x S
deniamo la
relazione R
L
tale che per ogni x, y , xRy se e solo se
z
xz L yz L
Proposizione 3.10 Per ogni L
la relazione R
L
`e un invariante destro.
Dimostrazione. Si vericano le seguenti propriet`a:
R
L
`e riessiva;
R
L
`e simmetrica (perch`e la denizione `e simmetrica tra x e y);
R
L
`e transitiva perch`e se xR
L
y, yR
L
w allora z, xz L se e solo se wz L e quindi x R
L
w;
R
L
`e invariante destro infatti, per ogni x, y, z
se xR
L
y allora w
xzw L yzw
L e quindi xzR
L
yz
Notiamo che ogni automa a stati niti produce una relazione di equivalenza che `e anche invariante
a destra. Questo risultato viene formalizzato nel seguente teorema.
Teorema 3.11 Le seguenti propriet`a sono equivalenti:
1. L
`e un linguaggio regolare,
2. Esiste una relazione R
,
3. R
L
`e di indice nito.
Dimostrazione.
1. 2) Se L `e un linguaggio regolare, allora esiste un automa a stati niti deterministico
A =< Q
A
, q
A
0
,
A
, F
A
> che lo riconosce. Deniamo una relazione R
dove:
x, y
xR
y (q
A
0
, x) = (q
A
0
, y).
E facile vericare che R
`e anche un invariante a
destra perche:
x, y, z
(q
A
0
, x) = (q
A
0
, y) (q
A
0
, xz) = (q
A
0
, yz).
Inne R
y. Essendo R
yz, e cos` yz
appartiene a L se e solo se xz vi appartiene. Quindi xR
L
y. Abbiamo cos` dimostrato che
xR
y implica xR
L
y. Quindi lindice di R
di
indice nito, anche R
L
lo `e.
3 LINGUAGGI REGOLARI 26
3. 1) Consideriamo xR
L
y. Ora prendiamo linsieme delle classi di equivalenza di R
L
e
chiamiamolo Q
M
; sia [x] lelemento di Q
M
che contiene x. Deniamo
M
([x], a) = [xa].
Questa denizione `e ben posta perche R
L
`e invariante destro. Consideriamo q
M
0
= [] e
F
M
= [x] [ x L. Lautoma a stati niti M =< Q
M
, q
M
0
,
M
, F
M
> riconosce L perche
M
(q
M
0
, x) = [x], e cos` x appartiene al linguaggio riconosciuto da M se e solo se [x] sta in
F
M
.
Osservazione. Se x L e xR
L
y allora y L.
Teorema 3.12 Teorema dellautoma minimo. Per ogni linguaggio regolare L esiste (a meno
di modicare il nome degli stati) un solo automa a stati niti deterministico che riconosce L con il
minimo numero di stati.
Dimostrazione. Proviamo che lautoma M denito nella dimostrazione precedente `e proprio il
minimo per il linguaggio L che riconosce.
Sia A =< Q, q
0
, , F > un qualsiasi automa deterministico che riconosce L tale che per ogni q Q,
esiste w
tale che (q
0
, w) = q. Vogliamo dimostrare che esiste una funzione suriettiva f : Q
Q
M
e vogliamo provare che:
q Q, a f((q, a)) =
M
(f(q), a)
Per ogni q Q scegliamo w tale che (q
0
, w) = q e deniamo f(q) = [w]R
L
. La denizione `e
ben posta. Infatti se esiste y ,= w tale che (q
0
, y) = q allora per ogni z
(q
0
, wz) = (q
0
, yz)
e quindi:
wz L yz L yR
L
w [w]R
L
= [y]R
L
Inoltre la funzione f `e suriettiva, infatti:
[w]R
L
Q
M
q = (q
0
, w) Q t.c. f(q) = [w]R
L
Inne f conserva le transizioni: per ogni a e per ogni q Q, se f(q) = [w]R allora:
f((q, a)) = [wa]R
L
= [w]R
L
[a]R
L
=
M
(f(q), a)
3.6 Propriet`a di chiusura (rispetto alle operazioni sui linguaggi)
1. Se L
e J
[ x I e y J : w = xy
Costruiamo un nuovo automa a stati niti non deterministico E =< Q
J
Q
I
, q
I
0
,
E
, F
E
>
che riconosca H.
E
(q, a) =
_
I
(q, a) se q Q
I
F
I
(i)
I
(q, a),
J
(q
J
0
, a) se q F
I
(ii)
J
(q, a) se q Q
J
(iii)
i. Permette ad E di agire come A per un segmento iniziale dellinput.
ii. Permette ad E di continuare la simulazione di A oppure permette di individuare
il simbolo di inizio di una parola appartenente al linguaggio J, assicurandosi che il
simbolo precedente completi una parola del linguaggio I.
iii. Permette solo la simulazione di B dopo che E ha vericato che la parola del linguaggio
J `e iniziata.
F
E
=
_
F
J
se q
J
0
/ F
J
F
I
F
J
altrimenti
Si nota che E riconosce H e quindi H `e regolare.
3. Se L
`e regolare allora L
`e regolare.
Sia A =< Q, q
0
, , F > un automa deterministico che riconosce L. Deniamo lautoma non
deterministico B =< Q
B
, q
B
0
,
B
, F
B
> :
Q
B
= Q q
B
0
F
B
= F q
B
0
q Q, a (q
B
0
, a) = (q
0
, a)
B
(q, a) =
_
(q, a) se q / F
(q, a), (q
0
, a) se q F
Si verica che B riconosce L
.
3 LINGUAGGI REGOLARI 28
3.7 Teorema di Kleene
Il teorema di Kleene mette in relazione i linguaggi regolari con le operazioni razionali di
. Ri-
cordiamo che le operazioni razionali sui sottoinsiemi di
rappresentato da E in
modo ovvio. Il teorema di Kleene aerma che un linguaggio L
`e regolare se e solo se L
rappresentabile da unespressione regolare su . In altre parole un linguaggio L
`e regolare
se e solo se L si pu`o ottenere dagli insiemi niti in
e quindi F = (E
1
E
2
) e G = E
1
rappresentano linguaggi
regolari.
2. Se L
[ (q
i
, a) = q
j
rappresenta il passaggio diretto da q
i
a q
j
, senza
passare per stati intermedi.
Quindi L =
q
j
F
R
m
ij
.
Ora dobbiamo provare che R
k
ij
`e rappresentato da unespressione regolare per ogni i, j, k.
Ragioniamo per induzione su k = 0, 1, . . . , m; con k = 0 la propriet`a `e banalmente vera
per tutti gli insiemi R
0
ij
. Supponiamo k 1 e assumiamo che R
r
ij
sia rappresentata da
unespressione regolare per ogni r = 0, 1, . . . , k 1. Si verica che
R
k
ij
= R
k1
ij
(R
k1
ik
R
k1
kk
R
k1
kj
).
3 LINGUAGGI REGOLARI 30
Di conseguenza anche R
k
ij
`e rappresentabile da unespressione regolare e quindi anche il
linguaggio
L =
_
q
j
F
R
m
ij
.
4 LINGUAGGI LIBERI DA CONTESTO 31
4 Linguaggi liberi da contesto
Una Grammatica libera da contesto `e una quartupla G =< V, , S, P > dove V `e un insieme nito di
variabili (simboli non terminali), `e un insieme nito di simboli terminali (alfabeto nito), S V `e
chiamato simbolo iniziale della grammatica e P `e un insieme nito di produzioni della forma A
con A V, ( V
+
) e con eventualmente la produzione S (se succede questo, S non
compare mai nella parte destra di alcuna produzione in P).
Esempio. Deniamo la grammatica G =< S, (, ), S, S , S (S)S > tale che il
corrispondente linguaggio generato sia linsieme di tutte le parole formate da parentesi correttamente
innestate e proviamo ad esempio a derivare la parola ( )(( )). Possiamo ottenerla con i seguenti
passaggi:
S
G
(S)S
G
()S
G
()(S)S
G
()((S)S)S
G
()(()).
Trasformiamo ora la grammatica G in una grammatica G1 libera da contesto. Per far ci`o dobbiamo
modicare le produzioni di G anche S non compaia mai nelle parte destra. Per generare tutte le
possibili parole del linguaggio possiamo ad esempio usare le seguenti produzioni:
S (A)A, S (), S ()A, S (A), S , A (A)A, A (), A ()A, A (A)
e quindi G
1
=< S, A, (, ), S, P >
P = S (A)A, S (), S ()A, S (A), S , A (A)A, A (), A ()A, A (A)
4.1 Forma normale di Chomsky
Denizione 4.1 Una grammatica libera da contesto G =< V, , S, P > `e in forma normale di
Chomsky se ogni produzione in P `e del tipo A a oppure A BC con a A, B, C V .
Vogliamo dimostrare che per ogni grammatica libera da contesto G esiste una grammatica(libero
da contesto) in forma normale di Chomsky che genera lo stesso linguaggio.
Esempio. Consideriamo L = x a, b
+
: [x[
a
= [x[
b
e sia
G =< A, B, S, a, b, S, S aB, S bA, A a, A aS, A bAA, B b, B bS, B aBB >
Tale grammatica non `e una grammatica in forma normale di Chomsky perche solo le produzioni
A a, B b soddisfano la denizione data.
Mostriamo come si pu`o ottenere la unaltra grammatica in forma normale di Chomsky che genera lo
stesso linguaggio L. Aggiungiamo due nuove variabili C, D e consideriamo linsieme di produzioni
C a, D b, S CB, S DA, A CS, B DS, A a, B b
Tale insieme simula le produzioni
S aB, S bA, A a, A aS, A bAA, B b, B bS, B aBB
Dobbiamo ora trovare il modo di simulare le produzioni A bAA, B aBB. A tale scopo
introduciamo le variabili F e G e aggiungiamo allinsieme precedente le produzioni
E DA, F CB, A EA, B FB
4 LINGUAGGI LIBERI DA CONTESTO 32
Quindi la nuova grammatica G
1
in forma normale di Chomsky sar`a:
G
1
=< S, A, B, C, D, E, F, a, b, S, P
1
> dove
P
1
= A a, B b, C a, D b, S CB, S DA, A CS,
A EA, B DS, B FB, E DA, F CB
Cerchiamo ora di estendere questo esempio al caso generale. Supponiamo che G =< V, , S, P >
sia libera da contesto e che L(G)
+
. Possiamo costruire una grammatica equivalente in forma
normale di Chomsky attraverso i seguenti passi.
1. Eliminare tutte le variabili inutili e le relative produzioni,cio`e tutte le variabili che non
compaiono nella derivazione di qualche parola a partire da S,
2. Eliminare tutte le produzioni unitarie, cio`e quelle della forma A B, A, B V . Esiste un
algoritmo per calcolare su input A V , linsieme delle variabili B V [ A
G
B
begin
V = A
repeat
U = V
for B U do
for B C P do
if C / V then V = V C
until V = U
end
Mettiamo in RA P [ / V
repeat
T = R
for A, B V (A ,= B) do
if A
G
B then
for B T do
R = R A B
until T = R
3. Modicare la grammatica in modo da avere solo produzioni della forma A a e A con
A V, a e V
con [[ 2.
Inseriamo nella grammatica tutte le produzione del tipo R
a
a. Sostituiamo tutte le
produzioni del tipo A ([[ 2) con A
.
4. Eliminare le produzioni della forma A con A V, V
[[ 3.
5. A B
1
B
2
. . . B
k
con k 3, A
1
, B
1
, . . . B
k
variabili deniamo D
1
D
2
. . . D
k2
e le produzioni
A B
1
D
1
, D
1
B
2
D
2
, D
2
B
3
D
3
, . . . , D
k2
B
k1
B
k
. Sostituiamo ogni produzione
A B
1
B
2
. . . B
k
con k 3 e A
1
, B
1
, . . . B
k
variabili con le produzioni A B
1
D
1
, D
1
B
2
D
2
, D
2
B
3
D
3
, . . . , D
k2
B
k1
B
k
.
Esempio. La produzione A BCEF diventa A BD
1
D
1
CD
2
D
2
EF
4 LINGUAGGI LIBERI DA CONTESTO 33
4.1.1 Eliminazione delle variabili inutili
Questo passo `e basato sul seguente risulatato.
Lemma 4.2 Esiste un algoritmo per il seguente problema:
INPUT: G =< V, , S, P >
(grammatica libera da contesto)
OUTPUT :
_
1 se L(G) ,=
0 altrimenti
Dimostrazione. Lalgoritmo che descriviamo `e basato sulla seguente osservazione:
Supponiamo che esista
tale che S
G
w e consideriamo un albero di derivazione per .
Se tale albero possiede due nodi etichettati con la stessa variabile A V lungo un cammino dalla
radice a una foglia allora si pu`o modicare lalbero di derivazione nel modo indicato in gura, cio`e
sostituendo il sottoalbero pi` u grande di radice A con quello pi` u piccolo.
Possiamo ripetere questa operazione per tutte le coppie di nodi che hanno la stessa etichetta e
si trovano in un cammino dalla radice alla foglia. Otteniamo cos` un albero di derivazione di altezza
al pi` u pari al numero di variabili. Di conseguenza lalgoritmo per risolvere il problema, esegue i
seguenti passi:
1. Genera tutti gli alberi di derivazione in G che hanno per altezza il numero di variabili #V,
2. Controlla se tra questi ne esiste uno le cui foglie sono tutte etichettate da simboli terminali.
In caso aermativo restituisci 1 altrimenti restituisci 0.
Proposizione 4.3 Per ogni grammatica G =< V, , S, P > libera da contesto tale che L(G) ,= ,
esiste una grammatica F libera da contesto e priva di simboli inutili tale che L(F) = L(G).
Dimostrazione. Usando il lemma precedente possiamo calcolare linsieme
R = A V [ w
: A
G
w
4 LINGUAGGI LIBERI DA CONTESTO 34
Di conseguenza deniamo linsieme
T = A P [ A R, contiene solo variabili in R e simboli in
e le grammatica H =< R, , S, T >. Si verica facilmente che L(G) = L(H).
Calcolo linsieme
U = A R [ S
H
A per qualche ,
Tale insieme `e ottenuto dalla seguente procedura:
begin
U =S
repeat
V = U
for A U do
for A T do
for B R in do
V = V B
until V = U
return U
end
Deniamo quindi linsieme
W = A T [ A U, contiene solo variabili in U
e la grammatica F =< U, , S, W >. Si verica di nuovo che L(F) = L(H) e inoltre F possiede
solo variabili utili.
4.1.2 Eliminazione delle produzioni unitarie
Questo passo `e basato sulla seguente propriet`a.
Proposizione 4.4 Per ogni grammatica libera da contesto G =< V, , S, P > esiste una grammat-
ica libera da contesto G che genera lo stesso linguaggio privo di produzioni della forma A B
dove A e B sono 2 variabili.
Dimostrazione. Esiste un algoritmo per calcolare su input A V , linsieme delle produzioni
B V : A
G
B
begin
V = A
repeat
U = V
for B U do
for BC P do
if C / V then V = V C
until V = U
return U
end
4 LINGUAGGI LIBERI DA CONTESTO 35
Possiamo cos` denire la seguente procedura:
repeat
R = A P : / V
T = R
for A, B V (A ,= B) do
if A
G
B then
for B T do
R = R A B
until T = R
return R
4.1.3 Costruzione della grammatica in forma normale di Chomsky
Gli ultimi due passi del procedimento di costruzione della forma normale di Chomsky, possono
essere descritte nel modo seguente.
Supponiamo di avere una grammatica libera da contesto G =< V, , S, P >, priva di variabili inutili
e di produzioni unitarie (ottenuta cos` attraverso i due passi precedenti). Allora per ogni a
deniamo una nuova variabile R
a
e una nuova produzione R
a
a. Per ogni produzione A (con
(V )
+
: [[ 2) deniamo
i
.
Esempio. Dato il seguente insieme di produzioni
S aAB, A BBC, B BA, B bc, A BB, C c
applicando derivazioni di tipo leftmost ottengo
S aAB aBBCB abcBCB abcbcCB abcbccB abcbccb
Osservazione. Esiste una corrispondenza biunivoca tra alberi di derivazione e derivazioni
leftmost; infatti, dato un albero di derivazione, si pu`o costruire una sola derivazione leftmost che
rappresenta lalbero.
4 LINGUAGGI LIBERI DA CONTESTO 36
Proposizione 4.5 In ogni grammatica libera da contesto G =< V, , S, P > una parola (V
)
+
pu`o essere derivata da S se e solo se esiste una derivazione leftmost S
G
Dimostrazione.
propriet`a `e ovvia perch`e una derivazione leftmost `e una particolare derivazione,
`e suciente riordinare i singoli passi delle derivazioni in modo da ottenere una derivazione di
tipo leftmost
4.3 Algoritmo CYK
Prende il nome dalle iniziali dei suoi creatori: Cocke, Young, Kasami e risolve il problema di
determinare lappartenenza di una parola ad un linguaggio libero da contesto generato da una
grammatica in forma normale di Chomsky.
Ricordiamo che se L
OUTPUT :
_
1 se S
G
x
0 altrimenti
E un algoritmo basato sul metodo della programmazione dinamica, ossia a fronte di un problema,
lalgoritmo lo spezza in pi` u sottoproblemi che per`o sono dipendenti luno dallaltro: per risolverli si
sfruttano le dipendenze presenti tra essi e si memorizzano i risultati parziali in una matrice di valori.
Per risolvere il problema devo determinare questo insieme di variabili U
1n
= A V : A
G
x.
Deniamo x = a
1
a
2
a
n
dove ogni a
i
. Lalgoritmo calcola tutti gli insiemi U
ij
= A V :
A
G
a
i
a
i+1
. . . aj, con 1 i j n.
Vediamo per esempio come calcolare U
1n
. E chiaro che A U
1n
se e solo se esiste A BC in P
ed esiste K 1, . . . , n1 tale che B U
1k
e C U
k+1n.
Infatti la derivazione A
G
a
i
a
i+1
. . . aj
`e rappresentata da un albero della forma
4 LINGUAGGI LIBERI DA CONTESTO 37
Per costruire U
1n
, una volta noti gli insiemi U
11
, U
2n
, U
12
, U
3n
, . . . , U
1n1
, U
nn
, posso eseguire il
seguente ciclo di istruzioni:
T =
for k = 1, . . . , n-1 do
for A BC P do
if B U
1k
AND C U
k+1n
then
T = T A (se A e gia presente non lo aggiungo)
return T
Osserviamo inoltre che gli insiemi U
11
, U
22
, U
33
, . . . , U
nn
sono formati solo da variabili che derivano
un simbolo terminale e possono essere facilmente calcolati dalla grammatica: per ogni i, j con
i < j, U
ij
pu`o essere calcolato da U
ik
e U
k+1j
con k = i, . . . , j 1 usando un procedimento simile a
quello illustrato sopra per calcolare U
1n
.
4 LINGUAGGI LIBERI DA CONTESTO 38
Lalgoritmo `e allora descritto dalla seguente procedura.
begin
for i = 1, . . . , n do U
ii
= A V : A a
i
P
for d = 1, . . . , n-1 do (creo un ciclo sulla distanza crescente tra i e j)
for i = 1, . . . , n-d do
j = i + d
U
ij
=
for k = i, i+1, . . . , j-1 do
for A BC P do
if B U
ik
AND C U
k+1j
then
U
ij
= U
ij
A
if S U
1n
then return 1
else return 0
end
Proposizione 4.6 Per ogni linguaggio libero da contesto L, lalgoritmo CYK su un input di lunghez-
za n richiede un tempo di calcolo che `e dellordine di grandezza di n
3
e uno spazio di memoria
dellordine di n
2
.
4.4 Lemma diterazione.
Prima di enunciarlo nella nuova forma, valida per le grammatiche libere da contesto, introduciamo
una propriet`a delle altezze degli alberi binari che ci torner`a utile per farne la dimostrazione.
Lemma 4.7 sullaltezza degli alberi binari. In ogni albero binario T con k foglie, laltezza dellalbero
h(T) log
2
k|
4 LINGUAGGI LIBERI DA CONTESTO 39
Dimostrazione. Dimostriamo il lemma per induzione.
`
E facilmente vericato nel caso k
0
= 1,
caso in cui lalbero `e composto da un solo nodo. Supposto vero lenunciato per k = 1, 2, . . . , n 1
dimostriamolo per k = n.
Sia T un albero binario con n foglie e supponiamo che la radice abbia due gli (g.28). Indipen-
dentemente dal fatto che T sia o meno bilanciato, la sua altezza h(T) `e data dalla pi` u grande delle
altezze calcolata fra i suoi due sottoalberi A, B incrementata di uno, cio`e:
h(T) = 1 +Maxh(A), h(B)
Per ipotesi induttiva sappiamo che h(A) log
2
K| e che h(B) log
2
(n k)|. Abbiamo poi n
nodi da dividere tra i due sottoalberi A e B; questo signica che o A o B avr`a almeno
n
2
nodi e
quindi sostituendo nella precedente formula:
h(T) = 1 +Maxh(A), h(B) 1 +log
2
n
2
| ovvero h(T) log
2
n|
Abbiamo cos` dimostrato il lemma sulle altezze degli alberi binari.
Consideriamo ora una grammatica G =< V, , S, P > libera da contesto scritta in forma normale
di Chomsky e deniamo il linguaggio generato L = L(G) con L
. Lalbero di derivazione D
della parola x = x
1
x
2
x
n1
x
n
generata dalla grammatica G in CNF, `e un albero binario e quindi
verica la propriet`a enunciata nel lemma precedente, ovvero h(D) log
2
n|.
4 LINGUAGGI LIBERI DA CONTESTO 40
A questo punto notiamo che se la parola `e sucientemente lunga da avere log
2
[x[| #V (numero
di variabili), per il lemma precedente, avremo sicuramente un cammino che unisce una foglia con la
radice dellalbero passante per due nodi etichettati con la stessa variabile, A V . I due nodi sono
radici di sotto-alberi uno incluso nellaltro, e quindi la parola x pu`o essere separata in cinque fattori
u, v, w, y, z con x = uvwyz, deniti dalla seguente gura:
Quindi se nellalbero di derivazione sostituiamo al sotto-albero che genera w, il sotto-albero che
genera vwy, produciamo la parola uv
2
wy
2
z. Se eseguo n successive sostituzioni come la precedente,
produco n identiche iterazioni dei fattori v, y allinterno della parola x, nel pieno rispetto delle regole
di produzione della grammatica G libera da contesto. Formalizziamo ora quanto detto nel seguente
lemma.
Lemma 4.8 (lemma di iterazione per i linguaggi liberi da contesto).
4 LINGUAGGI LIBERI DA CONTESTO 41
Data una grammatica G < V, , S, P > libera da contesto e denito il linguaggio L = L(G), esiste
un N > 0 intero, tale che per ogni x L con [x[ > N, esistono cinque parole u, v, w, y, z
)
con PF(Q
_
qB
a
M
p se (p, ) (q, a, B)
qB
M
p se (p, ) (q, , B)
Denizione 4.12 Relazione di transizione in pi` u passi.
x
, q, p Q, ,
qB
x
M
p se esistono
a
1
, a
2
, . . . , a
n
, una catena di stati P
1
, P
2
, . . . , P
n
Q e
1
,
2
, . . . ,
n
tali che
x = a
1
a
2
a
n
e p
i
i
a
i
M
p
i+1
i+1
per ogni i = 1, . . . , n 1 con q = p
1
, p = p
n
, =
1
, =
n
Siamo in grado di denire allora il linguaggio riconosciuto dallautoma a pila in due modi:
4 LINGUAGGI LIBERI DA CONTESTO 44
1. L(M) = x
/p F,
: q
0
Z
x
M
p
L(M) rappresenta il linguaggio accettato o riconosciuto da M mediante stato nale;
2. N(M) = x
/p Q : q
0
Z
x
M
p
N(M) rappresenta il linguaggio accettato da M mediante svuotamento della pila.
Esempio. Sia dato il linguaggio L = x a, b, c : x = wcw
R
dove w a, b
.
Qui denotiamo con w
R
la parola inversa della stringa w; per esempio se w = abbab allora w
R
= babba.
Deniamo lautoma M ponendo Q = q
1
, q
2
, = A, B, Z e assumiamo che q
1
e Z siano gli
elementi iniziali dellautoma. Deniamo:
(q
1
, a, Z) = (q
1
, AZ), (q
1
, b, Z) = (q
1
, BZ), (q
1
, c, Z) = (q
1
, ),
(q
1
, a, A) = (q
1
, AA), (q
1
, a, B) = (q
1
, AB), (q
1
, b, A) = (q
1
, BA),
(q
1
, b, B) = (q
1
, BA), (q
1
, c, A) = (q
2
, A), (q
1
, c, B) = (q
2
, B),
(q
2
, a, A) = (q
2
, ), (q
2
, b, B) = (q
2
, ), (q
2
, , Z) = (q
2
, ).
Ogni altro insieme (q, , X) `e vuoto.
Consideriamo linput x = babacabab e analizziamo le transizioni dellautoma:
q
1
Z
b
A
q
1
BZ
a
A
q
1
ABZ
b
A
q
1
BABZ
a
A
q
1
ABABZ
c
A
q
2
ABABZ
a
A
q
2
BABZ
b
A
q
2
ABZ
a
A
q
2
BZ
b
A
q
2
Z
A
q
2
Di conseguenza x `e accettato dalla macchina per pila vuota. Si pu`o vericare che L = L(M).
Esempio. Sia dato il linguaggio L = x a, b : x = ww
R
dove w a, b
M =< q, p, q, A, B, Z, Z, , >
Transizioni dallo stato iniziale
..
(q, a, Z) = (q, AZ), (p, AZ) (q, b, Z) = (q, BZ), (p, BZ) (q, , Z) = (p, )
(q, a, A) = (q, AA), (p, AA) (q, a, B) = (q, AB), (p, AB) (q, b, A) = (q, BA), (p, BA)
(q, b, B) = (q, BB), (p, BB) (q, a, A) = (p, ) (q, b, B) = (p, ) (q, a, Z) = (p, )
Mostriamo come funziona la macchina, su una stringa particolare x = abba. Rappresentiamo il
calcolo tramite lalbero di computazione.
4 LINGUAGGI LIBERI DA CONTESTO 45
Osservazione. Negli esempi appena visti, si nota che lautoma che riconosce il linguaggio
L = x a, b, c : x = wcw
R
dove w a, b
.
4 LINGUAGGI LIBERI DA CONTESTO 46
Esempio. Sia dato il linguaggio
D = x (, ), $
: x = y$, con y (, )