Chương 6: Automata đẩy xuống (Push Down Automata) Nội dung: • Khái niệm PDA • PDA đơn định khơng đơn định • PDA chấp nhận chuỗi Stack rỗng PDA chấp nhận chuỗi trạng thái kết thúc • Sự tương đương PDA CFL PDA Ví dụ: xét L = {wcwR | w (0 + 1)*} sinh từ CFG S → 0S0 | 1S1 | c Ta xây dựng PDA sau: • Bộ điều khiển có trạng thái q1 q2 • Stack có ký hiệu: xanh (B), vàng (Y) đỏ (R) • Quy tắc thao tác automata: PDA Các khái niệm: • Phân loại PDA: đơn định (DPDA) khơng đơn định (NPDA) • Phép chuyển: có kiểu ✔ Phụ thuộc ký hiệu nhập: với trạng thái, ký hiệu đỉnh Stack ký hiệu nhập, PDA lựa chọn trạng thái kế tiếp, thay ký hiệu Stack di chuyển đầu đọc băng nhập ✔ Không phụ thuộc ký hiệu nhập (ε – dịch chuyển): ký hiệu nhập khơng dùng, đầu đọc khơng di chuyển • Ngôn ngữ chấp nhận PDA ✔ Bởi Stack rỗng ✔ Bởi trạng thái kết thúc Một ngôn ngữ chấp nhận PDA ngôn ngữ phi ngữ cảnh PDA Định nghĩa: PDA M hệ thống thành phần M (Q, Σ, Γ, δ, q0, Z0, F) • Q : tập hữu hạn trạng thái • Σ : chữ nhập • Γ : chữ Stack • δ : hàm chuyển Q x (Σ {ε}) x Γ → tập Q x Γ* • q0 : trạng thái khởi đầu • Z0 : ký hiệu bắt đầu Stack • F Q : tập trạng thái kết thúc (nếu PDA chấp nhận chuỗi Stack rỗng F = Ø) PDA Hàm chuyển δ: • Hàm chuyển phụ thuộc ký hiệu nhập δ(q, a, Z) = { (p1, γ1), (p2, γ2), , (pm, γm) } • Hàm chuyển khơng phụ thuộc ký hiệu nhập δ(q, ε, Z) = { (p1, γ1), (p2, γ2), , (pm, γm) } Ví dụ: PDA chấp nhận wcwR Stack rỗng 1) δ(q1, 0, R) = {(q1, BR)} 7) δ(q1, c, R) = {(q2, R)} 2) δ(q1, 1, R) = {(q1, YR)} 8) δ(q1, c, B) = {(q2, B)} 3) δ(q1, 0, B) = {(q1, BB)} 9) δ(q1, c, Y) = {(q2, Y)} 4) 5) 6) δ(q1, 1, B) = {(q1, YB)} δ(q1, 0, Y) = {(q1, BY)} δ(q1, 1, Y) = {(q1, YY)} 10) δ(q2, 0, B) = {(q2, ε)} 11) δ(q2, 1, Y) = {(q2, ε)} 12) δ(q2, ε, R) = {(q2, ε)} PDA Hình thái (ID): dùng để ghi nhớ trạng thái nội dung Stack (q, aw, Zα) ⊢M (p, w, βα) δ(q, a, Z) chứa (p, β) Ngơn ngữ chấp nhận PDA: • Ngơn ngữ chấp nhận trạng thái kết thúc L (M) = {w | (q0, w, Z0) ⊢* (p, ε, γ) với p F γ Γ*} • Ngơn ngữ chấp nhận Stack rỗng N (M) = {w | (q0, w, Z0) ⊢* (p, ε, ε) với p Q} Ví dụ: PDA chấp nhận wcwR Stack rỗng với chuỗi nhập 001c100 (q1, 001c100, R) ⊢ (q1, 01c100, BR) ⊢ (q1, 1c100, BBR) ⊢ (q1, c100, YBBR) ⊢ (q2, 100, YBBR) ⊢ (q2, 00, BBR) ⊢ (q2, 0, BR) ⊢ (q2, ε, R) ⊢ (q2, ε, ε) : Chấp nhận PDA không đơn định (NPDA) Ví dụ: thiết kế PDA chấp nhận {wwR | w (0 + 1)*} Stack rỗng • Khơng có ký hiệu c để biết thời điểm chuyển từ trạng thái q1 sang q2 • Bắt buộc phải đốn thử (khi thấy ký hiệu liên tiếp giống nhau) ✔ Nếu ký hiệu thuộc chuỗi xuôi : giữ nguyên trạng thái q push vào Stack ✔ Nếu ký hiệu thuộc chuỗi ngược : chuyển sang trạng thái q pop khỏi Stack • M({q1, q2}, {0, 1}, {R, B, Y}, δ, q1, R, Ø): 1) ε)} 2) 3) 4) 5) δ(q1, 0, R) = {(q1, BR)} 6) δ(q1, 1, Y) = {(q1, YY),(q2, δ(q1, 1, R) = {(q1,YR)} 7) δ(q2, 0, B) = {(q2, ε)} δ(q1, 0, B) = {(q1, BB), (q2, ε)} 8) δ(q2, 1, Y) = {(q2, ε)} δ(q1, 0, Y) = {(q1, BY)} 9) δ(q1, ε, R) = {(q2, ε)} δ(q1, 1, B) = {(q1, YB)} 10) δ(q2, ε, R) = {(q2, ε)} PDA khơng đơn định (NPDA) Ví dụ: phép chuyển hình thái PDA chấp nhận chuỗi 001100 thuộc ngơn ngữ {wwR | w (0 + 1)*} Stack rỗng Khởi đầu (q1, 001100, R) (q1, 01100, BR) (q2, 1100, R) (q2, 1100, ) : Không chấp nhận (q1, 1100, BBR) (q1, 100, YBBR) (q2, 00, BBR) (q1, 00, YYBBR) (q2, 0, BR) (q2, , R) (q2, , ) : Chấp nhận (q1, 0, BYYBBR) (q2, , YYBBR) : Không chấp nhận (q1, , BBYYBBR) : Không chấp nhận PDA đơn định (DPDA) Định nghĩa: PDA M(Q, Σ, Γ, δ, q0, Z0, F) gọi đơn định nếu: • q Q Z Γ: δ(q, ε, Z) ≠ Ø δ(q, a, Z) = Ø với a Σ • Khơng có q Q, Z Γ a (Σ {ε}) mà δ(q, a, Z) chứa nhiều phần tử Chú ý: PDA dạng đơn định khơng đơn định khơng tương đương Ví dụ: wwR chấp nhận PDA không đơn định, không chấp nhận PDA đơn định 10 Tương đương PDA với Stack rỗng PDA với trạng thái kết thúc Định lý 6.1: Nếu ngôn ngữ phi ngữ cảnh L chấp nhận PDA chấp nhận chuỗi trạng thái kết thúc M2 L chấp nhận PDA chấp nhận chuỗi Stack rỗng M1 Cách xây dựng: Đặt M2(Q, Σ, Γ, δ, q0, Z0, F) M1(Q {qe, q0'}, Σ, Γ, δ', q0', X• ,δ'(q ', ε, X ) = {(q , Z X )} Ø) 0 0 • δ'(q, a, Z) chứa phần tử δ(q, a, Z) với a (Σ {ε}) • δ'(q, ε, Z) chứa (qe, ε) với q F Z (Γ {X0}) • δ'(qe, ε, Z) chứa (qe, ε) với Z (Γ {X0}) 11 Tương đương PDA với Stack rỗng PDA với trạng thái kết thúc Định lý 6.2: Nếu ngôn ngữ phi ngữ cảnh L chấp nhận PDA chấp nhận chuỗi Stack rỗng M1 L chấp nhận PDA chấp nhận chuỗi trạng thái kết thúc M2 Cách xây dựng: Đặt M1(Q, Σ, Γ, δ, q0, Z0, F) M2(Q {q0', qf}, Σ, Γ {X0}, δ', q0', X0, {qf}) • δ'(q0', ε, X0) = {(q0, Z0X0)} • δ'(q, a, Z) = δ(q, a, Z) với a (Σ {ε}) • δ'(q, ε, X0) chứa (qf, ε) với q Q 12 Tương đương PDA CFL Định lý 6.4: Nếu L chấp nhận PDA chấp nhận chuỗi Stack rỗng L ngôn ngữ phi ngữ cảnh Cách xây dựng: Đặt PDA M(Q, Σ, Γ, δ, q0, Z0, Ø) chấp nhận L với Stack rỗng Đặt G(V, T, P, S) CFG, đó: • V tập đối tượng dạng [q, A, p] • S ký hiệu bắt đầu thêm vào • P tập luật sinh dạng S → [q0, Z0, q] với q Q [q, A, qm+1] → a [q1, B1, q2][q2, B2, q3] [qm, Bm, qm+1] cho δ(q, a, A) có chứa (q1, B1B2 Bm) Nếu m = luật sinh có dạng [q, A, q1] → a 14 Tương đương PDA CFL Ví dụ: xây dựng CFG tương đương sinh ngôn ngữ chấp nhận PDA M({q0, q1}, {0, 1}, {Z0, X}, δ, q0, Z0, Ø) với δ sau: δ(q0, 0, Z0) = {(q0, XZ0)} δ(q1, 1, X) = {(q1, ε)} δ(q0, 0, X) = {(q0, XX)} δ(q1, ε, X) = {(q1, ε)} δ(q0, 1, X) = {(q1, ε)} δ(q1, ε, Z0) = {(q1, ε)} Xây dựng: CFG G(V, {0, 1}, P, S) Tập biến V = [q, A, p] S = { S, [q0, X, q0], [q0, X, q1], [q1, X, q0], [q1, X, q1], [q0, Z0, q0], [q0, Z0, q1], [q1, Z0, q0], [q1, Z0, q1] } Tập luật sinh P S → [q0, Z0, q0] | [q0, Z0, q1] δ1) [q0, Z0, q0] → [q0, X, q0] [q0, Z0, q0] | [q0, X, q1] [q1, Z0, q0] [q0, Z0, q1] → [q0, X, q0] [q0, Z0, q1] | [q0, X, q1] [q1, Z0, q1] 15 Tương đương PDA CFL δ2) [q0, X, q0] → [q0, X, q0] [q0, X, q0] | [q0, X, q1] [q1, X, q0] [q0, X, q1] → [q0, X, q0] [q0, X, q1] | [q0, X, q1] [q1, X, q1] δ3) [q0, X, q1] → δ5) [q1, X, q1] → ε δ4) [q1, X, q1] → δ6) [q1, Z0, q1] → ε Đặt: [q0, X, q0] = A, [q0, X, q1] = B, , [q0, Z0, q0] = E, , [q1, Z0, q1] = H Ta có luật sinh: Giản lược văn phạm: S→E|F S→F E → 0AE | 0BG F → 0BH S → 0B F → 0AF | 0BH B → 0BD | B → 0B | 0B1 | A → 0AA | 0BC D→ε|1 B → 0AB | 0BD | H→ε D→ε|1 H→ε 16 ... không chấp nhận PDA đơn định 10 Tương đương PDA với Stack rỗng PDA với trạng thái kết thúc Định lý 6. 1: Nếu ngôn ngữ phi ngữ cảnh L chấp nhận PDA chấp nhận chuỗi trạng thái kết thúc M2 L chấp nhận... (qe, ε) với Z (Γ {X0}) 11 Tương đương PDA với Stack rỗng PDA với trạng thái kết thúc Định lý 6. 2: Nếu ngôn ngữ phi ngữ cảnh L chấp nhận PDA chấp nhận chuỗi Stack rỗng M1 L chấp nhận PDA chấp... δ(q, a, Z) với a (Σ {ε}) • δ''(q, ε, X0) chứa (qf, ε) với q Q 12 Tương đương PDA CFL Định lý 6. 4: Nếu L chấp nhận PDA chấp nhận chuỗi Stack rỗng L ngôn ngữ phi ngữ cảnh Cách xây dựng: Đặt