Làm thế nào để chứng minh rằng một ngôn ngữ là không có ngữ cảnh?


26

nhiều kỹ thuật để chứng minh rằng một ngôn ngữ không có ngữ cảnh, nhưng làm cách nào để chứng minh rằng một ngôn ngữ không ngữ cảnh?

Có những kỹ thuật nào để chứng minh điều này? Rõ ràng, một cách là thể hiện một ngữ pháp không ngữ cảnh cho ngôn ngữ. Có bất kỳ kỹ thuật hệ thống nào để tìm một ngữ pháp không ngữ cảnh cho một ngôn ngữ nhất định không?

Đối với các ngôn ngữ thông thường, có nhiều cách có hệ thống để rút ra một máy tự động ngữ pháp / trạng thái hữu hạn thông thường: ví dụ, định lý Myhill-Nerode cung cấp một cách. Có bất kỳ kỹ thuật tương ứng cho các ngôn ngữ không ngữ cảnh?


Động lực của tôi ở đây là (hy vọng) xây dựng một câu hỏi tham khảo có chứa một danh sách các kỹ thuật thường hữu ích, khi cố gắng chứng minh rằng một ngôn ngữ nhất định là không có ngữ cảnh. Vì chúng tôi có nhiều câu hỏi ở đây là những trường hợp đặc biệt về vấn đề này, sẽ thật tuyệt nếu chúng tôi có thể ghi lại cách tiếp cận chung hoặc các kỹ thuật chung mà người ta có thể sử dụng khi gặp phải vấn đề này.


Cho phép tôi để lại ghi chú thông thường của mình: khi cung cấp ngữ pháp không ngữ cảnh cho ngôn ngữ trong tay, bạn cần một bằng chứng chính xác có thể khiến cách tiếp cận trở nên khó sử dụng.
Raphael

Để làm cho câu hỏi này trở thành một câu hỏi tham khảo thích hợp, chúng ta có thể đưa ra các trình kết xuất vấn đề, bạn có thể thêm câu trả lời về việc đưa ra các ngữ pháp và automata, có thể với một ví dụ không? Cảm ơn!
Raphael

Cho đến khi tài liệu được chuyển đến đây, lưu ý rằng Rick Decker và babou đã thu thập một số thành ngữ không ngữ cảnh điển hình tại một câu hỏi trùng lặp .
Raphael

Câu trả lời:


13

Một cách tiếp cận thực tế mà trong nhiều ví dụ hoạt động [nhưng không phải lúc nào cũng vậy, tôi biết] đang cố gắng tìm cấu trúc lồng nhau của các chuỗi trong ngôn ngữ. "Các phụ thuộc lồng nhau" phải được tạo ra cùng một lúc trong các phần khác nhau của chuỗi.

Ngoài ra chúng tôi có hộp công cụ cơ bản :

  1. ghép nối: SS1S2 nếu bạn có thể chia ngôn ngữ thành hai phần liên tiếp sử dụng sản phẩm này

  2. liên kết: SS1S2 chia thành các phần rời rạc

  3. lặp: SS1Sε

ví dụ 1

Dưới đây là một ví dụ cho việc làm tổ (cảm ơn Raphael).

L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2}

Thay n bằng 2l . Bây giờ chúng ta có thể thả n trong điều kiện.

Thay ko bằng k>o or k<o (nhầm lẫn? o là 'oh' chứ không phải 'zero'). Áp dụng các công cụ cho công đoàn. Chúng tôi làm việc với k>o ở đây. Ngoài ra k>o iff k=s+os>0 trong đó s là một biến mới. Thay k bằng s+o .

L1={bs+oal(bc)ma2lbol,m,o,sN,s>0,m2}

Một số cách viết đơn giản.

L1={bbsboalbcbc(bc)m(aa)lbol,m,o,sN}

Bây giờ chúng ta thấy cấu trúc lồng nhau, và bắt đầu xây dựng một ngữ pháp.

, T b U , U b U | ε (xem: nối và lặp đi lặp lại ở đây)S1TVTbUUbUε

(chúng tôi tạo ra o b 's trên cả hai mặt)VbVbWo b

WaWaaX

, Y b c b c , Z b c Z | εXYZYbcbcZbcZε

Ví dụ 2

K={akblcml=m+k}

Một viết lại "rõ ràng" đầu tiên.

K={akbm+kcmm,k0}={akbmbkcmm,k0}

Trong ngôn ngữ học, điều này được gọi là "sự phụ thuộc nối tiếp chéo": sự xen kẽ (thường) biểu thị mạnh mẽ cho việc không bối cảnh. Tất nhiên m + k = k + m và chúng ta được lưu.k,m,k,mm+k=k+m

K={akbk+mcmm,k0}={akbkbmcmm,k0}

với tác phẩm , X một X b | ε , Y b Y c | εSXYXaXbεYbYcε

Tương tự như vậy K={akblcmm=k+l}={akblclckk,l0}

với tác phẩm , X b X c | εSaScXXbXcε


Nhận xét cuối cùng: những kỹ thuật này giúp bạn đưa ra một ngữ pháp không có ngữ cảnh ứng viên, hy vọng sẽ nhận ra ngôn ngữ của bạn. Một bằng chứng chính xác vẫn có thể cần thiết, để đảm bảo rằng ngữ pháp thực sự hoạt động để nhận ra ngôn ngữ của bạn (không hơn, và không kém).


11

Có một đặc điểm của CFL có thể được sử dụng, đó là định lý Chomsky-Schützenberger .

Ngôn ngữ Dyck

Đặt một bảng chữ cái. Chúng tôi xác định Dyck -language D T( T T ) * của T bởi bối cảnh tự do văn phạm G = ( { S } , T T , δ , S ) với δ doTDT(TT^)TG=({S},TT^,δ,S)δ

.SaSa^Sε,aT

Định lý Chomsky-Schützenberger

là bối cảnh được miễn nếu và chỉ nếu cóLΣ

  • an alphabet T,
  • a regular language R(TT^) and
  • homomorphism ψ:(TT^)Σ

so that

L=ψ(DTR).

Note that the homomorphism is extended to words (symbol by symbol) and then to languages (word by word).

Example

Consider L={anbncmn,mN. With

  • T={[,} (and, canonically, T^={],}),
  • R=L([]) and
  • ψ(x)={a,x=[b,x= ]ε,x=c,x= 

the theorem implies that L is context-free, in particular since

DTR={[n]nmmn,mN}

Ví dụ 2

L={bkal(bc)manbok,l,m,n,oN,ko,2l=n,m2} is context-free.

Here, we need one type of parentheses for a, one for bc, one for b, and another used to model the b that cause ko. We use

  • T={[,,,<},
  • R=L(<+>+[++])L([++]<+>+) and
  • ψ(x)={b,x{,,<}a,x=[aa,x= ]bc,x=ε,else

and apply the theorem. In order to see that L=ψ(DTR), we don't need more than the fact that matching symbols (e.g. [ and ]) have to occur equally often in any wDT. Adding this contraint to the regular expressions we defined R by, we get

DTR={<p>po[lmm]lop1,o0,l0,m2} {}

and therewith

ψ(DTR)={bp+oal(bc)ma2lbop1,o0,l0,m2} {}={bkal(bc)manbok,l,m,n,oN,k>o,2l=n,m2} {}=L.

To grammars and automata

If we want to have an automaton or grammar in the end, we have some more work ahead of us.

  • Towards an automaton, construct the NPDA for DT and an NFA for R. The former is standard and we have algorithms for the latter, provided the language is given in a suitable representation (see also here). Intersection both is another standard construction and ψ can be applied to every transition individually.

  • Towards a grammar, build one for R (again, should be standard), take the one for DT and intersect them. Then apply ψ to the rule set (symbol for symbol).

Arguably, this is easy since algorithmic; the complexity lies in finding suitable T, R and ψ. I don't know if this approach is (often) simpler than constructing PDA/grammars directly but it may allow to focus on the important features of the language at hand. Try for yourself!


It is undecidable whether any given language is context-free.
reinierpost
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.