Hợp của hai ngôn ngữ chính quy
Cho hai ngôn ngữ chính quy L1, L2. Ta sẽ chứng minh hợp của chúng L = L1 ∪ L2 cũng là ngôn ngữ chính quy.
Cách làm bằng ôtômat đơn định
Ý tưởng
Cho hai ngôn ngữ chính quy L1 và L2, ta muốn chứng minh hợp L1 ∪ L2 của chúng cũng là ngôn ngữ chính quy. Vì L1 và L2 là ngôn ngữ chính quy nên tồn tại các ôtômat hữu hạn A1 và A2 đoán nhận các ngôn ngữ L1 và L2, tức là L(A1) = L1 và L(A2) = L2. Ta sẽ xây dựng ôtômat hữu hạn A đoán nhận ngôn ngữ L1 ∪ L2, qua đó chứng minh ngôn ngữ L1 ∪ L2 là chính quy.
Làm thế nào? Ta có sẵn các ôtômat hữu hạn A1 và A2 đoán nhận từng ngôn ngữ. Có thể nói xâu w thuộc ngôn ngữ L1 ∪ L2 khi và chỉ khi ít nhất một trong hai ôtômat A1, A2 đoán nhận xâu đó.
Ôtômat A có thể hoạt động như sau: với đầu vào w, nó mô phỏng quá trình tính toán của ôtômat A1 trên đầu vào w. Nếu A1 đoán nhận xâu w thì A cũng đoán nhận xâu w. Nếu A1 từ chối xâu w, thì A thử mô phỏng tiếp quá trình tính toán của A2 trên đầu vào w. Nếu A2 đoán nhận xâu w thì A cũng đoán nhận xâu w. Trái lại, ôtômat này từ chối.
Chỉ còn phải hình thức hoá: ôtômat A “mô phỏng” quá trình tính toán của một ôtômat khác nghĩa là gì.
Hình thức hoá
Cho hai ngôn ngữ chính quy L1 và L2 lần lượt do các ôtômat hữu hạn sau đoán nhận
Ta xây dựng ôtômat hữu hạn A = ⟨Q, Σ, δ, q, F⟩ đoán nhận ngôn ngữ L = L1 ∪ L2, dựa trên ý tưởng mô phỏng hai ôtômat A1, A2. Giả sử đầu vào là xâu w = w1w2… wn và ta mô phỏng đồng thời hoạt động của các ôtômat A1 và A2 trên xâu w. Cấu hình ban đầu của ôtômat A1 là ⟨q1, w1w2… wn⟩, cấu hình ban đầu của A2 là ⟨q2, w1w2… wn⟩. Thực hiện một bước tính toán ở mỗi ôtômat, ta được các cấu hình ⟨δ1(q1, w1), w2… wn⟩ và ⟨δ2(q2, w1), w2… wn⟩.
Ta thấy hai cấu hình này chỉ khác nhau ở thành phần thứ nhất, còn thành phần thứ hai – phần xâu chưa đọc – luôn giống nhau. Vì vậy, khi mô phỏng, ta không cần lưu hai cấu hình của hai ôtômat mà chỉ cần một cấu hình dạng ⟨⟨qi, qj⟩, wl… wn⟩, trong đó qi ∈ Q1 và qj ∈ Q2. Nói cách khác, ôtômat A đang xây dựng có cấu hình ban đầu ⟨⟨q1, q2⟩, w⟩. Thành phần thứ nhất của cặp ⟨q1, q2⟩ là trạng thái hiện tại của ôtômat A1, thành phần thứ hai là trạng thái hiện tại của ôtômat A2.
Như vậy, có thể nói tập trạng thái của ôtômat A đang xây dựng là Q = Q1 × Q2, tức là tích Descartes của các tập trạng thái của hai ôtômat ban đầu. Ý tưởng tiếp theo là ôtômat A có trạng thái bắt đầu ⟨q1, q2⟩, và nếu khi đọc kí hiệu w1, ôtômat A1 chuyển sang trạng thái qi, còn ôtômat A2 với cùng kí hiệu w1 chuyển sang trạng thái qj, thì với kí hiệu w1 ôtômat A chuyển sang trạng thái ⟨qi, qj⟩.
Hàm chuyển trạng thái δ được viết như sau (ở đây giả sử hai ôtômat đang ở các trạng thái qi và qj):
Chỉ còn vài chi tiết nhỏ. Bảng chữ cái là Σ= Σ1 ∪ Σ2. Trạng thái bắt đầu là q = ⟨q1, q2⟩. Các trạng thái kết thúc là mọi cặp ⟨qi, qj⟩ sao cho qi ∈ F1 hoặc qj ∈ F2.
Minh hoạ
Cho hai ôtômat. Ôtômat thứ nhất A1 đoán nhận mọi xâu (kể cả xâu rỗng) mà trong đó các chữ số 0 và 1 xen kẽ nhau, tức là các xâu dạng 01, 0101, 010101, …
Ôtômat thứ hai A2 đoán nhận các xâu chứa ít nhất một chữ số 0:
Hợp của hai ngôn ngữ này gồm các xâu hoặc chứa chữ số 0, hoặc có dạng 01, 0101, … Bây giờ ta xây dựng ôtômat hữu hạn A = ⟨Q, Σ, δ, q, F⟩ đoán nhận đúng ngôn ngữ hợp này. Trước hết, ta xem các trạng thái của ôtômat mới A. Đó là tích Descartes của tập trạng thái của ôtômat thứ nhất và ôtômat thứ hai:
Đó là sáu trạng thái của ôtômat A đoán nhận ngôn ngữ hợp L(A1) ∪ L(A2). Trên đồ thị chuyển trạng thái, chúng như sau:
Đừng lo khi thấy các trạng thái được tạo từ cặp trạng thái – điều đó chỉ giúp dễ theo dõi những gì diễn ra trong ôtômat. Các trạng thái hoàn toàn có thể đặt tên thông thường là q0, …, q5. Các trạng thái kết thúc là những trạng thái chứa q0 hoặc p1, là các trạng thái kết thúc của hai ôtômat ban đầu. Trạng thái bắt đầu là ⟨q0, p0⟩.
Bây giờ cần tìm mọi phép chuyển. Ta lập bảng sau:
Ta lần lượt điền vào bảng. Trước hết, ta xác định phép chuyển từ trạng thái ⟨q0, p0⟩ với đầu vào 0 đi đến đâu. Ở ôtômat A1, phép chuyển từ trạng thái q0 với đầu vào 0 đi đến trạng thái q1. Ở ôtômat A2, phép chuyển từ p0 với chữ số 0 đi đến trạng thái p1. Vì vậy, ta ghi vào bảng ⟨q1, p1⟩:
Với đầu vào 1: ở ôtômat A1 ta có δ1(q0, 1) = q2, ở ôtômat A2 ta có δ2(p0, 1) = p0. Như vậy ta được trạng thái ⟨q2, p0⟩.
Điền nốt phần còn lại của bảng:
Dựa vào bảng này, ta chỉ cần vẽ nốt phần còn lại của đồ thị.
Ta có thể kiểm tra ôtômat hoạt động đúng. Thử đoán nhận xâu 0100. Ôtômat lần lượt đi qua các trạng thái
Vì ⟨q2, p1⟩ là trạng thái kết thúc nên ôtômat A đoán nhận xâu 0100. Điều gì xảy ra nếu ta thử đoán nhận xâu 0100 bằng các ôtômat A1 và A2? Ôtômat A1 lần lượt đi qua các trạng thái sau:
Ôtômat dừng ở trạng thái q2, không phải trạng thái kết thúc, nên ôtômat A1 không đoán nhận xâu này. Còn ôtômat A2?
Trạng thái p1 là trạng thái kết thúc, nên ôtômat A2 đoán nhận xâu 0100. Lưu ý rằng các ôtômat A1 và A2 dừng ở các trạng thái q2 và p1, phù hợp với việc ôtômat A dừng ở trạng thái ⟨q2, p1⟩.
Cách làm bằng ôtômat không đơn định
Ví dụ
Tính đóng của lớp ngôn ngữ chính quy đối với phép hợp cũng có thể chứng minh bằng cách xây dựng một ôtômat không đơn định; cách này đơn giản hơn nhiều.
Cho hai ngôn ngữ chính quy L1, L2, ta muốn chứng minh hợp của chúng L = L1 ∪ L2 cũng là ngôn ngữ chính quy. Vì L1, L2 là ngôn ngữ chính quy nên phải tồn tại các ôtômat A1, A2 đoán nhận các ngôn ngữ đó, tức là L(A1) = L1 và L(A2) = L2. Từ các ôtômat này, ta xây dựng ôtômat A đoán nhận ngôn ngữ L, tức là L(A) = L.
Giả sử các ôtômat hữu hạn A1 và A2 như sau:
và
Để xây dựng ôtômat đoán nhận hợp của hai ngôn ngữ, ta tạo một trạng thái bắt đầu mới và từ trạng thái này vẽ hai phép chuyển epsilon đến các trạng thái bắt đầu của hai ôtômat ban đầu. Chỉ có vậy. Ôtômat như sau:
Hình thức hoá
Cho hai ôtômat A1 = ⟨Q1, Σ, δ1, q1, F1⟩ và A2 = ⟨Q2, Σ, δ2, q2, F2⟩. Ta xây dựng ôtômat A = ⟨Q, Σ, δ, q0, F⟩ đoán nhận hợp của các ngôn ngữ do hai ôtômat trên đoán nhận, tức là L(A) = L(A1) ∪ L(A2). Trong đó:
- Q = Q1 ∪ Q2 ∪ {q0}
- F = F1 ∪ F2
Hàm chuyển trạng thái δ được định nghĩa như sau:
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