Phép ghép hai ngôn ngữ chính quy
Cho hai ngôn ngữ chính quy L1, L2. Ta sẽ chứng minh phép ghép (nối) của chúng L = L1 ∘ L2 cũng là ngôn ngữ chính quy.
Phép ghép là gì
Ghép hai xâu “010” và “1111” ta được xâu “0101111”. Ghép hai ngôn ngữ, ta được một ngôn ngữ mới, xây dựng bằng cách ghép mỗi xâu của ngôn ngữ thứ nhất với mỗi xâu của ngôn ngữ thứ hai. Phép ghép hai xâu và hai ngôn ngữ được kí hiệu bằng dấu tròn nhỏ: ∘. Khi đó phép ghép hai ngôn ngữ L1 và L2 được định nghĩa như sau:
Ý tưởng chứng minh
Cho hai ngôn ngữ chính quy L1, L2 và hai ôtômat đoán nhận các ngôn ngữ đó:
Ta xây dựng ôtômat không đơn định A = ⟨Q, Σ, δ, q, F⟩ “chứa bên trong” cả hai ôtômat A1 và A2. Ý tưởng cơ bản là ta bắt đầu đoán nhận xâu bằng ôtômat A1, và khi ôtômat A1 đến một trạng thái kết thúc, ta thử đoán nhận phần còn lại của xâu bằng ôtômat A2. Nếu ôtômat này cũng đoán nhận phần đó thì ôtômat A đoán nhận xâu.
Ví dụ
Cho ôtômat A1 đoán nhận các xâu khác rỗng chỉ gồm chữ số 0 và các xâu gồm một chữ số 1 theo sau là toàn chữ số 0 (1, 10, 100, …):
và ôtômat A2 đoán nhận các xâu kết thúc bằng 01:
Ta nối hai ôtômat bằng cách thêm các phép chuyển epsilon từ mọi trạng thái kết thúc của ôtômat A1 đến trạng thái bắt đầu của ôtômat A2, rồi biến các trạng thái kết thúc của A1 thành trạng thái thông thường. Trạng thái bắt đầu của toàn bộ ôtômat mới là trạng thái bắt đầu của ôtômat A1:
Ôtômat này hoạt động thế nào? Ta bắt đầu mô phỏng hoạt động của ôtômat A1. Nếu chuyển sang trạng thái trước đây là trạng thái kết thúc q1 hoặc q2, ta biết rằng ôtômat A1 đoán nhận một phần của xâu. Để toàn bộ xâu thuộc ngôn ngữ L1 ∘ L2, phần còn lại của xâu phải được ôtômat thứ hai A2 đoán nhận – vì vậy từ mọi trạng thái trước đây là trạng thái kết thúc đều có phép chuyển epsilon đến trạng thái vốn là trạng thái bắt đầu của ôtômat A2.
Ví dụ, xét xâu 0001. Xâu này thuộc phép ghép hai ngôn ngữ, vì nó có thể nhận được bằng cách ghép các xâu 00 ∘ 01. Nhưng nó cũng có thể nhận được bằng cách ghép các xâu 0 ∘ 001. Trong ôtômat của ta, có thể mô phỏng cả hai cách. Ôtômat có thể đi theo đường sau:
Theo đường này, ôtômat trước hết “đoán nhận” phần xâu 00, sau đó là phần xâu 01. Hoặc ôtômat có thể đi theo đường sau:
khi đó ôtômat trước hết “đoán nhận” phần xâu 0, rồi đến phần xâu 001. Tất nhiên, trong cả hai trường hợp ta đều đến trạng thái kết thúc p2.
Cách làm hình thức
Nhắc lại: cho hai ngôn ngữ chính quy L1, L2 và hai ôtômat đoán nhận các ngôn ngữ đó:
Ta xây dựng ôtômat không đơn định A = ⟨Q, Σ, δ, q, F⟩ với:
- Q = Q1 ∪ Q2 (đồng thời giả sử Q1 ∩ Q2 = ∅)
- Σ= Σ1 ∪ Σ2
- q = q0
- F = F2
Hàm chuyển trạng thái δ được xây dựng theo từng trường hợp:
Tài liệu tham khảo
Mục lục: Tính đóng của ngôn ngữ chính quy, Hợp của hai ngôn ngữ chính quy, Giao của hai ngôn ngữ chính quy, Hiệu của hai ngôn ngữ chính quy, Phần bù của ngôn ngữ chính quy, Phép ghép hai ngôn ngữ chính quy, Bao đóng của ngôn ngữ chính quy