You are on page 1of 5

Szimbólumok tetszőleges nemüres, véges halmazát ábécének nevezzük, és V-vel jelöljük.

A V elemeit az ábécé betűinek mondjuk.


Jelölje V + (ejtsd: véplusz) a V-beli betűkből felírható p=a 1 a 2…ak (a 1,…,ak ∈ V ) alakú
véges hosszúságú sorozatok, az úgynevezett V feletti nem üres szavak halmazát. Egy p szó
hosszát | p | -al (ejtsd p hossza) jelöljük és rajta a p-beli betűk számát értjük (esetleges
többszöri előfordulással együtt). Így ha p=a 1 a 2…ak (a 1,…,ak ∈ V ), akkor | p | = k.

2.1. példa - Szó hossza


Legyen a V ábécé két betűje a és b. Ekkor bab ∈ V + és | bab | = 3 (és nem 2, mert
a b betű kétszer is előfordul, és a többszöri előfordulást figyelembe kell venni.) ★

Szokás beszélni az úgynevezett üresszóról is, ami egy matematikai absztrakció, ugyanis olyan
szót jelent, melynek egyetlen betűje sincs, vagyis az egyetlen betűt sem tartalmazó
betűsorozatot. Speciálisan, jelölje λ a továbbiakban az üresszót. Itt jegyezzük meg hogy bár az
automataelméleti szakirodalomban az ε-t (is) szokás az üresszó jelölésére használni, ebben a
jegyzetben mi végig a λ jelet fogjuk használni. Tehát | λ | = 0. A V +∪{ λ } halmazt a V feletti
(összes) szavak halmazának hívjuk, s V *-al (ejtsd vécsillag) jelöljük. Speciálisan, ha
valamely a ∈ V-re V = { a} azaz Vegyelemű halmaz, s egyetlen eleme egy bizonyos a betű,
akkor gyakran írunk { a } * helyett a *-ot, illetve { a}+ helyett a +-t. Valamely V *-
beli p=a 1…am és q=b 1…bn (a 1,…,am ,b 1,…,bn ∈ V) szavakat pontosan akkor tekintjük
egyenlőknek, ha m = n és minden i = 1,…,n-re ai = bi . Ezt a tényt ki szokás úgy is fejezni,
hogy V*-ban csak grafikus (betűről - betűre megegyező) egyenlőségek léteznek.

A V ábécé feletti szavak egy tetszőleges L halmazát a V ábécéből alkotott (formális) nyelvnek
nevezzük, vagyis a V * halmaz részhalmazait V feletti formális nyelveknek, vagy röviden V
feletti nyelveknek, vagy csak egyszerűen nyelveknek hívjuk.
Valamely L ⊆ V nyelvet üresnek, végesnek vagy végtelennek hívunk ha az L (mint
*

halmaz) üres, véges, illetve végtelen.


Azt a nyelvet, amelynek egyetlen szava sincs, üres nyelvnek nevezzük. Jelölés: ∅. Nem
tévesztendő össze a { λ } nyelvvel, amely egyedül az üresszót tartalmazza.

Az így definiált nyelvfogalom túl általános, magában foglalja mind a mesterséges, mind a
természetes (írott) nyelvek összességét. A kérdés viszont az, hogyan lehet ténylegesen
megadni egy konkrét nyelvet. Az egyszerű tulajdonságokkal rendelkező nyelveket máris
megadhatjuk a halmazok megadásának különböző módjai szerint. Legyen például a véges
ábécénk mindössze két elemű: V={0,1}. Ekkor az

 L 1 = { λ},

 L 2 = { 1, 10, 0010, 111},

 L 3 = { 1 i | i prím }

halmazok mindegyike egy-egy nyelv a fenti definíció értelmében. Szükségünk van azonban
olyan eszközökre, amelyekkel a fentieknél lényegesen összetettebb nyelveket is definiálhatunk.
Ebből a célból vezetjük be a generatív nyelvtan fogalmát.

Tehát a továbbiakban olyan nyelveket fogunk csak vizsgálni, melyek véges sok adat
segítségével speciális módon, az úgynevezett generatív nyelvtanokkal megadhatók.
Megjegyezzük azt is, hogy az általunk használt szófogalom nem esik egybe a természetes
nyelvek szófogalmával, hisz egy természetes nyelvet úgy szokás tekinteni, mint az adott nyelv
összes mondatainak halmazát. De tekinthetünk egy természetes nyelvet úgy is mint a nyelv
összes véges hosszú szövegeinek halmazát. A szóközt és egyéb írásjeleket is felvéve az
ábécébe, az általunk definiált szófogalom amellett, hogy magában foglalja a szokásos
szófogalmat, magában foglalja mind a mondat fogalmát, mind pedig a tetszőleges véges
hosszúságú szöveg fogalmát is.
2.2. példa - Szavak egyenlősége
Legyen V = { 1, 2, + }. Ekkor (V *- ban !) fennáll, hogy 1+1≠2, mivel az 1+1 szó nem
egyezik meg "betűről - betűre", azaz grafikusan a 2 szóval. ★

2.3. példa - Véges és végtelen nyelvek


Legyen V = { 0,1,…,9}. A (magyar) történelmi dátumok { 1514, 1526, 1606, 1711, 1849,
… } halmaza ekkor egy V feletti véges nyelv. A (tízes számrendszerbeli) páros számok
halmaza egy V feletti végtelen nyelv. Temészetesen az üres halmaz is egy V feletti (üres)
nyelv. Ugyancsak V feletti (véges) nyelv az egy elemű { λ } halmaz is. ★

* +
AV halmazon (és a V halmazon is) szokás bevezetni egy (nagyon egyszerű tulajdonságú)
műveletet, melyet szorzásnak nevezünk.
Ap=a 1 …a m és q = b 1 …b n ( a 1, …, a m , b 1, …, b n ∈V)
szavak szorzatán a pq = a 1 a 2 …a m b 1 b 2 …b n szót értjük. Két V *- beli (vagy két V +-
beli) szót tehát úgy szorzunk össze, hogy e szavakat (megfelelő sorrendben) egymás mellé
(után) írjuk. E műveletet konkatenációnak vagy összefűzésnek is szokás hívni.
Természetesen ez a szorzásfajta általában nem kommutatív, azaz általában nem teljesül
minden p, q ∈ V * párra a pq = qp egyenlőség. Amennyiben p = p 1 … p k ( ∈ V * k = 1,2,… )
továbbá p 1 = p 2 = … = p k = q úgy alkalmazni fogjuk a p= q k jelölést, s ezesetben p- t
a q szó k-adik hatványának is nevezzük. Tehát a q szó k- adik hatványán az önmagával
vett k- szoros konkatenációját értjük. Továbbá megállapodunk abban, hogy minden
szó nulladik hatványa az üresszó (jelekben: ∀ q ∈ V * :q 0= λ.) Röviden úgy is mondhatjuk,
hogy egy szó k- adik hatványa nem más mint k- szoros ismétlődése (beleértve a nullaszoros
ismétlődést is).
2.4. példa - Szavak konkatenációja
Legyen ismét V = { ab}. Ekkor az abba V *- beli szó baba V *- beli szóval való
szorzata abbababa lesz (ami persze nem egyezik meg a babaabba szóval. A szorzás
tehát valóban, általában nem kommutatív). Igaz továbbá (definíció szerint),
hogy baba=(ba)2. ★

2.5. példa - Szavak konkatenációja egyelemű ábécé felett


Legyen most V = { a}, azaz álljon ábécénk egyetlen betűből. Mutassuk meg hogy ebben
a kivételes esetben a szorzás kommutatív. ★

A V *-ban ezen szorzás műveletre nézve a λ üresszó egységelem lesz, hisz minden p ∈ V *-
ra pλ = λp = p (annak megfelelően, hogy ha egy szó - beleértve az üresszót is - elé vagy mögé
nem írunk egyetlen betűt sem, azaz az üresszót "írjuk", akkor marad az eredeti szó).
Nyilvánvaló továbbá, hogy minden p,q ∈ V * párra | pq | = | p | + | q | .

Az előbbiekben definiált szorzás műveletével ellátott V * halmazt a V által generált


egységelemes szabad félcsoportnak, más néven V feletti egységelemes szabad félcsoportnak,
vagy röviden, V feletti szabad monoidnak hívjuk, s rá ugyancsak a V * jelölést használjuk.
Hasonlóan, a szorzás műveletével ellátott V + halmazt a V által generált szabad félcsoportnak,
más néven V feletti szabad félcsoportnak hívjuk, s rá ugyancsak a V + jelölést használjuk.
(V * tehát egyidejűleg jelöli az összes V feletti szavak halmazát és a V feletti szabad monoidot,
míg V + az összes V feletti nem üres szavak halmazát és a V feletti szabad félcsoportot.
Amennyiben tehát algebrai struktúraként tekintünk a V *-ra ( V +-ra), akkor a konkatenáció az
alapértelmezett művelet az elemei közt.)

Nyilvánvaló, hogy V + zárt marad a szorzás, azaz az összefűzes műveletére, hisz két nem
üresszót egymás után írva, azaz összefűzve, nem kaphatunk üresszót.

Legyen p és q tetszőleges két szó V *-ban. Azt mondjuk, hogy p kezdőszelete (prefixe) q-nak,
ha van olyan r ∈ V *, hogy q = pr. Pontosabban, ha q = pr mellett | p | = k akkor a p szót
a q szó khosszúságú kezdőszeletének nevezzük (ekkor, ha 0 < k < | q | , akkor p a q valódi
kezdőszelete). Hasonlóan, ha van olyan s ∈ V * szó, hogy q = sp, akkor azt mondjuk
hogy p a q-nak végződése (szuffixe) és ha |p| = m akkor m hosszúságú végződésről
beszélünk (ekkor ha p ≠ λ és p ≠ q akkor p valódi végződése a q-nak). Végül, a p ∈ V * szót
a q ∈ V * szó részszavának mondjuk, ha van olyan r, s ∈ V *, hogy q = rps.
Amennyiben p ≠ qp ≠ λ, valódi rész-szóról beszélünk. Tehát, egy szó önmagától különböző
nemüres kezdőszeleteit, végződéseit, illetve részszavait valódi kezdőszeletnek, valódi
végződésnek, illetve valódi részszónak hívjuk.
Egy p ∈ V + szó utolsó betűjére használni fogjuk a ≫ p jelölést.

2.6. példa - Szó részszava


Legyen V = { a, b}, p = abbababa. Ekkor p-nek 4 hosszúságú kezdő szelete abba, 4
hosszúságú végződése pedig baba lesz. Ugyanekkor p-nek például a bab szó (valódi)
rész-szava. Végül, ≫ p = a (abbababa utolsó betűje). ★

Két nyelv között akkor értelmezhetünk valamilyen műveletet, ha ugyanazon V ábécé felett
vannak értelmezve. (Ha ez nem teljesül, akkor először a nyelveket kell átdefiniálni formálisan
egy közös ábécé, pl. a két ábécé uniója felettire.)

Formális nyelvekre, mint szóhalmazokra közvetlenül értelmezhetők a halmazelméleti


alapműveletek:
unió (egyesítés, összeadás): L 1 ∪L 2 ={p|p∈L 1 vagy p ∈ L 2},

metszet: L 1 ∩L 2 ={p|p∈L 1 és p ∈ L 2},

különbség: L 1 ∖L 2 ={p|p∈L 1 és p ∉ L 2},

komplementer: =V * ∖ L 1.

Amint látjuk a komplementerképzésnél nagyon fontos az alaphalmaz, vagyis az ábécé ismerete,


hiszen pl. az L = { ab, aa, ba, bb } nyelv komplementere telejsen más, ha L- et a V = { a, b},
vagy a V ' = { a, b, c } ábécé felettinek definiáltuk. Ennek megfelelően a továbbiakban is
mindig úgy tekintünk egy nyelvre, mint egy adott V ábécé feletti nyelvre (akkor is ha ezt a
tömörség kedvéért nem írjuk oda).

A nyelveken a halmazműveleteken kívül a konkatenációt és az iterációt alapműveleteknek


tekintjük: Két nyelv konkatenációján a következő nyelvet értjük: L 1 ⋅ L 2 =
{ pq | p ∈ L 1 és q ∈ L 2}. Szokásos módon a konkatenáció jelét sokszor elhagyjuk, pl. L 1 L 2.
Legyen i = 1, 2, …. Ekkor egy L nyelv i-edik hatványán a nyelv i-szer egymás utáni,
önmagával való konkatenációját értjük. Jelölés: L i . Megállapodás szerint L 0
= { λ}.

A konkatenáció lezárását (Kleene iterációt) (ejtsd: klíni) az összefüggéssel


értelmezzük.

Az előző Kleene-csillag művelet mellett szokás még az iteráció, a Kleene-plusz használata


is.

A kétféle iteráció között az L 0 = { λ } jelenthet különbéget: A definiáló egyenlőségek alaján


belátható, hogy L + = L * pontosan akkor, ha λ ∈ L. Továbbá L + = L * ∖ { λ } pontosan akkor,
ha λ ∉ L.

Mejegyzés. Mivel a V ábécé mint halmaz egyben tekinthető egy formális nyelvnek is, a
korábbi V * és a V + jelölés éppen egybeesik a most definiált iteráció műveletek V-re való
alkalmazásának eredményével.

Legyen V ábécé rögzített, ekkor igazak az alábbi összefüggések


(tetszőleges L 1, L 2, L 3 ⊆ V * esetén):

 L 1 ∪L 2 =L 2 ∪L 1 (az unió kommutatív),

 (L 1 ∪L 2 )∪L 3 = L 1∪( L 2 ∪L 3 ) (az unió asszociatív),

 L 1 ∪L 1 =L 1 (az unió idempotens),

 L 1 ∩L 2 =L 2 ∩L 1 (a metszet kommutatív),

 (L 1 ∩L 2 )∩L 3 =L 1 ∩(L 2 ∩L 3 ) (a metszet asszociatív),

 L 1 ∩L 1 =L 1 (a metszet idempotens),
 (L 1 ⋅L 2 )⋅L 3 =L 1 ⋅(L 2 ⋅L 3 ) (a konkatenáció asszociatív),

 =L 1 (a komplementerképzés involúciós tulajdonsága),


 L 1 ⋅∅=∅⋅L 1 = ∅,

 L 1 ⋅ { λ } = { λ} ⋅ L 1 =L 1 (a konkatenáció egységeleme a { λ } nyelv),

 L 1∪∅ = ∅ ∪L 1 =L 1 (az unió egységeleme az ∅ nyelv),

 L 1 ∩V * =V * ∩L 1 =L 1 (a metszet egységeleme a V * univerzális nyelv),


 L 1
+ =L 1 ⋅L 1
* =L 1
* ⋅ L 1,

 L 1
* =L 1
+ ∪{ λ},

 (L 1
* ) * =L 1
* (az iteráció idempotens tulajdonsága),

 (L 1
+ ) + =L 1
+ (a + művelet idempotens tulajdonsága),

 (L 1
* ) + =(L 1
+ ) * =L 1
*.

Az unió, metszet, illetve konkatenáció asszociativitása miatt általában nem is szoktuk


zárójelekkel jelezni a műveleti sorrendjüket, így egyszerűen pl. L 1 ∪ L 2 ∪ L 3 alakot
használunk.

További zárójeleket hagyhatunk el megtartva az egyértelmű jelentést a követekező precedencia


reláció bevezetésével. Az egyargumentumú műveletek (komplementer, (Kleene-)csillag és
(Kleene-)plusz) precedenciája nagyobb, mint a kétargumentumúaké. A szorzás (konkatenáció)
precedenciája nagyobb, mint az unió és metszet műveleteké.
Legyen adva két véges ábécé, V 1 és V 2. AV 1
*-nak aV 2
*-ba

való h leképezését homomorfizmusnak nevezzük, ha:


 injektív, vagyis az értelmezési tartomány minden egyes eleméhez az
értékkészletnek pontosan egy eleme van hozzárendelve,
 és művelettartó, azaz h ( p q ) = h ( p ) h ( q ), tetszőleges p, q ∈ V 1
*-ra.

A fenti két tulajdonságból rögtön következik, hogy az üresszó képe az üresszó lesz,
ugyanis h ( p ) = h ( p λ ) = h ( p ) h ( λ ) minden p ∈ V 1 * szóra.

Egy homomorf leképezést λ- mentesnek nevezünk, ha h ( p ) = λ esetén p = λ.


2.7. példa - Nyelvműveletek - Gyakorló feladat
Legyen V = { a, b, c}, L 1 = { a, c, bb, aba}, L 2 =
{ a, abba, baba, caba, abbaba, babaabba}. Adjuk meg
az L 1 ∪ L 2, L 1 ∩ L 2, L 1 L 2, L 1 L 1 halmazokat. ★

2.8. példa - Nyelvek konkatenációja


Adjunk példát olyan L 1 és L 2 V ábécé feletti nyelvekre, amelyekre L 1 L 2 =L 2 L 1.
Keressünk nem triviális megoldást is.

Triviális megoldások:
 L 1 = ∅, L 1 = { λ } vagy a szimmetria miatt L 2-re teljesül az előző esetek
egyike.

 L 1 = L 2.

 V ábécé egyelemű.

 Az egyik nyelvben benne szerepel λ, a másik nyelv pedig a V * (univerzális


nyelv).

Egy nem triviális megoldás:

legyen V = { a, b}, L 1 = { λ, a}, L 2 pedig legyen azon V feletti szavak halmaza, amelyekben
pontosan egy b szerepel. Ekkor L 1 L 2 = L 2 L 1 = L 2. ★

2.9. példa - Nyelvek számossága - Gyakorló feladat


Adottak L 1 és L 2 véges nyelvek V ábécé felett, hogy | L 1 | = n, | L 2 | = m. Mennyi lehet
a számossága az L 1 ∪ L 2, L 1 ∩ L 2, L 1 L 2 nyelvműveletekkel előálló nyelveknek? Adjunk
meg alsó felső korlátot, és példákat. ★

2.10. példa - Formális nyelvek, nyelvműveletek 1.feladat


Igazoljuk vagy cáfoljuk, hogy (L 1 ∪L 2 )* = L 1
*
∪L 2
*
!
Megoldás: Az állítás hamis. Vegyük a következő ellenpéldát: Legyen L 1 = { a} és L 2 =
{ b}, ekkor ( L 1 ∪ L 2 )* az akárhány a-t és b-t tartalmazó szavak halmaza,
még L 1 *∪ L 2 * a csupa a-t és csupa b-t tartalmazó szavak nyelve lesz. ★

2.11. példa - Formális nyelvek, nyelvműveletek 2.feladat


Mivel egyenlő L 2, ha
L={a n
b n
|n >0 } ?
Megoldás: L 2
={a n
b n
a m
b m
| n, m > 0}. ★

You might also like