✖

Concatenatie van reguliere talen

Neem twee reguliere talen L1, L2. We bewijzen dat hun concatenatie L = L1 ∘ L2 ook een reguliere taal is.

Wat is concatenatie

Door de woorden “010” en “1111” te concateneren ontstaat het woord “0101111”. Door talen te concateneren ontstaat een nieuwe taal, die we construeren door elk woord uit de ene taal te concateneren met elk woord uit de andere taal. De concatenatie van twee woorden en van twee talen noteren we met een rondje: ∘. Dan kunnen we de concatenatie van de talen L1 en L2 als volgt definiëren:

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

Idee van het bewijs

We hebben twee reguliere talen L1, L2 en twee automaten die deze talen accepteren:

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

We construeren een niet-deterministische automaat A = ⟨Q, Σ, δ, q, F⟩ die beide automaten A1 en A2 “in zich bevat”. Het basisidee is dat we beginnen het woord te accepteren met automaat A1 en dat, als automaat A1 in een eindtoestand komt, we het resterende deel van het woord nog proberen te accepteren met automaat A2. Als ook deze automaat dat deel van het woord accepteert, accepteert automaat A het woord.

Voorbeeld

Neem deze automaat A1, die niet-lege woorden accepteert die alleen uit nullen bestaan en woorden die uit een één bestaan, gevolgd door alleen nullen (1, 10, 100, …):

en neem deze automaat A2, die woorden accepteert die op 01 eindigen:

We koppelen de automaten door vanuit alle eindtoestanden van automaat A1 epsilonovergangen naar de begintoestand van automaat A2 toe te voegen en daarna van de eindtoestanden van A1 gewone toestanden te maken. De begintoestand van de hele nieuwe automaat is de begintoestand van automaat A1:

Hoe werkt de automaat? We beginnen de werking van automaat A1 te simuleren. Als we in een voormalige eindtoestand q1 of q2 komen, weten we dat automaat A1 een deel van dit woord accepteert. Om het hele woord tot de taal L1 ∘ L2 te laten behoren, moet het resterende deel van het woord nog door de tweede automaat A2 worden geaccepteerd — daarom lopen vanuit alle voormalige eindtoestanden epsilonovergangen naar de oorspronkelijke begintoestand van automaat A2.

Neem als voorbeeld het woord 0001. Dat behoort tot de concatenatie van beide talen, omdat het woord kan ontstaan door de woorden 00 ∘ 01 te concateneren. Maar het kan net zo goed ontstaan door de woorden 0 ∘ 001 te concateneren. In onze automaat kunnen we beide werkwijzen nabootsen. De automaat kan dit pad volgen:

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

Via dit pad zou de automaat eerst het deel 00 van het woord “accepteren” en daarna het deel 01. Of hij kan dit pad volgen:

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

en de automaat zou dan eerst het deel 0 van het woord “accepteren” en daarna het deel 001. In beide gevallen komen we natuurlijk in de eindtoestand p2.

Formele werkwijze

Nog een keer: we hebben twee reguliere talen L1, L2 en twee automaten die deze talen accepteren:

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

We construeren een niet-deterministische automaat A = ⟨Q, Σ, δ, q, F⟩ waarvoor geldt:

  • Q = Q1 ∪ Q2 (tegelijk nemen we aan dat Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

De overgangsfunctie δ bouwen we stap voor stap op:

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

Bronnen

Hoofdstukken: Afgeslotenheid van reguliere talen, Vereniging van reguliere talen, Doorsnede van reguliere talen, Verschil van reguliere talen, Complement van een reguliere taal, Concatenatie van reguliere talen, Afsluiting van een reguliere taal