Thuật toán để kiểm tra xem một ngôn ngữ có ngữ cảnh không


18

Có một thuật toán / thủ tục hệ thống để kiểm tra xem một ngôn ngữ không có ngữ cảnh không?

Nói cách khác, đưa ra một ngôn ngữ được chỉ định ở dạng đại số (nghĩ về một cái gì đó như ), kiểm tra xem ngôn ngữ đó có phải là ngữ cảnh hay không. Hãy tưởng tượng chúng tôi đang viết một dịch vụ web để giúp sinh viên với tất cả các bài tập về nhà của họ; bạn chỉ định ngôn ngữ và dịch vụ web xuất ra "không ngữ cảnh" hoặc "không ngữ cảnh". Có cách tiếp cận tốt nào để tự động hóa điều này?L={anbnan:nN}

Tất nhiên có các kỹ thuật để chứng minh thủ công, chẳng hạn như bổ đề bơm, bổ đề của Ogden, bổ đề của Parikh, bổ đề trao đổi, và nhiều hơn nữa ở đây . Tuy nhiên, mỗi cái đều yêu cầu cái nhìn sâu sắc thủ công tại một số điểm, vì vậy không rõ làm thế nào để biến bất kỳ trong số chúng thành một thuật toán.

Tôi thấy Kaveh đã viết ở nơi khác rằng tập hợp các ngôn ngữ không ngữ cảnh không được liệt kê đệ quy, vì vậy dường như không có hy vọng cho bất kỳ thuật toán nào hoạt động trên tất cả các ngôn ngữ có thể. Do đó, tôi cho rằng dịch vụ web sẽ cần có khả năng xuất "không ngữ cảnh", "không ngữ cảnh" hoặc "tôi không thể nói". Có thuật toán nào thường có thể cung cấp câu trả lời ngoài "Tôi không thể nói", trên nhiều ngôn ngữ mà người ta có thể thấy trong sách giáo khoa không? Làm thế nào bạn sẽ xây dựng một dịch vụ web như vậy?


Để làm cho câu hỏi này được đặt ra tốt, chúng ta cần quyết định cách người dùng sẽ chỉ định ngôn ngữ. Tôi mở để đề xuất, nhưng tôi đang nghĩ một cái gì đó như thế này:

L={E:S}

Trong đó là một biểu thức từ và S là một hệ bất phương trình tuyến tính trên các biến có độ dài, với các định nghĩa sau:ES

  • Mỗi là một từ thể hiện. (Những đại diện cho biến có thể giữ bất kỳ từ trong Σ * .)x,y,z,Σ

  • Mỗi là một từ thể hiện. (Mặc nhiên, Σ = { một , b , c , ... } , vì vậy một , b , c , ... đại diện cho một biểu tượng duy nhất trong bảng chữ cái cơ bản.)a,b,c,Σ={a,b,c,}a,b,c,

  • Mỗi là một từ thể hiện, nếu η là một chiều dài biến.aη,bη,cη,η

  • Sự kết hợp của các biểu thức từ là một biểu thức từ.

  • m,n,p,q,

  • |x|,|y|,|z|,

Điều này có vẻ đủ rộng để xử lý nhiều trường hợp chúng ta thấy trong các bài tập trong sách giáo khoa. Tất nhiên, bạn có thể thay thế bất kỳ phương pháp văn bản nào khác để chỉ định một ngôn ngữ ở dạng đại số, nếu bạn muốn.


Sẽ không dễ dàng hơn để bắt đầu với sự đều đặn của ngôn ngữ?
Yuval Filmus

@YuvalFilmus, chắc chắn sẽ như vậy! Bây giờ bạn đề cập đến nó, đó là một ý tưởng tuyệt vời. Bạn có nghĩ rằng vấn đề là khả thi cho các ngôn ngữ thông thường? Tôi rất vui khi hỏi một ngôn ngữ tương ứng về các ngôn ngữ thông thường, nếu bạn nghĩ rằng nó có thể có giá trị.
DW

2
Nó chắc chắn sẽ dễ dàng hơn cho các ngôn ngữ thông thường. Nhân tiện, tính không thể quyết định chung không nhất thiết phải áp dụng cho các ngôn ngữ có dạng bạn đề cập.
Yuval Filmus

4
Tôi e rằng vấn đề này có lẽ là mở, ít nhất là một trường hợp cụ thể là: cstheory.stackexchange.com/questions/17976 . Có thể có một cách để có được sự không an toàn cho vấn đề chung hơn của bạn, nhưng tôi không thấy điều đó.
sdcvvc

nó sẽ hữu ích để đưa ra một số từ ví dụ trong ngôn ngữ. đề nghị nghiên cứu / hợp tác thêm trong Trò chuyện Khoa học Máy tính
vzn

Câu trả lời:


0

Theo định lý của Rice , để xem liệu ngôn ngữ được máy Turing chấp nhận có bất kỳ thuộc tính không tầm thường nào không (ở đây: không có ngữ cảnh) là không thể quyết định. Vì vậy, bạn sẽ phải hạn chế sức mạnh của máy móc nhận dạng (hoặc mô tả) của mình để làm cho nó không hoàn thành Turing để hy vọng có câu trả lời.

Đối với một số mô tả ngôn ngữ, câu trả lời là tầm thường: Nếu đó là bằng các biểu thức chính quy, thì nó là chính quy, do đó không có ngữ cảnh. Nếu đó là bởi ngữ pháp miễn phí ngữ cảnh, ditto.


Tôi đồng ý với tất cả các ý kiến ​​của bạn, nhưng tôi không chắc tôi thấy cách này trả lời câu hỏi hoặc sử dụng cách này để trả lời câu hỏi. Tôi biết tất cả những sự thật đó. Tôi mô tả một cách cụ thể của các ngôn ngữ. Bạn đang đề nghị nó là Turing-đầy đủ? Nó dường như không hoàn hảo đối với tôi. Một hệ thống bất bình đẳng tuyến tính không phải là Turing-Complete, vì vậy tôi nghi ngờ / suy đoán rằng tôi đã hạn chế nó đủ để không hoàn thành Turing. Ngoài ra, đối với phương pháp tôi đã đưa ra để chỉ định ngôn ngữ, nó không tầm thường, vì nó không phải là một biểu thức thông thường và không phải là một ngữ pháp không ngữ cảnh.
DW

-2

Bất kỳ ngôn ngữ nào đều được Push Down Automata chấp nhận, là CFL. Dưới đây là bảng phân tích chi tiết để xác định liệu ngôn ngữ có phải là CFL hay không. kiểm tra xem ngôn ngữ có phải là CFL hay không


Đây không phải là một thuật toán.
xskxzr

Tôi không thấy cách này trả lời câu hỏi. Tôi biết rằng một ngôn ngữ không có ngữ cảnh, nó được chấp nhận bởi một thiết bị PDA, nhưng dường như điều đó không giúp ích gì cho việc tìm kiếm một thuật toán có dạng được yêu cầu trong câu hỏi. Bài viết geekforgeek bạn liên kết đến không cung cấp một thuật toán hoàn chỉnh cho vấn đề này; nó chỉ liệt kê các trường hợp đặc biệt không đầy đủ dễ dàng hơn (và nó không phải là một tài liệu tham khảo tuyệt vời, vì một số tuyên bố của nó là một chút sơ sài / đáng ngờ).
DW

AFAIK, chưa có thuật toán có cấu trúc tốt cho điều đó. (đúng nếu tôi đã sai lầm). Điều tốt nhất chúng ta có thể làm là kiểm tra các trường hợp.
SiluPanda

-3

Hãy dùng thử phần mềm JFLAP nếu bạn chỉ muốn kiểm tra CFG. Bạn thậm chí có thể yêu cầu các nhà phát triển JFLAP cung cấp cho bạn mã hoặc thuật toán cho phần mềm. bạn có thể nhận JFLAP từ đây http://www.jflap.org/jflaptmp/ nó miễn phí tuy nhiên nó yêu cầu JDK hoặc JRE hoặc một cái gì đó. Hoặc có thể bạn có thể thử một số phần mềm tương tự khác và nhà phát triển của họ.


1
Tôi không chắc điều này trả lời câu hỏi. JFLAP không có tính năng chấp nhận một ngôn ngữ trong ký hiệu toán học và cho bạn biết liệu nó có ngữ cảnh hay không.
Yuval Filmus

Định lý 2.20 trong cuốn sách Sipser Một ngôn ngữ là ngữ cảnh miễn phí khi và chỉ khi một số máy tự động đẩy xuống nhận ra nó. Và bạn có thể xây dựng PDA trong JFLAP từ một ngữ pháp
Haseeb Hassan Asif

Bạn có thể đúng về ký hiệu toán học không thể đưa vào JFLAP nhưng bạn vẫn có thể đặt tất cả các quy tắc ngữ pháp và nó có thể chuyển đổi nó thành một máy PDA hoặc nói rằng đó không phải là CFG hoặc một số lỗi khác
Haseeb Hassan Asif

{anbncn:nN}

1
Tôi tưởng tượng rằng JFLAP có thể chuyển đổi một ngữ pháp không ngữ cảnh sang một máy tương đương, nhưng điều này hoàn toàn không có ích gì ở đây.
Yuval Filmus
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.