Sự tương đương của hai biểu thức lambda cho KHÔNG


7

Tôi đã thấy hai biểu thức lambda khác nhau cho hàm KHÔNG logic.
Một trong số họ chỉ áp dụng tham số của nó cho các hằng số truefalsebên trong theo thứ tự ngược lại:

NOT=λx.xfalsetrue=λx.x(λt.λf.f)(λt.λf.t)

và một tham số khác nắm bắt thêm hai tham số thay vì chuyển chúng sang hàm trả về bên ngoài và áp dụng cho chúng theo thứ tự ngược lại:x

NOT=λx.λt.λf.xft

trong đó cái khác có vẻ đơn giản hơn một chút (và nó cũng đơn giản hơn khi được mã hóa dưới dạng nhị phân).

Vì vậy, câu hỏi của tôi là:
Có sự chuyển đổi nào có thể đưa tôi từ một trong những đại diện này sang đại diện khác không?

Tôi thấy chúng tương đương "mở rộng", nghĩa là cả hai đều cho kết quả như nhau. Nhưng tôi muốn "chứng minh" bằng cách nào đó bằng các phép biến đổi đại số, chẳng hạn như các phép biến đổi alpha, beta và eta. Thật không may, không ai trong số này có thể giúp tôi trong trường hợp này: Alpha chỉ để đổi tên. Beta chỉ hoạt động cho các lệnh gọi hàm, nhưng chúng ta không có bất kỳ lệnh gọi hàm nào ở đây có thể bị giảm, vì là miễn phí trong thân hàm (mặc dù không phải toàn bộ biểu thức) trong tất cả các biểu thức này cho đến khi chúng ta thực sự gọi một cái gì đó. Cái gần nhất có vẻ là eta, liên quan đến các tham số chuyển tiếp và tương đương mở rộng, nhưng khi các tham số bị đảo ngược, nó không phải là chuyển tiếp đơn giản nữa và eta dường như không áp dụng ở đây.xNOT

Có thiếu quy tắc chuyển đổi nào nữa không?
(Chà, tôi đoán họ sẽ không bỏ qua hai chữ cái Hy Lạp mà không có lý do cụ thể, phải không?)

PS: Câu hỏi này thực sự là một mô hình, vì có nhiều định nghĩa khác cho các hàm khác có một số dạng khác nhau có vẻ tương đương nhau, nhưng hoàn toàn khác nhau về các quy tắc giảm đã biết. Tôi đã chọn ví dụ đơn giản nhất cho vấn đề này.

Chỉnh sửa:
Để làm rõ hơn những gì tôi muốn biết, đây là sơ đồ hiển thị các bước giảm cho cả hai phiên bản của notchức năng: http://sasq.comyr.com/Stuff/Lambda/Not.png

Như bạn có thể thấy, cả hai thực sự đều giảm đến cùng một kết quả (trái với những gì @Jonathan Gallagher đã nói bên dưới). Đây là những gì tôi đã biết: rằng chúng là hợp lưu, và vì vậy chúng tương đương với Church-Rosser. Tuy nhiên, điều tôi không biết là nếu có bất kỳ quy tắc chuyển đổi nào (tương tự như alpha, beta & eta) có thể cho phép tôi chuyển đổi một dạng này notsang dạng khác. Điều này sẽ cho phép tôi ít nhất đảm bảo nếu một số chức năng khác (phức tạp hơn hai chức năng này ở đây), cũng tương đương, có thể khó khi chúng có thể giảm xuống nhiều hơn chỉ hai câu trả lời có thể. Tôi muốn biết nếu có một số quy tắc chuyển đổi có thể cho phép tôi chuyển đổi một định nghĩa chuyên sâu sang một định nghĩa khác khihai hàm đã tương đương về mặt mở rộng (nghĩa là chúng cho cùng kết quả cho cùng một tham số). Hoặc (sẽ tốt hơn) nếu một số chức năng có thể được chuyển đổi bằng cách nào đó sang chức năng khác ngay cả khi tôi không biết liệu chúng có tương đương với nhau không.


Bạn sẽ không thể để chứng minh bất cứ điều gì chỉ trên hai mã hóa không, nhưng kết quả mà bạn có thể muốn chứng minh sẽ là một cái gì đó như: cho một thuật ngữ lambda boolean, nên giảm với cùng bình thường hình thức, cho dù bạn chọn mã hóa nào. fNOT f true false
Tpecatte

Hmm, vì vậy ... bạn đề nghị sử dụng Định lý Church-Rosser để hiển thị hợp lưu của cả hai mức giảm? Nhưng nó không gợi ý rằng có thể có một số chuyển đổi liên quan? (có thể một số chưa được phát hiện)
SasQ

Tôi không chắc có bất kỳ sự biến đổi nào liên quan, hợp lưu chỉ có nghĩa là sự lựa chọn không thực sự quan trọng. Nó giống như số nguyên Church, bạn có thể trao đổi hai tham số để xác định số nguyên và cả hai đều hợp lệ và tương đương theo cách nào đó khi được "đánh giá" nhưng không tương đương bằng cách sử dụng các phép biến đổi.
Tpecatte

Câu trả lời:


3

Để chứng minh hai biểu mẫu KHÔNG thường không tương đương nhau, tất cả những gì bạn phải làm là tìm một thuật ngữ mà khi mỗi biểu mẫu được áp dụng, sẽ trả về một kết quả khác nhau, chẳng hạn như:

NOT1λx.x=(λx.x(λt.λf.f)(λt.λf.t))λx.x=λx.x

NOT2λx.x=(λx.λt.λf.xft)λx.x=λt.λf.ft


-3

Đặt cái đầu tiên không được gọi là not1 và not2 thứ hai. Sau đó, bạn có những điều sau đây:

not1MβMfalsetrue
not2Mβλtf.Mftηλt.MtηM

Bây giờ, nếu chúng ta giả sử rằng thì mức giảm trên cùng sẽ cho chúng ta sai trong khi mức giảm dưới cùng sẽ cho chúng ta đúng - do đó việc xác định dường như sẽ cho kết quả lạ.

M=true

Đó là vì bạn đã mắc lỗi. Theo tôi biết, bạn không thể giảm theo cách đó. là OK, và đây là hình thức bình thường đúng cho đến khi bạn biết . Nhưng đây không phải là: ; bạn không thể thoát khỏi vì đây không phải là tham số cuối cùng trong ứng dụng hàm phụ. Nếu bạn gọi hàm giảm theo cách đó với cùng tham số, nó sẽ trả về , lần lượt sẽ được gọi trên tham số khác (trước đây lànot2Mβλtf.MftMλtf.Mftηλt.MtλfMtf ), cung cấp choMtf, không phải Mft.
SasQ

Tôi tin rằng bạn không chính xác. Eta là một bản viết lại nên nó phải là một sự đồng dạng - đóng dưới sự thay thế và bối cảnh. Điều này sẽ cho phép giảm được đưa ra. Tôi cũng có thể làm theo cách khác nếu bạn thích. BộS=λf.Mf). Sau đóλt.StηS và sau đó một lần nữa, λf.MfηM.
Jonathan Gallagher

1
@JonathanGallagher: λtf.Mft nên được đọc là λt.λf.((Mf)t)không phảiλt.(λf.(Mf))t. Bạn đã sai parenheses của bạn, đó là lý do tại sao bạn nghĩ rằng bạn có thể thực hiệnη-Giảm giá.
Andrej Bauer

Ah. Tôi hiểu rồi. Cảm ơn bạn đã làm rõ. Phản hồi của tôi không đúng.
Jonathan Gallagher
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.