KOMPIUTERIŲ TEORIJA

Download Report

Transcript KOMPIUTERIŲ TEORIJA

KOMPIUTERIŲ TEORIJA
BAIGTINIAI AUTOMATAI KALBOMS
3 paskaita
Doc. Stasys Maciulevičius
[email protected]
Ankstesnės paskaitos santrauka




Deterministiniai baigtiniai automatai
Baigtinio automato konfigūracija
Eilutės priėmimas
Nedeterministiniai baigtiniai automatai
(NDBA)
 NDBA ir DBA ryšys
 Teorema apie NDBA ir DBA
2013
©S.Maciulevičius
2
Šios paskaitos turinys
 NDBA pertvarkymo į DBA pavyzdys
 Baigtiniai automatai ir reguliariosios
išraiškos
 Teorema apie automato priimamų kalbų klases
 Algoritmas A - Kaip pagal duotąją reguliarią
išraišką formuojamas baigtinis automatas
 Algoritmo A taikymo pavyzdys
 Išraiškų diagrama
 Algoritmas B - Kaip pagal duotąjį baigtinį automatą
formuojama reguliarioji išraiška
 Algoritmo B taikymo pavyzdys
2013
©S.Maciulevičius
3
Teorema apie NDBA ir DBA
Teorema. Kiekvienam NDBA
egzistuoja jam ekvivalentiškas DBA.
Įrodymas
Tegul M  (K, , , s, F) yra
nedeterministinis baigtinis automatas.
Mes sudarysime jam ekvivalentišką
deterministinį baigtinį automatą M 
(K, , , s, F ) žemiau aprašytu būdu.
2013
©S.Maciulevičius
4
Teorema apie NDBA ir DBA
Pagrindinė idėja:
laikysime, kad NDBA bet kuriuo momentu
yra ne vienoje būsenoje, o jų aibėje. Šią
aibę sudaro būsenos, pasiekiamos iš
pradinės per tam tikrą laiką (padavus
tam tikrą simbolių skaičių)
2013
©S.Maciulevičius
5
Teorema apie NDBA ir DBA


Galinių būsenų aibę F sudarys visi tie K
poaibiai, kurių bent vienas elementas
priklauso F.
 apibrėžti sunkiau. Čia paprasčiausia
idėja tokia: automato M perėjimą,
perskaičius simbolį a, atitinka
automato M perėjimas, perskaičius a, po
kurio galėtų sekti bet koks perėjimų
skaičius, priėmus e.
2013
©S.Maciulevičius
6
Teorema apie NDBA ir DBA
Jei turime e-perėjimų, būsenas apjunkime taip:
q1
q2
q3
a
a
a
e
q1
e
e
e
q2
a
q3
S
S
P
P
Formaliai: jei pažymėsime P(S, a) aibę perėjimų iš aibės S,
perskaičius simbolį a, tai pridėję perėjimus, pažymėtus e,
gauname: P = P(S,a) U P(P(S,a),e)
2013
©S.Maciulevičius
7
Teorema apie NDBA ir DBA
Bet kuriai būsenai qK, pažymėkime E(q) aibę
būsenų, pasiekiamų iš q, kai joks įėjimo
simbolis neperskaitomas:
E(q)  {pK: (q, e)├M (p, e)}
Šią aibę galima nustatyti tokiu būdu (algoritmu):
 Tegul E(q) : {q};
 Kol yra (p, e, r), kur pE(q) ir rE(q)
vykdyti E(q) : E(q)  {r}.
Algoritmas baigtinis ir truks ≤|K| iteracijų, nes
kiekvienos iteracijos metu E(q) papildoma
viena būsena.
2013
©S.Maciulevičius
8
Teorema apie NDBA ir DBA
Dabar jau galime formaliai apibrėžti
deterministinį baigtinį automatą M (K, , , s, F ),
kuris būtų ekvivalentiškas M:
| K | ≤ 2|K|,
s  E(s),
F  {QK : QF }
ir kiekvieniems QK ir a:
(Q, a)  U{E(p): pK ir (q, a, p) elementams qQ}
T.y., (Q, a) yra aibė visų M būsenų, į kurias gali pereiti
M, perskaitęs simbolį a, o taip pat ir atlikęs keletą e
perėjimų
2013
©S.Maciulevičius
9
NDBA pavyzdys
Panagrinėkime tokį NDBA:
q0
e
b
q1
a
Turime:
E(q0){q0, q1, q2, q3 },
E(q1){q1, q2, q3},
E(q2){q2},
E(q3){q3},
E(q4){q3 ,q4}.
2013
©S.Maciulevičius
q3
e
e
a
a
e
q2
b
q4
10
NDBA pavyzdys
Šiam NDBA:
q0
e
b
q1
e
a e
a
a
q3 Kadangi s  q , tai s’  E(q )
0
0
 {q0, q1, q2, q3 }
e
q2
b
q4
Toliau e lankų nežiūrime!
Nagrinėsime kiekvieną iš
4 būsenų: q0, q1, q2 ir q3 .
Iš q0 turime tik vieną perėjimą - (q0, b, q2), todėl
({q0}, a)  Φ, ({q0}, b)  E(q2)  {q2}
2013
©S.Maciulevičius
11
NDBA pavyzdys
q0
e
b
q1
e
a e
q2
a
b
q4
q3 Iš q taip pat turime du
1
perėjimus - (q1, a, q0) ir
a
(q1, a, q4), todėl
e ({q1}, a)  E(q0) UE(q4) 
{q0, q1, q2, q3, q4}, o
({q1}, b)  Φ
Iš q2 turime tik perėjimą (q2, b, q4), todėl
({q2}, a)  Φ, ({q2}, b)  E(q4)  {q3, q4}.
Iš q3 turime tik perėjimą (q3, a, q4), todėl
({q3}, b)  Φ, ({q3}, a)  E(q4)  {q3, q4}
2013
©S.Maciulevičius
12
NDBA pavyzdys
q0
e
b
q1
q3
e
a e
a
a
e
q2
b
q4
Taigi:
s’ {q0, q1, q2, q3 }.
Visoms qs turime,
kad galimi tokie
perėjimai (q, a, p):
(q1, a, q0), (q1, a, q4)
ir (q3, a, q4).
Vadinasi,
(s, a)  ({q1}, a) U ({q3}, a)  {q0, q1, q2, q3, q4},
(s, b)  ({q0}, b) U ({q2}, b)  {q2, q3, q4}.
2013
©S.Maciulevičius
13
NDBA pavyzdys
q0
e
b
q1
Gavome:
(s, a)  {q0, q1, q2, q3, q4},
q3
(s, b)  {q2, q3, q4}
e
a e
a
a
e
q2
b
q4
Tad galime nubraižyti DBA pradžią:
{q0, q1, q2, q3}
b
{q2, q3 , q4}
2013
©S.Maciulevičius
a
{q0, q1, q2, q3 , q4}
14
NDBA pavyzdys
q0
e
b
q1
e
a e
q2
Tęsiame:
q3 ( {q0, q1, q2, q3, q4}, a) 
{q0, q1, q2, q3,q4};
a ( {q , q , q , q , q }, b) 
0
1
2
3
4
{q2, q3, q4}.
e
a
b
q4
( {q2, q3, q4}, a)  {q3,q4};
( {q2, q3, q4}, b)  {q3,q4}.
( {q3, q4}, a)  {q3, q4}; ( {q3, q4}, b)  .
Pagaliau: ( , a)  ; ( , b)  .
2013
©S.Maciulevičius
15
NDBA pavyzdys
Gautasis M’:
a
{q0, q1, q2, q3}
b
{q2, q3 , q4}
{q0, q1, q2, q3 , q4}
b
a
b
a
a
{q3 , q4}
a
b

b
Galinėmis yra tos būsenų aibės, į kurias įeina q4.
2013
©S.Maciulevičius
16
Baigtiniai automatai ir
reguliariosios išraiškos


Anksčiau parodėme, kad baigtinio
automato priimamų kalbų klasė lieka ta
pati, nepriklausomai nuo to, ar baigtinis
automatas yra deterministinis, ar
nedeterministinis
Dabar įrodysime baigtinio automato
priimamų klasių savybes, kurios bus
svarbios nedeterministinių baigtinių
automatų konstravimui
2013
©S.Maciulevičius
17
Automato priimamų kalbų
klasės
Teorema. Baigtinio automato priimamų kalbų klasė
uždara tokių operacijų atžvilgiu:
a)
b)
c)
d)
e)
apjungimo (union),
sukabinimo (concatenation),
iteracijos - ( Klini žvaigždės - Kleene star),
papildymo (complementation),
susikirtimo (intensection).
Įrodymas. Kiekvienai iš šių operacijų
parodysime, kaip konstruojamas baigtinis
automatas M priimantis kalbą, užduodamą
baigtinio automato M1 ir M2 (tik operacijoms
c) ir d) – vieno M1).
2013
©S.Maciulevičius
18
Teoremos įrodymas
a) apjungimas (union)
Tegul M1(K1, 1, 1, s1, F1) ir
M2(K2, 2, 2, s2, F2) – du NDBA.
Sukonstruosime M tokį, kad L(M)L(M1)U L(M2).
M konstravimas yra paprastas ir intuityviai aiškus:
s
s1
2013
U
M1
e
s2
s1
F2
F1
e
s2
M2
©S.Maciulevičius
F
M
19
Teoremos įrodymas



Čia M naudoja nedeterminizmą, kad
įspėtų, ar įėjimas priklauso L(M1) ar
L(M2), o po to jau eilutę apdorotų pagal
atitinkamo automato veikimo taisykles. Iš
to seka, kad L(M)L(M1) U L(M2).
Panagrinėkime tai formaliai
Neprarasdami bendrumo galime tarti,
kad K1 ir K2 – nesusikertančios aibės.
2013
©S.Maciulevičius
20
Teoremos įrodymas


Tuomet nedeterministinį baigtinį automatą M,
kuris priimtų L(M1) U L(M2), apibrėšime taip:
 M(K, , , s, F), kur
 sK1 ir sK2 (nauja būsena)
 K K1 U K2 U {s}
 F F1 U F2
 1 U 2 U {(s, e, s1), (s, e, s2)}.
Tai yra, M pradeda darbą, nedeterministiškai
pasirinkdamas įėjimą ir baigtinio automato M1
arba M2 pradines būsenas, o po to imituoja
atitinkamai automatų M1 arba M2 darbą
2013
©S.Maciulevičius
21
Teoremos įrodymas


Formaliai, jei , tai
(s, )├M(q, e), kur qF
jeigu ir tik jeigu:
(s1, )├M1(q, e), qF1 arba
(s2, )├M2(q, e), qF2.
Vadinasi, M priims , jei ir tik jei M1
priima  arba M2 priima :
L(M)L(M1) U L(M2).
2013
©S.Maciulevičius
22
Teoremos įrodymas
b) sukabinimas (concatenation)
Tegul M1 ir M2 – du NDBA.
Sukonstruosime M tokį, kad L(M)L(M1) • L(M2):
s1
s1
F1
M1
2013
•
e
s2
e
s2
F2
M2
©S.Maciulevičius
F
M
23
Teoremos įrodymas


Pirmiausia M modeliuoja M1 darbą, o po
to nedeterministiškai “peršoka” iš
baigtinio automato M1 galinės būsenos į
pradinę M2 būseną
Po to M modeliuoja M2 darbą.
s1
s1
F1
2013
M1
•
e
s2
F2
M2
©S.Maciulevičius
e
s2
F
M
24
Teoremos įrodymas
c) iteracija (Klini žvaigždė -Kleene star)
Tegul M1– NDBA.
Sukonstruosime NDBA M tokį, kad L(M)L(M1)*:
s1
s1
F1
F
M1
2013
e
e e
s
e
M
©S.Maciulevičius
25
Teoremos įrodymas
s1
e
s
M sudaro visos M1 būsenos ir visi jo
e e e
perėjimai. Bet kuri galinė M1 būsena
F
yra ir galinė M būsena.
M
Be to, M turi naują pradinę būseną s, kuri tuo pačiu
yra ir gailinė būsena. Iš s yra e – perėjimas į s1,
taigi, M1 darbas gali būti inicijuotas po to, kai M
startuos būsenoje s. Be to, iš visų M1 galimų
būsenų yra perėjimai į s1.
Baigus sekos L(M1) priėmimą, skaičiavimai vėl bus
pradėti iš pradinės nedeterministinio baigtinio
automato M1 būsenos.
2013
©S.Maciulevičius
26
Teoremos įrodymas
d) papildymas (complementation)
Tegul M  (K, , , s, F) – DBA.
Tuomet kalbą – papildymą (complementary language) L- L(M)
priima DBA M(K, , , s, K-F).
3
1 a
b
4
a
a
5
b
3
Tai yra, M yra identiškas M išskyrus tą
a
faktą, kad galinės būsenos
b
pakeistos negalinėmis ir atvirkščiai 1 a 4 a 5
b
2013
©S.Maciulevičius
27
Teoremos įrodymas
e) susikirtimas (intersection)
L1 L2- ((-L1)  (-L2)),
todėl uždarumas seka iš a) ir d) uždarumo.
Remdamiesi šia teorema, parodysime du svarbius
būdus (metodus) kalboms specifikuoti – kalbos
generatorių ir kalbos priėmėją (accepter).
Teorema. Kalba yra reguliari, jeigu ir tik jeigu ją
priima baigtinis automatas.
Įrodymo nenagrinėsime.
2013
©S.Maciulevičius
28
Algoritmas A
Algoritmas, kuris pagal duotąją reguliarią
išraišką  leistų suformuoti baigtinio
automato A būsenų grafą, kad L() L(A),
bus toks:
0. Atkreipkime dėmesį, kad bet kuri reguliari
išraiška yra sudaryta iš bazinių
komponentų, pavyzdžiui, e, pavienių
simbolių a, ir , kuriems taikomos
operacijos U, • ir iteracija ()
2013
©S.Maciulevičius
29
Algoritmas A
1. Kiekvienam baziniui simboliui galima
sudaryti baigtinį automatą, kuris priimtų
šį simbolį. Pvz.:
a
b
2. Kiekvienai išraiškoje esančiai sukabinimo
(•), apjungimo (U) ir iteracijos (* )
operacijai panaudosime būdus,
parodytus teoremos įrodyme
2013
©S.Maciulevičius
30
Pavyzdys
Panagrinėkime reguliariąją išraišką
(ab U aab)*
NDBA, kuris priima šią išraišką atitinkančią
kalbą, gali būti sukonstruotas
naudojant teoremos įrodyme pateiktas
priemones:
a
b
1 žingsnis:
a; b
a
e
b
2. žingsnis:
a
e
a
e
b
ab; aab
2013
©S.Maciulevičius
31
Pavyzdys
3. žingsnis:
ab U aab
e
a
e
b
e
a
e
a
a
e
b
e
b
4. žingsnis:
(ab U aab)*
e
e
e
2013
e
a
e
e
a
©S.Maciulevičius
e
b
32
Pavyzdys
(ab U aab)*
Kai kuriuos e perėjimus galima ir praleisti.
Tada NDBA tampa kompaktiškesnis:
e
e
e
2013
a
b
e
a
a
©S.Maciulevičius
e
b
33
Reguliariosios ir
nereguliariosios kalbos


Anksčiau mes nagrinėjome reguliariąsias
kalbas, kurių klasė uždara pagrindinių
operacijų atžvilgiu ir kurios gali būti
apibrėžtos naudojant reguliariąsias
išraiškas arba naudojant DBA ar NDBA.
Šie požymiai, atskirai ar kartu, gali būti
panaudoti reguliarumui įrodyti.
2013
©S.Maciulevičius
34
Reguliariosios ir
nereguliariosios kalbos
Pavyzdys. Tegu Σ={0,1,2, … 9}
ir LΣ* - aibė neneigiamų skaičių,
kurie dalijasi iš 2 arba 3 (priekyje nėra
nereikšminių 0).
Pvz., 0, 3, 6, 244  L, bet 1, 03, 00  L.
Aibė L – reguliari.
2013
©S.Maciulevičius
35
Reguliariosios ir
nereguliariosios kalbos
Įrodysime 4 etapais:
1. Tegul L1 - aibė dešimtainių neneigiamų skaičių,
priekyje neturinčių nereikšminių 0 :
L1 = 0 U {1,2, … 9} Σ*
Matome, kad L1 reguliari, nes ji apibrėžta
naudojant reguliariąją išraišką.
2013
©S.Maciulevičius
36
Reguliariosios ir
nereguliariosios kalbos
2. L2 - aibė dešimtainių neneigiamų
skaičių, kurie dalijasi iš 2.
Ją galima apibrėžti taip:
L2 = L1  Σ*{0, 2, 4, 6, 8}
Tai – lyginiai skaičiai iš L1.
3. L3 - aibė dešimtainių neneigiamų skaičių, kurie
dalijasi iš 3. Tai tokie skaičiai, kurių skaitmenų
suma taip pat dalijasi iš 3. Tokius skaičius galima
atvaizduoti tokiuo BA:
2013
©S.Maciulevičius
37
Reguliariosios ir
nereguliariosios kalbos
0,3,6,9
1,4,7
1,4,7
2,5,8
2,5,8
1,4,7
0,3,6,9
0,3,6,9
2,5,8
L3 = L1  L‘3, kuris apibrėžtas šiuo BA.
4. Tuomet L1 = L2 U L3 – reguliari.
2013
©S.Maciulevičius
38
Reguliariosios ir
nereguliariosios kalbos


Tačiau ne visos kalbos yra reguliarios. Pavyzdžiui,
panagrinėkime kalbą
L = {anbn: n  N}.
Kaip realizuoti BA, kad simbolio b pakartojimų
skaičius būtų tiksliai toks pats, kaip ir simbolio a
pakartojimų skaičius? Baigtinės atminties tokiam
tikslui (n reikšmei įsiminti) neužteks. Vadinasi, BA
neegzistuoja.
Taigi, kalba L = {anbn: n  N} nėra reguliari.
2013
©S.Maciulevičius
39
Išraiškų diagrama


Dabar suformuluosime algoritmą B,
kuris bet kuriam baigtiniam automatui A
suformuoja tokią reguliariąją išraišką , kad
L(A)L().
Tai atvirkščias uždavinys anksčiau nagrinėtajam
algoritmui A. Algoritmas B išraišką formuos
žingsnis po žingsnio, o sprendimo eigai
vizualizuoti naudosime grafą, kurį pavadinsime
išraiškų grafu. Tai bus orientuotas grafas, kurio
lankai bus pažymėti jau suformuotais išraiškų
fragmentais, pvz.:
ab
2013
ab*
©S.Maciulevičius
(ab U b*)
40
Išraiškų diagrama


Galutinis rezultatas – grafas,
turintis tik vieną lanką, jungiantį
pradinę būseną su galine. Šį lauką žyminti
išraiška ir bus L(A).
Tiesa, čia reikia pastebėti, kad mūsų nagrinėtieji
baigtiniai automatai galėjo turėti kelias galines
būsenas. Jas galime nesunkiai suvesti į vieną
galinę būseną, sujungdami ją lankais e su
kitomis:
b
...
2013
b
...
a
a
©S.Maciulevičius
e
e
41
Išraiškų diagrama
Reikia paminėti dar vieną dalyką:
laikysime, kad į pradinę viršūnę
(būseną) nėra įeinančių lankų,
o iš galinės – išeinančių
Jei tokių lankų būtų, grafą transformuotume į
tenkinantį reikalavimą, įvesdami naują pradinę
ar naują galinę viršūnę/būseną, sujungdami jas
su buvusiomis viršūnėmis/būsenomis e lankais
2013
©S.Maciulevičius
42
Išraiškų diagrama
Sunumeruokime visas grafo viršūnes, tarkime
1, 2, ..., n. Tegul pradinė viršūnė pažymėta 1, o
galinė – n. Lanko, jungiančio viršūnes i ir j,
žymą pažymėsime li, j. Jei tokie lankai keli, juos
žymėsime l1i, j, l2i, j, ..., lmi, j :
l1i,j
i
l2i,j
j
lmi,j
2013
©S.Maciulevičius
43
Algoritmas B
a) kiekvienai porai j ir k ( gali būti j  k) lankus
l1j,k, l2j,k, ..., lmj,k pakeisime vienu lanku,
pažymėtu l1j,kl2j,k... lmj, k.
b) for i2, 3, ..., n-1 do
kiekvienai porai j ir k (gali būti j  k), jei grafe yra
lankai ji ir ik:
1) jei nėra lanko ii, pridėkime lanką jk,
pažymėtą, li,k:
j
2013
lj,i
i
li,k
k
©S.Maciulevičius
j
lj,ili,k
k
44
Algoritmas B
2) jei yra lankas ii, pridėkime
lanką jk, pažymėtą lj,i (li,i)* li,k:
j
lj,i
li,i
i
li,k
k
j
lj,i li,i* li,k
k
3) jei yra keletas lankų jk su žymėmis l1j,k,
l2j,k, ..., lmj,k, pakeiskime juos vienu, pažymėtu
l1j,kl2j,k... lmj,k:
2013
©S.Maciulevičius
45
Algoritmas B
l1j,k
j
l2j,k
k
j
l1j,k l2j,k …lmj,k
k
lmj,k
4) pašalinkime viršūnę i ir ją jungiančius
lankus.
Iš pirmo žvilgsnio 3) žingsnis atrodo perteklinis,
tačiau, pašalinus viršūnę i, gali atsirasti naujas
“lygiagretus” lankas, einantis iš j į k.
2013
©S.Maciulevičius
46
Algoritmo B taikymo pavyzdys
Duotas NDBA:
a
1
2013
a
2
3
b
b
b
©S.Maciulevičius
4
a
5
47
Algoritmo B taikymo pavyzdys
1
a
a 3
2 b
Pirmiausia pašalinkime viršūnę 2.
Jos ryšiai su “kaimynėmis” tokie:
b
b
4
a
5
3 а
1 а
2
b
4
4 b
2013
©S.Maciulevičius
48
Algoritmo B taikymo pavyzdys
Turime:
Keisime:
1
а
2
b
4
1
аb
4
3
а
2
b
4
3
аb
4
4
b
2
b
4
4
3
Gausime:
1
2013
bb
ab
ab
b
4
bb
©S.Maciulevičius
a
5
49
Algoritmo B taikymo pavyzdys
Dabar pašalinkime viršūnę 3:
1
ab
a
4
5
bab U bb
Pagaliau, pašalinę ir viršūnę 4, gausime:
1
2013
ab(bab U bb)*a
©S.Maciulevičius
5
50
Klini teorema
Gautus rezultatus apibūdina
tokia teorema (Klini):
Egzistuoja algoritmas, bet kurią reguliarią išraišką
 transformuojantis į nedeterministinį baigtinį
automatą A, kad L()L(A). Taip pat egzistuoja
algoritmas, transformuojantis nedeterministinį
baigtinį automatą A į reguliarią išraišką , kad
L(A)L(). Tai yra, kalbą priima nedeterministinis
baigtinis automatas, jeigu ir tik jeigu ji yra
reguliari.
2013
©S.Maciulevičius
51
Tinklalapyje rasite
Kurso medžiagai įsisavinti siūlau
pabandyti spręsti uždavinius iš kai
kurių temų:
 Deterministiniai ir nedeterministiniai
baigtiniai automatai
 Reguliariosios išraiškos
2013
©S.Maciulevičius
52
Užduotis namų darbui

Minėjau, kad pateiksiu užduotis pagal
nagrinėjamas 1 dalies temas savarankiškam
sprendimui.
 Jas išsprendę Jūs įgysite įgūdžių, kurie
pravers rašant koliokviumą (atsiskaitant
už kurso 1 dalį)
 Įdėtas darbas bus vertinamas 15%
galutiniam pažymiui
2013
©S.Maciulevičius
53
Užduotis namų darbui


1-5 užduočių tekstus rasite
http://ifko.ktu.lt/~stama/KompTeorMag/Komp
_Teorija.htm skyrelyje „Siūlau namuose
spręsti uždavinius iš šių skyrių“
Savąjį užduoties variantą gausite
elektroniniu paštu
2013
©S.Maciulevičius
54