Làm thế nào để tổ hợp Y làm gương mẫu tính toán Lamb Lambda không nhất quán?


44

Trên trang Wikipedia cho Bộ kết hợp điểm cố định được viết văn bản khá bí ẩn

Bộ kết hợp Y là một ví dụ về những gì làm cho phép tính Lambda không nhất quán. Vì vậy, nó nên được xem xét với sự nghi ngờ. Tuy nhiên, an toàn khi xem xét tổ hợp Y khi chỉ được định nghĩa trong logic toán học.

Tôi đã tham gia vào một số loại tiểu thuyết gián điệp? Điều gì trên thế giới có nghĩa là những tuyên bố rằng -calculus là "không nhất quán" và nó nên được "xem xét với sự nghi ngờ" ?λ


3
FWIW, đoạn đó đã có trong bài viết Wikipedia từ tháng 1 năm 2014, khi nó được giới thiệu trong bản viết lại khổng lồ này của gần như toàn bộ bài viết .
Ilmari Karonen

Câu trả lời:


51

Nó lấy cảm hứng từ các sự kiện có thật, nhưng cách nó được tuyên bố là hầu như không thể nhận ra và nên được xem xét với sự nghi ngờ, là vô nghĩa.

Tính nhất quán có một ý nghĩa chính xác trong logic: một lý thuyết nhất quán là một lý thuyết mà không phải tất cả các tuyên bố đều có thể được chứng minh. Trong logic cổ điển, đây là tương đương với sự vắng mặt của một mâu thuẫn, lý thuyết tức là một không phù hợp khi và chỉ khi có một tuyên bốví dụ rằng lý thuyết này chứng tỏ cả haivà nó phủ định.AA¬A

Vì vậy, điều này có nghĩa gì liên quan đến tính toán lambda? Không có gì. Tính toán lambda là một hệ thống viết lại, không phải là một lý thuyết logic.

Có thể xem phép tính lambda liên quan đến logic. Coi các biến là đại diện cho một giả thuyết trong một bằng chứng, trừu tượng lambda là bằng chứng theo một giả thuyết nào đó (đại diện bởi biến) và ứng dụng như đưa ra một bằng chứng có điều kiện và bằng chứng của giả thuyết. Sau đó, quy tắc beta tương ứng với việc đơn giản hóa một bằng chứng bằng cách áp dụng modus ponens , một nguyên tắc cơ bản của logic.

Tuy nhiên, điều này chỉ hoạt động nếu bằng chứng có điều kiện được kết hợp với một bằng chứng về giả thuyết đúng. Nếu bạn có bằng chứng có điều kiện giả sử và bạn cũng có bằng chứng , bạn không thể kết hợp chúng lại với nhau. Nếu bạn muốn làm cho việc giải thích công việc tính toán lambda này, bạn cần thêm một ràng buộc chỉ những bằng chứng về giả thuyết phù hợp mới được áp dụng cho các bằng chứng có điều kiện. Đây được gọi là một hệ thống kiểu và ràng buộc là quy tắc gõ nói rằng khi bạn truyền một đối số cho một hàm, loại đối số phải khớp với loại tham số của hàm.n=3n=2

Sự tương ứng của Curry-Howard là sự song hành giữa các hệ thống tính toán và chứng minh đánh máy .

  • các loại tương ứng với các câu lệnh logic;
  • các điều khoản tương ứng với bằng chứng;
  • các loại có người ở (tức là các loại có một thuật ngữ của loại đó) tương ứng với các tuyên bố đúng (tức là các tuyên bố sao cho có bằng chứng của tuyên bố đó);
  • đánh giá chương trình (tức là các quy tắc như beta) tương ứng với các phép biến đổi của bằng chứng (đã chuyển đổi tốt hơn các bằng chứng chính xác thành bằng chứng chính xác).

Một phép tính được gõ có tổ hợp điểm cố định như cho phép xây dựng một thuật ngữ thuộc bất kỳ loại nào (thử đánh giá ), vì vậy nếu bạn thực hiện giải thích logic thông qua thư từ Curry-Howard, bạn sẽ có một lý thuyết không nhất quán. Xem liệu tổ hợp Y có mâu thuẫn với thư từ Curry-Howard không? để biết thêm chi tiết.YY(λx.x)

Điều này không có ý nghĩa đối với phép tính lambda thuần túy, tức là đối với phép tính lambda không có loại.

Trong nhiều phép tính đánh máy, không thể xác định một tổ hợp điểm cố định. Những phép tính được đánh máy này rất hữu ích đối với việc giải thích logic của chúng, nhưng không phải là cơ sở cho ngôn ngữ lập trình hoàn chỉnh Turing. Trong một số phép tính đánh máy, có thể xác định một tổ hợp điểm cố định. Những phép tính được đánh máy này rất hữu ích làm cơ sở cho ngôn ngữ lập trình hoàn chỉnh Turing, nhưng không liên quan đến cách giải thích logic của chúng.

Túm cái vạy lại là:

  • Tính toán lambda không phải là không nhất quán, đó là khái niệm không áp dụng.
  • Một phép tính lambda được gõ mà gán một loại cho mỗi thuật ngữ lambda là không nhất quán. Một số phép tính lambda được gõ như thế, số khác làm cho một số thuật ngữ không thể hiểu được và nhất quán.
  • Calculi lambda gõ không phải là duy nhất raison d'être cho phép tính lambda, và thậm chí mâu thuẫn gõ lambda sỏi là những công cụ rất hữu ích - chỉ cần không để chứng minh điều này.

2
Wow, có rất nhiều thứ để tôi giải nén ở đây. Cảm ơn vì lời giải thích chi tiết. Nó sẽ khiến tôi mất một thời gian để cố gắng mò mẫm tất cả.
Bến I.

4
Về mặt kỹ thuật, xem unyped là un i gõ, bạn có thể tạo một sự tương ứng CH giữa phép tính lambda chưa được đánh dấu và logic. Đó chỉ là một logic rất, rất nhàm chán (và chắc chắn không nhất quán). Các trợ lý chứng minh như NuPRL làm vũng nước một chút. Ngôn ngữ đối tượng của NuPRL chứa phép tính lambda chưa được đánh dấu và bạn có thể dễ dàng xác định tổ hợp Y. NuPRL phân tách mọi thứ một chút khác nhau để nó có một hệ thống sàng lọc kiểu chứ không phải là một hệ thống loại và bài tập không tạo ra các thuật ngữ được gõ tốt mà tạo ra các dẫn xuất gõ.
Derek Elkins

Có phải chỉ mình tôi, hay là kỳ lạ khi áp đặt mô hình "mệnh đề như kiểu" lên phép tính lambda chưa được đánh dấu? Tôi đã luôn thấy mọi người nói về logic trong phép tính lambda chưa được xử lý bằng cách giới thiệu các đối tượng cụ thể là các giá trị boolean truefalse, các mệnh đề là những thứ có đầu ra có giá trị boolean. (và chỉ được coi là mệnh đề trên lĩnh vực điều mà nó làm ra một giá trị boolean).

Trivial (chứng minh mọi tuyên bố) và chứa mâu thuẫn là hai thuộc tính khác nhau. Trong khi chúng tương đương trong logic cổ điển, đối với logic logaconsistent, một hệ thống có thể không nhất quán và không tầm thường.
Taemyr

1
"Không nhất quán", đối với logic dựa trên calcul-tính toán, có nghĩa là "gán mọi loại cho một số thuật ngữ", chứ không phải "gán một loại cho mọi thuật ngữ" (mặc dù trước đây xuất phát từ sau); có rất nhiều ngôn ngữ dựa trên calcul tính toán tương ứng với các logic không nhất quán nhưng trong đó không phải mọi thuật ngữ calcul-tính toán đều có thể đánh máy được.
Jonathan Cast

6

Tôi muốn thêm một vào những gì @Giles nói.

Các Curry-Howard thư làm cho một song song giữa -terms (cụ thể hơn, các loại của -terms) và hệ thống bằng chứng.λλ

Ví dụ: có loại (trong đó có nghĩa là "hàm từ đến "), tương ứng với câu lệnh logic . Hàm có loại , tương ứng với . Chúng ta có thể chuyển đổi bất kỳ loại lambda-tính toán nào thành một tautology logic bằng cách, theo một nghĩa nào đó, "khớp mẫu" trên các hàm.λx.λy.xa(ba)ababa(ba)λx.λy.xy(ab)(ab)(ab)(ab)

Vấn đề phát sinh khi chúng ta xem xét tổ hợp Y, được định nghĩa là . Vấn đề phát sinh bởi vì chúng tôi hy vọng bộ kết hợp Y, với tư cách là bộ kết hợp "điểm cố định", có loại (vì nó lấy một hàm từ loại này sang loại đó và tìm một hàm cố định- điểm cho chức năng đó, có loại đó). Chuyển đổi điều này thành một câu lệnh logic mang lại . Đây là một mâu thuẫn:λf.(λx.f(xx))(λx.f(xx))(aa)a(aa)a

(aa)aaa(¬a¬a)(¬a)¬a¬a

Việc chấp nhận trong một hệ thống loại dẫn đến hệ thống loại không nhất quán. Điều này có nghĩa là chúng ta có thể(aa)a

  • Không cho phép các loại như trong một hệ thống loại (điều này mang lại cho bạn kiểu gõ đơn giản -calculus ) hoặc(aa)aλ
  • Sống với hệ thống loại không nhất quán như một hệ thống suy luận logic.

1
CH liên quan các loại với các đề xuất, chương trình với bằng chứng và thậm chí giảm các biến đổi bằng chứng. Nó không chỉ là về các loại. Tiếp theo, chỉ các loại có người ở tương ứng với tautology. là một loại phép tính lambda (đa hình) ngay cả khi không có thuật ngữ nào cư trú. Giả sử bạn có nghĩa là các loại như , sau đó chấp nhận các loại đó là hoàn toàn tốt, vấn đề là loại đó có cư dân hay không. Ngược lại, chúng ta có thể thêm các thuật ngữ nguyên thủy vào STLC sẽ làm cho logic tương ứng không nhất quán mà không mở rộng hệ thống loại. a . ( a a ) aa,b.aba.(aa)a
Derek Elkins

@DerekElkins, loại thuật ngữ nguyên thủy nào? Ngoài ra, nếu tôi hiểu chính xác, đây chỉ là giả sử (a -> a) -> a luôn có người ở mà tạo ra sự không nhất quán? Vì vậy, không có sự không nhất quán với một ngôn ngữ lập trình đòi hỏi một bằng chứng chấm dứt? Hoặc có bất kỳ nguồn nào khác của sự không nhất quán trong phép tính chưa được đánh dấu hoặc Hindley ‑ Milner đã gõ lambda?
Hibou57

1
@ Hibou57 Thuật ngữ nguyên thủy, tức là hằng số, như thế nào fix. Bạn có thể chỉ khẳng định rằng có một hằng số đối với từng loại . Điều đó sẽ cung cấp cho bạn một hệ thống không nhất quán khi có liên quan đến CH, vì nó sẽ ngụ ý mọi loại đều có . Bạn bổ sung có thể thêm -rules để làm tính toán, và đó sẽ lần lượt, nói rằng, các STLC với Naturals thành một hệ thống Turing hoàn tất, nhưng bạn không cần phải thêm các quy tắc tính toán, và hệ thống vẫn sẽ không nhất quán A f i x (λx.x)δ f i xfixAAfix(λx.x)δfix
Derek Elkins
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.