Có thể chứng minh một chức năng là idempotent?


12

Có thể sử dụng các loại tĩnh hoặc phụ thuộc để chứng minh một hàm là idempotent?

Tôi đã tìm kiếm Google và nhiều nơi khác nhau trên StackOverflow / StackExchange để tìm câu trả lời không có may mắn. Gần nhất tôi tìm thấy là cuộc trò chuyện về Idris: https://groups.google.com/forum/#!topic/idris-lang/yp7vrspChRg

Thật không may, cuộc thảo luận đó là một chút trên đầu của tôi.


3
Tôi không đăng bài này dưới dạng câu trả lời vì tôi không chắc chắn 100%, nhưng tôi tin rằng điều này là không thể do Định lý của Rice .
vườn

4
Đây là một câu hỏi hấp dẫn và trực giác của tôi chỉ ra rằng điều này có thể thực hiện được bằng một ngôn ngữ bị hạn chế, không hoàn chỉnh. Tuy nhiên, các lập trình viên tập trung vào các câu hỏi liên quan đến vòng đời phát triển phần mềm (xem trung tâm trợ giúp để biết chi tiết), trong khi đây dường như là một câu hỏi về khoa học máy tính. Trang web Khoa học Máy tính có thể phù hợp hơn và dẫn đến câu trả lời tốt hơn.
amon

2
@gardenhead Định lý của Rice nói rằng bất kỳ tài sản nào mà hành vi của chương trình có thể có, đôi khi không thể xác định liệu chương trình có thuộc tính đó hay không. Có một sự khác biệt lớn giữa "điều này đôi khi là không thể" và "điều này là không thể".
Tanner Swett

2
Nhận xét cuối cùng của tôi là khá mơ hồ. Trong mọi trường hợp, đây là định lý của Rice nói: không có thuật toán nào phân loại chính xác tất cả các chức năng là không hoạt động hay không bình thường. Tuy nhiên, vẫn còn các thuật toán hữu ích phân loại một số chức năng là không hoạt động hay không.
Tanner Swett

2
OP đã hỏi về việc chứng minh rằng một hàm là idempotent, không có thuật toán phân loại các hàm là id idotent hay không. Sự khác biệt chính là một bằng chứng có thể được viết bởi một người. Đối với Turing hoàn chỉnh, nó thực sự không phải là một vấn đề .
gallais

Câu trả lời:


3

Đối với các chức năng nhất định đó là. Đặc biệt là khi bạn biết chức năng ;-)

Nếu bạn có ý bởi câu hỏi của bạn "có một thuật toán để tự động quyết định xem một hàm tùy ý có phải là idempotent hay không", câu trả lời là không, do các định lý đã được đề cập trong các bình luận. Tuy nhiên, đối với các lớp chức năng cụ thể, người ta có thể - về mặt lý thuyết - rất dễ dàng quyết định xem hàm đó có phải là idempotent hay không. Ví dụ: nếu hàm là thuần túy (có nghĩa là: không có bất kỳ tác dụng phụ nào) và người ta biết nó luôn trả về một giá trị trong một khoảng thời gian hữu hạn cho bất kỳ đầu vào cụ thể nào, thì có thể quyết định đơn giản bằng cách thử nếu f(f(x))=f(x)có bất kỳ đầu vào nào có thể xđến chức năng. Không phải điều này sẽ rất hiệu quả, nó có thể chạy cho đến hết vũ trụ.

Vì vậy, nếu đó không phải là câu trả lời bạn đang tìm kiếm, hãy viết một câu hỏi hay hơn, hiện tại nó vẫn chưa rõ chính xác những gì bạn đang thực sự tìm kiếm.


Cảm ơn câu trả lời. Khả năng "quyết định tự động" chính xác là những gì tôi đang tìm kiếm.
bmaddy

2
Để mở rộng trên 'cho một số chức năng nhất định, đó là tuyên bố: Tính không ổn định có thể được chứng minh cho bất kỳ chức năng nào chỉ chấp nhận một lượng đầu vào hữu hạn (bằng cách thử tất cả chúng) hoặc một loại đầu vào được xác định theo cách đệ quy (như tự nhiên các số hoặc danh sách được liên kết), có nghĩa là bạn chỉ cần chứng minh rằng tính không thay đổi là đúng với trường hợp cơ sở và trường hợp đệ quy.
Qqwy
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.