✖

Konkatenering av reguljära språk

Låt L1, L2 vara två reguljära språk. Vi bevisar att deras konkatenering L = L1 ∘ L2 också är ett reguljärt språk.

Vad är konkatenering

När vi konkatenerar de två orden ”010” och ”1111” får vi ordet ”0101111”. Konkateneringen av två språk är ett nytt språk som vi konstruerar genom att konkatenera varje ord från det ena språket med varje ord från det andra. Konkateneringen av två ord och av två språk betecknar vi med ringoperatorn: ∘. Då kan vi definiera konkateneringen av språken L1 och L2 så här:

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

Idén bakom beviset

Vi har två reguljära språk L1, L2 och två automater som accepterar språken:

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

Vi konstruerar en icke-deterministisk automat A = ⟨Q, Σ, δ, q, F⟩ som ”innehåller” båda automaterna A1 och A2. Grundidén är att vi börjar acceptera ordet med automaten A1, och när automaten A1 kommer till ett sluttillstånd försöker vi acceptera resten av ordet med automaten A2. Om också den automaten accepterar resten av ordet, så accepterar automaten A ordet.

Exempel

Låt oss ta den här automaten A1, som accepterar icke-tomma ord som består av bara nollor och ord som består av en etta följd av bara nollor (1, 10, 100, …):

och den här automaten A2, som accepterar ord som slutar på 01:

Vi sammanfogar automaterna genom att från alla sluttillstånd i automaten A1 lägga till epsilonövergångar till starttillståndet i automaten A2 och sedan göra sluttillstånden i A1 till vanliga tillstånd. Starttillståndet i hela den nya automaten blir starttillståndet i automaten A1:

Hur fungerar automaten? Vi börjar simulera automaten A1. Om vi går över till det tidigare sluttillståndet q1 eller q2 vet vi att automaten A1 accepterar en del av ordet. För att hela ordet ska tillhöra språket L1 ∘ L2 måste resten av ordet accepteras av den andra automaten A2 – därför går det epsilonövergångar från alla tidigare sluttillstånd till det ursprungliga starttillståndet i automaten A2.

Låt oss ta ordet 0001 som exempel. Det tillhör konkateneringen av båda språken, eftersom ordet kan bildas genom att konkatenera orden 00 ∘ 01. Men det kan lika gärna bildas genom att konkatenera orden 0 ∘ 001. I vår automat kan vi simulera båda sätten. Automaten kan gå den här vägen:

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

Längs den här vägen skulle automaten först ”acceptera” delen 00 av ordet och sedan delen 01. Eller så kan den gå den här vägen:

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

och automaten skulle då först ”acceptera” delen 0 av ordet och sedan delen 001. I båda fallen kommer vi naturligtvis fram till sluttillståndet p2.

Formell metod

Ännu en gång: Vi har två reguljära språk L1, L2 och två automater som accepterar språken:

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

Vi konstruerar en icke-deterministisk automat A = ⟨Q, Σ, δ, q, F⟩ för vilken det gäller att:

  • Q = Q1 ∪ Q2 (vi förutsätter också att Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

Övergångsfunktionen δ bygger vi upp steg för steg:

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

Källor

Kapitel: Slutenhet hos reguljära språk, Union av reguljära språk, Snitt av reguljära språk, Differens av reguljära språk, Komplement till ett reguljärt språk, Konkatenering av reguljära språk, Kleenestjärnan av ett reguljärt språk