Professional Documents
Culture Documents
59
Predavanje 06
3.7
Do sada smo tretirali odnos izmedu konacnih automata i regularnih izraza samo intuitivno. Naime, prethodno smo imali neke primjere koji ilustriraju da se u odredenim
situacijama relativno jednostavno mogu izgraditi nedeterministicki konacni automati
koji prihvacaju jezike koji su zadani nekim regularnim izrazom. U ovom odjeljku
c emo Kleenovim teoremom formalizirati odnos izmedu konacnih automata i regularnih izraza. Na ovom mjestu c emo prvo pokazati da se za bilo koji regularni izraz r
moze izgraditi -NKA M tako da vrijedi L(M) = L(r).
3.7.1
Teorem 3.3. Za svaki regularni izraz r koji opisuje jezik L(r) nad nekim alfabetom
moguce je konstruirati -NKA M tako da vrijedi L(M) = L(r).
Dokaz. Prvo c emo opisati postupke konstrukcije -NKA koji prihvacaju jezike opisane
elementarnim regularnim izrazima , i a , a nakon toga slijedi opis postupaka
konstrukcije -NKA koji prihvacaju jezike opisane regularne izraze r1 + r2 , r1 r2 i r1 .
60
Postupak (1): Za regularni izraz koji definira jezik L() = konstruiramo -NKA
M:
M = ({q0 , q1 }, , , q0 , {q1 }),
gdje je (q, b) = za svaki q {q0 , q1 } i b ( {}). Dijagram stanja konstruiranog
-NKA M je prikazan na slici 3.13. Pocetno stanje je q0 , a prihvatljivo stanje je q1 .
Za bilo koji simbol b ( {}), skup (q0 , b) je prazan skup, pa ne postoji niti jedan
slijed prijelaza iz pocetnog stanja q0 u prihvatljivo stanje q1 . Prema tome, -NKA M
stavise, -NKA M ne prihvaca niti praznu rijec
ne prihvaca niti jedan niz sibola. Cak
, jer je pocetno stanje q0 neprihvatljivo.
q0
q1
q0
q1
q0
q1
Postupak (2): Za regularni izraz koji definira jezik L() = {} konstruiramo -NKA
M:
M = ({q0 , q1 }, , , q0 , { f }),
gdje je (q0 , ) = {q1 } i (r, b) = za r , q0 ili b , .
Dijagram stanja izgradenog -NKA M je prikazan na slici 3.13b. Pocetno stanje je
q0 , a prihvatljivo stanje je q1 . Prijelaz (q0 , ) = {q1 } omogucuje prihvacanje prazne
rijeci . Za bilo koji simbol a , skup (q0 , a) je prazan skup, pa zakljucujemo da
-NKA M prihvaca iskljucivo praznu rijec .
Postupak (3): Za regularni izraz a, a , koji definira jezik L(a) = {a}, konstruiramo
-NKA M:
M = ({q0 , q1 }, , , q0 , {q1 }),
gdje je (q0 , a) = {q2 } i (r, b) = za r , q0 ili b , a.
Dijagram stanja konstruiranog -NKA M je prikazan na slici 3.13c. Pocetno stanje
je q0 , a prihvatljivo stanje je q1 . Prijelaz (q0 , a) = {q1 } omogucuje prihvacanje rijeci
a, koja sadrzi samo jedan simbol. Za bilo koji b ( {}), za koji vrijedi b , a, skup
(q0 , b) je prazan skup, pa je omogucen prijelaz iz pocetnog stanja q0 u prihvatljivo
61
(3.10a)
M2 = (Q2 , 2 , 2 , q2 , { f2 })
(3.10b)
takvi da vrijedi:
L(M1 ) = L(r1 )
(3.11a)
L(M2 ) = L(r2 )
(3.11b)
Primijetimo da kod oba -NKA skup prihvatljivih stanja sadrzi samo jedno stanje.
Takoder, pretpostavit c emo da iz prihvatljivih stanja f1 i f2 nema prijelaza niti za jedan ulazni simbol. Drugim rijecima, vrijedi 1 ( f1 , a) = , za svako a (1 {}) i
2 ( f2 , b) = , za svako b (2 {}). Nadalje,ukoliko je to potrebno, promjenom
imena stanja mozemo postici da vrijedi Q1 Q2 = . Za regularni izraz r1 + r2 , koji
definira jezik L(r1 + r2 ) = L(r1 ) L(r2 ) konstruiramo novi -NKA M na sljedeci nacin:
M = (Q1 Q2 {q0 , f }, 1 2 , , q0 , { f }),
gdje je funkcija definirana na sljedeci nacin:
(q0 , ) = {q1 , q2 }
(q, a) = 1 (q, a), za svako a (1 {}) i za svako q (Q1 \ { f1 })
(q, b) = 2 (q, b), za svako b (2 {}) i za svako q (Q2 \ { f2 })
( f1 , ) = ( f2 , ) = { f }
Dijagram stanja konstruiranog -NKA M je prikazan na slici 3.14. Stanja automata
M ukljucuju stanja automata M1 i M2 , kao i dva dodatna stanja: novo pocetno stanje
q0 i novo prihvatljivo stanje f . Dakle,stanja q1 i q2 nisu vise pocetna stanja, te stanja f1
i f2 nisu vise prihvatljiva stanja. Prijelazi automata M sadrze sve prijelaze iz automata
M1 i M2 , kao i dodatne -prijelaze iz novog pocetnog stanja q0 u stanja q1 i q2 , te
-prijelaze iz stanja f1 i f2 u novo prihvatljivo stanje f .
Uzmimo npr. da automat M1 prihvaca neku rijec w,w L(M1 ). Tada, automat M
prihvaca tu rijec tako sto prvo primjenimo -prijelaz iz stanja q0 u stanje q1 , a zatim
se izvodi slijed prijelaza kojim automat M1 inace prihvaca rijec w. S druge strane, ako
automat M prihvaca neku rijec w, w L(M), tada je jedna od mogucnosti da slijed
prijelaza ukljucuje -prijelaz iz stanja q0 u stanje q1 i -prijelaz iz stanja f1 u stanje
62
M1
q1
f1
q0
M2
q2
f2
(3.12a)
M2 = (Q2 , 2 , 2 , q2 , F2 )
(3.12b)
L(M1 ) = L(r1 )
(3.13a)
L(M2 ) = L(r2 )
(3.13b)
takvi da vrijedi:
Primijetimo da kod oba -NKA skup prihvatljivih stanja sadrzi samo jedno stanje.
Takoder, pretpostavit c emo da iz prihvatljivih stanja f1 i f2 nema prijelaza niti za jedan ulazni simbol. Drugim rijecima, vrijedi 1 ( f1 , a) = , za svako a (1 {}) i
2 ( f2 , b) = , za svako b (2 {}). Nadalje, ukoliko je to potrebno, promjenom
imena stanja mozemo postici da vrijedi Q1 Q2 = . Za regularni izraz r1 r2 koji
definira jezik L(r1 r2 ) = L(r1 )L(r2 ) konstruiramo -NKA M na sljedeci nacin:
M = (Q1 Q2 , 1 2 , , q1 , { f2 }),
gdje je funkcija prijelaza definirana na sljedeci nacin:
(q, a) = 1 (q, a), za svako a (1 {}) i za svako q (Q1 \ { f1 })
63
q1
M2
f1
q2
f2
(3.14a)
64
za koji vrijedi
L(M1 ) = L(r1 )
(3.15a)
q0
M1
q1
f1
Sada c emo pokazati da automat M prihvaca neku rijec w ako i samo ako vrijedi
w L(M1 ) .
Prvo c emo indukcijom pokazati da ako vrijedi w L(M1 ) , tada automat M prihvaca rijec w.
Osnovni slucaj. Automat M prihvaca praznu rijec , jer automat iz pocetnog stanja
s primjenom -prijelaza moze preci u prihvatljivo stanje.
Induktivni slucaj. Sada pretpostavimo da vrijedi x L(M1 ) i y L(M1 ).
Razmotrimo proces izracunavanja automata M za rijec w = xy. Nakon obrade rijeci
x, automat M c e preci u prihvatljivo stanje f1 , pa moze primijeniti -prijelaz do stanja
65
66
9: Za izraz r1 = b(ab) koristeci postupak (5) konstruiramo -NKA kao sto je prikazano na slici 3.17f.
q1
q2
q3
q4
q3
q4
q5
q6
q5
q6
q7
q3
q4
q5
q6
q8
q1
q2
q7
q3
q4
q5
q6
q8
67
15: Za izraz r12 = b koristeci postupak (3) konstruiramo -NKA kao sto je prikazano
na slici 3.18c.
16: Za izraz r10 = b koristeci postupak (6) konstruiramo -NKA kao sto je prikazano
na slici 3.18d.
17: Za izraz r9 = b a koristeci postupak (5) konstruiramo -NKA kao sto je prikazano
na slici 3.18e.
18: Za izraz r2 = ab a koristeci postupak (5) konstruiramo -NKA kao sto je prikazano
na slici 3.18f.
q9
q10
q11
q12
q13
q14
q15
q13
q14
q16
= b
(d) -NKA za izraz r10 = r12
q15
q13
q14
q16
q11
q12
q9
q10
q15
q13
q14
q16
q11
q12
68
q1
q2
q7
q3
q4
q5
q6
q8
q17
q18
q9
q10
q15
q13
q14
q16
q11
q12
3.7.2
(3.16)
Jezik L(M) se sastoji od svih rijeci koje oznacavaju prijelaze od pocetnog stanja q0
do nekog prihvatljivog stanja q F. Uzimajuci u obzir sva prihvatljiva stanja q F,
jezik L(M) mozemo izraziti na sljedeci nacin:
L(M) =
L(q0 , q)
(3.17)
qF
69
Pretpostavimo da skup stanja Q nekog DKA M ima n stanja, pri c emu su ta stanja
oznacena cijelim brojevima od 1 do n. Za neka stanja p, q Q i j 0 uvedimo sljedecu
notaciju:
L(p, q, k) =
x
(3.18)
70
(3.19)
k+1
(3.20)
(3.21)
(3.22)
odnosno,
jer L(p, q, n) i r(p, q, n) iskljucuju slijedove prijelaza koji sadrze stanja veca od n, a to
ne predstavlja nikakvo ogranicenje jer automat M ima upravo n stanja.
Primijetimo takoder da iz izraza 3.20 mozemo zapravo izvesti algoritam za konstrukciju regularnog izraza za jezik L(p, q). Naime, regularan izraz r(p, q, n) mozemo
prikazati koristeci izraze r(i, j, n 1), gdje i i j oznacavaju odredena potrebna stanja sukladno izrazu 3.20. Zatim izraze r(i, j, n 1) mozemo prikazati koristeci izraze
r(i, j, n 2), itd. Na kraju razvoja izraza c emo dobiti izraze za r(i, j, 1) koji su prikazani pomocu regularnih izraza r(i, j, 0). Nadalje, regularni izrazi r(i, j, 0) se mogu na
jednostavan nacin dobiti direktno iz same definicije automata M, imajuci u vidu da slijed prijelaza ukljucuje broj medustanja koji je jednak 0. Kada imamo regularne izraze
71
r(i, j, 0), proces nastavljamo u obrnutom smjeru tako sto koristimo prethodno razvijene
izraze za r(i, j, 1),r(i, j, 2) itd., sve dok ne dobijemo izraz za r(p, q, n).
Na kraju, da bismo dobili jezik L(M) kojeg prihvaca automat M, prema izrazu 3.17
potrebno je objediniti sve jezike L(q0 , q), za q F. To znaci, da bismo konstruirali
regularni izraz za jezik L(M), trebamo koristeci operator + kombinirati regularne izraze
za jezike r(q0 , q, n), za sva stanja q F.
Primjer 3.9. U ovom primjeru c emo opisati nacin konstrukcije regularnog izraza za
dva DKA, pri c emu c emo koristiti prethodno opisani postupak. Neka su dijagramima
stanja koji su prikazani na slici 3.21 zadani DKA M1 i DKA M2
a
start
a
b
a
b
(a)
a
start
a
b
a
b
(b)
Slika 3.21: Primjer dva DKA za koja izracunavamo ekvivalentni regularni izraz
(3.23)
(3.24)
(3.25a)
(3.25b)
Desna strana gornjih izraza pokazuje koje izraze r(i, j, k) je potrebno izracunati za
k = 1. U tablici 3.6 su dati regularni izrazi r(i, j, 0) za k = 0, koji se direktno mogu napisati iz dijagrama stanja DKA M1 prikazanog na slici 3.21(a), pa proces konstrukcije
regularnog izraza r(M1 ) mozemo nastaviti od dna prema vrhu.
r(p, 1, 0)
r(p, 2, 0)
r(p, 3, 0)
+a
+a
+a+b
72
73
(3.27)
(3.28a)
74
(3.28b)
Prethodno smo vec izracunali gotovo sve potrebne izraze r(i, j, k) za k = 1, osim
izraza r(1, 1, 1). Na temelju izraza 3.20 i regularnih izraza za k = 0 prikazanih u tablici
3.6 imamo:
r(1, 1, 1) = r(1, 1, 0) + (r(1, 1, 0) r(1, 1, 0)
= + a + ( + a)( + a) ( + a)
= + a + ( + a)a ( + a)
= + a + a ( + a)
= + a + a
= + a )
= a )
Na temelju izraza 3.28 i potrebnih prethodno izracunatih izraza r(i, j, k) za k = 1,
imamo:
r(1, 2, 2) = a b + (a )(a ) (a b)
= a b + a a a b
= a b + a a b
= a b + a b
= a b
r(3, 2, 2) = + ()( + a) ( + a)
=+
=
Iz 3.27 i prethodno izracunatih izraza r(i, j, k) za k = 2, imamo:
r(1, 2, 3) = a b + (a ba b)( + a + b) ()
= a b +
= a b
Konacno, na temelju 3.26 za regularni izraz r(M2 ) automata M2 imamo:
r(M2 ) = a b + a ba b(a + b)
(3.29)
Kao sto vidimimo, iako DKA M1 i DKA M2 imaju samo tri stanja, konstrukcija regularnih izraza na prethodno opisani nacin je prilicno zahtjevna. Nadalje, napomenimo
jos da regularni izrazi dobiveni na prethodno opisani nacin ne moraju biti najjednostavniji moguci ekvivalentni izrazi. S druge strane, opisani postupak ipak omogucuje
sistematican pristup konstrukciji regularnih izraza za jezik L(M) zadan nekim deterministickim konacnim automatom M.
3.8
75
Kleeneov teorem
Predavanje 7
Svojstvo napuhavanja
77
(7.1)
(qr , z) = q f ,
pri c emi vrijedi |xy| n i |y| 1. Dakle, c itanjem simbola sa ulazne trake koji c ine rijec
w = xyz, DKA M iz pocetnog stanja q0 prelazi u prihvatljivo stanje q f , pri c emu slijed
prijelaza formira ciklus c itanjem simbola koji c ine rijec y. Slijed prijelaza pri c itanju
simbola iz rijeci w koji formira cikluse je prikazan na slici 7.1. Nadalje, istaknimo da
postoji mogucnost da se rijec w moze rasc laniti na vise nacina na podrijeci x, y i z,
odnosno da postoji mogucnost postojanja vise od jednog ciklusa. U svakom slucaju,
DKA M u svom radu mora proci barem kroz jedan ciklus c itanjem prvih n simbola iz
rijeci w L. Drugim rijecima, postoji barem jedna mogucnost izbora podrijeci x, y
i z, takvih da je w = xyz, pri c emu niz simbola y odgovara prijelazima koji formiraju
cikluse (vidjeti sliku 7.1). Nadalje, na temelju 7.1 za rijec xz imamo:
(q0 , xz) = ( (q0 , x), z)
= (qr , z)
= qf .
Dakle, vrijedi xz L. Razmotrimo i rijec xyyz, za koju imamo:
(q0 , xyyz) = ( (q0 , x), yyz)
= (qr , yyz)
= ( (qr , y), yz)
= (qr , yz)
= ( (qr , y), z)
= (qr , z)
= qf .
Dakle, rijec xy2 z L(M). Zapravo mozemo zakljuciti da c e za bilo koji broj ponavljanja ciklusa koji korespondira s nizom simbola y, DKA M zavrsiti u prihvatljivom
stanju q f . Prema tome, mozemo zakljuciti da pored rijeci xz, xyz i xy2 z, za koje smo
vec utvrdili da su iz jezika L(M), jeziku L(M) takoder pripadaju i rijeci xy3 z, xy4 z,
itd. Odnosno, za svako i 0, rijec xyi z takoder pripada jeziku L(M), jer DKA M iz
pocetnog stanja q0 moze preci u finalno stanje q f ponavlajuci i puta ciklus koji korespondira nizu simbola iz podrijeci y.
Svojstvo koje smo upravo dokazali se naziva svojstvo napuhavanja. Naziv napuhavanje dolazi od toga sto se rijec w moze napuhavati umetanjem dodatnih kopija
rijeci y.
78
yi
z
q0
qr
qm
Kao sto je na pocetku ovog odjeljka vec istaknuto, najcesc a primjena svojstva napuhavanja je pri dokazivanju da neki jezik ne moze biti prihvacen deterministickim
konacnim automatom. Naime, prvo pretpostavljamo da jezik L moze biti prihvacen
deterministickim konacnim automatom M sa n stanja. Zatim, pokusavamo izabrati
rijec iz jezika L koja ima duljinu barem n, tako da nas tvrdnje 1-3 iz teorema 7.1 vode
u kontradikciju.
Kao sto je prethodno opisano, svojstvo napuhavanja podrazumijeva odredene uvjete
koje svaka rijec iz nekog jezika L, koja ima duljinu barem n, mora zadovoljavati.
Moguce je da za neke odabrane rijeci w, c injenica da w zadovoljava uvjete iz teorema
7.1 ne stvara nikakvu kontradikciju. Dakako, u slucaju tako odabranih rijeci, kada
ne mozemo utvrditi kontradikciju, zapravo ne mozemo nista niti dokazati. Dakle, potrebno je pronaci takvu rijec na temelju koje c e se moci utvrditi kontradikcija. Sljedeci
primjeri ilustriraju primjenu teorema 7.1 pri dokazivanju neregularnosti jezika.
Primjer 7.1. Neka je zadan sljedeci jezik:
L = {ai bi | i 0}.
Pokusajmo dobiti kontradikciju tako da pretpostavimo da postoji DKA M koji ima n
stanja i koji prihvaca jezik L. Izaberimo rijec w = an bn . Prema tome, vrijedi w L
i |w| n. Sukladno teremu 7.1, postoje rijeci x, y i z, takve da je w = xyz, pri c emu
vrijede sljedeci uvjeti:
1. |xy| n
2. y ,
3. xyi z L, za svaki i 0
Buduci da je prvih n simbola rijeci w = an bn jedanko a, iz uvjeta (1) zakljucujemo
da svi simboli u rijecima x i y moraju biti a. Prema tome, rijeci x i y mozemo zapisati
na sljedeci nacin:
x = a p gdje je 0 p < n,
y = ak gdje je 0 < k n,
z = anpk bn .
79
Prema uvjetu (3) svojstva napuhavanja imamo da vrijedi xyi z L. Uzmimo, npr. i = 2.
Tada za rijec xy2 z dobivamo:
xy2 z = a p a2k anpk bn
= a p+2k+npk bn
= ak+n bn
Buduci da je k > 0 zakljucujemo da vrijedi ak+n bn < L, iako bi prema uvjetu
(3) svojstva napuhavanja trebalo vrijediti ak+n bn L. Drugim rijecima, dobili smo
kontradikciju, pa zakljucujemo da ne postoji DKA M koji prihvaca jezik L.
Primjer 7.2. Neka je zadan sljedeci jezik:
2
L = {ai | i 0}.
Dakle, jezik L sadrzi nizove simbola a, c ija je duljina jednaka kvadratu nekog cijelog
broja.
Pretpostavimo da DKA M, koji prihvaca jezik L, ima n stanja. Izaberimo rijec w
2
na sljedeci nacin: w = an . Prema svojstvu napuhavanja, rijec w = xyz za neke nizove
simbola x, y i z, zadovoljava uvjete 1-3. Iz uvjeta 1 i 2 imamo:
0 < |y| |xy| n.
Prema tome, imamo:
|w| = |xyz| = n2 < |xy2 z| = n2 + |y| n2 + n < n2 + 2n + 1 = (n + 1)2 .
Dakle, dobili smo da je:
n2 < |xy2 z| < (n + 1)2 .
Prema uvjetu 3 iz teorema 7.1, rijec xy2 z L, pa njena duljina mora biti kvadrat nekog
cijelog broja i. Medutim, to je nemoguce, jer ne postoji kvadrat cijelog broja koji je
strogo izmedu n2 i (n + 1)2 . Time smo dobili kontradikciju, pa zakljucujemo da ne
postoji DKA koji prihvaca jezik L.
7.2
Za neku klasu jezika kazemo da je zatvorena s obzirom na neku operaciju ako se primjenom te operacije na bilo koji jezik iz te klase dobija jezik koji je u toj istoj klasi.
Naprimjer, u nastavku c emo pokazati da se operacojom unije regularnih jezika L i N
dobija takoder regularni jezik, pa kazemo da su regularni jezici zatvoreni s obzirom na
operaciju unije.
Unija, presjek i komplement
Teorem 7.2. Ako su L1 i L2 regularni jezici, tada su regularni i jezici:
1. L1 L2
80
2. L1 L2
3. L1 \ L2
Dokaz. Za dokazivanje gore navedeneih svojstava zatvorenosti koristimo teorem 2.1.
Neka M1 i M2 oznacavaju DKA koji prihvacaju regularne jezike L1 i L2 . Teoremom
2.1 smo pokazali da se mogu konstruirati DKA koji prihvacaju jezike L1 L2 , L1 L2 i
L1 \ L2 , pa su i navedeni jezici koji nastaju operacijom unije, presjeka i razlike takoder
regularni jezici.
Zatvorenost s obzirom na komplement
Teorem 7.3. Regularni jezici su zatvoreni s obzirom na operaciju komplementa.
Dokaz. Neka DKA M:
M = (Q, , , q0 , F)
prihvaca regularni jezik L(M). Konstruirajmo DKA na sljedeci nacin:
M c = (Q, , , q0 , Q \ F).
DKA M c prihvaca jezik:
L(M c ) = {w | (q0 , w) Q \ F}
= {w | (q0 , w) < F}
= \ {w | (q0 , w) F}
= \ L(M)
= L(M c )
Buduci da smo za jezik Lc koji je komplement jezika L konstruirali DKA, zakljucujemo da je i jezik Lc regularan jezik, pa su regularni jezici zatvoreni s obzirom
na operaciju komplementa.
7.2.1
U prvom poglavlju smo definirali operaciju reverziranja kao operaciju kojom se simboli
a1 a2 . . . an zapisuju zapisuju u obrnutom poretku an an1 . . . a1 . Za oznacavanje reverziranja rijeci w koristimo oznaku wR . Naprimjer, za rijec w = abaa, imamo wR = aaba.
Nadalje, vrijedi R = .
Nadalje, reverziranje jezika L, sto oznacavamo kao LR , definiramo kao jezik koji se
sastoji od reverznih rijeci iz jezika L:
LR = {wR | w L}.
. Naprimjer, ako je jezik L definiran na sljedeci nacin:
L = {ab, abbb, ababa, bbaaa},
tada je reverzni jezik LR :
LR = {ba, bbba, ababa, aaabb}.
81
Teorem 7.4. Ako je jezik L regularan jezik, tada je i jezik LR takoder regularan jezik.
Dokaz. Pretpostavimo da je jezik L definiran regularnim izrazom E. Matematickom
indukcijom na velicini regularnog izraza E mozemo pokazati da postoji regularni izraz
E R , takav da vrijedi:
L(E R ) = (L(E))R .
Odnosno, jezik koji je definiran regularnim izrazom E R je reverzni jezik jezika definiranog regularnim izrazom E.
Osnovni slucaj: Ako je E = , E = ili E = a za neki simbol ain, tada je
E R = E. Naime, imamo da vrijedi:
{}R = {}, R = , {a}R = {a}.
Indukcijski slucaj: Imamo tri slucaja, ovisno o obliku regularnog izraza E.
1. E = E1 + E2 . Ovaj regularni izraz definira jezik L(E1 ) L(E2 ). U ovom
slucaju E R definiramo na sljedeci nacin: E R = E1R + E2R . Naime, imamo da
vrijedi:
(L(E1 + E2 ))R = (L(E1 ) L(E2 ))R
= L(E1R ) L(E2R )
= L(E1R + E2R )
2. E = E1 E2 . Ovaj regularni izraz definira jezik L(E1 )L(E2 ). U ovom slucaju
E R definiramo na sljedeci nacin: E R = E2R E1R . Naime, imamo da vrijedi:
(L(E1 E2 ))R = (L(E1 )L(E2 ))R
= (L(E2 ))R L(E1 ))R
= L(E2R )L(E1R )
= L(E2R E1R )
Uzmimo npr. da imamo L(E1 ) = {ab, bba} i L(E2 ) = {bb, ba}. Tada iamamo
da je:
L(E1 )L(E2 ) = {abbb, abba, bbabb, bbaba}.
Za reverzni jezik (L(E1 )L(E2 ))R dobijamo:
(L(E1 )L(E2 ))R = {bbba, abba, bbabb, ababb}.
Ako nadovezemo jezike (L(E2 ))R i (L(E1 ))R imamo:
(L(E2 ))R (L(E1 ))R = {bb, ab}{ba, abb}
= {bbba, bbabb, abba, ababb}
82
Predavanje 8
Formalna gramatika
Prethodno je receno da pod formalnim jezikom podrazumijevamo svaki skup rijeci nad
nekim definiranim alfabetom, te da jezik mozemo specificirati tako sto c emo navesti
sve rijeci koje se nalaze u tom jeziku. Medutim, takav nacin specifikacije jezika nije
prihvatljiv za beskonacne jezike. Prema tome, potrebno je pronaci nacin da se u nekoj konacnoj formi specificiraju i oni jezici koji imaju beskonacno mnogo elemenata.
Nacin za prevazilazenje problema konacne specifikacije formalnih jezika je upotreba
formalne gramatike.Slicno kao kod prirodnih jezika kod kojih gramatika predstavlja skup pravila koja neki konkretni prirodni jezik (engleski, francuski, bosanski,...)
mora zadovoljavati,formalna gramatika predstavlja skup pravila po kojima se generiraju rijeci formalnog jezika.
Neformalno, gramatika je skup pravila koja se koriste da se definira struktura nizova simbola nad nekim alfabetom .Gramatika za jezik L koji se gradi nad alfabetom
se sastoji od skupa pravila koji imaju sljedeci oblik:
,
gdje i oznacavaju rijeci sastavljene od simbola uzetih iz alfabeta i iz posebnog
skupa simbola kojeg c emo nazivati skup neterminalnih simbola, te ga oznacavati sa
N. Pravilo gramatike se obicno naziva produkcija i moze se c itati na razlicite
nacine, kao npr. producira , zamjenjujemo sa ,i sl.Nadalje,svaka gramatika
ima specijalni simbol koji se naziva pocetni simbol,te mora postojati barem jedna produkcija kod koje se lijeva strana sastoji samo od startnog simbola. Naprimjer,ako
je S pocetni simbol za neku gramatiku,onda mora postojati barem jedna produkcija
sljedeceg oblika:
S ,
Uzmimo jedan primjer gramatike za neki jezik L i opisimo proces izvodenja rijeci iz
produkcijskih pravila. Neka je alfabet definiran na sljedeci nacin:
= {a, b, c}
Nadalje,neka je jezik L definiran kao L = . Dakle,jezik L je sastavljen od svih
mogucih rijeci koje se mogu dobiti kombiniranjem znakova iz . Tada bi gramatika za
83
84
8.1
Prethodno smo uveli pojam gramatike na jedan neformalan nacin tako sto smo uveli potrebne pojmove za njenu formalnu definiciju.Naime,uveli smo sljedeca c etiri elementa
koja su potreba za formalnu definiciju pa c emo sada dati i njenu formalnu definiciju.
Neka je sa N oznacen skup neterminalnih simbola (varijabli) za koje c emo koristiti velika slova A, B, C itd.Zatim,neka je sa oznacen alfabet (skup terminalnih simbola),za
85
koje c emo koristiti mala slova a, b, c, itd. Takoder, neka simbol S , S N,oznacava
specijalni neterminalni simbol kojeg c emo nazivati pocetni simbol.
Definicija 1.2. Formalna gramatika G je c etvorka:
G = (N, , P, S )
gdje je:
N konacan skup neterminalnih simbola
konacan skup terminalnih znakova, N =
P konacan skup produkcija oblika , gdje vrijedi:
(N ) N(N ) , (N ) ,
te pri c emu vrijedi da skupovi N i nemaju zajednickih elemenata, tj. vrijedi
N = . Primijetimo da niz mora sadrzavati barem jedan neterminalni
simbol.
S pocetni neterminalni simbol, S N
Za zadanu gramatiku G = (N, , P, S ) definiramo relaciju nad nizovima iz skupa
G
Niz simbola se generira direktno iz niza primjenom produkcije . Oznaka G specificira kojoj gramatici pripada primijenjena produkcija.
Neka 1 , 2 , . . . , m ,pri c emu je m 1, predstavljaju nizove iz skupa (N ) .
Nadalje, neka vrijedi sljedece:
1 2 , 2 3 , . . . , m1 m .
G
1 m
G
G, dok relacijom prikazujemo primjenu nula ili vise produkcija koje pripadaju graG
koristiti oznake
86
Dakako, iz konteksta c e uglavnom biti jasno o kojoj gramatici se radi, pa c emo tada
koristiti sljedeci zapis:
i
L(G) = {w | w , S w}
G
Prema tome, neka rijec w je u jeziku L(G) koji generira gramatika G ako za rijec w
vrijedi:
1. Rijec w sadrzi iskljucivo terminalne znakove gramatike.
2. Rijec w je moguce generirati iz pocetnog neterminalnog simbola S .
8.1.1
87
S aS
Primjenom produkcije S zakljucujemo da vrijedi L2 (G2 ). Primjenom produkcije S aS , a zatim produkcije S , imamo:
S aS a
Dakle, rijec a se takoder nalazi u jeziku L2 (G2 ), a L2 (G2 ). Nadalje, primjenom dva
puta produkcije S aS , a zatim jednom produkcije S , imamo:
S aS aaS aa,
pa zakljucujemo da se i rijec aa nalazi u jeziku L2 (G2 ), aa L2 (G2 ).
Opcenito, zakljucujemo da ako primijenimo n puta produkciju S aS , a zatim
jednom produkciju S , izvodenjem c emo dobiti rijec an , pa zakljucujemo da gramatika G2 generira jezik L2 (G2 ):
L2 (G2 ) = {a, aa, aaa, . . .}
Jezik L2 (G2 ) mozemo zapisati i na sljedeci nacin:
L2 (G2 ) = {an | n N}
Primjer 8.3. Neka imamo slijedecu gramatiku:
G3 = ({S , A}, {a, b, c}, P, S ),
gdje skup P sadrzi sljedece produkcije:
S aAc
A
A bA
Razmotrimo izvodenje primjenom produkcije S aAc, a zatim i produkcije A
:
S aAc ac
Dakle, imamo ac L(G3 ).
Sada razmotrimo izvodenje primjenom produkcije S aAc, zatim produkcije
A bA i na kraju produkcije A :
S aAc abAc abc
Prema tome, vrijedi abc L(G3 ).
Razmotrimo jos izvodenje primjenom produkcije S aAc, zatim dva puta produkcije A bA i na kraju produkcije A :
S aAc abAc abbAc abbc = ab2 c
88
89
8.1.2
Formalna gramatika ima odredene slicnosti sa gramatikom prirodnih jezika.Ovaj primjer upravo ima svrhu da ilustrira odredene slicnosti izmedu gramatike prirodnog jezika i formalne gramatike.
Jedno od glavnih obiljezja recenice je mogucnost da se ona moze rasc laniti na
odredene recenicne dijelove. Iako je situacija sa gramatikom prirodnih jezika nesto
slozenija, za potrebe ovog primjera c emo pretpostaviti da su glavni i samostalni recenicni
dijelovi subjekt, predikat i objekt. Nadalje, pretpostavit c emo da svaki od navedenih
dijelova moze imati odredene dodatke, koji onda tvore subjektni skup, predikatni skup
i objektni skup.
Konstruirajmo formalnu gramatiku G = (N, , P, S ),pri c emu je pocetni simbol
S = hRecenicai,dok su ostala tri elementa definirana na sljedeci nacin:
N =
hSubjektniSkupi
hPredikatniSkupi
hObjektniSkupi
hSubjekti
hPredikati
hObjekti
hAtributi
hPrilogi
hRecenicai
PJEVACICE
PJESME
PJEVAJU
PISU
POZNATE
LIJEPE
UVIJEK
PONEKAD
. (tacka)
90
1.
hRecenicai hSubjektniSkupihPredikatniSkupihObjektniSkupi.
2.
hSubjektniSkupi
hAtributihSubjekti
3.
hSubjektniSkupi
hSubjekti
4.
hPredikatniSkupi
hPrilogihPredikati
5.
hPredikatniSkupi
hPredikati
6.
hObjektniSkupi
hAtributihObjekti
7.
hObjektniSkupi
hObjekti
8.
hSubjekti
PJEVA
CICE
P =
9.
hSubjekti
KNJI
ZEVNICE
10.
hPredikati
PJEVAJU
11.
hPredikati
PI
SU
12.
hObjekti
PJESME
13.
hObjekti
KNJIGE
14.
hAtributi
POZNATE
15.
hAtributi
LIJEPE
16.
hPrilogi
UVIJEK
17.
hPrilogi PONEKAD
Navedene neterminalne simbole iz skupa N smo stavili u zagrade hi kako bi smo
te simbole prikazali kao nedjeljive elemente,te kako bismo ih razlikovali od terminalnih simbola iz skupa koji c ine rjecnik jezika.Kao sto vidimo u skupu imamo
devet terminalnih simbola, ukljucujuci i simbol . (tacka) koji predstavlja oznaku kraja
recenice.Skup P sadrzi sedamnaest produkcijskih pravila.Primjenom produkcijskih pravila grade se recenice. Pravilo 1 specificira temeljni dio organizacije recenice.Pravila
2-7 specificiraju pravila za organizaciju subjekta,predikata i objekta,zajedno sa njihovim dodacima.Pravila 8-17 odreduju nacin na koji se neterminalni simboli preslikavaju
u terminalne simbole iz rijecnika odredenog prirodnog jezika.
U nastavku c emo dati nekoliko primjera izvodenja recenica koje pripadaju jeziku
hS ub jektihPredikatihOb jekti.
7
91
PJEVACICEhPredikatihOb
jekti.
8
PJEVACICE
PJEVAJUhOb jekti.
10
PJEVACICE
PJEVAJU PJESME.
12
hPOZNATE KNJIZEVNICEhPrilogihPredikatihAtributihOb
jekti.
9
hPOZNATE KNJIZEVNICE
UVIJEKhPredikatihatributihOb jekti.
16
POZNATE KNJIZEVNICE
UVIJEK PISUhAtributihOb
jekti.
11
LIJEPEhOb jekti.
POZNATE KNJIZEVNICE
UVIJEK PISU
15
LIJEPE PJESME.
POZNATE KNJIZEVNICE
UVIJEK PISU
12
KNJIGE.
Opisimo jos generiranje recenice POZNATE PJEVACICE
PONEKAD PISU
koja takoder pripada jeziku L(G):
hRecenicai hS ub jektniS kupihPredikatniS kupihOb jektniS kupi.
1
POZNATEhPrilogihPredikatihAtributihOb jekti.
14
POZNATE PJEVACICEhPredikatihAtributihOb
jekti.
8
POZNATE PJEVACICE
PONEKADhAtributihOb jekti.
17
POZNATE PJEVACICE
PONEKAD PISUhOb
jekti.
11
KNJIGE.
POZNATE PJEVACICE
PONEKAD PISU
13
92
isticuci neke bitne razlike izmedu prirodnih i formalnih jezika. Primjerice, prirodni
jezik se neprestano mijenja i prilagodava pa se postavlja pitanje koliko se njegovim
formaliziranjem zapravo zanemaruju dinamicnost i otvorenost prirodnih jezika. Nadalje prirodni jezici su viseznacni, povezani su s iskustvom i emocijama sugovornika,
kao i kontestom, pa dio lingvista smatra da se njegovom formalizacijom zapravo gubi
njegova univerzalnost.
8.2
Regularna gramatika
8.2.1
93
S Aab,
A Aab | B,
B a,
je lijevo-linearna gramatika. Dakako, gramatike G1 i G2 su regularne gramatike.
Razmotrimo npr. sljedeci postupak generiranja rijeci ababa na temelju gramatike G1 :
S abS ababS ababa
(8.1)
8.3
8.3.1
94
(8.2)
(8.3)
v1 v2 . . . vk Ak
(8.4)
v1 v2 . . . vk vl = w
(8.5)
Konstruirajmo NKA koji simulira gore prikazani postupak izvodenja. Pocetno stanje NKA je oznaceno kao A0 . Nadalje, za svaki neterminalni simbol Ai uvedimo neprivatljivo stanje Ai . NKA konstruiramo tako da za produkciju oblika:
Ai a1 a2 . . . am A j ,
definiramo funkciju prijelaza tako da omogucimo prijelaz iz stanja Ai u stanje A j
c itanjem niza simbola a1 a2 . . . am . Odnosno, funkcija prijelaza treba biti definirana
tako da za njeno prosirenje vrijedi:
(Ai , a1 a2 . . . am ) = A j .
Nadalje, za svaku produkciju oblika:
Ai a1 a2 . . . am ,
NKA konstruiramo tako da vrijedi:
(Ai , a1 a2 . . . am ) = A f ,
gdje je A f neko prihvatljivo stanje. Nacin konstrukcije NKA na prethodno opisani
nacin je prikazan na slici 9.1.
Ai
a1
a2
95
am
...
Aj
Ai
a1
a2
...
am
Af
Za zadanu desno-linearnu gramatiku konstruiramo NKA objedinjujuci pojedine dijelove koji su izgradeni na prethodno opisani nacin.
Pretpostavimo sada da vrijedi w L(G), pri c emu gramatika G generira rijec w na
nacin kako je to opisano izrazom 9.2. Tada NKA sadrzi putanju od A0 do Ai koja je
oznacena sa v1 , zatim putanju od Ai do A j koja je oznacena sa v2 , itd. Zakljucujemo da
tada vrijedi:
A f (A0 , w),
pa NKA M prihvaca rijec w.
S druge strane, pretpostavimo da automat M prihvaca rijec w. Imajuci na umu
nacin na koji je konstruiran NKA M, za prihvacanje rijeci w automat mora proci kroz
niz stanja A0 , Ai , . . . do stanja A f , koristeci putanje oznacene sa v1 , v2 , . . .. Prema tome,
rijec w mora imati sljedeci oblik:
w = v1 v2 vk vl .
Drugim rijecima, moguce je sljedece generiranje rijeci w:
A0 v1 Ai
v1 v2 V j
v1 v2 vk Vk
v1 v2 vk vl
Primjer 8.7. U ovom primjeru c emo konstruirati NKA koji prihvaca jezik L(G) kojeg
generira gramatika
G = ({A0 , A1 }, {a, b}, P, A0 ),
gdje skup P sadrzi sljedece produkcije:
A0 aA1
A1 babA0 | b.
Na temelju prethodno pisanog nacina konstrukcije NKA imamo sljedece:
96
A0
A1
Af
a
Slika 8.2: Konstruirani NKA za zadanu gramatiku G
8.3.2
97
Imajuci na umu nacin na koji je konstruirana gramatika G, imamo po jednu produkciju za svaki gore prikazani prijelaz. Prema tome, gramatika G omogucuje sljedece
izvodenje rijeci w:
q0 ai q p
ai a j qr
(8.6)
(8.7)
ai a j akql
(8.8)
ai a j ak al q f
(8.9)
ai a j ak al ,
(8.10)
98
S druge strane, ako vrijedi w L(G), tada generiranje rijeci ima oblik 9.6, sto
zapravo podrazumijeva da vrijedi:
(q0 , ai a j ak al ) = q f .
Dakle, na temelju pretpostavke da vrijedi w L(G), dobili smo da takoder vrijedi
w L(M), te je time teorem dokazan.
Primjer 8.8. Neka je zadan DKA M:
M = ({q0 , q1 , q2 }, {a, b}, , q0 , {q0 , q2 }),
gdje je funkcija prijelaza zadana sljedecom tabelom:
q0
q1
q2
q1
q2
q1
q2
q0
q1
q0
q1
q2
b
a
Slika 8.3: Dijagram stanja DKA za koji konstruiramo gramatiku G
99
8.4
8.4.1
100
(8.13)
na sljedeci nacin:
Preuredujemo NKA M tako da ima samo jedno prihvatljivo stanje. Naime,
ako NKA M ima vise prihvatljivih stanja, tada se dodaje novo i jedinstveno
prihvatljivo stanje, kao i -prijelazi iz svih prijasnjih prihvatljivih stanja u
novo prihvatljivo stanje. Stara prihvatljiva stanja vise nisu prihvatljiva, pa
ostaje samo jedno novo prihvatljivo stanje koje smo dodali.
Za pocetno stanje -NKA M 0 se uzima prihvatljivo preuredenog NKA M.
101
S
b
102
a
b
8.4.2
Teorem 8.4. Ako je zadan neki NKA M koji prihvaca jezik L(M), tada postoji lijevolinearna gramatikom G = (, N, P, S ) koja generira jezik L(G) = L(M). Drugim
rijecima, za svaki zadani regularni jezik L postoji lijevo-linearna gramatika G0 koja
generira taj jezik.
Dokaz. Lijevo-linearnu gramatiku za jezik L(G) konstruiramo na sljedeci nacin:
1. Konstruira se -NKA M1 iz zadanog NKA M koji prihvaca jezik:
L(M1 ) = L(M)R .
2. Na temelju izgradenog -NKA M1 konstruiramo desno-linearnu gramatiku G1 =
(, N, P1 , S ), takvu da vrijedi:
L(G1 ) = L(M1 ) = L(M)R .
(8.14)
3. Konstruiramo lijevo-linearnu gramatiku G = (, N, P, S ), gdje se skup produkcija P dobija tako da se preurede produkcije iz skupa P1 desno-linearne gramatike G1 na sljedeci nacin:
Produkcije desno-linearne gramatike G1 oblika
A wB
se preurede u produkcije oblika
A BwR .
Produkcije desno-linearne gramatike G1 oblika
Aw
se preurede u produkcije oblika
A wR .
103
Predavanje 9
103
104
9.1
9.1.1
105
Drugi nacin za prikaz generiranja rijeci je pomocu tzv. generativnog stabla. Generativno stablo je uredeno stablo kod kojeg su c vorovi oznaceni neterminalnim simbolima
koji se nalaze na lijevim stranama produkcija, dok su djeca oznacena simbolima koji
se nalaze sa desne strane odgovarajuce produkcije. Pocevsi od korijena koji je oznacen
pocetnim simbolom, generativno stablo prikazuje nacin na koji se neterminalni simboli
zamjenjuju u procesu generiranja neke rijeci. U nastavku je data precizna definicija generativnog stabla.
Definicija 9.2. Neka imamo kontekstno neovisnu gramatiku G = (N, , P, S ). Za
neko stablo kazemo da je generativno stablo gramatike G ako i samo ako zadovoljava
sljedeca svojstva:
(i) Korijen generativnog stabla je S .
(ii) Svaki c vor dijete u stablu ima oznaku iz skupa {}.
(iii) Svaki c vor koji nije list ima oznaku iz skupa N.
(iv) Ako neki c vor ima oznaku A N, a njegova djeca su oznacena s lijeva na desno
kao a1 a2 , . . . . . . an , ai ( N {}), tada skup P mora sadrzavati produkciju
sljedeceg oblika:
A a1 a2 . . . . . . an
(v) Cvor
koji ima dijete oznaceno sa ne moze imati vise djece. Drugim rijecima,
c vor oznacen sa nema brace.
Razmotrimo kontekstno neovisnu gramatiku G1 = ({S , A, B}, {a, b}, P1 , S ), gdje je
skup produkcija P1 sljedeci:
S AB
A aA | a
B bB | b
Niz simbola aabbb se moze npr. generirati na sljedeci nacin:
S AB AbB AbbB Abbb aAbbb aabbb
(9.1)
106
slikama 9.1b - 9.1f. Konacno generativno stablo je prikazano na slici 9.1f. Primijetimo
(a) S AB
(b) AB AbB
S
A
A
a
B
A b
B
b
B
b
S
A
a
B
A b
a
B
b
B
b
Osim toga, istaknimo da postoje i drugi postupci generiranja za rijec aabbb, pri
107
c emu tim postupcima odgovara isto generativno stablo kao na slici 9.1f. Razmotrimo
npr. sljedeci postupak:
S AB aAB aAbB aAbbB aAbbb aabbb
(9.2)
Lako mozemo vidjeti da primjenom postupka generiranja 9.2 izgradujemo isto finalno
generativno stablo (slika 9.1f) kao i primjenom postupka 9.1. Pogledajmo jos jedan
primjer postupka generiranja za istu rijec:
S AB aAB aaB aabB aabbB aabbb
(9.3)
Istaknimo da i postupak 9.3 izgraduje isto generativno stablo. Naime, mozemo reci da
c e za gramatiku G1 i za rijec aabbb zapravo svaki postupak generiranja izgraditi isto
generativno stablo.
9.1.2
Generiranje rijeci zamjenom krajnje lijevog ili krajnje desnog neterminalnog simbola
Medutim, treba naglasiti da to ne mora vrijediti u svim situacijama, sto c emo ilustrirati
sljedecim primjerom. U tu svrhu razmotrimo gramatiku
G2 = ({S }, {a, b, c}, P2 , S ),
gdje skup P2 sadrzi sljedece produkcije:
S S bS | S cS | a
Rijec abaca mozemo generirati na sljedeca dva nacina:
S S cS S bS cS abS cS abacS abaca
(9.4)
S S bS S bS cS S bS ca S baca abaca
(9.5)
Za postupak 9.4 imamo generativno stablo kao na slici 9.2, dok je na slici 9.3 prikazano
generativno stablo za postupak 9.5.
S
S
a
108
S
S
S
a
Dakle, iako se postupci 9.4 i 9.5 odnose na istu rijec abaca, ipak za ta dva postupka
imamo dva razlicita generativna stabla.
Prema tome, mozemo zakljuciti da u odredenim situacijama razliciti postupci mogu
izgraditi isto generativo stablo, dok pak u drugim situacijama razliciti postupci mogu
izgraditi razlicita stabla. Osim toga, primijetimo da smo kod postupka 9.4 u svim
koracima mijenjali krajnji lijevi neterminalni simbol, dok smo kod postupka 9.5 u svim
koracima mijenjali krajnji desni neterminalni simbol. Zapravo, mozemo reci da se kod
postupka generiranja rijeci prakticno najcesc e koriste sljedeca dva postupka:
generiranje rijeci zamjenom krajnjeg lijevog neterminalnog simbola
generiranje rijeci zamjenom krajnjeg desnog neterminalnog simbola
Postupak generiranja rijeci zamjenom krajnjeg lijevog neterminalnog simbola je postupak u kojem se produkcije primjenjuju iskljucivo na krajnje lijeve neterminalne simbole. Primjer takvog nacina generiranja rijeci je postupak 9.4. Postupak generiranja
rijeci zamjenom krajnjeg desnog neterminalnog simbola je postupak u kojem se produkcije primjenjuju iskljucivo na krajnje desne neterminalne simbole. Primjer takvog
nacina generiranja rijeci je postupak 9.5.
Sada razmotrimo sljedeca nova dva postupka generiranja iste rijeci abaca:
S S bS abS abS cS abacS abaca
(9.6)
S S cS S ca S bS ca S baca abaca
(9.7)
9.1.3
Generativna stabla koja se izgraduju u procesu generiranja neke rijeci imaju vaznu
ulogu pri interpretaciji te rijeci. Naime, mogucnost izgradnje vise razlicitih generativ-
109
nih stabala za neku rijec kao posljedicu ima nejednoznacnost pri interpretaciji te rijeci.
Razmotrimo gramatiku
G3 = ({E}, {1, 2, 3, 4, 5, 6, 7, 8, 9, }, P3 , E),
gdje skup P3 sadrzi sljedece produkcije:
1.E E E
2.E 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Sljedeci postupak predstavlja primjer generiranja niza simbola 8 1 5 zamjenom
krajnjeg lijevog neterminalnog simbola:
E E E E E E 8 E E 8 1 E 8 1 5.
(9.8)
Prema tome, primijenili smo sljedeci redoslijed produkcija: 1-1-2-2-2. Na slici 9.4 je
prikazano generativno stablo za postupak 9.8 .
E
E
8
(9.9)
Dakle, primijenili smo sljedeci redoslijed produkcija 1-2-1-2-2. Na slici 9.5 je prikazano generativno stablo za postupak 9.9. Primijetimo da se generativna stabla prikazana na slikama 9.4 i 9.5 razlikuju, iako su oba stabla izgradena zamjenom krajnjeg
lijevog neterminalnog simbola za istu gramatiku i za isti niz simbola 8 1 5, ali
primjenom razlicitih redoslijeda produkcija.
110
E
E
E
5
Sada razmotrimo sljedeci postupak koji predstavlja primjer generiranja niza simbola 8 1 5 zamjenom krajnjeg desnog neterminalnog simbola:
E E E E E E E E 5 E 1 5 8 1 5.
(9.10)
Na postupak 9.10 smo primijenili redoslijed produkcija 1-2-1-2-2, koji je isti kao i kod
postupka 9.9. Generativno stablo za postupak 9.10 je prikazano na slici 9.4. Dakle,iako
smo primijenili isti redoslijed produkcija kao i kod postupka 9.9, ipak nismo dobili isto
generativno stablo. Prema tome, razlika kod postupaka 9.9 i 9.10 nije u razlicitim
redoslijedima primjene produkcija, nego u razlicitim redoslijedima neterminalnih simbola na kojima se primjenjuju produkcije. Dok smo kod postupka 9.9 u svim koracima
koristili zamjenu krajnjeg lijevog neterminalnog simbola, kod postupka 9.10 smo u
svim koracima pak koristili zamjenu krajnjeg desnog neterminalnog simbola.
Na kraju, razmotrimo jos jedan postupak generiranja za niz simbola 8 1 5
primjenom zamjene krajnjeg desnog neterminalnog simbola:
E E E E 5 E E 5 E 1 5 8 1 5.
(9.11)
Kao sto vidimo, kod postupka 9.11 smo primijenili redoslijed produkcija 1-1-2-2-2,
koji je isti kao i kod postupka 9.8. Generativno stablo za postupak 9.11 je prikazano na
slici 9.5, te kao sto mozemo vidjeti, razlikuje se od generativnog stabla za postupak 9.8,
iako smo kod oba spomenuta postupka primijenili isti redoslijed produkcija. Medutim,
postupci 9.8 i 9.11 razlikuju se u redoslijedu neterminalnih simbola na koje se primjenjuju produkcije, sto je u ovom slucaju rezultiralo izgradnjom razlicitih generativnih
stabala.
Generativno stablo utice na interpretaciju generiranog niza terminalnih simbola.
Pretpostavimo da niz simbola 8 1 5 predstavlja neki aritmeticki izraz, pri c emu
simbol oznacava neki binarni operator. Izgradeno generativno stablo u ovom slucaju
utice na interpretaciju na nacin da svojom strukturom definira prednost operatora. Naime, izrazi u zajednickom podstablu se pri interpretaciji grupiraju zajedno. Uz pretpostavku da grupiranje oznacimo zagradama (), tada generativno stablo za aritmeticki
izraz 8 1 5, prikazano na slici 9.4, sugerira sljedecu interpretaciju:
(8 1) 5.
(9.12)
111
9.1.4
U prethodnom odjeljku smo ilustrirali razlicite moguce situacije pri generiranju neke
rijeci za zadanu gramatiku. Primjerice, produkcije gramatike G1 generiraju rijec aabbb
tako da se izgraduje uvijek isto generativno stablo (slika 9.1f, bez obzira na primjenu
razlicitih postupaka generiranja. S druge pak strane, primjenom produkcija gramatike
G2 pri generiranju rijeci abaca smo imali situaciju gdje razliciti postupci zamjenom
krajnjeg lijevog neterminalnog simbola, kao uostalom i razliciti postupci zamjenom
krajnjeg desnog neterminalnog simbola, izgraduju razlicita generativna stabla. Slicnu
situaciju smo imali i pri opisu postupaka generiranja niza simbola 8 1 5 primjenom
produkcija gramatike G3 .
Opcenito, moze se pokazati da neko zadano generativno stablo nije moguce izgraditi primjenom vise razlicitih postupaka generiranja rijeci zamjenom krajnje lijevog
neterminalnog simbola, odnosno primjenom vise razlicitih postupaka generiranja rijeci
zamjenom krajnje desnog neterminalnog simbola. Uzimajuci u obzir prethodno receno,
mozemo pisati sljedece tvrdnje:
Bilo koje generativno stablo moguce je izgraditi primjenom jednog i samo jednog postupka generiranja niza zamjenom krajnjeg lijevog neterminalnog simbola.
Bilo koje generativno stablo moguce je izgraditi primjenom jednog i samo jednog postupka generiranja niza zamjenom krajnjeg desnog neterminalnog simbola.
Drugim rijecima, postojanje dva i vise razlicitih generativnih stabala podrazumijeva
postojanje dva i vise razlicitih postupaka generiranja rijeci zamjenom krajnjeg lijevog
neterminalnog simbola, kao i postojanje postojanje dva i vise razlicitih postupaka generiranja rijeci zamjenom krajnjeg desnog neterminalnog simbola. Upravo mogucnost
izgradnje dva ili vise generativnih stabala za neku gramatiku G koristimo za definiciju
nejednoznacnosti kontekstno neovisne gramatike.
Definicija 9.3. Za neku gramatiku G kazemo da je nejednoznacna ako je za neku rijec
w L(G) moguce izgraditi vise razlicitih generativnih stabala. Osim toga, uzimajuci u
112
9.1.5
Promjena gramatike
113
8
Slika 9.6: Generativnog stablo za postupak 9.14
(9.15)
Postupak 9.15 je jedini moguci postupak generiranja rijeci zamjenom krajnjeg desnog
neterminalnog simbola. Ovaj postupak gradi isto generativno stablo (slika 9.6) kao i
postupak 9.14.
Za desno asocijativni operator se koristi tzv. desna rekurzija. Razmotrimo gramtiku
G5 = ({E, T }, {1, 2, 3, 4, 5, 6, 7, 8, 9, }, P5 , E),
gdje skup P5 sadrzi sljedece produkcije:
E T E|T
T 1|2|3|4|5|6|7|8|9
114
(9.16)
Postupak 9.16 je jedini moguci postupak generiranja rijeci zamjenom krajnjeg lijevog
neterminalnog simbola, a generativno stablo koje izgraduje ovaj postupak je prikazano
na slici 9.7.
E
T
E
T
5
Predavanje 10
Potisni automat
U prethodnom poglavlju smo vidjeli da kontekstno neovisne gramatike zapravo prosiruju
mogucnosti specifikacije formalnih jezika na nacin da omogucuju definiranje i jezika
koje konacni automati ne mogu prihvacati. Naglasimo da pod terminom konacni automati podrazumijevamo deterministicke konacne automate (DKA), nedeterministicke
konacne automate (NKA), kao i nedeterministicke konacne automate s -prijelazima
(-NKA). U ovom poglavlju c emo upravo opisati automate koji omogucuju prihvacanje
svih kontekstno neovisnih jezika. Neformalno govoreci, mozemo reci da konacne automate zapravo limitiraju memorijske mogucnosti. Za razliku od konacnih automata,
u ovom poglavlju uvodimo novi model automata koji ukljucuje izmedu ostalog i stek,
koji na neki nacin ima ulogu pomocne memorije. Taj model automata c emo nazivati
potisni automat (eng. Pushdown automata). Na slici 10.1 je upravo prikazan model
potisnog automata (PA).
...
Glava za c itanje
sa ulazne trake
(pomjera se desno)
Glava za
c itanje sa
vrha steka
Xm
q3
Xm1
Xm2
...
X1
. . . Ulazna traka
b b a a a a
..
q2
qn
q1
q0
Upravljacka jedinica
X0
Stek
115
116
117
na stek stavi simbol koji je jednak procitanom simbolu na vrhu steka, sto zapravo
odgovara situaciji u kojoj se ne mijenja sadrzaj steka. Stavljanjem nekog drugog
simbola na stek, koji je razlicit od simbola na vrhu steka, postize se zamjena
simbola na vrhu steka. Nadalje, model PA daje mogucnost da se na stek stave
i rijeci koje imaju duljinu vecu od jedan, te je na taj nacin omoguceno da PA
na steku c uva odredene medunizove, koji nastaju kao medurezultati u procesu
prihvacanja rijeci.
10.1
gdje je:
Q
q0
pocetno stanje, q0 Q;
Z0
118
a, A/
119
a, a/aa
q0
a, A/aA
q1
b, a/
b, a/
q2
, A/A
q3
120
aA, sto je ujedno i novi sadrzaj steka. Novo stanje (q1 ), neprocitani dio ulaznog niza
simbola (aabbb) i sadrzaj steka (aA) su prikazani u drugom redu u prve tri kolone.
U tablici 10.1 su detaljno opisani i svi ostali prijelazi. U predzadnjem redu imamo
prikazanu situaciju u kojoj se PA M nalazi u stanju q2 , neprocitani dio ulaznog niza je
prazna rijec , a na vrhu steka je simbol A, te je omogucen sljedeci prijelaz:
(q2 , , A) = {(q3 , A)},
primjenom kojeg PA M prelazi u stanje q3 . Buduci da su procitani svi simboli ulaznog
niza, a PA M se nalazi u prihvatljivom stanju q3 , zakljucujemo da PA M prihvaca rijec
aaabbb.
Stanje
Neprocitani
dio niza
Sadrzaj steka
Prijelaz
q0
aaabbb
q1
aabbb
aA
q1
abbb
aaA
q1
bbb
aaaA
(q1 , b, a) = {(q2 , )}
q2
bb
aaA
(q2 , b, a) = {(q2 , )}
q2
aA
(q2 , b, a) = {(q2 , )}
q2
q3
q3 F
10.1.1
Kao sto smo vidjeli u prethodnom primjeru pracenje prijelaza potisnog automata za
neku ulaznu rijec je komplikovanije nego kod konacnih automata. Naime, da bismo
pratili prijelaze u prve tri kolone tablice 10.1 smo smo imali zapisane sljedece komponente:
trenutno stanje (q);
neprocitani dio ulaznog niza simbola (x);
sadrzaj steka ().
Gornje tri komponente koje je potrebno pratiti c emo nazivati konfiguracija potisnog
automata. Prema tome, konfiguraciju PA formalno definiramo kao trojku:
(q, x, ).
(10.1)
121
(q, x, ) ` (p, y, ).
M
(q, x, ) ` (p, y, ).
M
Nadalje, ako se prijelaz PA M iz konfiguracije (q, x, ) u konfiguraciju (p, y, ) ostvaruje u n koraka (primjenom n prijelaza), onda to zapisujemo na sljedeci nacin:
n
(q, x, ) ` (p, y, ).
M
M M
10.1.2
U primjeru 10.1 smo neformalno vec uveli pojam prihvacanja jezika potisnim automatom. Formalnu definiciju prihvacanja jezika potisnim automatom dajemo u nastavku.
122
(q0 , w, Z0 ) ` (p, , ),
M
za neko i neko p F.
Odnosno, potisni automat M prihvaca jezik L(M):
123
(q0 , xcxR , A)
(q0 , cxR , xR A)
(q1 , xR , xR A)
(q2 , , A)
q2 F, rijec w = xcxR se prihvaca
Slika 10.4: Prihvacanje palindroma oblika xcxR
Citanjem
simbola c automat primjenom odgovarajuceg prijelaza mijenja stanje q1 .
U tom trenutku neprocitani dio ulaznog niza je xR , dok je sadrzaj steka xR A ostao
nepromijenjen. Prema tome, treba ukljuciti sljedeci prijelaze:
7. (q0 , c, A) = {(q1 , A)}
8. (q0 , c, a) = {(q1 , a)}
9. (q0 , c, b) = {(q1 , b)}
U stanju q1 je potrebno omoguciti prijelaze u isto to stanje samo pod uvjetom da
se neprocitani simboli sa ulazne trake i steka pri c itanju podudaraju. Buduci da je
neposredno nakon c itanja simbola c i prelaska u stanje q1 neprocitani niz simbola xR ,
a sadrzaj steka je xR A, onda je prethodno navedeni uvjet ispunjen, pa se simboli sa
ulazne trake c itaju, dok se sadrzaj steka prazni. Upravo opisano ponasanje automata u
stanju q1 postizemo sljedecim prijelazima:
10. (q1 , a, a) = {(q1 , )}
11. (q1 , b, b) = {(q1 , )}
124
Kada se u stanju q1 procitaju svi simboli sa ulazne trake, na steku c e ostati jedino
simbol A. Dakle, potrebno je dodati i prijelaz (12) kojim se upravo u toj situaciji
omogucuje promjena stanja iz q1 u q2 .
12. (q1 , , A) = {(q2 , A)}
Buduci da je q2 prihvatljivo stanje, a procitani su svi simboli sa ulazne trake, zakljucujemo da potisni automat M1 prihvaca rijec w = xcxR , x {a, b} .
Na temelju prethodno izlozenog, mozemo definirati PA M1 na sljedeci nacin:
M1 = ({q0 , q1 , q2 }, {a, b, c}, {a, b, A}, 1 , q0 , A, {q2 }),
Q = {q0 , q1 , q2 }
= {a, b, c}
= {a, b, A}
F = {q2 }
gdje je funkcija prijelaza 1 definirana prethodno specificiranim prijelazima (1)-(12),
koje na ovom mjestu jos jednom navodimo:
1. 1 (q0 , a, A) = {(q0 , aA)}
b, A/bA
a, a/aa
a, A/aA
c, A/A
a, a/
c, a/a
c, b/b
q0
b, a/ba
q1
b, b/bb
a, b/ab
, A/A
q2
b, b/
Slika 10.5: Dijagram stanja PA M1 koji prihvaca jezik L(M1 ) = {xcxR | x {a, b} }
125
126
(q0 , xR , xR A)
(q0 , xR , xR A)
(q1 , xR , xR A)
(q2 , , A)
Prvo c emo razmotriti nacin na koji c emo iskoristiti nedeterminizam da bismo omogucili
prihvacanje palindroma oblika xxR . Buduci da je ulazna rijec oblika xxR , tada nakon c itanja simbola iz x prelazak u stanje q1 treba biti omogucen c itanjem ulaznog
simbola {a, b}, za sva tri moguca simbola iz alfabeta steka = {a, b, A}. Dakako,
127
buduci da automat ne zna koliko ulazna rijec ukupno ima simbola, c itanjem svakog
ulaznog simbola potrebno je sljedece:
1. Omoguciti prijelaz kojim automat mijenja konfiguraciju (q0 , xR , xR A) u konfiguraciju (q0 , xR , xR A). Dakle, automat treba procitati ulazni simbol {a, b},
ostati u stanju q0 , te na stek staviti procitani simbol. Prema tome, u konstrukciju funkcije 2 uzimajuci u obzir sve moguce kombinacije za procitani ulazni
simbol, kao i procitani simbol sa steka, treba ukljuciti sljedece prijelaze:
(q0 , aA) 2 (q0 , a, A)
(q0 , bA) 2 (q0 , b, A)
(q0 , aa) 2 (q0 , a, a)
(q0 , ba) 2 (q0 , b, a)
(q0 , ab) 2 (q0 , a, b)
(q0 , bb) 2 (q0 , b, b)
2. Omoguciti prijelaz kojim automat mijenja konfiguraciju (q0 , xR , xR A) u konfiguraciju (q1 , xR , xR A). Dakle, automat treba procitati ulazni simbol {a, b},
preci u stanju q1 , jer je mozda upravo procitan centralni simbol {a, b}, te ostaviti stek nepromijenjen, bez obzira koji je simbol iz = {a, b, A} na vrhu steka.
Prema tome, pri konstrukciji funkcije 2 , uzimajuci u obzir sve moguce kombinacije za procitani ulazni simbol, kao i procitani simbol sa steka, treba ukljuciti
sljedece prijelaze:
(q1 , A) 2 (q0 , a, A)
(q1 , A) 2 (q0 , b, A)
(q1 , a) 2 (q0 , a, a)
(q1 , a) 2 (q0 , b, a)
(q1 , b) 2 (q0 , a, b)
(q1 , b) 2 (q0 , b, b)
Na temelju prethodno izlozenog, za funkciju 2 koja opisuje ponasanje potisnog automata M2 u stanju q0 imamo:
1. 2 (q0 , a, A) = {(q0 , aA), (q1 , A)}
2. 2 (q0 , b, A) = {(q0 , bA), (q1 , A)}
3. 2 (q0 , a, a) = {(q0 , aa), (q1 , a)}
4. 2 (q0 , b, a) = {(q0 , ba), (q1 , a)}
5. 2 (q0 , a, b) = {(q0 , ab), (q1 , b)}
6. 2 (q0 , b, b) = {(q0 , bb), (q1 , b)}
128
Kao sto vidimo iz prijelaza (1)-(6), nedeterministicko ponasanje PA M2 se manifestira u c injenici da ti prijelazi omogucuju da se iz jedne konfiguracije prede u dvije
konfiguracije. Iako je na slici 10.6 takvo ponasanje ilustrirano samo za situaciju kada
je automat upravo procitao sve simbole iz x, istaknimo jos jednom da isto ponasanje
automat treba imati pri c itanju svih simbola sa ulazne trake, jer automat nema inormaciju u kojem trenutku je procitan niz simbola x, da bi na taj nacin znao da treba preci u
stanje q1 . Drugim rijecima, prijelazi (1)-(6) omogucuju da automat sve simbole ulazne
rijeci istovremeno tretira na dva nacina. U prvoj varijanti sve simbole iz ulazne rijeci
automat tretira na nacin kao da pripadaju prvoj polovini ulazne rijeci w = xxR , odnosno kao da pripadaju nizu x, pa ti prijelazi specificiraju da automat ostaje u stanju q0 .
U drugoj varijanti, svi simboli se tretiraju kao da njihovim c itanjem zavrsava c itanje
niza simbola x, pa se c itanjem sljedeceg simbola {a, b}, treba preci u stanje q1 .
Razmotrimo sada nacin na koji c emo iskoristiti nedeterminizam da bismo omogucili
prihvacanje i palindroma oblika xxR . Uz pretpostavku da je PA M2 upravo procitao niz
simbola x iz ulazne rijeci, potrebno je dodatno omoguciti i prijelaz kojim PA M2 mijenja konfiguraciju (q0 , xR , xR A) u konfiguraciju (q1 , xR , xR A). Na slici 10.7 je upravo
prikazana i ova treca mogucnost promjene konfiguracije. Dakle, prelazak u stanje q1
treba biti omoguceno bez c itanja prvog simbola iz xR , bez obzira koji simbol iz alfabeta
steka = {a, b, A} je na njegovom vrhu. Osim toga, sadrzaj steka treba ostati nepromijenjen. Da bismo osigurali upravo opisano ponasanje, funkcija prijelaza 2 treba
sadrzavati i sljedece prijelaze:
7. 2 (q0 , , A) = (q1 , A)
8. 2 (q0 , , a) = (q1 , a)
9. 2 (q0 , , b) = (q1 , b)
(q0 , xxR , A)
(q0 , xR , xR A)
(q0 , , xR A)
(q1 , , xA)
(q1 , xR , xR A)
(q2 , , A)
129
Na slici 10.8 je prikazan slijed prijelaza u obliku stabla za ulazni niz abba. Buduci
da je ulazni niz oblika xxR , gdje je x = ab, potisni automat M2 prihvaca taj niz.
10.2
Kod potisnog automata M1 koji je opisan u primjeru 10.2 funkcija prijelaza 1 je specificirana tako da automat pri promjeni konfiguracije nikada nema mogucnost izbora
vise od jednog moguceg prijelaza. Imajuci upravo navedeno u vidu, mozemo reci da je
opravdano taj automat oznaciti kao deterministicki. Istaknimo, ipak da pojam deterministicki u kontekstu potisnih automata ima nesto drugacije znacenje u odnosu na istu
tu kvalifikaciju u kontekstu konacnih automata. Naime, kod deterministickih konacnih
automata nije bilo dopusteno da za neku kombinaciju stanja i ulaznog simbola nije definiran prijelaz. S druge strane, kod deterministickih potisnih automata c e biti dopusteno
da za neke konfiguracije nisu definirani prijelazi.
130
(q0 , abba, A)
(q1 , bba, A)
(q1 , abba, A)
(q2 , bba, A)
(q2 , abba, A)
(q0 , a, bbaA)
(q1 , a, baA)
(q0 , , abbaA)
(q1 , , bbaA)
(q1 , , abbaA)
(q1 , a, bbaA)
(q1 , a, aA)
(q1 , , A)
(q2 , , A)
Slika 10.8: Slijed prijelaza pri prihvacanju ulazne rijeci abba potisnim automatom M2
Isto tako, istaknimo da nedeterministicki potisni automat prihvaca siru klasu jezika
od deterministickog potisnog automata. Naime, u primjeru 10.3 smo konstruirali nedeterministicki potisni automat koji prihvaca palindrome w, za koje vrijedi w = wR .
Medutim, nije moguce konstruirati deterministicki potisni automat, koji prihvaca isti
jezik. Prisjetimo se da to ne vrijedi za nedeterministicke i deterministicke konacne
automate (NKA i DKA). Naime, vidjeli smo da nedeterministicki konacni automati
(NKA) prihvacaju istu klasu jezika kao i deterministicki konacni automati (DKA).
Prethodno smo pojam deterministickog potisnog automata uveli na jedan neformalan nacin, pa c emo u nastavku dati i formalnu specifikaciju uvjeta koje neki PA treba
zadovoljavati da bi ga klasificirali kao deterministicki potisni automat.
Definicija 10.3. Potisni automat M = (Q, , , , q0 , Z0 , F) je deterministicki ako i
samo ako zadovoljava sljedeca dva uvjeta:
1. U skupu (q, , Z) je najvise jedan element, za bilo koje stanje q Q, za bilo
koji ulazni simbol {} i za bilo koji simbol steka Z .
131
2. Ako je (q, , Z) neprazan skup, onda je (q, , Z) prazni skup za bilo koje stanje
q Q, za bilo koji simbol i za bilo koji Z .
Specifikacijom uvjeta (1) nije dopusteno da skup 2 (q, , Z) sadrzi vise od jednog elementa. Prijelazi (1)-(6) navedeni u primjeru 10.3 sadrze po dva elemanta,
narusavajuci time uvjet (1), pa su ti prijelazi primjeri nedeterministickih prijelaza.
Na slici 10.8 koja opisuje nacin prihvacanja rijeci abba, prikazano je vise nedeterministickih prijelaza. Naprimjer, prijelaz (1) koji ima oblik 2 (q0 , a, A) = {(q0 , aA), (q1 , A)},
omogucuje prijelaz iz konfiguracije (q0 , abba, A) u konfiguraciju (q0 , bba, aA) ili u konfiguraciju (q1 , bba, A).
S druge strane, specifikacijom uvjeta (2) nije dozvoljena mogucnost izbora izmedu
-prijelaza i prijelaza koji koristi ulazni simbol. Naprimjer, prijelaz (7) koji je definiran kao 2 (q0 , , A) = {(q1 , A)}, omogucuje da PA M2 primjenom ovog -prijelaza
iz pocetne konfiguracije (q0 , abba, A) izabere i trecu mogucnost, a to je konfiguracija
(q1 , abba, A). Prema tome, prijelazi (1) i (7) omogucuju da PA M2 prede u tri moguce
konfiguracije.
Primijetimo da bi PA M2 ostao nedeterministicki c ak i da je prijelaz (1) specificiran
tako da skup 2 (q0 , a, A) sadrzi samo jedan element. Pretpostavimo npr. da je prijelaz
(1) specificiran kao 2 (q0 , a, A) = {(q0 , aA)}. Tada bi prijelazi (1) i (7) omogucavali da
PA M2 iz konfiguracije (q1 , abba, A) prede u konfiguraciju (q0 , bba, aA) ili u konfiguraciju (q1 , abba, A).
Predavanje 11
Turingova ma
sina
U ovom poglavlju je opisana Turing masina kao model apstraktne masine.
Iako je model Turingove masina vrlo slican prethodno opisanim modelima
konacnog automata i potisnog automata, ipak mozemo reci da je Turingova
masina opcenitiji i mocniji apstraktni matematicki model racunarstva. Pri
uvodenju modela potisnog automata u prethodnom poglavlju uveden je stek kao
memorijska komponenta koja je omogucila memoriranje potrebnih informacija
za prihvacanje kontekstno neovisnih jezika. Medutim, bitno je istaknuti da
ogranicenje koje se ogleda u tome da je pristup podacima omogucen samo na
vrhu steka, zapravo predstavlja i ogranicenje u smislu moci prihvacanja sire klase
jezika potisnim automatom.
11.1
Na slici 11.1 je prikazan osnovni model Turingove masine. Masina ima upravljacku jedinicu koja moze biti u jednom od konacnog broja stanja. Nadalje,
masina ukljucuje ulaznu traku koja se sastoji od celija, pri cemu na pocetku
rada odredeni broj celija na traci sadrzi niz simbola w iz ulaznog alfabeta. Traka
sa koje masina cita simbole i na koju ispisuje simbole je beskonacna. Ostale
celije su oznacene tzv. praznim simbolom (eng. blank symbol). Ako je potrebno
Turingova masina moze na ulaznu traku zapisivati pored skupa ulaznih simbola
i dodatne simbole koji su eventualno potrebni u procesu izracunavanja. Skup
ulaznih simbola i skup dodatnih simbola koje masina moze zapisivati na traku
cine skup simbola trake. Simbol kojim se oznacava prazna celija ne pripada skupu
ulaznih simbola, nego skupu simbola trake. Nakon citanja simbola sa ulazne
132
PREDAVANJE 11. TURINGOVA MASINA
133
Ulazna traka
. . . t t a1 a2
...
...
ai
an t t . . .
Glava za
citanje i pisanje
(pomjera se lijevo i desno)
q3
..
q2
qn
q1
q0
2. simbola na traci.
Na temelju procitanog simbola i stanja upravljacke jedinice, Turingova masina
odlucuje:
1. u koje stanje prelazi upravljacka jedinica;
2. koji simbol se zapisuje na traku umjesto procitanog simbola;
3. na koju stranu se pomjera glava za citanje i pisanje.
U nastavku cemo dati formalnu definiciju Turingove masine.
Definicija 11.1. Turingova masina je sljedeca sedmorka:
M = (Q, , , , q0 , B, F )
gdje je:
Q
q0
Pocetno stanje, q0 Q;
PREDAVANJE 11. TURINGOVA MASINA
134
... t a a b b t ...
q1
q3
PREDAVANJE 11. TURINGOVA MASINA
... t a B b a t ...
135
... t A B b a t ...
q0
q0
... t A B b a t ...
... t A B B a t ...
q0
q0
... t A B B A t ...
... t A B B A t ...
q0
q1
(f ) Zaustavljeno
PREDAVANJE 11. TURINGOVA MASINA
136
>
>
>
(q0 , ABBAt)
(q0 , ABba)
>
(q0 , ABba)
>
(q0 , aBba)
> >
>
(q1 , ABBA).
>
>
Relacije
i
imaju svoje uobicajeno znacenje koje smo uveli kod
PREDAVANJE 11. TURINGOVA MASINA
137
>
(q0 , aBba)
(q1 , ABBA).
Alternativni nacin zapisivanja konfiguracije
(q, X1 X2 . . . Xi1 Xi Xi+1 . . . Xn )
je sljedeci:
X1 X2 . . . Xi1 qXi Xi+1 . . . Xn .
Gornjim zapisom konfiguracije je specificirano da je TM u stanju q, a glava za
citanje i pisanje je pozicionirana na prvom simbolu desno od oznake stanja q,
tj. na simbolu Xi . Koristeci ovu notaciju, slijed prijelaza prikazan na slici 11.3
mozemo prikazati korak po korak na sljedeci nacin:
q0 aBba ` Aq0 Bba ` ABq0 ba ` ABBq0 a ` ABBAq0 B ` ABBq1 A.
11.2
X Y, D
PREDAVANJE 11. TURINGOVA MASINA
X X, D
138
(a)
XD
(b)
11.3
Prihva
canje jezika Turingovom ma
sinom
Turingova masina moze prihvacati jezike na slican nacin kao sto to rade konacni
automati i potisni automati. Ulazna rijec w se zapisuje na ulaznu traku, glava za
citanje i pisanje se pozicionira na krajnji lijevi simbol ulazne rijeci w, te Turingova
masina u pocetnom stanju zapocinje svoj rad. Ako nakon nekog slijeda prijelaza
Turingova masina ude u neko od prihvatljivih stanja i istovremeno zaustavi daljni
rad, tada se rijec w prihvaca. Drugim rijecima, rijec w se prihvaca ako:
>
q0 w
w1 pw2 ,
>
L(M ) = {w | q0 w
w1 pw2 , gdje je p F, w1 i w2 }.
PREDAVANJE 11. TURINGOVA MASINA
139
(q1 , caabbb)
(q2 , caadbb)
(q1 , caabbb)
(q0 , caadbb)
> >
(q2 , cacdbb)
> >
(q1 , caabbb)
> >
(q0 , aaabbb)
> >
PREDAVANJE 11. TURINGOVA MASINA
140
aR
dR
a c, R
q0
b d, L
q1
q2
cR
dR
tL
q3
dL
aL
q4
dR
(q1 , cccddb)
(q0 , cccddd)
(q0 , ccaddb)
(q2 , cccddd)
(q3 , cccddd)
(q2 , ccaddb)
(q1 , cccddb)
(q2 , cccddd)
(q3 , cccddd)
(q2 , ccaddb)
(q1 , ccadbb)
(q1 , ccadbb)
(q2 , ccaddb)
(q1 , cccddb)
(q2 , cccddd)
(q3 , cccdddt)
(q4 , cccddd).
, mozemo pisati:
(q0 , aaabbb)
>
>
(q4 , cccddd).
>
>
(q0 , aabbb)
(q3 , ccddb).
(q2 , ccddb)
(q1 , ccdbb)
(q0 , ccddb)
(q2 , cadbb)
(q1 , ccdbb)
(q3 , ccddb)
(q0 , cadbb)
(q1 , cabbb)
(q1 , cabbb)
(q0 , aabbb)
PREDAVANJE 11. TURINGOVA MASINA
141
odnosno
(q0 , aabbb)
>
12
>
(q0 , aabbb)
(q3 , ccddb),
(q3 , ccddb),
11.4
Izra
cunavanje funkcija Turingovom ma
sinom
Buduci da Turingova masina pored citanja simbola sa trake moze i pisati simbole
na traku, masina ima mogucnost pretvaranje ulaznih nizova simbola u izlazne
nizove simbola. Kao sto znamo transformacija ulaznih u izlazne podatke je
primarni zadatak digitalnih racunara, pa Turingova masina zapravo predstavlja
jednostavan apstraktni matematicki model racunara. Pretpostavljamo da ulaz
Turingove masine predstavlja sadrzaj svih celija ulazne trake koje nisu oznacene
simbolom prazne celije t. Nadalje, izlaz predstavlja sadrzaj svih celija koji je
ostao na traci nakon zaustavljanja rada Turingove masine.
Definicija 11.3. Funkcija f je izracunljiva ako postoji Turingova masina M =
(Q, , , , q0 , B, F ) takva da vrijedi:
>
q0 w
qf f (w)
(11.1)
gdje je stanje qf F
izlaz
ulaz
... t
t ...
... t
f (w)
t t ...
qf
q0
(a)
(b)
PREDAVANJE 11. TURINGOVA MASINA
142
ulazni alfabet definiramo na sljedeci nacin = {0, 1}, tada mozemo brojem
simbola 1 oznaciti vrijednost cijelog broja, dok simbol 0 mozemo iskoristiti za
razdvajanje cijelih brijeva u situacijama kada funkcija f ima vise od jednog
argumenta. Naprimjer, ako funkcija f ima m argumenata (n1 , n2 , . . . nm ), tada
se ti argumenti na traci mogu zapisati na sljedeci nacin:
1n1 01n2 0 . . . 01nm
Sljedecih nekoliko primjera prikazuje Turingove masine za izracunavanje
cjelobrojnih funkcija.
Primjer 11.2. U ovom primjeru cemo konstruirati TM M koja izracunava
funkciju:
f (x, y) = x + y,
gdje su x i y prirodni brojevi zapisani u unarnom brojnom sistemu. Na slici
11.8a je ilustrirana pocetna konfiguracija, dok je na slici 11.7 ilustrirana zavrsna
konfiguracija nakon procesa izracunavanja.
y
... t 1 1
...
1 0 1
...
1 t ...
q0
(a)
x+y
... t 1 1
...
1 1 t t ...
qf
(b)
0. Citanjem
simbola 0, na njegovo mjesto se zapisuje simbol 1, te se
prelazi u novo stanje q1 . Ovaj dio nacina rada TM M opisujemo sljedecim
prijelazima:
1. (q0 , 1) = {q0 , 1, R}
2. (q0 , 0) = {q1 , 1, R}
PREDAVANJE 11. TURINGOVA MASINA
143
Citanjem
simbola t, glava za citanje i pisanje se pomjera ulijevo, te se
prelazi u stanje q2 , bez promjene procitanog simbola t. Ovaj dio nacina
rada TM M opisujemo sljedecim prijelazima:
3. (q1 , 1) = {q1 , 1, R}
4. (q1 , t) = {q2 , t, L}
U stanju q2 na mjesto krajnjeg desnog simbola 1 se zapisuje simbol t i
prelazi se u stanje q3 . Dakle, u stanju q2 imamo sljedeci prijelaz:
5. (q2 , 1) = {q3 , t, L}
U stanju q3 glava se pomjera ulijevo sve do simbola prazne celije t.
Citanjem
simbola t, glava se pomjera udesno na krajnji lijevi simbol
1, prelazi se u prihvatljivo stanje q4 i rad TM M se zaustavlja. Dakle, u
stanju q3 imamo sljedece prijelaze:
6. (q3 , 1) = {q3 , 1, L}
7. (q3 , t) = {q4 , t, R}
Prema tome, izgradujemo sljedecu TM M :
M = {{q0 , q1 , q2 , q3 , q4 }, {0, 1}, {0, 1, t}, , q0 , t, {q4 }},
gdje je funkcija zadana prethodno definiranim prijelazima (1)-(7).
Dijagram stanja TM M je prikazan na slici 11.9.
1R
q0
1R
0 1, R
q1
1L
tL
1 t, L
q2
q3
tR
q4
Slika 11.9: Dijagram stanja konstruirane TM M
111111q1 t
111q1 111
>
>
11q0 0111
11111q2 1
1111q1 11
>
11111q1 1
>
1q0 10111
> >
q0 110111
> >
1111q3 1
q3 t 11111
144
1q3 1111
>
11q3 111
>
>
111q3 11
>
> >
q4 11111.
>
q0 110111
q4 11111,
PREDAVANJE 11. TURINGOVA MASINA
145
5. (q1 , t) = {q3 , t, R}
q0
1 1, L
tL
q1
1 1, R
m 1, R
q2
t 1, L
tR
q3
Slika 11.10: Dijagram stanja konstruirane TM M
> >
>
>
> >
1q1 11111
q1 m1111
11111q2 t
m111q2 t
>
1111q2 1
m11q2 1
mm1q2 t
q1 111111
1q2 1111
1111q1 11
>
11q1 1111
mq1 1111
>
>
111q2 11
m1q2 11
mmq1 m
>
111q1 111
>
11q2 111
m1q1 111
> >
m11q1 11
mq1 m11
mmmq0 t
>
>
mmq1 11
mmq0 1
mq0 11
>
q0 111
Nacin rada TM M cemo objasniti na jednom konkretnom primjeru. Pretpostavimo da je na ulaznoj traci zapisan broj 3 u unarnom zapisu 111. Sljedeci
slijed konfiguracija prikazuje nacin na koji TM M izracunava vrijednost funkcije
f (3) = 6.
q1 t 111111
q3 111111
PREDAVANJE 11. TURINGOVA MASINA
146
PREDAVANJE 11. TURINGOVA MASINA
147
q0
R
R
R
9 0, L
tL
q1
t 1, L
0 1, L
1 2, L
...
8 9, L
0
1
2
...
9
q2
L
L
L
L
tR
q3
PREDAVANJE 11. TURINGOVA MASINA
... t 2 9 t ...
148
... t 2 9 t ...
q0
q0
... t 2 9 t ...
... t 2 9 t ...
q0
q1
... t 2 0 t ...
... t 3 0 t ...
q1
q2
(f ) (q2 , t) = (q3 , t, R)
... t 3 0 t ...
q3
(g) Zaustavljeno
q1 20
>
2q1 9
>
29q0 t
>
2q0 9
>
q0 29
> >
q3 30.