Có một ngôn ngữ hữu hạn không thể giải quyết của các từ hữu hạn?


10

một nhu cầu cho LΣvô hạn để có thể quyết định?

Ý tôi là gì nếu chúng tôi chọn một ngôn ngữ L là một phiên bản hữu hạn được giới hạn của LΣ , có nghĩa là |L|N ( NN ), với LL . Có thể cho L là một ngôn ngữ không thể quyết định?

Tôi thấy rằng có một vấn đề "Làm thế nào để chọn N từ mà mà chúng ta phải thiết lập một quy tắc cho việc lựa chọn đó sẽ là người đầu tiên yếu tố của , một loại hoạt động sao Kleene 'hữu hạn' . Mục đích là để tìm ngôn ngữ không thể thiếu mà không cần một bộ vô hạn, nhưng tôi không thể nhìn thấy nó. L"NL

Lưu ý EDIT:

Mặc dù tôi đã chọn một câu trả lời, nhiều câu trả lời và tất cả các ý kiến đều quan trọng.


Dường như có (ít nhất) ba câu hỏi ở đây. Hãy tập trung vào một và chỉnh sửa những người khác.
Raphael

Tôi đã xóa các tham chiếu đến bộ sức mạnh vì nó không liên quan ở đây; P(S) là hữu hạn khi và chỉ khi S là hữu hạn.
Raphael

@Raphael Không sao, nhưng tôi đề cập đến tập hợp sức mạnh bởi vì đôi khi tôi đọc "không có sự từ chối nào từ lên , do đó phải tồn tại một ngôn ngữ không thể giải quyết được." NP(N)Tôi muốn hiểu tại sao điều đó không hoạt động với tập hợp hữu hạn , với với hữu hạn, thay vì cần , đó là lý do tại sao tôi đặtL|L|NN NP(S)
Hernan_eche

1
Theo như tôi biết, sự tồn tại của các ngôn ngữ không thể giải quyết được không xảy ra ngay lập tức từ sự không tồn tại của một từ chối như vậy; bạn cần một số bit nhỏ hơn. Tại sao, điều đó sẽ làm cho một câu hỏi tuyệt vời khác! Tại sao bạn không đi trước và hỏi nó? Từ đó, bạn sẽ thấy lý do tại sao đối số không chuyển sang các ngôn ngữ hữu hạn.
Raphael

3
Ngôn ngữ hữu hạn là quyết định, thời gian, kết thúc của câu chuyện. Có bất kỳ số lượng các thuật toán cho điều đó. Nếu bạn nhấn mạnh vào mô hình Turing Machine cổ điển, nó cũng có thể được thực hiện theo cách đó, mặc dù ít thuyết phục hơn. Không cần phải gọi automata trạng thái hữu hạn hoặc ngôn ngữ thông thường hoặc bất kỳ mô hình tự động nào khác, vì thực tế, chúng quá mức cần thiết mà không có bất kỳ máy Turing vis-a-vis rõ ràng bổ sung nào.
David Lewis

Câu trả lời:


15

Có, cần phải có là vô hạn để không thể giải quyết được.L

Để thêm vào câu trả lời của Raphael và Sam, bạn nên suy nghĩ về "quyết định" như những điều mà một chương trình máy tính có thể giải quyết. Chương trình yêu cầu rất đơn giản, nó chỉ cần xuất "Có" cho các phần tử trong , hoặc nếu không, nói không.L

Vì vậy, càng "phức tạp" thì chương trình bạn yêu cầu viết càng dài. Nói cách khác, chương trình bạn chạy càng lâu, bạn có thể kiểm tra nhiều thứ hơn ... Vì vậy, nếu ai đó đưa ra một ngôn ngữ hữu hạn, hãy nói , bạn có thể viết chương trình sau đâyLLL={a1,a2,,an}

if INPUT = $a_1$ output Yes;
if INPUT = $a_2$ output Yes;
...
if INPUT = $a_n$ output Yes;
output No;

Bây giờ, nếu ai đó cung cấp cho bạn một lớn hơn (chưa hữu hạn), bạn sẽ chỉ viết một chương trình dài hơn. Điều này luôn đúng và bất kỳ hữu hạn nào cũng sẽ có chương trình riêng. Trường hợp "thú vị" duy nhất là những gì xảy ra khi là vô hạn - chương trình của bạn không thể là vô hạn.LLL

Vấn đề "không thể giải quyết" thậm chí còn thú vị hơn: đó là những (vô hạn) không có chương trình hoạt động chính xác cho chúng. Chúng tôi biết rằng các ngôn ngữ như vậy phải tồn tại vì có nhiều ngôn ngữ (vô hạn) hơn số lượng chương trình có độ dài hữu hạn (nhưng không giới hạn).LL


+1 Đây là một câu trả lời rất rõ ràng, tôi muốn bạn mở rộng một điểm, bạn đã nói "nếu ai đó cho bạn một lớn hơn (nhưng hữu hạn), bạn sẽ chỉ viết một chương trình dài hơn" * nhưng tôi nghĩ rằng ngược lại, được đưa ra một ** chương trình hữu hạn ** cố định của các chương trình , nếu bạn không thể viết một chương trình dài hơn thì tôi nghĩ rằng một số tranh chấp là một tập hữu hạn, sẽ ra CÓ, và một số sẽ không . Vì , sau đó một số từ khóa sẽ tương ứng với các hàm chỉ báo nhưng * hầu hếtLP|P|=KLP(P)>KLP sẽ không!, Vì ngôn ngữ có thể2K>Kchương trình có thể, sau đó sẽ có những vấn đề không thể giải quyết được. Tôi có lầm không? tại sao?
Hernan_eche

1
thật vậy, nếu bạn giới hạn kích thước của chương trình là thì có nhiều nhất các chương trình khác nhau phân loại chính xác nhiều nhất các ngôn ngữ khác nhau (vô hạn hoặc không). Vì vậy, đối với tập hợp các chương trình cụ thể đó tồn tại các ngôn ngữ không thể giải quyết được và thậm chí là một ngôn ngữ hữu hạn. Nhưng đây là một tuyên bố yếu hơn, vì bạn chỉ xem xét một bộ chương trình giới hạn (ví dụ: , bạn chỉ có 2 chương trình có thể, tất nhiên chúng sẽ không thể làm được nhiều và sẽ thất bại ở hầu hết mọi ngôn ngữ )|P|=kO(2k)O(2k)|P|=1L
Ran G.

cảm ơn, tôi biết đó là một tuyên bố yếu hơn, nhưng nó táo bạo rằng có thể có những ngôn ngữ không thể xác định hữu hạn và vô hạn, và tôi nghĩ trường hợp đặc biệt này phải được đưa vào câu trả lời của bạn, một phần "Vâng, cần phải có L là vô hạn là không thể giải quyết được. " dường như không phải là một nhu cầu trong các điều kiện nhất định.
Hernan_eche

6
Không chính xác. Thuật ngữ "không thể giải quyết" có một ý nghĩa cụ thể: không thể quyết định bằng máy Turing tiêu chuẩn. Như vậy, để được undecidable, phải là vô hạn. Những gì bạn muốn không phải là một thuật ngữ khác, cụ thể là "không thể quyết định bởi ". Gọi sau -undecidable. Sau đó, đối với bất kỳ hữu hạn nào , không cần là vô hạn để có thể là -undecidable. Đừng nhầm lẫn (hoặc sử dụng sai) và -undecidableL undecidablePPPLPundecidableP
Ran G.

10

Tôi không chắc mình hiểu đúng câu hỏi nhưng mọi ngôn ngữ hữu hạn đều đặn. Không có ngôn ngữ thông thường là không thể giải quyết được và do đó không có ngôn ngữ hữu hạn nào là không thể giải quyết được. Tất cả các tuyên bố này là nổi tiếng và bằng chứng có thể được tìm thấy trong Hopcroft và Ullman .


8

Nếu ngôn ngữ của bạn là hữu hạn, bạn có thể thực hiện tra cứu bảng trên bảng được mã hóa cứng chứa tất cả các từ trong . Điều này thật khó xử khi viết ra dưới dạng máy Turing, nhưng trong các mô hình tương đương khác khá rõ ràng.LL

Trong thực tế, automata hữu hạn là đủ. Xây dựng một máy tự động cho như sau:L

  1. Với mỗi , hãy tạo một chuỗi trạng thái tuyến tính chấp nhận .wLw
  2. Tạo trạng thái ban đầu mới .q0
  3. Kết nối với các trạng thái ban đầu của tất cả các automata được xây dựng trong 1. với -transitions.q0ε

Máy tự động được xây dựng như vậy rõ ràng chấp nhận . Do đó, là thường xuyên và theo đó có thể tính toán được (bởi ).LLREGRE

Lưu ý rằng một số lý do áp dụng cho đồng hữu hạn , đó là ; bạn chỉ cần mã hóa các phần tử không có trong .L|L¯|<L


2

Để trở nên thú vị (với mục đích suy nghĩ về khả năng tính toán), một vấn đề quyết định phải có vô số câu trả lời "có" và vô số câu trả lời "không". Các vấn đề quyết định như vậy tương ứng chính xác với các ngôn ngữ chứa vô số chuỗi trên bảng chữ cái của chúng và cũng loại trừ vô số chuỗi trên bảng chữ cái của chúng.

Bất cứ điều gì khác đều có thể được mã hóa thành một lượng thông tin hữu hạn (tệ nhất là một danh sách lớn các chuỗi bằng hoặc không có trong ngôn ngữ), và do đó có thể tính toán bằng các DFA đơn giản / biểu thức chính quy. Tôi hy vọng rõ ràng rằng đối với bất kỳ danh sách chuỗi hữu hạn nào, bạn có thể viết ngay một biểu thức chính quy đơn giản là OR tất cả các chuỗi.

Một ý kiến ​​dí dỏm của giảng viên Lý thuyết tính toán của tôi là vấn đề "Chúa có tồn tại không?" có thể tính toán được - nó được tính toán bằng một máy ngay lập tức chấp nhận hoặc máy từ chối ngay lập tức; chúng tôi chỉ không biết cái nào!

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.