✖

Konkatenering av regulære språk

La oss ha to regulære språk L1, L2. Vi skal bevise at konkateneringen L = L1 ∘ L2 også er et regulært språk.

Hva konkatenering er

Ved å koble sammen ordene «010» og «1111» får vi ordet «0101111». Ved å konkatenere språk får vi et nytt språk, som vi konstruerer ved å koble hvert ord fra det ene språket sammen med hvert ord fra det andre språket. Konkatenering av to ord og av to språk betegner vi med en ring: ∘. Da kan vi definere konkateneringen av språkene L1 og L2 slik:

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

Ideen bak beviset

Vi har to regulære språk L1, L2 og to automater som aksepterer disse språkene:

A1=⟨Q1,Σ1,δ1,q0,F1⟩A2=⟨Q2,Σ2,δ2,p0,F2⟩

Vi konstruerer en ikke-deterministisk automat A = ⟨Q, Σ, δ, q, F⟩ som «inneholder» begge automatene A1 og A2. Grunnideen er at vi begynner å akseptere ordet med automaten A1, og når automaten A1 kommer til en sluttilstand, prøver vi å akseptere den resterende delen av ordet med automaten A2. Hvis også denne automaten aksepterer den delen av ordet, aksepterer automaten A ordet.

Eksempel

La oss ha denne automaten A1, som aksepterer ikke-tomme ord som bare består av nuller, og ord som består av en ener etterfulgt av bare nuller (1, 10, 100, …):

og videre denne automaten A2, som aksepterer ord som slutter på 01:

Vi setter automatene sammen ved å legge til epsilonoverganger fra alle sluttilstandene i automaten A1 til starttilstanden i automaten A2, og så gjør vi sluttilstandene i A1 til vanlige tilstander. Starttilstanden i hele den nye automaten blir starttilstanden i automaten A1:

Hvordan kommer automaten til å fungere? Vi begynner å simulere automaten A1. Hvis vi går over til den tidligere sluttilstanden q1 eller q2, vet vi at automaten A1 aksepterer en del av dette ordet. For at hele ordet skal være med i språket L1 ∘ L2, må den resterende delen av ordet aksepteres av den andre automaten A2 — derfor går det epsilonoverganger fra alle de tidligere sluttilstandene til den opprinnelige starttilstanden i automaten A2.

Som eksempel tar vi ordet 0001. Det tilhører konkateneringen av begge språkene, for ordet kan bli til ved å koble sammen ordene 00 ∘ 01. Men det kan like godt bli til ved å koble sammen ordene 0 ∘ 001. I automaten vår kan vi simulere begge framgangsmåtene. Automaten kan gå denne veien:

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

På denne veien ville automaten først «akseptert» delen 00 av ordet og deretter delen 01. Eller den kan gå denne veien:

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

og automaten ville da først «akseptert» delen 0 av ordet og så delen 001. I begge tilfeller kommer vi selvfølgelig til sluttilstanden p2.

Formell framgangsmåte

Enda en gang: Vi har to regulære språk L1, L2 og to automater som aksepterer disse språkene:

A1=⟨Q1,Σ1,δ1,q0,F1⟩A2=⟨Q2,Σ2,δ2,p0,F2⟩

Vi konstruerer en ikke-deterministisk automat A = ⟨Q, Σ, δ, q, F⟩ som oppfyller:

  • Q = Q1 ∪ Q2 (vi antar samtidig at Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

Overgangsfunksjonen δ bygger vi opp etter hvert:

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

Kilder

Kapitler: Lukkethet av regulære språk, Union av regulære språk, Snitt av regulære språk, Differanse av regulære språk, Komplementet til et regulært språk, Konkatenering av regulære språk, Kleene-stjernen til et regulært språk