Đại số boolean có thể được thể hiện bằng cách gõ lambda caclulus đơn giản?


15

Đại số Boolean có thể được biểu thị bằng phép tính lambda chưa được xử lý theo (ví dụ) theo cách này.

true  = \t. \f. t;
false = \t. \f. t;
not   = \x. x false true;
and   = \x. \y. x y false;
or    = \x. \y. x true y;

Ngoài ra đại số boolean có thể được mã hóa trong Hệ thống F theo cách này :

CBool = All X.X -> X -> X;
true  = \X. \t:X. \f:X. t;
false = \X. \t:X. \f:X. f;
not   = \x:CBool. x [CBool] false true;
and   = \x:CBool. \y:CBool. x [CBool] y false;
or    = \x:CBool. \y:CBool. x [CBool] true y;

Có cách nào để biểu thị đại số boolean trong phép tính lambda được gõ đơn giản không? Tôi cho rằng câu trả lời là KHÔNG. ( Ví dụ: Người tiền nhiệm và danh sách không thể biểu thị được trong phép tính lambda đơn giản .) Nếu câu trả lời là KHÔNG thực sự, có một lời giải thích trực quan đơn giản, tại sao không thể mã hóa booleans trong phép tính lambda được gõ đơn giản?

CẬP NHẬT: Chúng tôi giả định rằng có các loại cơ sở.

CẬP NHẬT: Câu trả lời tiêu cực với lời giải thích đã được tìm thấy ở đây (Nhận xét "Đây là bản phác thảo bằng chứng cho thấy phép tính lambda được gõ đơn giản với các sản phẩm và vô số loại cơ sở không có booleans.") Đây là những gì tôi đang tìm kiếm.


2
Hãy thử nhập các định nghĩa vào Haskell và xem điều gì sẽ xảy ra khi bạn đưa các kiểu cho các biểu thức khác nhau. Bạn sẽ thấy rằng mã phụ thuộc rất nhiều vào tính đa hình.
Dave Clarke

2
Xin lỗi vì có tính mô phạm, nhưng các câu hỏi về tính biểu cảm của điều này hoặc tính toán đó chỉ trở nên có ý nghĩa với sự hiểu biết rõ ràng về ý nghĩa của bạn khi "bày tỏ", "được mã hóa" và "đại diện", vì có nhiều cách hiểu hợp lý các thuật ngữ này. Hơn nữa, vì bạn quy định sự tồn tại của các loại cơ sở, bạn cần phải cụ thể về những gì chúng là, và các hàm tạo / hàm hủy mà chúng đi kèm.
Martin Berger

3
Xin lỗi rằng tôi đã không phạm tội. Câu trả lời đã được tìm thấy ở đây: math.andrej.com/2009/03/21/ Khăn
Ilya Klyuchnikov

3
Tôi cảm thấy mình nên nhận được một số tín dụng cho việc điều hành một blog tiện lợi như vậy :-)
Andrej Bauer

7
ÔiB= =ÔiÔiÔitrbạne= =λx:Ôi.λy:Ôi.x , n o t = λ một : B . λ x : O . λ y : O . một y x , một n d = λ một : B . λ b : B . λ x : O . λ y : O . a ( b x y ) y , o rfmộttôiSe= =λx:Ôi.λy:Ôi.ynot= =λmột:B.λx:Ôi.λy:Ôi.mộtyxmộtnd= =λmột:B.λb:B.λx:Ôi.λy:Ôi.một(bxy)yor= =λmột:B.λb:B.λx:Ôi.λy:Ôi.mộtx(bxy)

Câu trả lời:


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.