Giải thích đơn giản về lý do tại sao một số chức năng tính toán nhất định không thể được biểu diễn bằng một thuật ngữ đánh máy?


8

Đọc bài viết Giới thiệu về Giải tích Lambda , tôi đã bắt gặp một đoạn mà tôi không thực sự hiểu, ở trang 34 (chữ in nghiêng của tôi):

Trong mỗi hai mô hình, có một số phiên bản tính toán lambda đánh máy. Trong nhiều hệ thống quan trọng, đặc biệt là những người theo Giáo hội, đó là trường hợp các thuật ngữ có một loại luôn sở hữu một hình thức bình thường. Bằng cách không giải quyết được vấn đề tạm dừng, điều này ngụ ý rằng không phải tất cả các hàm tính toán có thể được biểu diễn bằng một thuật ngữ đánh máy, xem Barendregt (1990), Định lý 4.2.15. Điều này không tệ như âm thanh của nó, bởi vì để tìm ra các chức năng tính toán như vậy không thể được biểu diễn, người ta phải đứng trên đầu của một người. Ví dụ trong 2, lệnh thứ hai gõ lambda, chỉ các hàm đệ quy một phần không thể được biểu diễn là tổng, nhưng không thể chứng minh được trong phân tích toán học (số học bậc hai).

Tôi quen thuộc với hầu hết các khái niệm này, nhưng không phải là khái niệm về hàm đệ quy một phần, cũng không phải là khái niệm về hàm tổng có thể chứng minh được. Tuy nhiên, đây không phải là điều tôi quan tâm khi học.

Tôi đang tìm kiếm một lời giải thích đơn giản về lý do tại sao một số chức năng tính toán nhất định không thể được biểu thị bằng một thuật ngữ đánh máy, cũng như lý do tại sao các chức năng đó chỉ có thể được tìm thấy 'bằng cách đứng trên đầu của một người.'

Câu trả lời:


9

Cho rằng bạn không muốn tìm hiểu các khái niệm chính xác, đây là một lời giải thích trực quan. Trong phần thảo luận bên dưới, "hàm" luôn đề cập đến một hàm ánh xạ các số tự nhiên thành số tự nhiên (có thể không xác định tại một số đối số).

Bất kỳ ngôn ngữ lập trình nào có

  1. cú pháp tính toán và quy tắc đánh giá, và
  2. thực hiện mọi chức năng tính toán tổng

nhất thiết phải thực hiện một số chức năng một phần .

Để thấy điều này, giả sử đó là trường hợp mà mọi chức năng có thể xác định trong ngôn ngữ này là tổng số. Vì ngôn ngữ có cú pháp tính toán, chúng tôi có thể liệt kê tất cả các định nghĩa về hàm (chỉ cần liệt kê tất cả các chuỗi và lọc ra các chuỗi gây ra lỗi cú pháp). Bởi vì các quy tắc đánh giá là có thể tính toán được, giả định thứ hai cho phép chúng ta kết luận rằng trong ngôn ngữ của chúng ta, chúng ta có thể định nghĩa hàm tổng eval(n,m)thể đánh giá nhàm có thể xác định thứ trên m(về cơ bản đây là một trình thông dịch mini được viết bằng chính ngôn ngữ). Nhưng sau đó là chức năng

λ k . (1 + eval(k,k))

là một hàm tổng có thể xác định khác với mọi hàm tổng có thể xác định, một mâu thuẫn.

λ

λλeval


Tôi sợ rằng tôi không thể phân tích câu giải thích thứ hai của bạn: Bất kỳ ngôn ngữ lập trình nào với 1. và 2. xác minh điều gì? Tôi giả sử bạn muốn nói rằng không có ngôn ngữ nào có thể tồn tại ...
cody

Xin lỗi, làm hỏng văn bản. Nó nên đọc tốt bây giờ.
Andrej Bauer

Thật tuyệt, không nghĩ về điều này. Xem ở đây cho nền của câu trả lời này.
Raphael

4

λ

λNN{}λtnt nTtttn

n,t n terminates

TTtTT

Bây giờ vấn đề là chương trình đại đa số mà chúng tôi mong muốn viết (sắp xếp danh sách, duyệt đồ thị, hệ điều hành) không chỉ là các hàm tổng, mà còn có thể chứng minh được tổng số trong các hệ thống logic hợp lý, như Số học Peano.

λ

Điều này có nghĩa bởi những giải thích ở trên rằng có những thuật ngữ có tổng số nhưng không thể chứng minh được, nhưng các hàm như vậy là cực kỳ hiếm, vì chúng rất hiếm đối với Số học Peano (và rất hiếm trong lý thuyết bậc hai). Do đó tuyên bố "đứng trên đầu của bạn".


2
TTff

Cảm ơn vì những điều đó, Andrej. Một lời giải thích đầy đủ hơn có lẽ cũng sẽ chi tiết những gì chúng ta yêu cầu về lý thuyết của chúng ta, cụ thể là lý thuyết đó ít nhất có thể diễn tả ý nghĩa của việc chấm dứt (số học với phép nhân là đủ, nhưng tôi có xu hướng ủng hộ các hệ thống biểu cảm hơn một chút).
cody

Phải, tôi nghĩ thật công bằng khi chỉ ra rằng còn thiếu một số điều kiện kỹ thuật, vì vậy những độc giả quan tâm có thể tìm kiếm chúng.
Andrej Bauer

3

Tôi thấy hơi khó để viết chính xác bằng chứng, nhưng tôi hy vọng lời giải thích này cung cấp cho bạn đủ trực giác để xem tại sao các thuật ngữ gõ đơn giản có thể đại diện cho tất cả các thuật ngữ chưa được gõ.

βf::αβγαββγβ

Y

Y=λf.(λx.f(xx))(λx.f(xx))

Khi chúng tôi cố gắng giảm -combinator, điều sau đây xảy ra:Y

( λ x . g

λf.(λx.f(xx))(λx.f(xx))g
g
(λx.g(xx))(λx.g(xx))
g
g((λx.g(xx))(λx.g(xx)))
g(g((λx.g(xx))(λx.g(xx))))

Bất kể chức năng nào chúng ta vượt qua, chúng ta bị mắc kẹt trong một chuỗi giảm vô hạn! Nếu chúng tôi cố gắng ghim một loại STLC trên UTLC -combinator , chúng tôi sẽ nhanh chóng thấy điều này là không thể, vì ứng dụng chức năng không thu nhỏ loại như yêu cầu trong STLC. Các -combinator rõ ràng là tính toán (nó đại diện, sử dụng đệ quy, các khái niệm về một vòng lặp vô hạn), nhưng nó không thể được đại diện trong STLC, như tất cả các điều khoản STLC là mạnh bình thường.YYY


Đối số này có rất ít liên quan đến thực tế là không phải tất cả các hàm lý thuyết số đều có thể biểu diễn trong loại -calculus, đó là những gì câu hỏi nói về. Theo nghĩa nào thì tổ hợp là một hàm tổng? YλY
Andrej Bauer

@AndrejBauer Câu hỏi kết thúc bằng "Tôi đang tìm kiếm một lời giải thích đơn giản về lý do tại sao một số chức năng tính toán nhất định không thể được biểu thị bằng một thuật ngữ đánh máy". Làm thế nào để câu trả lời của tôi không bao gồm điều này? Các -combinator là một ví dụ của một hàm tính toán mà không thể được đại diện bởi một thuật ngữ chỉ đơn giản là đánh máy, và tôi hy vọng giải thích của tôi là đủ chặt chẽ để giải thích lý do tại sao nó không thể được đại diện bởi một thuật ngữ chỉ đơn giản là gõ. Y
merijn

Chà, nếu bạn định diễn giải câu hỏi là hỏi ví dụ về hàm một phần không thể xác định được trong -calculus, thì bất kỳ hàm nào cũng sẽ làm được (và câu hỏi là vô nghĩa). Ví dụ, một trong đó không được xác định ở khắp mọi nơi. Nó cũng không thể xác định được trong -calculus được gõ đơn giản . Câu hỏi là về tổng số chức năng, khi tôi đọc nó. λλλ
Andrej Bauer
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.