✖

Конкатенация на регулярни езици

Нека имаме два регулярни езика L1, L2. Ще докажем, че тяхната конкатенация L = L1 ∘ L2 също е регулярен език.

Какво е конкатенация

Чрез конкатенация на двете думи „010“ и „1111“ се получава думата „0101111“. Чрез конкатенация на езици се получава нов език, който построяваме така, че всяка дума от единия език конкатенираме с всяка дума от другия език. Конкатенацията на две думи и на два езика ще означаваме с кръгче: ∘. Тогава можем да определим конкатенацията на езиците L1 и L2 така:

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

Идея на доказателството

Имаме два регулярни езика L1, L2 и два автомата, които приемат тези езици:

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

Построяваме недетерминиран автомат A = ⟨Q, Σ, δ, q, F⟩, който ще „съдържа в себе си“ двата автомата A1 и A2. Основната идея е да започнем да приемаме думата с автомата A1 и когато автоматът A1 стигне до крайно състояние, да опитаме да приемем останалата част от думата с автомата A2. Ако и този автомат приема тази част от думата, тогава автоматът A приема думата.

Пример

Нека имаме този автомат A1, който приема непразните думи, съставени само от нули, и думите, съставени от единица, след която следват само нули (1, 10, 100, …):

и нека имаме този автомат A2, който приема думите, които завършват на 01:

Свързваме автоматите така, че от всички крайни състояния на автомата A1 добавяме ε-преходи към началното състояние на автомата A2 и след това правим от крайните състояния на A1 обикновени състояния. Началното състояние на целия нов автомат ще е началното състояние на автомата A1:

Как ще работи автоматът? Започваме да симулираме работата на автомата A1. Ако преминем в бившето крайно състояние q1 или q2, знаем, че автоматът A1 приема част от тази дума. За да е цялата дума част от езика L1 ∘ L2, останалата част от думата трябва да бъде приета още от втория автомат A2 — затова от всички бивши крайни състояния водят ε-преходи към първоначалното начално състояние на автомата A2.

За пример да вземем думата 0001. Тя принадлежи на конкатенацията на двата езика, защото думата може да се получи чрез конкатенация на думите 00 ∘ 01. Но също така може да се получи чрез конкатенация на думите 0 ∘ 001. В нашия автомат можем да симулираме и двата начина. Автоматът може да върви по този път:

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

По този път автоматът първо би „приел“ частта от думата 00 и след това частта от думата 01. Или може да върви по този път:

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

и автоматът би „приел“ първо частта от думата 0 и после частта от думата 001. И в двата случая, разбира се, стигаме до крайното състояние p2.

Формален метод

Още веднъж: имаме два регулярни езика L1, L2 и два автомата, които приемат тези езици:

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

Построяваме недетерминиран автомат A = ⟨Q, Σ, δ, q, F⟩, за който е в сила:

  • Q = Q1 ∪ Q2 (като предполагаме, че Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

Преходната функция δ съставяме постепенно:

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

Източници

Глави: Затвореност на регулярните езици, Обединение на регулярни езици, Сечение на регулярни езици, Разлика на регулярни езици, Допълнение на регулярен език, Конкатенация на регулярни езици, Затваряне на регулярен език