Ngôn ngữ đoán nhận của PA

Một phần của tài liệu bài giảng automat (Trang 64)

2. Ôtômát đẩy xuống (Pushdown Automata PA)

2.3. Ngôn ngữ đoán nhận của PA

Cho automat đẩy xuống M=<, Q, , , q0, Z0, F>. M có thể đoán nhận 1 xâu vào * theo 2 cách:

Cách 1: Sử dụng trạng thái kết thúc (cách này giống như FA)

Xâu vào  được coi là đoán nhận được bởi M theo trạng thái kết thúc nếu như sau khi đọc xong  M ở vào 1 trong các trạng thái kết thúc thuộc F

Tập tất cả các xâu thuộc * đoán nhận được bởi M theo trạng thái kết thúc được gọi là ngôn ngữ đoán nhận bởi M theo trạng thái kết thúc và ký hiệu là T(M)

T(M)={*  (, q0, Z0) ├ (, p, ) với p  F, *}

Cách 2: Theo tình trạng rỗng của ngăn xếp

Xâu vào  được coi là đoán nhận được bởi M theo ngăn xếp rỗng nếu như sau khi đọc xong  ngăn xếp của M rỗng.

Tập tất cả các xâu thuộc * đoán nhận được bởi M theo ngăn xếp rỗng được gọi là ngôn ngữ đoán nhận bởi M theo ngăn xếp rỗng và ký hiệu là Null(M)

Null(M)={*  (, q0, Z0) ├ (, p, ) với p  Q}

Nhận xét: Trường hợp PA đoán nhận ngôn ngữ theo ngăn xếp rỗng thì không sử dụng đến tập trạng thái kết thúc, khi F có thể là tập con tùy ý của Q, để đơn giản trong trường hợp này ta cho F là  hoặc có thể bỏ qua trong định nghĩa PA, khi đó PA chỉ còn là bộ 6 thành phần.

Ví dụ: Cho ngôn ngữ phi ngữ cảnh L={0n1n  n  0}. Hãy xây dựng PA đoán nhận L theo trạng thái kết thúc.

Giải: Để nhận biết các từ của ngôn ngữ đã cho ta sử dụng ngăn xếp để ghi

nhớ các bit 0 đã đọc vào, sau khi đọc hết bit 0 chuyển sang đọc bit 1 thì cứ đọc được bit 1 nào sẽ lấy ra khỏi ngăn xếp một bit 0. Hàm chuyển cần xây dựng sao cho sau khi đã đọc hết bit 0 chuyển sang đọc bit 1 thì trong lúc đọc bit 1 không

- 65 -

được phép đọc bit 0 nữa. Ta sử dụng 3 trạng thái: ở trạng thái q0 thì chỉ được phép đọc bit 0, khi đọc bit 1 thì chuyển sang trạng thái q1, sau khi đọc xong xâu vào và đỉnh ngăn xếp là Z0 thì thực hiện 1 bước chuyển “nhắm mắt” sang trạng thái kết thúc q2. PA cần tìm như sau:

M=<, Q, , , q0, Z0, F>, với

Q={q0, q1, q2}; ={0,1}; ={Z0, 0}; F={q2}; Hàm chuyển  cho như sau:

(, q0, Z0)={(q2, Z0)} (0, q0, Z0)={(q0, 0Z0)} (0, q0, 0)={(q0, 00)} (1, q0, 0)={(q1, )} (1, q1, 0)={(q1, )} ( , q1, Z0)={(q2, Z0)}

Theo cách xây dựng thì sau khi đọc xong xâu vào   *, M chỉ có thể chuyển sang được trạng thái q2 khi và chỉ khi  có dạng 0n1n, suy ra T(M)=L.

Nếu trong M ở trên ta bổ sung thêm công thức cho hàm chuyển  để làm cho ngăn xếp rỗng khi M đã ở trạng thái q2 để được M’, tức là thêm công thức:

(, q2, Z0)={(q2, )}

thì sẽ được M’ đoán nhận ngôn ngữ L đã cho theo ngăn xếp rỗng, hay là Null(M’)=L.

Vấn đề đặt ra là 2 lớp ngôn ngữ đoán nhận được bởi PA theo 2 cách khác nhau có trùng nhau hay không? Câu trả lời là khẳng định, được cho bởi định lý sau:

Định lý:

Lớp ngôn ngữ đoán nhận bởi tất cả các PA theo trạng thái kết thúc trùng với lớp ngôn ngữ đoán nhận bởi tất cả các PA theo ngăn xếp rỗng.

Chứng minh: Cần phải chứng minh 2 ý

a) Với mỗi PA M đoán nhận ngôn ngữ theo trạng thái kết thúc tồn tại PA N đoán nhận ngôn ngữ theo ngăn xếp rỗng sao cho T(M)=Null(N).

- 66 -

b) Với mỗi PA N đoán nhận ngôn ngữ theo ngăn xếp rỗng tồn tại PA M đoán nhận ngôn ngữ theo trạng thái kết thúc sao cho T(M)=Null(N).

Chứng minh a): Giả sử M=<, Q, , , q0, Z0, F> đoán nhận ngôn ngữ theo trạng thái kết thúc. Ta xây dựng PA đoán nhận ngôn ngữ theo ngăn xếp rỗng N dựa theo M như sau: N=<, Q’, ’, ’, p0, Y0, > như sau:

Q’=Q  {p0, p1} với điều kiện p0 Q, p1  Q

’= {Y0} với điều kiện Y0

Hàm chuyển ’ của N thực hiện dựa theo hàm chuyển  của M như sau:

’(, p0, Y0)={(q0, Y0Z0)} ’(a, q, X)=(a, q, X)  a ,  q  Q,  X  ’(, q, X)=           X F, q nÕu X F, q nÕu )} ε , {(p X) q, δ(ε, X) q, δ(ε, 1 ’(, q, Y0)={(p1, )} nếu q  F ’(, p1, X)={(p1, )} nếu X  {Y0} Với cách xây dựng N như trên thì Null(N)=T(M).

Chứng minh b): Giả sử N=<, Q, , , q0, Z0, > đoán nhận ngôn ngữ theo ngăn xếp rỗng. Ta xây dựng PA đoán nhận ngôn ngữ theo trạng thái kết thúc M dựa theo N như sau: M=<, Q’, ’, ’, p0, Y0, F> như sau:

Q’=Q  {p0, p1} với điều kiện p0 Q, p1  Q

’= {Y0} với điều kiện Y0

F={p1}

Hàm chuyển ’ của N thực hiện dựa theo hàm chuyển  của M như sau:

’(, p0, Y0)={(q0, Z0Y0)}

’(a, q, X)=(a, q, X)  a   {},  q  Q,  X  ’(, q, Y0)={(p1, )}  q  Q

- 67 -

Nhận xét: Vì hai cách đoán nhận ngôn ngữ của PA tương đương với nhau, nên khi xây dựng PA nên chọn cách đoán nhận nào đơn giản hơn tùy từng trường hợp cụ thể.

Một phần của tài liệu bài giảng automat (Trang 64)

Tải bản đầy đủ (PDF)

(91 trang)