Professional Documents
Culture Documents
Automaták És Formális Nyelvek II. - Dr. Hunyadvári László (2009)
Automaták És Formális Nyelvek II. - Dr. Hunyadvári László (2009)
Technikai kivitelezés:
Tichler Krisztián
2
Jelen dokumentáció a Hunyadvári László egyetemi docens által a programtervező matematikus és informatika
tanári szakos hallgatók számára tartott Formális nyelvek és automaták 2. kurzus előadássorozata alapján
készült. Az anyag terjesztése, másolása engedélyezett, de a forrásállomány bárminemű változtatásának joga
kizárólagosan a szerzőket illeti meg.
2 Programozott nyelvtanok 9
2.1. Előfordulásellenőrzés nélküli programozott nyelvtanok . . . . . . . . . . . . . 9
2.2. Előfordulásellenőrzéses programozott nyelvtanok . . . . . . . . . . . . . . . . 13
3 Mátrixnyelvtanok 23
4 Kontrollnyelvtanok 27
5 Indexelt nyelvtanok 30
6 Attribútumnyelvtanok 36
7 Kétszintű nyelvtanok 40
8 Párhuzamos nyelvtanok 43
8.1. Lindenmayer-rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
8.2. CD nyelvtani rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.3. PC rendszerek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1
1. K-korlátolt nyelvtanok,
homomorfizmus lemma
1.1. Homomorfizmus lemma
1.1. tétel. (Homomorfizmus lemma) Legyenek G1 = hT1 , N1 , P1 , S1 i és
G2 = hT2 , N2 , P2 , S2 i nyelvtanok. Legyen továbbá h : (T1 ∪ N1 ) → (T2 ∪ N2 )∗ homo-
∗
morfizmus, melyre
∗
1. minden p → q ∈ P1 esetén h(p) → h(q),
G2
2. h(T1 ) ⊆ T2∗ ,
3. h(S1 ) = S2 .
2
1. Példák 3
D : α0 → α1 → · · · → αn
G G G
levezetés munkaterülete, a levezetés leghosszabb mondatformájának hossza, melyet ws(D)-vel
jelölülünk, azaz
1.4. definı́ció. Egy L nyelv K-korlátolt, ha létezik olyan G ∈ GKlb nyelvtan, melyre
L(G) = L.
nyelvtant. L \ {ε} minden szavának egy G-beli levezetéséhez megfeleltethető egy olyan
levezetés G00 -ben, ahol a levezetés során kapott mondatformák ugyanazok, és ez G és G00
szerepét felcserélve is igaz. Tehát L(G00 ) = L \ {ε}, továbbá G00 is K-korlátolt, hiszen a
G-beli levezetésnek megfelelő G00 -beli levezetés ugyanazt a munkaterületet használja. 2
Bizonyı́tás. A tétel előtti észrevétel alapján elegendő belátni, hogy LKlb ⊆ L1lb . Legyen
L ∈ LKlb . Feltehető, hogy ε 6∈ L, hiszen az 1.5 tétel szerint, ha ε-mentes nyelvekre igaz az
állı́tás, akkor L ∈ LKlb ⇒ L \ {ε} ∈ LKlb ⇒ L \ {ε} ∈ L1lb ⇒ L ∈ L1lb .
Legyen tehát G = hT, N, P, Si egy K-korlátolt nyelvtan, mely L-et generálja. 1.6
következmény szerint az is feltehető, hogy G-nek nincsenek ε-szabályai.
Legyen G0 = hT, N 0 , P 0 , Si, ahol N 0 = X ∪ Y , ahol X = {e α}α∈(T ∪N )K és Y =
{β}β∈ K (T ∪N )i . X elemeit hullámos, Y elemeit vonalas blokkoknak, mı́g X ∗ Y X ∗ elemeit
S
i=1
megengedett blokkosı́tásoknak nevezzük. Világos, hogy tetszőleges α ∈ (T ∪ N )∗ mondat-
formához van olyan ψe1 · · · ψer %ψer+1 · · · ψes megengedett blokkosı́tás, melyre
α = ψ1 · · · ψr %ψr+1 · · · ψs (általában több is van).
Továbbá legyen P 0 = P1 ∪ P2 ∪ P3 a következő szabályhalmaz.
P1 szabályai átblokkosı́tó szabályok.
0
αβe → α
e0 β ∈ P1 ⇔ αβ = α0 β 0 ,
βα
e → β0α
e0 ∈ P1 ⇔ βα = β 0 α0
Ezek a szabályok az ugyanahhoz az α ∈ (T ∪ N )∗ mondatformához tartozó megengedett
blokkosı́tások egymásba való átalakı́tására, átblokkosı́tására szolgálnak.
P2 szabályai a P-beli szabályoknak megfelelő blokkosı́tott szabályok.
τe1 · · · τe` γe
τ`+1 · · · τem → χ e1 · · · χ
ej δ χ
ej+1 · · · χ
er ∈ P2 ⇐⇒ létezik p → q ∈ P , hogy
p→q
τ1 · · · τ` γτ`+1 · · · τm −→ χ1 · · · χj δχj+1 · · · χr ,
G
továbbá p az összes τi -be belemetsz
(azaz τ1 · · · τ` γτ`+1 · · · τm = σ1 pσ2 és `(σ1 ) < K, `(σ2 ) < K.)
Végül P3 szabályai a deblokkosı́tó szabályok.
γ → γ ∈ P3 ⇔ γ ∈ T ∗ ,
te
γ → tγ ∈ P3 ⇔ t ∈ T, γ ∈ T ∗ ,
γ
et → γt ∈ P3 ⇔ t ∈ T, γ ∈ T ∗ .
Először belátjuk, hogy L(G0 ) ⊆ L(G). A h : (T ∪ N 0 )∗ → (T ∪ N )∗ homomorfizmust
T ∪ N 0 elemein a következőképpen definiáljuk.
PK
h(t) = t (t ∈ T ), h(eα) = α (α ∈ (T ∪ N )K ), h(β) = β (β ∈ i=1 (T ∪ N )i ).
A G0 , G nyelvtanokra és h homomorfizmusra teljesülnek a Homomorfizmus lemma (1.1
tétel) feltételei. Tehát
D : S = α0 → α1 → · · · → αn = u
G G G
egy olyan levezetése az u szónak G-ben, melyre ws(D) ≤ K · `(u). Készı́tünk egy
1. Példák 5
∗ ∗ ∗ ∗
D0 : S = α00 →0 α10 →0 · · · →0 αn0 →0 u
G G G G
levezetést G0 -ben, melyre minden 0 ≤ i ≤ n esetén, ha αi0 = ψe1 · · · ψer %ψer+1 · · · ψes akkor
αi = ψ1 · · · ψr %ψr+1 · · · ψs .
Legyen α0 = S. Tegyük fel, hogy α0 = ψe1 · · · ψer %ψer+1 · · · ψes D0 -beli mondatforma és
0 i
αi = ψ1 · · · ψr %ψr+1 · · · ψs . Belátjuk, hogy G0 -ben levezethető egy olyan αi+1
0
mondatforma,
mely deblokkosı́tva éppen αi+1 -t adja.
Legyen αi = γ1 pγ2 , αi+1 = γ1 qγ2 és p → q ∈ P és készı́tsük el αi következő megengedett
blokkosı́tását:
Bizonyı́tás. L1 ⊆ L1lb nyilvánvaló, hiszen ekkor egy L1 -beli nyelvet generáló nyelvtan-
ban egy nemüres szó levezetése során nem csökkenhet az aktuális mondatforma hossza, ı́gy
ilyenkor elegendő akkora munkaterület, mint az utolsó mondatforma, azaz a levezetett ter-
minális szó, hossza. Az ε szó egyetlen S → ε levezetésének a munkaterülete pedig 1, ami
éppen egyenlő `(ε)-val.
e Elegendő tehát belátni, hogy tetszőleges G = hT, N, P, Si ∈ G1lb
nyelvtanhoz létezik G ∈ G1 , hogy L(G0 ) = L(G).
0
A 1.7 tétel bizonyı́tásában látottakhoz hasonló érvelés alapján feltehető, hogy P-ben
nincsenek ε-szabályok, továbbá B 6∈ N .
Legyen G0 = hT, N ∪ {B}, P 0 , Si, ahol P 0 = P1 ∪ P2 ∪ P3 .
P1 szabályai a hosszat csökkentő P-beli szabályok jobboldalát annyi B-vel egészı́tik ki,
hogy a két oldal egyező hosszúságú legyen.
ZB → BZ ∈ P3 (Z ∈ T ∪ N ),
BZ → ZB ∈ P3 (Z ∈ T ∪ N ).
Könnyen ellenőrizhető, hogy G0 ∈ G1 , azt kell csak belátni, hogy L(G0 ) = L(G).
Tekintsük azt a h : (T ∪ N ∪ {B})∗ → (T ∪ N )∗ homomorfizmust, melyre h(B) = ε és
h(Z) = Z (Z ∈ T ∪ N ). Minden G0 -beli szabály h-képe nyilván G-beli vagy a baloldalának
és a jobboldalának ugyanaz a képe valamint a Homomorfizmus lemma (1.1 tétel) további
feltételei is teljesülnek, tehát L(G0 ) = h(L(G0 )) ⊆ L(G).
Be kell még látni, hogy ha u ∈ L(G), akkor u ∈ L(G0 ). Ha u ∈ L(G), akkor létezik
olyan D : S = α0 → α1 → · · · → αn = u levezetés, melyre ws(D) ≤ `(u), azaz minden
G G G
j = 0, . . . n-re `(αj ) ≤ `(u).
Elkészı́tjük u-nak egy olyan D0 levezetését G0 -ben, melyre
∗ ∗ ∗
D0 : S = α0 B j0 →0 α1 B j1 →0 · · · →0 αn B jn (j0 = 0, jn = 0).
G G G
∗ ∗
S →0 α0 B j0 . Tegyük fel, hogy valamely 0 ≤ r ≤ n − 1 -re S →0 αr B jr .
G G
∗
Készı́tsük tehát el G0 -ben az αr B jr →0 αr+1 B jr+1 levezetést
G
Ha αr → αr+1 hosszúságot csökkentő szabállyal történt, akkor alkalmazzuk a szabálynak
G
megfelelő P1 -beli szabályt, majd a B-ket a P3 -beli szabályokkal vigyük a mondatforma
végére. Azaz, ha αr = γ1 pγ2 és αr+1 = γ1 qγ2 , továbbá `(p) > `(q), akkor
∗
αr B jr = γ1 pγ2 B jr →0 γ1 qB `(p)−`(q) γ2 B jr →0 γ1 qγ2 B jr +`(p)−`(q) = αr+1 B `(p)−`(q) .
G G
Ha αr → αr+1 hosszúságot nem csökkentő p → q szabállyal történt, akkor vigyünk mr
G
darab B-t közvetlenül p utánra, majd alkalmazzunk a megfelelő mr darab B-t elnyelő P2 -beli
1.3. Alkalmazások 7
szabályt, ahol mr = max{jr , `(q) − `(p)}. Azaz, ha αr = γ1 pγ2 és αr+1 = γ1 qγ2 , továbbá
`(p) ≤ `(q), akkor
∗
αr B jr = γ1 pγ2 B jr →0 γ1 pB mr γ2 B jr −mr →0 γ1 qγ2 B jr −mr = αr+1 B jr −mr .
G G
Állı́tás: minden 0 ≤ r ≤ n -re `(αr ) + jr ≤ `(u) teljesül.
Az állı́tás teljes indukcióval látható be. Mivel feltettük, hogy u 6= ε, ezért r = 0 -ra igaz
az állı́tás. (1 + 0 ≤ `(u)).
Tegyük fel, hogy `(αr ) + jr ≤ `(u). Belátjuk, hogy `(αr+1 ) + jr+1 ≤ `(u).
∗
Ha a αr →0 αr+1 levezetés során a p → q hosszat csökkentő szabálynak megfelelő P1 -beli
G
szabályt alkalmaztunk, akkor
`(αr+1 ) + jr+1 = (`(αr ) − `(p) + `(q)) + (jr + `(p) − `(q)) = `(αr ) + jr ≤ `(u).
∗
Ha az αr →0 αr+1 levezetés során a p → q hosszat nem csökkentő szabálynak megfelelő
G
P2 -beli szabályt alkalmaztunk, akkor mr = `(q) − `(p) esetén
1.3. Alkalmazások
α := S
köv(α) 6= ∅
α :∈ köv(α)
\ α∈T ∗
\ különben
Kiı́r(α) Hiba
Itt köv(α) = {β | α → β}. A ciklusmagban történő nemdeterminisztikus értékadás a kulcsa
G
a levezetések sokszı́nűségének.
Ezt a sémát úgy szeretnénk általánosı́tani, hogy a nyelvtan működését nem csak egy
α mondatformával, hanem egy [α, vi] konfigurációval ı́rjuk le, ahol vi valamilyen vezérlési
információ. Legyen adott a bemeneti vezérlési információk VI0 halmaza valamint a kimeneti
vezérlési információk FI halmaza, továbbá köv([α, vi]) = {[β, vi0 ] | [α, vi] → [β, vi0 ]}, akkor
G
az általánosı́tott séma:
α := S, vi ∈ VI0
köv([α, vi]) 6= ∅
[α, vi] :∈ köv([α, vi])
\ α ∈ T ∧ vi ∈ FI
∗
\ különben
Kiı́r(α) Hiba
Ennek az általánosı́tott sémának megfelelően működnek a programozott nyelvtanok.
9
10 2. Programozott nyelvtanok
2.3. definı́ció. Azt mondjuk, hogy az [α, f ] konfigurációból közvetlen (1-lépéses) konfigu-
rációátmenettel levezethető a [β, f 0 ] konfiguráció (α, β ∈ (T ∪ N )∗ , f ∈ F, f 0 ∈ F ∪ {exit}),
ha létezik olyan γ1 , γ2 ∈ (T ∪ N )∗ , melyre α = γ1 bo(lab(f ))γ2 , β = γ1 jo(lab(f ))γ2 és
f 0 ∈ σ(f ). A közvetlen konfigurációátmenet jelölése: [α, f ] → [β, f 0 ].
G
1. példa:
f0 : S → ABC f1 , f4
f1 : A → aA f2
f2 : B → bB f3
f3 : C → cC f1 , f4
f4 : A→a f5
f5 : B→b f6
f6 : C→c exit
2.1. Előfordulásellenőrzés nélküli programozott nyelvtanok 11
Példa levezetésre:
[S, f0 ] → [ABC, f1 ] → [aABC, f2 ] → [aAbBC, f3 ] → [aAbBcC, f4 ] → [aabBcC, f5 ] →
G G G G G G
[aabbcC, f6 ] → [aabbcc, exit].
G
A programozott nyelvtan által generált nyelv: L(G) = {an bn cn | n ≥ 1}.
2. példa:
f0 : S → X1 X2 {ft | t ∈ T } ∪ {fε }
ft : X1 → tX1 ft0 (t ∈ T )
ft0 : X2 → tX2 {ft | t ∈ T } ∪ {fε } (t ∈ T )
fε X1 → ε fε0
fε0 X2 → ε exit
L(G) = {uu | u ∈ T ∗ }
Minden nyelvtan tekinthető egyben programozott nyelvtannak is. Legyen ugyanis T , N ,
P, S mint a nyelvtanban, F = P, legyen lab az identitás P-n, továbbá σ(p → q) = P ∪{exit}.
Ugyanakkor az előző két példa mutatja, hogy programozott 2. tı́pusú nyelvtanokkal nem
csak 2. tı́pusú nyelveket lehet generálni.
Másrészt a 0., 1., 3. tı́pusú nyelvtanok programozási lehetősége nem bővı́ti a generált
nyelvek körét.
2.8. tétel. P3 = L3 .
Bizonyı́tás. Azt kell tehát belátni, hogy ha G = hT, N, P, S, F, lab, σi ∈ G3P , akkor létezik
G0 ∈ G3 , hogy L(G0 ) = L(G).
Legyen G0 = hT, N 0 , P 0 , S 0 i, ahol N 0 = {Af }A∈N,f ∈F ∪{exit} ∪ {S 0 }, P 0 -t pedig a követ-
kezőképpen definiáljuk.
Bizonyı́tás. Azt kell tehát belátni, hogy ha G = hT, N, P, S, F, lab, σi ∈ GiP (i = 0, 1),
akkor létezik G0 ∈ Gi , hogy L(G0 ) = L(G).
Legyen G0 = hT, N 0 , P 0 , S 0 i, ahol N 0 = N ∪ {Xf }f ∈F ∪{exit} ∪ {S 0 }, P 0 -t pedig a követ-
kezőképpen definiáljuk.
[α, f ] → [β, f¯] ⇐⇒ αXf →0 βXf¯ ∧ (*) alakú szabályt n-szer alkalmaztunk.
n ∗
G G
Ha a levezetés hossza 1, azaz [α, f ] → [β, f¯], akkor
G
[α, f ] → [β, f¯] ⇐⇒ ∃ γ1 , γ2 ∈ (T ∪ N )∗ , α = γ1 pγ2 , β = γ1 qγ2 , lab(f ) = p →
G
q ∧ f¯ ∈ σ(f )
∗
⇐⇒ α = γ1 pγ2 , β = γ1 qγ2 , Xf p → Xf¯q ∈ P 0 ⇐⇒ αXf →0 βXf¯ ∧
G
(*) alakú szabályt egyszer alkalmaztunk.
2.2. Előfordulásellenőrzéses programozott nyelvtanok 13
2.12. definı́ció. Azt mondjuk, hogy a [α, f ] konfigurációból közvetlen (1-lépéses) konfigurá-
cióátmenettel előfordulásellenőrzés nélkül levezethető a [β, f 0 ] konfiguráció, jelölése:
[α, f ] → [β, f 0 ] (α, β ∈ (T ∪ N )∗ , f ∈ F, f 0 ∈ F ∪ {exit}), ha [α, f ] →0 [β, f 0 ], ahol
G G
G0 = hT, N, P, S, F, lab, σi az előfordulásellenőrzés nélküli programozott nyelvtan. [α, f ]-
14 2. Programozott nyelvtanok
1. példa:
σ ϕ
f1 : S → ZZ f1 f2
f2 : Z→S f2 f1 , f3
f3 : S→a f3 exit
n
L(G) = {a2 | n ∈ N}.
2. példa:
σ ϕ
f1 : S → SS f1 , f2
f2 : S → AAB f2 f3
f3 : A→ε f4 exit
f4 : B→ε f5
f5 : A→a f5 f6
f6 : B→S f6 f2
Példa levezetésre:
∗ ∗ ∗ ∗ ∗
[S, f1 ] −→ [SSS, f2 ] −→ [AABAABAAB, f3 ] −→ [AAABAAB, f5 ] −→ [aaaBaaB, f6 ] −→
G,ac G,ac G,ac G,ac G,ac
∗ ∗ ∗
[aaaSaaS, f2 ] −→ [aaaAABaaAAB, f3 ] −→ [aaaAaaAAB, f5 ] −→ [aaaaaaaaB, f6 ] −→
G,ac G,ac G,ac G,ac
2.2. Előfordulásellenőrzéses programozott nyelvtanok 15
∗
[aaaaaaaaS, f2 ] −→ [aaaaaaaaAAB, f3 ] −→ [aaaaaaaaA, f5 ] −→ [aaaaaaaaa, f2 ]
G,ac G,ac G,ac
−→ [aaaaaaaaa, f3 ] −→ [aaaaaaaaa, exit].
G,ac G,ac
(n − 1) helyett n darab S generálása a levezetés elején (2n − 1)-gyel több a-t eredményez.
Pn 2
Mivel n2 = i=1 (2i − 1), ezért L(G) = {an | n ≥ 1}.
S 0 → LSXf R ∈ P0 ⇐⇒ bo(lab(f )) = S,
LXf → Lq0f ∈ P0 ⇐⇒ f ∈ F, (**)
qjf Z → Zδ mf (qjf , Z) ∈ P0 ⇐⇒ f ∈ F, Z ∈ T ∪ N, 0 ≤ j ≤ `(mf ),
qjf R → Xg R ∈ P0 ⇐⇒ f ∈ F, g ∈ F ∪ {exit}, 0 ≤ j ≤ `(mf ) − 1, g ∈ ϕ(f ),
L → ε, R → ε ∈ P 0.
Kód(α, X) Dekód(X, α)
X := 0 α := ε
α 6= ε X 6= 0
z := pre(α, 1) X, B := bX/M c, {X/M }
X := M · X + kod(z) α := kod−1 (B)α
α := suf(α, `(α) − 1)
Ezek után elkészı́tünk egy, a közvett levezetéseket számokon szimuláló algoritmust, mely
inputként beolvassa egy mondatforma kódját és nemdeterminisztikusan outputként vissza-
adja egy belőle közvetetten levezethető mondatforma kódját.
A kódfüggvény rekurzı́v definı́ciója alapján nemdeterminisztikusan le tudjuk választani
egy α mondatforma utolsó néhány (r) betűjét és fordı́tott sorrendben egy γ mondatformában
eltárolni, illetve egy γ mondatforma megfordı́tását α-hoz jobbról hozzákonkatenálni.
Hozzáı́rás(α, γ) := αγ −1
2.2. Előfordulásellenőrzéses programozott nyelvtanok 19
NLevál(X, Y ) Hozzá(X, Y )
Y 6= 0
X, B := bX/M c, {X/M } Y, B := bY /M c, {Y /M }
Y := M Y + B X := M X + B
Meghat(P, Q)
P = kod(p−1
1 ) P = kod(p−1
i ) P = kod(p−1
k )
\ \ \ \ \
Q := kod(q1−1 ) ··· Q := kod(qi−1 ) ··· Q := kod(qk−1 )
P := 0 P := 0 P := 0
Gener(X)
NLevál(X, Y )
NLevál(X, P )
Meghat(P, Q)
Hozzá(X, Q)
Hozzá(X, Y )
A második lépésben számfüggvény makrókat hozunk létre, melyek egy 2. tı́pusú előfor-
dulásellenőrzéses nyelvtanban megvalósı́tják a számunkra szükséges számı́tásokat. A makrók
mindig valamilyen α mondatformán működnek, a benne lévő nyelvtani jeleken operálnak.
−
A Makró(X1 , . . . , Xn , fBE , fKI
+
, fKI ) makró a következő alakú specifikációnak felel meg.
20 2. Programozott nyelvtanok
−
g− : X →Z g− fKI
−
NEgyenlőM (X, fBE , fKI
+
, fKI ) fBE : X →X f0 f0
X 6= M ; fKI
+
f0 : X →Z f1 g−
−
X = M ; fKI f1 : X →Z f2 g−
..
X:=0 .
fM −1 : X →Z fM g−
−
fM : X →Z g− fKI
g− : X →Z g− fKI
+
−
fKI el is hagyható.
Az aktuális α mondatformában szereplő W nyelvtani jelek számát tekintsük változónak
és `W (α) helyett használjuk rá a W jelölést. A makrókban szereplő lokális cı́mkékhez és
változókhoz a kifejtés során új, egyedi cı́mkéket és változókat veszünk majd fel. A számunkra
szükséges makrókat a 2.1. táblázatban adtuk meg. A változó=0 előfeltételt a Null makróval
is biztosı́thatjuk.
Végül a harmadik lépésben a Gener(X) algoritmust a makrók segı́tségével megvalósı́tjuk
egy G0 2. tı́pusú előfordulásellenőrzéses nyelvtanban, majd X = kod(S)-el futtatjuk. Végül
szükségünk van a kapott mondatforma dekódolására. Az egyes részfeladatok megvalósı́tása:
NLevál(X, Y ) NLevál(X, P )
Meghat(P, Q)
Egyenlőkod(p−1 ) (P ) Egyenlőkod(p−1 ) (P ) Egyenlőkod(p−1 ) (P )
\ 1
\ \ i
\ \ i
Hozzá(X, Q) Hozzá(X, Y )
NEgyenlő0 (Q) NEgyenlő0 (Y )
OsztM (Q, B) OsztM (Y, B)
SzorM (X) SzorM (X)
AddM (X, B) AddM (X, B)
Dekód(X, α)
NEgyenlő0 (X)
OsztM (X, B)
Egyenlő1 (B) Egyenlői (B) EgyenlőM −1 (B)
\ \ \ \ \
E → E kod−1 (1) ··· E → E kod−1 (i) ··· E → E kod−1 (M − 1)
következők:
σ ϕ
f0 : S → X
0
E
kod(S)
f1
f1 : E → E f2 f3
f2 : E→E f4 f5
OsztM (X, B, f4 , f6 )
SzorM (Y, f6 , f7 )
Add(Y, B, f7 , f2 )
f5 : E→E f8 f9
OsztM (X, B, f8 , f6 )
SzorM (P, f6 , f7 )
Add(P, B, f7 , f5 )
f9 : E→E h1 , . . . , hk
Egyenlőkod(p−1 ) (P, hi , h+
i , ) (1 ≤ i ≤ k)
i
\ \ \ \ \
23
24 3. Mátrixnyelvtanok
m ∗
α −→ β, ha létezik m ∈ M, hogy α −→
i
β. −→ a −→ reflexı́v, tranzitı́v lezártja.
G(,ac) G(,ac) G(,ac) G(,ac)
∗
L(ac)
(G) = {u ∈ T | S −→ u}.
∗
G(,ac)
3. [A → U, Y → U, S → ZZ], [A → U, S → U, Z → Y ], [A → U, Z → U, Y → S], [Z →
• • • • • • •
U, Y → U, S → A], [Z → U, Y → U, S → U, A → a].
• • • •
n
Lac (G) = {a2 | n ∈ N}.
(ac) (ac)
3.2. tétel. Mi = Pi .
[S 0 → Sf ] (f ∈ F ),
[Af → A, p → q, B → Bg ] (A, B ∈ N, f ∈ F, lab(f ) = p → q, g ∈ σ(f )),
[Af → A, p → U `(p) , B → Bg ] (A, B ∈ N, f ∈ F, bo(lab(f )) = p, g ∈ ϕ(f )),
•
[Af → A, p → q] (A ∈ N, f ∈ F, lab(f ) = p → q, q ∈ T ∗ ).
is teljesı́ti a korlátozott ε-szabályt és továbbra is L(ac) (G0 ) = L(ac) (G). Ezen módosı́tással
ha G i. tı́pusú (előfordulásellenőrzéses) programozott nyelvtan volt, akkor G0 i. tı́pusú
(előfordulásellenőrzéses) mátrixnyelvtan.
Legyen most G0 = hT, N, M, Si i. tı́pusú (előfordulásellenőrzéses) mátrixnyelvtan.
Készı́tünk egy G0 = hT, N 0 , P, S 0 , F, lab, σ, ϕi i. tı́pusú (előfordulásellenőrzéses) programo-
zott nyelvtant, melyre L(ac) (G0 ) = L(ac) (G).
Legyen M = {m1 . . . , m|M| } és mj,k az mj mátrix k. szabálya. Legyen továbbá
P = {mj,k | 1 ≤ j ≤ |M|, 1 ≤ k ≤ |mj |, mj,k pontozatlan}, illetve P • = {mj,k | 1 ≤ j ≤
◦
t ` > 0 X `>0
` t`
xj,k = , továbbá Xj,k = valamint mb j,k az a szabály, melyre
ε ` = 0 Xε ` = 0
t · · · t X `>0
1 `−1 t`
bo(mb j,k ) = bo(mj,k ) és jo(m
b j,k ) = .
Xε `=0
A G0 (előfordulásellenőrzéses) programozott nyelvtan P szabályrendszere a cı́mkézéssel
(F az előforduló cı́mkék halmaza) valamint a pozitı́v (σ) és negatı́v (ϕ) rákövetkezési
függvénnyel a következő:
26 3. Mátrixnyelvtanok
σ ϕ
|M|
fkezd : S0 → S {f`,1 }`=1
|M| |M|
fj,|mj | : mj,|mj | {f`,1 }`=1 {f`,1 }`=1 1 ≤ j ≤ |M|, mj,|mj | ∈ P •
|M|
fj,|mj | : mj,|mj | {f`,1 }`=1 1 ≤ j ≤ |M|, mj,|mj | ∈ P ◦
fj,k : m
b j,k {fj,k
A
}A∈N fj,k+1 1 ≤ j ≤ |M| ∧ 1 ≤ k < |mj | ∧ mj,k ∈ P • ∧
jo(mj,k ) ∈ T ∗ ∧ ∃k < ` ≤ |mj | mj,` ∈ P ◦
fj,k : m
b j,k {fj,k
A
}A∈N 1 ≤ j ≤ |M| ∧ 1 ≤ k < |mj | ∧ mj,k ∈ P ◦ ∧
jo(mj,k ) ∈ T ∗ ∧ ∃k < ` ≤ |mj | mj,` ∈ P ◦
fj,k
A
: A→A fj,k
vissza
1 ≤ j ≤ |M| ∧ 1 ≤ k < |mj | ∧ A ∈ N ∧
jo(mj,k ) ∈ T ∗ ∧ ∃k < ` ≤ |mj | mj,` ∈ P ◦
fj,k
vissza
: Xj,k → xj,k fj,k+1 1 ≤ j ≤ |M| ∧ 1 ≤ k < |mj | ∧
jo(mj,k ) ∈ T ∗ ∧ ∃k < ` ≤ |mj | mj,` ∈ P ◦ .
Példák:
27
28 4. Kontrollnyelvtanok
f1 : S −→ ABC f5 : A −→ a
f2 : A −→ aA f6 : B −→ b
f3 : B −→ bB f7 : C −→ c
f4 : C −→ cC.
f1 : S −→ ZZ f20 Z −→ U
•
f10 : S −→ U f3 S −→ a
•
f20 : Z −→ S
n
C = (f1∗ f10 f2∗ f20 )∗ f3∗ . Ekkor Lac (G) = {a2 | n ∈ N}.
ft : S → tS (t ∈ T )
#: S → ε.
Jelölés: ft1 ···tk = ft1 · · · ftk , továbbá legyen fL = {fu | u ∈ L}. Ekkor C = fL # jó kontroll-
nyelv L-hez a fenti cı́mkézett nyelvtanban.
(ac) (ac)
4.5. tétel. Ci = Mi (i = 0, 1, 2, 3).
m0 : [S 0 → Sq0 ]
mA,B,f,q : [Aq → A, lab(f ), B → Bδ(q,f ) ] (jo(lab(f )) 6∈ T ∗ )
mA,f,q : [Aq → A, lab(f )] (jo(lab(f )) ∈ T ∗ , δ(q, f ) ∈ Vb ),
hLogikaiKifejezési → hLogikaiKifejezésihLogikaiAddopihLogikaiKifejezési |
hLogikaiTagi
hLogikaiTagi → hLogikaiElemihLogikaiMpopihLogikaiElemi | hLogikaiElemi
hLogikaiElemi → hLogikaiAzonosı́tói | hLogikaiKonstansi | (hLogikaiKifejezési)
hEgészKifejezési → hEgészKifejezésihEgészAddopihEgészKifejezési | hEgészTagi
hEgészTagi → hEgészElemihEgészMpopihEgészElemi | hEgészElemi
hEgészElemi → hEgészAzonosı́tói | hEgészKonstansi | (hEgészKifejezési)
Egy másik lehetőség a kifejezés fogalmának indexében jelölni a tı́pust.
30
31
5.1. definı́ció. Egy G = hT, N, F, P, Si ötöst indexelt nyelvtannak nevezünk, ha a követ-
kezők teljesülnek. T , N , F páronként diszjunkt véges halmazok. F elemeit indexeknek
nevezzük. Továbbá hT, N 0 , P, Si környezetfüggetlen nyelvtan, ahol N 0 = N F ∗ .
A teljes illetve legbal öröklődés, mint művelet legyen alacsonyabb prioritású a konkate-
nációnál.
←gf
Példa: Af 2 aBf C ←gf = Af 2 gf aBf gf Cgf , mı́g Af 2 aBf C lb = Af 2 gf aBf C.
α → β ⇐⇒ α = α1 Aσα2 , β = α1 q ←σ α2 , α1 , α2 ∈ (T ∪ N F ∗ )∗ , A → q ∈ P, A ∈
G
N F ∗ , q ∈ (T ∪ N F ∗ )∗ .
5.5. definı́ció. A G = hT, N, F, P, Si indexelt nyelvtan által teljes öröklődéssel illetve legbal
∗
öröklődéssel generált nyelv L(lb) (G) = {u ∈ T ∗ | S −→ u}.
G,(lb)
Példák:
1. Legyen G1 = h{a, b, c}, {S, S 0 , A, B, C}, {f, g}, P1 , Si a következő indexelt nyelvtan.
P1 szabályai:
32 5. Indexelt nyelvtanok
S −→ S 0 g S 0 −→ ABC Bf −→ bB Ag −→ ε
S 0 −→ S 0 f Af −→ aA Cf −→ cC Bg −→ ε
Cg −→ ε
S → (S 0 g) ←ε = S 0 g → (S 0 f ) ←g = S 0 f g → (S 0 f ) ←f g = S 0 f f g → (ABC) ←f f g =
Af f gBf f gCf f g → Af f g(bB) ←f g Cf f g = Af f gbBf gCf f g → a2 b2 c2 .
∗
S −→ S 0 g S 0 −→ AA Ag −→ ε
S 0 −→ S 0 ft (t ∈ T ) Aft −→ tA
L(G2 ) = {uu | u ∈ T ∗ }.
S −→ Ig I −→ ε Ag −→ ε
I −→ aAAIf Af −→ aA
k
S → Ig → αIf k g. Teljes indukcióval belátható, hogy `a (α) + `f (α) = k 2 . `a (ε) +
`f (ε) = 02 αIf k g → α(aAAIf ) ←f g = αaAf k gAf k gIf k+1 g, melyre `a (α) + `f (α) =
k
2
k 2 + k + k + 1 = (k + 1)2 . Tehát L(G3 ) = {an | n ∈ N}.
S −→ If g Df −→ DBf f V g −→ ε
I −→ DI Dg −→ Eg E −→ ε
I −→ V V f −→ aV B −→ ε
∗ ∗
Bizonyı́tás. Mivel 2. tı́pusú nyelvtanokban S → u ⇔ S −→ u és minden nyelvtan
G G,lb
tekinthető indexelt nyelvtannak az F = ∅ választással, ezért L2 ⊂ LInd és L2 ⊂ Llb
Ind , a
valódi tartalmazást a fenti példák mutatják.
Legyen tehát G = hT, N, P, Si ∈ G0 nyelvtan, készı́tünk G0 = hT, N 0 , F, P 0 , S 0 i indexelt
nyelvtant, melyre Llb (G0 ) = L(G). Legyen N 0 = {S 0 , B, E, I, L, V } és F = {fZ }Z∈T ∪N ∪
{g}. Ha Z1 Z2 · · · Zk ∈ (T ∪ N )∗ , akkor vezessük be a következő jelölést: fZ1 Z2 ···Zk :=
fZ1 fZ2 · · · fZk . A P 0 szabályrendszer:
S 0 → IfS g E→ε
I → LI | V B→ε
LfZ → LBfZ (Z ∈ T ∪ N ) V ft → tV (t ∈ T )
Lfp → Efq (p → q ∈ P) V g → ε.
∗ ∗
Elegendő belátni, hogy S 0 −→
0
Ifα g ⇐⇒ S → α, hiszen az I → V szabály al-
G ,lb G
kalmazása után visszakaphatjuk az I indexében tárolt mondatformát, ha az terminális
sorozat. Egy α = α1 pα2 → α1 qα2 = β G-beli lépés szimulálása G0 -ben öt lépésben
történik. Az első lépésben az Ifα g mondatformából Lfα gI lesz az I → LI szabály al-
kalmazásával. Mivel ı́gy most L lett a legbal nyelvtani jel, ezért most csak arra (vagy
indexelt változatára) tudunk szabályt alkalmazni. Második lépésben az LfZ → LBfZ
szabályok k-szori alkalmazásával (akár k = 0 is lehet) leválasztunk α-ból balról egy α1 részt,
és ez bekerül az egymás utáni B-k indexébe fordı́tott sorrendben, a kapott mondatforma
Lfα0 gBfZk · · · BfZ1 I, ahol α = α1 α0 = Z1 · · · Zk α0 . A harmadik lépésben akkor tudunk
továbblépni, ha α0 -nek prefixe valamely G-beli szabály baloldala, legyen ez a szabály p → q,
azaz α0 = pα2 . Ekkor az Lfp → Efq szabály alkalmazásával legbal öröklődéssel kapott
←fα g
mondatforma (Efq ) lb 2 BfZk · · · BfZ1 I = Efqα2 gBfZk · · · BfZ1 I. A negyedik és ötödik
lépésben az E → ε illetve B → ε szabályok alkalmazásával előbb BfZk qα2 g · · · BfZ1 I-t majd
a B-ket sorra balról jobbra (a levezetésnek legbal levezetésnek kell lennie) eltüntetve végül
megkapjuk IfZ1 ···Zk qα2 g = Ifβ g-t (eltűnő nyelvtani jel indexe a megmaradó legbaloldalibb
nyelvtani jelre öröklődik).
Legyen G = hT, N, F, P, Si indexelt nyelvtan, készı́tünk egy G0 = hT, N 0 , P 0 , S 0 i ∈ G0
nyelvtant, melyre L(G0 ) = L(G). Jelölje M a P-beli szabályok jobboldalán előforduló N -
beli jelek maximumát. Legyen N 0 = N ∪ F ∪ {Zi }0≤i≤M ∪ {Xf,i }f ∈F,0≤i≤M ∪ {S 0 , R}. P 0
szabályai a következők:
34 5. Indexelt nyelvtanok
S 0 → SR
A → qZj (A → q ∈ P, j a q-ban levő N -beli jelek száma)
Zj f → Xf,j−1 · · · Xf,1 Xf,0 Zj (f ∈ F, 0 ≤ j ≤ M )
tXf,i → Xf,i t (t ∈ T, f ∈ F, 0 ≤ i ≤ M )
gXf,i → Xf,i g (f, g ∈ F, 1 ≤ i ≤ M )
Y Xf,i → Xf,i−1 Y (Y ∈ N, f ∈ F, 1 ≤ i ≤ M )
gXf,0 → gf (f, g ∈ F )
Y Xf,0 → Y f (Y ∈ N, f ∈ F )
Zj t → t (t ∈ T, 0 ≤ j ≤ M )
Zj Y → Y (Y ∈ N ∪ {R}, 0 ≤ j ≤ M )
R → ε.
P 00 szabályai:
35
S 0 → SRb
Ab → qbZj (A → q ∈ P, j a q-ban levő N -beli jelek száma)
Zj f → Xf,j−1 Zj (f ∈ F, 1 ≤ j ≤ M )
tXf,i → Xf,i t (t ∈ T, f ∈ F, 0 ≤ i ≤ M )
gXf,i → Xf,i g (f, g ∈ F, 1 ≤ i ≤ M )
Y Xf,i → Xf,i−1 Y (Y ∈ N, f ∈ F, 1 ≤ i ≤ M )
gXf,0 → gf (f, g ∈ F )
Yb Xf,0 → Yb f (Yb ∈ Nb, f ∈ F )
Zj t → t (t ∈ T, 1 ≤ j ≤ M )
Zj Y → Y (Y ∈ N ∪ {R}, 1 ≤ j ≤ M )
Z0 Y → Yb (Y ∈ N )
Z0 R → R
Z0 f → Z0 Xf0 (f ∈ F )
Xf0 t → tXf0 (t ∈ T, f ∈ F )
Xf0 g → gXf0 (f, g ∈ F )
Xf0 Y → Y Xf00 (Y ∈ N, f ∈ F )
Xf0 R → R (f ∈ F )
Xf00 g → gXf00 (f, g ∈ F )
Xf00 t → f t (t ∈ T, f ∈ F )
Xf00 Y → f Y (Y ∈ N ∪ {R}, f ∈ F )
R → ε.
∗ ∗
Az előzőhöz hasonlóan látható, hogy S 0 −→
0
u ⇐⇒ S −→ u.
G G,lb
2
?
Megjegyzés: LInd ⊂ Llb
Ind , nem ismeretes.
6. Attribútumnyelvtanok
6.1. definı́ció. Egy G = hT, N, P, Si négyest attribútumnyelvtannak nevezünk, ha a követ-
kezők teljesülnek. N minden eleme egy rekord tı́pus. A rekord mezőneveit attribútumoknak
nevezzük és az A ∈ N nyelvtani jelhez tartozó attribútumokat Attr(A)-val jelöljük. Ha
hangsúlyozni akarjuk, hogy egy attr ∈ Attr(A) attribútum az A nyelvtani jelhez tartozik,
akkor A. attr-t ı́runk. A rekordmezőkhöz hozzá van rendelve egy értékhalmaz (domain), egy
rekormező értékei a hozzárendelt értékhalmazból kerülhetnek ki. P nyelvtani szabályok véges
halmaza. Minden szabály 2 részből áll, egy P 2. tı́pusú nyelvtani szabályból és egy ϕ(P )
elsőrendű logikai állı́tásból, melynek szabad változói az adott szabályban szereplő nyelvtani
jelek attribútumai. Ha egy nyelvtani jel egy szabályban többször is szerepel, akkor ezeket az
előfordulásokat a logikai állı́tásban megkülönböztetetten kell kezelni.
6.3. definı́ció. t helyes szemantikus fa, ha minden c belső csúcs esetén a c-be és gyer-
mekeibe ı́rt értékek kielégı́tik ϕ(P )-t, ahol P a c-hez és gyermekeihez tartozó szintaktikus
szabály.
Példák: Egy szabályban egy adott nyelvtani jel különböző előfordulásaira a nyelvtani jel
indexelésével hivatkozunk. Tehát az 1 index a szabályban balról jobbra első, 2 a második
előfordulásra hivatkozik, és ı́gy tovább.
36
37
leegyszerűsı́tett modellt vizsgálunk, ahol a deklarációs rész vesszővel elválasztott sza-
vak sorozata, a végrehajtható rész is, azzal a különbséggel, hogy a végrehajtható rész
minden eleme elő kell forduljon a deklarációs részben is. Az egyes részeket # jellel
határoljuk. A modellt leı́ró G attribútumnyelvtan szabályai:
∗
ahol az sztábla attribútum értékhalmaza 2T , a szóé T ∗ .
Például u = #a, ba#ba, a, ba# ∈ L(G). Egy u-hoz tartozó helyes szemantikus fa a
6.1. ábrán látható.
a , ba , {a, ba}
A D {ba} A V
{a, ba}
ba a a ,
a A b A A V
b Aa a a A ba
a b Aa
6.1. ábra. Egy #a, ba#ba, a, ba#-hoz tartozó helyes szemantikus fa a deklarációk attribútum-
nyelvtanában.
38 6. Attribútumnyelvtanok
Tekintsük változónak azt, hogy milyen lista. Ekkor a lista fogalma következőképpen
ı́rható le a W-nyelvtanban.
hX listai → hXi | hXi, hX listai hiperszabály
X → egész | valós | duplapontos metaszabály
A hiperszabályok adják meg a szabályok sémáját, mı́g a metaszabályok magukról a
szabályokról szóló szabályok.
40
41
• G2 = hM T, M N, M Pi metanyelvtan, 3. tı́pusú kezdőjel nélküli nyelvtan.
M T elemeit metaterminálisoknak, M N elemeit metanyelvtani jeleknek, M P elemeit
metaprodukciós szabályoknak nevezzük.
Példák:
7.3. tétel. LW ⊇ L0 .
E → ZE | ε (Z ∈ T ∪ N )
V →E
X → tX | ε (t ∈ T ),
mı́g HP hiperszabályai:
Az alga növekedése a 8.1. ábrán látható azzal a konvencióval, hogy egy [,] zárójelpár
közé ı́rt rész oldalágat jelent.
43
44 8. Párhuzamos nyelvtanok
5
5 6
5 6 7
5 6 7 8
5 3
6 7 8 4 9
5 3 2 5
6 7 8 9 4 9 2
1 3 4 5 3 2 2
6 7 8 9 9 9
2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2
2 2 2 2 2 2 2
8.1. ábra. Aristid Lindenmayer (1925-1989), magyar származású holland biológus, matematikus
eredetileg a vörös algák fejlődésének tanulmányozása során fedezte fel a 60-as évek végén a róla
elnevezett Lindenmayer-rendszereket.
8.1. Lindenmayer-rendszerek
∗ ∗
8.1. definı́ció. Legyenek X és Y ábécék. Egy σ : 2X → 2Y függvényt helyettesı́tésnek
nevezünk, ha a következők teljesülnek:
2. σ(L) = ∅ ⇐⇒ L = ∅, (L ⊆ X ∗ ),
4. σ({ε}) = {ε}.
Példa: X = Y = {x, y}, σ(x) = {x, ε}, σ(y) = {y}. σ(xxyy) = {xxyy, xyy, yy}. Ha
L = {u ∈ X ∗ | `x (u) = `y (u)}, akkor σ(L) = {u ∈ X ∗ | `x (u) ≤ `y (u)}.
Egy véges helyettesı́tést átı́rási szabályokkal is megadhatunk: α ∈ σ(x) ⇔ x → α.
8.1. Lindenmayer-rendszerek 45
Példák:
S → S0g
S 0 → S 0 fi i ∈ {1, . . . , n}
S 0 → ac
x
Afi → qb i ∈ {1, . . . , n}, A → q ∈ σi
tg → t
b t∈T
Egy G-beli levezetés a következőképpen néz ki. Adva van tábláknak egy σi1 · · · σik
sorozata. Ha a j. táblát alkalmazzuk, akkor a mondatforma minden jelére alkalmazunk
egy σij -beli átı́rási szabályt. Ennek a sorozatnak G0 -ben megfelel egy fi1 · · · fik index-
sorozat, mely kezdetben öröklődik az axióma minden jelére. Egy nyelvtani jel (eredeti vagy
álterminális) utáni index úgy tűntethető el, ha alkalmazunk a jelre egy a megfelelő táblából
vett átı́rási szabályt. A teljes öröklődés miatt az átı́rás után az újonnan bejövő jelekre
öröklődik, hogy mely táblák szerint kell még majd őket tovább átı́rni. Az álterminálisokra
azért van szükség, hogy a terminálisokra is öröklődjön, hogy mely táblákat kell még al-
kalmazni. Az álterminálisok csak akkor ı́rhatók vissza terminálisokká, ha már nincs rá
vonatkozó alkalmazandó tábla, tehát pontosan k darab megfelelő tábla szerinti átı́rás után
keletkezett. Tehát G0 tényleg helyesen szimulálja G működését, azaz L(G0 ) = L(G). 2
A problémamegoldás fekete tábla módszere: Adott n darab ügynök és egy probléma egy
táblára felı́rva (vagy az 1. ügynök felı́r egy problémát a táblára), az ügynökök célja a
probléma megoldása. A probléma megoldása körökben történik. Minden körben kiáll egy
ügynök a táblához, dolgozik a problémán, majd átadja egy másik ügynöknek a munkát, de
későbbi körökben újra következhet.
A fekete tábla módszer egy modellje a kooperáló osztott (cooperative distributive, CD)
nyelvtani rendszer. A probléma megoldásának aktuális állását (a tábla tartalmát) egy mon-
datforma reprezentálja. Az i. ügynök ezen a mondatformán a hozzá rendelt nyelvtani
szabályok szerint dolgozhat. A CD nyelvtani rendszerek több változata ismeretes aszerint,
hogy mikor adják át az egyes nyelvtanok a vezérlést egy másiknak.
α → β ⇐⇒ ∃ i ∈ {1, . . . , n}, α0 , . . . , α` ∈ (T ∪ N )∗
G,z
(α0 = α, α` = β, ∀ j ∈ {1, . . . , `} : αj−1 → αj ) ∧ ϕ(z, i, `),
Gi
@γ ∈ (T ∪ N )∗ (α` → γ) z = “t” (nincs több alkalmazható szabály),
Gi
> z = “≤∞”,
ahol ϕ(z, i, `) = ` = k z = “=k”,
` ≤ k
z = “≤k”,
` ≥ k
z = “≥k”.
∗
α → β ⇔ ∃n ∈ N, α0 , . . . , αn ∈ (T ∪ N )∗ (α0 = α, αn = β, ∀ j ∈ {1, . . . , n} : αj−1 → αj ).
G,z G,z
∗
Lz (G) = {u ∈ T ∗ | S → u}.
G,z
Példák:
szabályrendszer:
S 0 → X0r 1 ≤ r ≤ n,
pXjr → qXj+1
r
1 ≤ r ≤ n, 0 ≤ j < k, p → q ∈ Pr ,
0
Xkr → X0r 1 ≤ r, r0 ≤ n,
ZXjr → Xjr Z 1 ≤ r ≤ n, 0 ≤ j ≤ k, Z ∈ T ∪ N ,
Xjr Z → ZXjr 1 ≤ r ≤ n, 0 ≤ j ≤ k, Z ∈ T ∪ N ,
Xkr →ε 1 ≤ r ≤ n.
szabályrendszer:
S 0 → S0r 1 ≤ r ≤ n,
Arj → uBj+1
r
1 ≤ r ≤ n, 0 ≤ j < k, A → uB ∈ Pr ,
0
Ark → Ar0 1 ≤ r, r0 ≤ n, A ∈ N ,
Ark−1 → u 1 ≤ r ≤ n, A → u ∈ Pr .
0
Xjr → X0r 1 ≤ r, r0 ≤ n, 0 ≤ j < k,
Xjr → ε 1 ≤ r ≤ n, 0 ≤ j < k,
0
Arj → Ar0 1 ≤ r, r0 ≤ n, 0 ≤ j < k, A ∈ N ,
Arj → u 1 ≤ r ≤ n, 0 ≤ j < k − 1, A → u ∈ Pr .
Ark → uBkr 1 ≤ r ≤ n, A → uB ∈ Pr ,
Ark →u 1 ≤ r ≤ n, A → u ∈ Pr .
t-módban akkor lehet Pr -beli szabály után Pr0 -beli szabályt alkalmazni (r0 6= r), ha már
Pr -beli szabályt nem lehet alkalmazni. Ennek ellenőrzésére i = 0, 1 esetén párhuzamosan
futtatunk az aktuális mondatformával mint inputtal T ∪ N feletti KMP-automatákat, ahol a
minták a Pr -beli szabályok baloldalai. Akkor és csak akkor válthatunk valamely másik Pr0
szabályrendszerre ha az input végigolvasása után egyik automata se találja meg a mintáját.
Minden 1 ≤ r ≤ n esetén jelölje s(r) = |Pr | és legyen Pr = {pr1 → q1r , . . . , prs(r) →
qs(r)
r
}. Legyen továbbá az m mintát felismerő KMP-automata Am = h{ai }0≤i≤`(m) , T ∪
N, δ m , a0 , {a`(m) }i.
S 0 → LSXr R 1 ≤ r ≤ n,
pXr → qXr 1 ≤ r ≤ n, p → q ∈ Pr ,
ZXr → Xr Z 1 ≤ r ≤ n, Z ∈ T ∪ N ,
Xr Z → ZXr 1 ≤ r ≤ n, Z ∈ T ∪ N ,
LXr → LW0,...,0
r
1 ≤ r ≤ n,
r
Wir1 ,...,is(r) Z → ZWir0 ,...,i0 1 ≤ r ≤ n, Z ∈ T ∪ N, ∀ 1 ≤ j ≤ s(r) : δ pj (aij , Z) = ai0j ,
1 s(r)
S 0 → Sr 1 ≤ r ≤ n,
Ar → uBr 1 ≤ r ≤ n, A → uB ∈ Pr ,
Ar → u 1 ≤ r ≤ n, A → u ∈ Pr ,
Ar → Ar 0 1 ≤ r, r0 ≤ n, r0 6= r, A 6∈ {bo(P ) | P ∈ Pr }.
8.3. PC rendszerek
A párhuzamosan kommunikáló (parallel communicating, PC) rendszerekben a kooperáló
nyelvtanoknak kétfajta lépése van: a szokásos munkalépés, és az információcserélő lépés.
A munkalépések szinkronizáltak, azaz a nyelvtanok egy ütemben egyszerre 1-1 levezetési
lépést tesznek. Az utóbbi esetben ha valamelyik nyelvtan kereső (query) szimbólumot vezet
le, akkor elkéri a kérdezett nyelvtantól az addig levezetett mondatformáját.
Példák:
1. G1 = h{a, b, c}, {S1 , S2 , S20 , S3 , S30 , S300 }, {Q1 , Q2 , Q3 }, (P1 , S1 ), (P2 , S2 ), (P3 , S3 )i, ahol
L(G) = {an bn cn | n ∈ N}
P1 szabályai P2 szabályai
S1 → S1 S2 → tS2 (t ∈ T )
S1 → Q2 Q2 S2 → ε
L(G) = {uu | u ∈ T ∗ }.
P1 szabályai P2 szabályai
S1 → Q2 S2 → aA
A → Q2 A → aaA
A→ε
2
L(G) = {an | n ≥ 1}.