Tại sao con người có thể giải quyết một số vấn đề không thể giải quyết được của Viking?


44

Kết hợp mẫu bậc cao là một vấn đề không thể giải quyết được. Điều đó có nghĩa là không có thuật toán nào, đưa ra một phương trình a => b, trong đó ablà các thuật ngữ mở trên phép tính lambda được gõ đơn giản, tìm một sự thay thế Ssao cho aS => bS, có =>nghĩa là "có cùng dạng Bn bình thường". Tuy nhiên, con người có thể giải quyết vấn đề đó một cách hiệu quả. Ví dụ, đưa ra vấn đề sau:

a = (λt . t 
    (F (λ f x . (f (f (f x))))) 
    (F (λ f x . (f (f x)))))
b = (λ t . t
    (λ f x . (f (f (f (f (f (f x)))))))
    (λ f x . (f (f (f (f x))))))

Bất kỳ người nào có đủ kiến ​​thức về phép tính lambda sẽ có thể nhận thấy Flà hàm "nhân đôi" cho số nhà thờ, nhanh chóng đi kèm với giải pháp rằng

 F = (λ a b c . (a b (a b c)))

Câu hỏi của tôi là: nếu vấn đề đó là không thể giải quyết được, làm thế nào con người có thể giải quyết nó một cách nhanh chóng và dễ dàng?


24
"Con người có thể giải quyết vấn đề đó một cách hiệu quả" - cần dẫn nguồn. Bằng chứng của bạn cho điều đó là gì? Hiển thị một ví dụ nơi bạn có thể giải quyết nó một cách hiệu quả không có nghĩa là bạn có thể giải quyết nó một cách hiệu quả cho tất cả các trường hợp của vấn đề. Bạn không thể chứng minh "X là đúng, với tất cả X" bằng cách hiển thị một ví dụ về X trong đó X là đúng.
DW

33
Một vấn đề là không thể giải quyết được có nghĩa là không có thuật toán nào trả lời đúng "có" hoặc "không" cho mọi trường hợp của vấn đề. Nó không ngụ ý rằng người ta có thể tìm thấy một thuật toán giải quyết một số (hoặc nhiều) trường hợp của vấn đề. [Heh. Khi DW trả lời trong khi tôi đang viết nhận xét này.]
Rick Decker

23
Giải quyết vấn đề? Tôi thậm chí không hiểu vấn đề này.
MikeTheLiar

2
Cách tôi hiểu nó là thế này: Giải pháp đó là một cách đặc biệt. Mỗi trường hợp của vấn đề có một - trong hầu hết các trường hợp không dễ bị thúc đẩy như trong ví dụ của bạn, nhưng bạn luôn có thể nói 'nếu bạn lấy ví dụ X, xuất Y' vì thuật toán chỉ có thể được đánh giá dựa trên tính chính xác - nhưng mã hóa cứng tất cả các giải pháp như vậy theo cách này không tạo ra một quy trình hữu hạn (là loại hợp lý duy nhất và do đó thường có nghĩa là gì). Nói cách khác, để giải quyết vấn đề, bạn không được phép xem trường hợp nào được đưa ra trước khi chọn chiến lược của thuật toán.
Vandermonde

Ngoài ra, đây là lý do tại sao chỉ có các vấn đề với số lượng phiên bản vô hạn thường được xem xét hoặc được gọi như vậy, vì nếu không bạn có thể liệt kê tất cả các giải pháp như trên.
Vandermonde

Câu trả lời:


78

Con người có thể giải quyết một số trường hợp của vấn đề đó một cách hiệu quả, nhưng không có lý do gì để tin rằng con người có thể giải quyết tất cả các trường hợp một cách hiệu quả. Hiển thị một trường hợp mà con người có thể giải quyết hiệu quả không có nghĩa là con người có thể giải quyết mọi trường hợp một cách hiệu quả.

Không thể giải quyết được có nghĩa là "không có thuật toán nào có thể giải quyết tất cả các trường hợp và luôn luôn chấm dứt". Vẫn có thể có một thuật toán có thể giải quyết một số trường hợp , ngay cả đối với một vấn đề không thể giải quyết được.

Vì vậy, không có mâu thuẫn.


23
@srvm, yup, nó có nghĩa là vậy. Ví dụ, đây là một ví dụ ngu ngốc của thuật toán máy tính: "nếu đầu vào chính xác là ví dụ được đưa ra trong câu hỏi của bạn, thì đầu ra F = (λ a b c . (a b (a b c)))và tạm dừng". Đó là một thuật toán máy tính giải quyết vấn đề cho một số trường hợp (cụ thể là cho chính xác 1 trường hợp). Vâng, đó là OK - hỏi một câu hỏi mới như thế có vẻ như là điều đúng đắn để làm. Như thường lệ, vui lòng cho chúng tôi biết bạn đã thực hiện nghiên cứu nào trong câu hỏi (bạn nên thực hiện một số trước khi hỏi).
DW

10
Trường hợp các vấn đề thực sự khó khăn là tuyên bố rằng ngay cả trong NP hoàn thành các vấn đề, hầu hết các trường hợp đều có thể được giải quyết dễ dàng. Điều này phù hợp với kinh nghiệm của tôi. Thông thường có các tính năng của vấn đề làm cho (ít nhất là một phần) giải pháp rõ ràng. Những người khó khăn được cân bằng cẩn thận giữa thành công và thất bại, nhưng không có nhiều trong số đó.
Ross Millikan

3
@srvm nếu bạn nghĩ về nó, giải quyết các vấn đề khó khăn như thế này trong các trường hợp đặc biệt là chính xác những gì một trình tối ưu hóa phải làm.
Cort Ammon

2
@srvm: Một ví dụ tuyệt vời về một vấn đề không thể giải quyết được mà chúng tôi làm cho máy tính giải quyết gần như mỗi ngày là vấn đề tạm dừng. Chúng tôi biết rằng vấn đề tạm dừng là không thể giải quyết được nhưng chúng tôi vẫn kiên trì viết linters, máy phân tích tĩnh và trình biên dịch cố gắng phát hiện các vòng lặp vô hạn không mong muốn. Làm thế nào chúng ta làm điều đó là bằng "quy tắc của ngón tay cái". Đó là, chúng ta biết từ kinh nghiệm của con người (không phải thuật toán) rằng một số loại mã nhất định đi vào vòng lặp vô hạn. Vì vậy, chúng tôi yêu cầu máy tính tìm kiếm các trường hợp chúng tôi biết. Chúng tôi biết rằng các chương trình như vậy sẽ không bao giờ bắt tất cả các lỗi. Nhưng nó tốt hơn là không có gì.
slebetman

2
cho hậu thế, một liên kết mới đến: Trường hợp thực sự có vấn đề khó khăn
Alex Moore-Niemi

3

Là một trong những ghi chú nhận xét, người ta nên biết rằng có một số thuật toán khá tốt để giải quyết Kết hợp mẫu bậc cao trong thực tế (vì một tìm kiếm nhanh trên google sẽ tiết lộ).

Tôi không biết bất kỳ vấn đề nào giải quyết vấn đề cụ thể này, nhưng vấn đề "nhân đôi" này cảm thấy gần gũi hơn với lĩnh vực tổng hợp chương trình . Tôi tin rằng có những hệ thống tổng hợp chương trình có thể giải quyết loại vấn đề này.

Thật dễ dàng để tạo ra các ví dụ làm cho các hệ thống đó bị nghẹt thở, và có vẻ như con người đặc biệt giỏi trong các loại vấn đề này. Tạo ra các thuật toán gần gũi hơn với con người trong khả năng giải quyết các loại vấn đề này là mục đích của việc chứng minh định lý tự độngtrí tuệ nhân tạo (cho các nỗ lực tham vọng / phi thực tế hơn).


1

Con người luôn cố gắng giải quyết vấn đề bằng kiến ​​thức của riêng mình, vì vậy con người phát triển một số thuật toán để giải quyết vấn đề với một số trường hợp vấn đề. Vì vậy, con người phát triển một thuật toán, nhưng không có gì chắc chắn rằng thuật toán cụ thể có thể giải quyết mọi vấn đề. Vì vậy, không có thuật toán nào có thể giải quyết mọi vấn đề, nhưng vẫn có một số vấn đề có thể giải quyết bằng con người mặc dù không có một thuật toán hoàn hảo cho điều đó như chúng ta có thể nói rằng chúng ta biết cách giải quyết vấn đề nhưng chúng ta không có thuật toán .


8
Đây không phải chỉ là một cách diễn đạt của câu trả lời sao? Tôi biết tôi đã chỉ trích hầu hết các câu trả lời của bạn nên những điều sau đây nghe có vẻ không trung thực, nhưng thực tế không phải vậy. Nó thực sự là tuyệt vời mà bạn muốn đóng góp cho trang web. Sẽ thật tuyệt nếu bạn có thể giúp chúng tôi trả lời một số trong số 2500 câu hỏi chưa được trả lời của chúng tôi , thay vì những câu hỏi mà chúng tôi đã có câu trả lời nói tất cả những gì bạn muốn nói. Cảm ơn!
David Richerby
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.