Làm thế nào để biết một ngôn ngữ có thể nhận biết, đồng nhận biết hoặc có thể quyết định?


8

Nếu bạn có một ngôn ngữ L, mà không cần thực hiện bất kỳ bằng chứng nào, có cách nào để biết liệu nó có thể nhận ra hoặc đồng nhận biết hoặc có thể quyết định được không?

Về cơ bản bất kỳ gợi ý hoặc thủ thuật có thể được sử dụng để nói. Hoặc có thể các mẫu phổ biến để tìm kiếm để cho biết đó là loại nào?


"Không cần làm bất cứ bằng chứng nào", tôi có thể chứng minh cho bạn bất cứ điều gì. (:
Ran G.

1
Trong toán học, một "mánh khóe" thường được gọi là "định lý" và trong một số trường hợp là "bổ đề".
Andrej Bauer

Một số mô hình phổ biến là những mô hình được định nghĩa bởi định lý Rice (chứng minh một tập hợp không thể giải quyết được) và định lý Rice-Shapiro (chứng minh một tập hợp không thể nhận ra). Chúng đặc biệt hữu ích cho mẫu "tập hợp các TM (được mã hóa) sao cho chạy chúng ta quan sát hành vi này"MMM
chi

Câu trả lời:


6

L là có thể nhận ra

Một ngôn ngữ có thể nhận ra khi và chỉ khi tồn tại trình xác minh cho , trong đó trình xác minh là máy Turing tạm dừng trên tất cả các đầu vào và cho tất cả , . Thông thường, được coi là "chứng chỉ" hoặc "bằng chứng" rằng nằm trong và trình xác minh kiểm tra xem có phải là bằng chứng hợp lệ của trongL w Σ * w L c Σ * . V  chấp nhận  w , c c w L V c w LLLwΣwLcΣ.V accepts w,ccwLVcwL. (Lưu ý rằng định nghĩa này tương đương với định nghĩa của trình nhận dạng vì chúng ta có thể xây dựng trình nhận dạng cho một ngôn ngữ từ trình xác minh cho ngôn ngữ đó). Bây giờ để xác định xem một ngôn ngữ có trong RE hay không, chúng ta có thể đặt câu hỏi sau:

Cho một chuỗi , bạn có thể chứng minh rằng không?w LwLwL

Ví dụ: xem xét . có thể nhận ra được vì để chứng minh với bạn rằng dừng lại trên , tôi chỉ có thể cho bạn biết số bước bạn nên chạy và nếu dừng lại sau nhiều bước đó, bạn sẽ bị thuyết phục rằng .H Một L T M w M M M , w H Một L THALT={M,w | M is a TM that halts on w}HALTMwMMM,wHALT

L là đồng nhận biết

Tương tự, một ngôn ngữ có thể nhận dạng được khi và chỉ khi phần bổ sung của nó có thể nhận ra được hoặc nói cách khác nếu tồn tại một trình xác minh cho . Vì vậy, để xem liệu một ngôn ngữ có trong đồng RE, chúng ta có thể hỏi:¯ LLL¯

Cho một chuỗi , bạn có thể chứng minh rằng không?w LwLwL

Lấy lại ví dụ về , chúng ta có thể sử dụng trực giác này để cho thấy rằng không thể nhận ra được. Điều này là bởi vì nếu tôi nói với bạn rằng một số máy không dừng lại ở đầu vào , thực sự không có gì tôi có thể nói với bạn để thuyết phục bạn về thực tế đó. Tôi có thể chạy trên nhưng ngay cả khi chúng tôi đã xem chạy và chưa thấy nó dừng lại, chúng tôi không biết rằng nó sẽ không đi và dừng lại trong tương lai.H A L T M w M w MHALTHALTMwMwM

L là quyết định

Cuối cùng, một ngôn ngữ có thể quyết định được nếu cả và đều có thể nhận ra được. Vì vậy, nếu câu trả lời cho cả hai câu hỏi trên là có, thì ngôn ngữ là có thể quyết định.L ¯ LLLL¯

Ví dụ: xem xét . Cho một chuỗi , tôi có thể chứng minh với bạn rằng không? Chắc chắn, tôi có thể đếm số của s và số s và cho thấy rằng họ đang bình đẳng, vì vậy là dễ nhận biết. Nếu thì sao? Tôi có thể chứng minh rằng một chuỗi không nằm trong bằng cách chỉ ra rằng nó không phải là dạng hoặc có sự không khớp về số lượng của s và s. Do đó, là đồng nhận biết. Vì nó có thể nhận ra và đồng nhận biết, cũng có thể quyết định được.w L w L a b L w L L a n b m a b LL={anbn | nN}wLwLabLwLLanbmabLL

Tham khảo: Tôi là một TA cho lớp lý thuyết giới thiệu / tính phức tạp giới thiệu tại trường đại học của tôi và giáo sư của tôi đã thực hiện hướng dẫn hoạt hình thực sự hữu ích này để lý luận về các ngôn ngữ thông thường, có thể quyết định và dễ nhận biết.


Cảm ơn vì liên kết đó! và cảm ơn prof của bạn đã làm điều đó! thật tuyệt
khoảng trống

2

Ý chính

Có thể nhận ra có nghĩa là bạn có thể xây dựng một quy trình tự động (chúng ta sẽ quay lại vấn đề đó sau), lấy một từ làm tham số sao cho

  • Nếu quá trình tự động kết thúc, nó sẽ trả về CÓ hoặc KHÔNG.
  • Quá trình tự động này không phải chấm dứt trên mỗi đầu vào, nhưng nó phải chấm dứt nếu từ đầu vào có trong ngôn ngữ.

Có thể nhận dạng đồng nghĩa với việc ngôn ngữ (hoặc, trong tiếng Anh, tập hợp tất cả các từ không có trong , nghĩa là bổ ngữ của nó) có thể nhận ra được. LwΣ,wLL

Có thể quyết định có nghĩa là bạn có thể xây dựng một quy trình tự động lấy một từ làm đầu vào, sao cho

  • Quá trình tự động luôn kết thúc
  • Nó trả lời CÓ hoặc KHÔNG. Nếu nó trả lời CÓ, từ đó nằm trong ngôn ngữ, nếu nó trả lời KHÔNG, thì từ đó không có trong ngôn ngữ.

Một kết quả quan trọng là có thể quyết định được khi và chỉ khi có thể nhận biết và đồng nhận biết.LLL


Ý tưởng để chứng minh kết quả này là bạn có thể xây dựng một quy trình tự động từ các quy trình có thể nhận biết và đồng nhận biết cho bạn, bằng cách xen kẽ các bước từ cả hai quy trình, cho đến khi một trong số đó cung cấp cho bạn câu trả lời CÓ. Một trong những điều đó phải làm như vậy, vì mỗi từ đều có hoặc không có trong ngôn ngữ)


Quy trình tự động

Không quá trang trọng, nhiều loại máy đã được thiết kế và về cơ bản tất cả chúng đều được liên kết với các loại ngôn ngữ (những loại này phụ thuộc vào các công cụ cần thiết để xác định ngôn ngữ đó. Để biết thêm thông tin, Chomsky HVELy có thể trợ giúp).

Ý nghĩa thông thường của quy trình tự động, liên quan đến tính quyết định, là Máy Turing. Bạn có thể định nghĩa Máy Turing sao cho có thể:

  • Nhận giá trị từ đầu vào
  • Lưu trữ giá trị
  • Đọc các giá trị được lưu trữ
  • Tính toán các phép toán cơ bản trên các giá trị
  • Kiểm tra các thuộc tính toán học cơ bản trên các giá trị đó và hành động tương ứng, cuối cùng lặp lại.

Về cơ bản, Máy Turing có thể làm mọi thứ bạn có thể xác định trong một chương trình, ngoại trừ nó là một đối tượng toán học, với bộ nhớ vô hạn và thời gian dành cho việc tính toán. Nó không luôn luôn chấm dứt.

Một thuộc tính quan trọng khác của Turing Machines là bạn có thể mô tả máy Turing là một từ duy nhất (đây là mã hóa) và tồn tại một máy Turing, được đưa vào làm đầu vào mã hóa của máy và từ , có thể mô phỏng tính toán của trên đầu vào . Điều này sẽ quan trọng trong một chút.w M wMwMw


Chúng ta hãy chỉ ra rằng các ngôn ngữ thông thường - gần như là loại ngôn ngữ đơn giản nhất bạn có thể nghĩ theo quan điểm toán học - có thuộc tính đặc biệt mà chúng được đóng dưới bổ sung. Điều này về cơ bản có nghĩa là trên các ngôn ngữ đó, các khái niệm về tính dễ nhận biết và tính quyết định là tương đương. Điều này không giữ được khi bạn di chuyển lên trong Chomsky HVELy.


Ví dụ về một ngôn ngữ không thể giải quyết được

Chúng tôi sẽ nghiên cứu vấn đề Dừng . Câu hỏi đặt ra là, chúng ta có thể xây dựng một máy Turing rằng, do mã hóa của một máy Turing và một từ , quyết định thời tiết chấm dứt vào đầu vào ?w M wMwMw

Rõ ràng, điều này có thể nhận ra , vì chúng ta chỉ cần mô phỏng trên cho đến khi nó kết thúc, và khi nó xảy ra, hãy nói CÓ. Tuy nhiên, nếu không bao giờ chấm dứt, chúng tôi sẽ không nói KHÔNG, vì vậy chúng tôi nhận ra ngôn ngữ này, nhưng không quyết định nó. Người ta đã chứng minh rằng ngôn ngữ này không thể được quyết định bởi Máy Turing. Điều này liên quan đến một sơ đồ toán học thông thường: một đối số đường chéo, mà tôi sẽ không gọi là trực quan. Bạn có thể kiểm tra bản phác thảo bằng chứng này để làm quen với nó.w MMwM

Tóm lại

Bạn sẽ không thể, đưa ra một ngôn ngữ, chỉ nêu nếu nó có thể quyết định hay không. Không có thuật toán nào có thể làm được điều đó và việc chứng minh một ngôn ngữ không thể quyết định sẽ cần một số suy nghĩ và có thể yêu cầu một số kiến ​​thức về Turing Machines, đối số đường chéo, v.v ...

Tuy nhiên, đây là cách cá nhân của tôi để xử lý câu hỏi này. Thông thường, khi nghiên cứu một ngôn ngữ, tôi cho rằng nó có thể quyết định được, trừ khi nó cho thấy một số hình thức tham khảo về cách thức hoạt động của Turing Machine. Trong trường hợp đó, tôi bắt đầu cảnh giác và cố gắng xác định một thuật toán quyết định ngôn ngữ. Nếu điều này có vẻ không dễ dàng, đôi khi nó giúp phân chia công việc theo cả thuật toán nhận dạng và thuật toán đồng nhận. Nếu tôi vẫn không thể làm được, tôi sẽ cố gắng tạo mối liên hệ giữa ngôn ngữ này và ngôn ngữ khác không thể giải quyết được, chẳng hạn như "Nếu tôi có thể quyết định ngôn ngữ đó, tôi có thể quyết định vấn đề tạm dừng". Đây là một giảm Turing cho một vấn đề không thể giải quyết được, vì vậy vấn đề đầu tiên không thể quyết định được. Nếu tất cả những điều đó không thành công, tôi có thể thử sử dụng các đối số đường chéo, nhưng điều này có thể hơi khó khăn.


1

Một mẹo nhỏ là nếu ngôn ngữ là hữu hạn, thì bạn biết chắc chắn rằng nó có thể quyết định được - vì bạn có thể "mã hóa cứng" một cỗ máy để chấp nhận bất cứ thứ gì trong ngôn ngữ đó. Tuy nhiên tôi thấy cách dễ nhất là giảm từ ngôn ngữ khác


Tương tự làm việc cho các ngôn ngữ đồng hữu hạn.
Raphael

Hơn nữa, một ngôn ngữ có không gian giải pháp hữu hạn được cung cấp đầu vào của nó sẽ có thể quyết định được vì bạn có thể thực hiện tìm kiếm vũ phu.
jmite

1

Như tôi đã đề cập trong bình luận của tôi ở trên, tôi thấy hữu ích khi nghĩ về không gian giải pháp của vấn đề.

Hãy nghĩ về một cái gì đó như . Chúng tôi biết rằng nó là quyết định, vì để kiểm tra nó có một số lượng hữu hạn các giải pháp chúng tôi phải thử. Nếu có một số điều kiện hữu hạn để kiểm tra, trong đó một trong những điều kiện thành công này đảm bảo có, và không ai trong số chúng thành công đảm bảo không, thì vấn đề là có thể quyết định, vì chúng ta chỉ cần kiểm tra các điều kiện liên tiếp. Lưu ý rằng tập hợp các điều kiện này có thể rất lớn (như trong trường hợp các sự cố hoàn thành NP).SAT

Bây giờ hãy xem xét khi không gian giải pháp là vô hạn và chúng ta có thể tạo từng giải pháp có thể theo trình tự và kiểm tra từng giải pháp là có thể quyết định. Trong trường hợp này, chúng tôi biết rằng vấn đề là có thể nhận ra. Ví dụ: một vấn đề hỏi "có số tự nhiên nào để ..." có thể nhận ra được không, bởi vì chúng ta có thể bắt đầu từ 0 và tiếp tục thử mọi số theo thứ tự. Nếu có một giải pháp, chúng tôi đảm bảo sẽ tìm thấy nó, nhưng không nhất thiết phải ràng buộc về thời gian cần thiết để tìm thấy nó. Ngoài ra, thuật toán này sẽ không bao giờ dừng lại nếu không có số nguyên như vậy tồn tại, vì vậy nó không chứng minh rằng vấn đề là có thể quyết định được.

Bạn có thể áp dụng cùng một kỹ thuật cho tập hợp tất cả các chuỗi, tất cả các số nguyên, tất cả các biểu đồ hoặc bất kỳ cấu trúc hữu hạn nào mà chúng ta có thể liệt kê. Điều này sẽ không hoạt động để tìm một số thực hoặc một chuỗi (có thể là vô hạn).

Tuy nhiên, lưu ý rằng một số vấn đề có thể có không gian giải pháp vô hạn và vẫn có thể quyết định được.


"Nếu không gian giải pháp là vô hạn, thì chúng tôi biết rằng vấn đề có thể nhận ra được." -- Không cần thiết. Đầu tiên, không gian giải pháp có thể không được liệt kê một cách hiệu quả (Ví dụ: "Có TM nào tính tổng hàm và do đó [vị ngữ không tầm thường] không?"). Thứ hai, quyết định xem đối tượng được xem là giải pháp có thể là không thể giải quyết được (Ví dụ: "Tìm một TM không dừng lại ở 77.").
Raphael

Ah, đó là một ý tưởng. Chúng tôi biết rằng , do đó, điều đó có nghĩa là nếu chúng tôi có thể hiển thị một vấn đề trong NP (hoặc P cho vấn đề đó) thì nó chỉ đơn giản xuất phát từ đó. Điều đó có thể giúp thu hẹp nó xuống. NP{L| L Decidable}
Steven

Ngoài ra: "Bất cứ điều gì có" khả năng "hữu hạn để thử sẽ là quyết định" - không. Vấn đề tạm dừng có hai câu trả lời có thể nhưng không thể giải quyết được.
Raphael

@Steven Có, nhưng đó là một bằng chứng thậm chí còn khó hơn. (Tập hợp bạn đang đề cập thường được ký hiệu là R, tập hợp các ngôn ngữ đệ quy (ly decidable).)
Raphael

Tôi đoán tôi nên làm rõ. Ý tưởng là bạn không thể bắt bẻ vấn đề tạm dừng theo cách bạn có thể nói, 3-SAT. Hoặc làm thế nào, khi bạn chạy một cái gì đó trên một chiếc PDA, bạn có thể thử tất cả các đường dẫn có thể mặc dù nó không mang tính quyết định. Nhưng đối với một TM, bạn không thể vì nó có thể chạy dài vô tận, do đó, tập hợp "những điều cần thử" tức là các đường dẫn có thể có trong chương trình, không phải là hữu hạn.
jmite

0

Mẹo để xem liệu một ngôn ngữ là không thể giải quyết được là hãy tự hỏi mình câu hỏi "tôi có thể mã hóa một tính toán của máy Turing bằng ngôn ngữ này không"? Hay nói chung hơn, "nó có phức tạp như những gì xảy ra trong một tính toán không?". Tất nhiên đôi khi mã hóa này là khó, và nó giúp biết một danh sách các vấn đề không thể giải quyết được để giảm xuống (như vấn đề tương ứng Post). Nếu bạn không tìm thấy mức giảm như vậy, hãy thử nghĩ về các thuật toán để quyết định ngôn ngữ của bạn. Ví dụ, ngôn ngữ của danh sách các số nguyên trong các đơn hàng tăng không phải là hữu hạn, nhưng thật dễ dàng để thiết kế một thuật toán kiểm tra xem một danh sách có được sắp xếp theo thứ tự tăng hay không, vì vậy ngôn ngữ này có thể quyết định được. Và đối với nhiều ngôn ngữ, chúng tôi không biết về tính quyết định của chúng, vì vậy đây là một câu hỏi khó.


Câu trả lời này đang thúc đẩy trực giác sai, xem tại đây .
Raphael

Tôi không đồng ý rằng đó là trực giác sai. Tất nhiên tôi đã không đề cập đến tất cả các vấn đề, ví dụ, ngôn ngữ có thể được trình bày theo một cách quá phức tạp như trong ví dụ của bạn, và vì vậy trước tiên người ta phải đơn giản hóa nó, để đi đến "bản chất" của nó. Tôi cũng không đề cập đến thực tế là tồn tại các ngôn ngữ không thể giải quyết được "dừng lại" ở trên và "bên dưới" tạm dừng, bởi vì tôi không nghĩ rằng nó giúp trực giác ở cấp độ này.
Denis
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.