✖

Säännöllisten kielten konkatenaatio

Olkoon meillä kaksi säännöllistä kieltä L1, L2. Todistamme, että niiden konkatenaatio eli liittäminen L = L1 ∘ L2 on myös säännöllinen kieli.

Mikä konkatenaatio on

Kahden sanan ”010” ja ”1111” liittämisestä syntyy sana ”0101111”. Kielten liittämisestä syntyy uusi kieli, jonka rakennamme liittämällä jokaisen yhden kielen sanan jokaiseen toisen kielen sanaan. Kahden sanan ja kahden kielen konkatenaatiota merkitsemme rengasoperaattorilla: ∘. Silloin voimme määritellä kielten L1 ja L2 konkatenaation näin:

L1∘L2={a∘b|a∈L1,b∈L2}

Todistuksen idea

Meillä on kaksi säännöllistä kieltä L1, L2 ja kaksi automaattia, jotka hyväksyvät nämä kielet:

A1=(Q1,Σ1,δ1,q0,F1)A2=(Q2,Σ2,δ2,p0,F2)

Rakennamme epädeterministisen automaatin A = (Q, Σ, δ, q, F), joka ”sisältää itsessään” molemmat automaatit A1 ja A2. Perusidea on, että aloitamme sanan hyväksymisen automaatilla A1, ja kun automaatti A1 päätyy lopputilaan, yritämme hyväksyä sanan jäljellä olevan osan vielä automaatilla A2. Jos tämäkin automaatti hyväksyy osan sanasta, automaatti A hyväksyy sanan.

Esimerkki

Olkoon meillä tämä automaatti A1, joka hyväksyy epätyhjät sanat, jotka koostuvat pelkistä nollista, sekä sanat, jotka koostuvat ykkösestä ja sitä seuraavista pelkistä nollista (1, 10, 100, …):

ja olkoon meillä tämä automaatti A2, joka hyväksyy sanat, jotka päättyvät merkkijonoon 01:

Yhdistämme automaatit niin, että lisäämme kaikista automaatin A1 lopputiloista epsilon-siirtymät automaatin A2 alkutilaan ja teemme sitten automaatin A1 lopputiloista tavallisia tiloja. Koko uuden automaatin alkutila on automaatin A1 alkutila:

Miten automaatti toimii? Aloitamme simuloimalla automaatin A1 toimintaa. Jos siirrymme entiseen lopputilaan q1 tai q2, tiedämme, että automaatti A1 hyväksyy tämän sanan osan. Jotta koko sana kuuluisi kieleen L1 ∘ L2, toisen automaatin A2 täytyy vielä hyväksyä sanan jäljellä oleva osa — siksi kaikista entisistä lopputiloista johtavat epsilon-siirtymät automaatin A2 alkuperäiseen alkutilaan.

Otetaan esimerkiksi sana 0001. Se kuuluu molempien kielten konkatenaatioon, koska sana voi syntyä liittämällä sanat 00 ∘ 01. Mutta yhtä hyvin se voi syntyä liittämällä sanat 0 ∘ 001. Automaatissamme voimme simuloida molemmat tavat. Automaatti voi edetä tätä reittiä:

q0→0q1→0q1→εp0→0p1→1p2

Tätä reittiä automaatti ”hyväksyisi” ensin sanan osan 00 ja sitten sanan osan 01. Tai se voi edetä tätä reittiä:

q0→0q1→εp0→0p0→0p1→1p2

jolloin automaatti ”hyväksyisi” ensin sanan osan 0 ja sitten sanan osan 001. Molemmissa tapauksissa päädymme tietenkin lopputilaan p2.

Täsmällinen menetelmä

Vielä kerran: meillä on kaksi säännöllistä kieltä L1, L2 ja kaksi automaattia, jotka hyväksyvät nämä kielet:

A1=(Q1,Σ1,δ1,q0,F1)A2=(Q2,Σ2,δ2,p0,F2)

Rakennamme epädeterministisen automaatin A = (Q, Σ, δ, q, F), jolle pätee:

  • Q = Q1 ∪ Q2 (oletamme samalla, että Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

Siirtymäfunktion δ rakennamme vaiheittain:

δ(q,a)={δ1(q,a)josq∈Q1∧q∉F1δ1(q,a)josq∈F1∧a≠εδ1(q,a)∪{p0}josq∈F1∧a=εδ2(q,a)josq∈Q2

Lähteet

Luvut: Säännöllisten kielten sulkeumaominaisuudet, Säännöllisten kielten yhdiste, Säännöllisten kielten leikkaus, Säännöllisten kielten erotus, Säännöllisen kielen komplementti, Säännöllisten kielten konkatenaatio, Säännöllisen kielen Kleenen tähti