Một quine trong tính toán lambda tinh khiết


13

Tôi muốn một ví dụ về một quine trong phép tính lambda thuần túy . Tôi đã khá ngạc nhiên khi tôi không thể tìm thấy một người bằng cách googling. Trang quine liệt kê các câu hỏi cho nhiều ngôn ngữ "thực", nhưng không phải cho phép tính lambda.

Tất nhiên, điều này có nghĩa là xác định những gì tôi có nghĩa là một quine trong phép tính lambda, mà tôi làm dưới đây. (Tôi đang yêu cầu một cái gì đó khá cụ thể.)

Ở một vài nơi, ví dụ như Larkin và cổ phiếu (2004), tôi thấy sau đây được trích dẫn như một khái niệm "tự sao chép": (λx.xx)(λx.xx) . Điều này tự giảm đi sau một bước giảm beta duy nhất, mang lại cảm giác giống như bằng cách nào đó. Tuy nhiên, nó không giống như ở chỗ nó không chấm dứt: việc giảm beta tiếp tục sẽ tiếp tục tạo ra cùng một biểu thức, vì vậy nó sẽ không bao giờ giảm xuống dạng bình thường. Đối với tôi, quine là một chương trình chấm dứt và tự xuất ra, và vì vậy tôi muốn một biểu thức lambda với thuộc tính đó.

Tất nhiên, bất kỳ biểu thức nào không chứa redexes đều ở dạng bình thường, và do đó sẽ tự chấm dứt và xuất ra. Nhưng điều đó quá tầm thường. Vì vậy, tôi đề xuất định nghĩa sau với hy vọng rằng nó sẽ thừa nhận một giải pháp không tầm thường:

định nghĩa (dự kiến): Một quine trong phép tính lambda là một biểu thức có dạng

(λx.A)
(trong đó A là viết tắt của một số biểu thức tính toán lambda cụ thể) sao cho ((λx.A)y) trở thành(λx.A) hoặc một cái gì đó tương đương với nó dưới sự thay đổi của tên biến, khi được giảm xuống dạng bình thường, chobất kỳđầu vàoy .

Cho rằng phép tính lambda tương đương với Turing như bất kỳ ngôn ngữ nào khác, có vẻ như điều này là có thể, nhưng phép tính lambda của tôi bị gỉ, vì vậy tôi không thể nghĩ ra một ví dụ.

Tài liệu tham khảo

James Larkin và Phil Stocks. (2004) "Các biểu thức tự sao chép trong phép tính Lambda" Các hội thảo về nghiên cứu và thực hành trong công nghệ thông tin, 26 (1), 167-173. http://epublications.bond.edu.au/infotech_pub/158


Không phải là một câu trả lời cho câu hỏi của tôi, nhưng đối với tài liệu tham khảo trong tương lai của riêng tôi (và cho khách truy cập trong tương lai) sẽ rất hữu ích khi có một liên kết đến wiki.haskell.org/Combinatory_logic , trong đó ai đó có suy nghĩ sâu sắc hơn về các câu hỏi so với tôi.
Nathaniel

Lưu ý rằng một quine cần phải tạo mã nguồn riêng của nó . Sản xuất chức năng mà nó đại diện là không đủ.
PyRulez

@PyRulez mã nguồn cho biểu thức lambda là gì? Nếu đó là một chuỗi các ký tự thì biểu thức lambda không thể xuất ra nó và do đó chúng ta có thể định nghĩa từ "quine" có nghĩa là một cái gì đó hơi khác biệt cho các biểu thức lambda mà không sợ mơ hồ. Mặt khác, nếu bạn nghĩ mã nguồn là bản thân lambda expesssion thì "mã nguồn" và "hàm mà nó đại diện" là như nhau. Vì vậy, tôi nghĩ rằng tôi ổn ở đây.
Nathaniel

có một mã hóa nhà thờ cho chuỗi. Một phép tính lambda nên xuất ra mã hóa nhà thờ của chuỗi ký tự đại diện cho nó.
PyRulez

Chắc chắn, điều đó không khó để làm, nếu bạn xác định nó theo cách đó. Câu hỏi này là về một điều khác biệt.
Nathaniel

Câu trả lời:


8

Bạn muốn có một hạn như vậy M bước sóng :QMΛ

QMβQ

Tôi sẽ chỉ định không hạn chế thêm đối với (ví dụ về hình thức của nó và liệu nó có bình thường hóa không) và tôi sẽ cho bạn thấy rằng nó chắc chắn phải không bình thường hóa.Q

  1. Giả sử trong hình thức bình thường. Chọn M x (chúng ta có thể làm như vậy vì định lý cần giữ cho tất cả M ). Sau đó, có ba trường hợp.QMxM

    • là một số nguyên tử a . Khi đó Q M a x . Điều này không thể giảm đến a .QaQMaxa
    • là một số ứng dụng ( R S ) . Sau đó, Q M ( R S ) x . ( R S ) là một dạng bình thường theo giả thuyết, vì vậy ( R S ) x cũng ở dạng bình thường và không thể rút gọn thành ( R S ) .Q(RS)QM(RS)x(RS)(RS)x(RS)
    • là một số trừu tượng ( λ x . Một ) (nếu x là nghĩa vụ phải được tự do trong một , sau đó vì đơn giản chúng ta chỉ có thể chọn M tương đương với bất cứ điều gì biến λ tóm tắt trên). Sau đó, Q M ( λ x . Một ) x beta Một [ x / x ] Một . Kể từ ( λ x . Một ) là ở dạng bình thường, như vậy là MộtQ(λx.A)xAMλQM(λx.A)xβA[x/x]A(λx.A)A. Do đó, chúng ta không thể giảm xuống ( λ x . A ) .A(λx.A)

    Vì vậy, nếu như vậy tồn tại, nó không thể dạng bình thường.Q

  2. Để hoàn chỉnh, giả sử một hình thức bình thường, nhưng không phải là trong hình thức bình thường (có lẽ đó là bình thường hóa một cách yếu ớt), tức là N beta -nf với N Q như vậy M bước sóng : Q M beta Q beta NQ Nβ-nfNQMΛ

    QMβQβN

    Sau đó, với cũng phải tồn tại một chuỗi giảm Q x beta N x beta N , bởi vì:MxQxβNxβN

    • có thể bởi thực tế là Q beta N .QxβNxQβN
    • phải bình thường kể từ khi N là một β -nf và x là chỉ một nguyên tử.NxNβx
    • Nếu là để bình thường hóa đến bất cứ điều gì khác hơn là N , sau đó Q x có hai β -nfs, đó là không thể thực hiện bởi một hệ quả tất yếu để định lý Giáo-Rosser. (Định lý Church-Rosser về cơ bản nói rằng các mức giảm là hợp lưu, như bạn có thể đã biết.)NxNQxβ

    Nhưng lưu ý rằng là không thể bởi lý luận (1) ở trên, vì vậy giả thiết rằng Q có một hình thức bình thường là không đứng vững được.NxβNQ

  3. Nếu chúng tôi cho phép một như vậy , thì chúng tôi chắc chắn rằng nó phải không bình thường hóa. Trong trường hợp đó, chúng ta chỉ cần sử dụng một tổ hợp loại bỏ mọi đối số mà nó nhận được. Đề nghị Denis của làm việc tốt: Q ( λ z . ( Λ x . Λ z . ( X x ) ) ( λ x . Λ z . ( X x ) ) ) Sau đó, trong chỉ có hai β -reductions: Q MQ

    Q(λz.(λx.λz.(xx))(λx.λz.(xx)))
    β
    QM(λz.(λx.λz.(xx))(λx.λz.(xx)))M1β(λx.λz.(xx))(λx.λz.(xx))1β(λz.((λx.λz.(xx))(λx.λz.(xx)))Q

Kết quả này không đáng ngạc nhiên lắm, vì về cơ bản bạn đang yêu cầu một thuật ngữ loại bỏ bất kỳ đối số nào nó nhận được, và đây là điều tôi thường thấy được đề cập như một ứng dụng trực tiếp của định lý điểm cố định.


Nếu tôi có thể chấp nhận câu trả lời của Denis thì tôi cũng sẽ như vậy, nhưng (sau khi tôi đã học được thêm một chút và có thể hiểu đầy đủ về nó) thì chính câu trả lời này đã thực sự thuyết phục tôi rằng "tổ hợp quine" này không thể được thực hiện bởi biểu hiện lambda ở dạng bình thường.
Nathaniel

9

Một mặt điều này là không thể, bởi vì một quine được cho là xuất mã riêng của nó và phép tính lambda thuần túy không có phương tiện để thực hiện đầu ra.

Mặt khác, nếu bạn cho rằng thuật ngữ kết quả là đầu ra, thì mọi hình thức bình thường là một quine.

(λx.x)(λx.x)(λx.x)


2
Đó là một điểm thú vị. Trong câu hỏi tôi đã cố gắng đưa ra một định nghĩa về những gì có thể được coi là một câu hỏi không tầm thường trong phép tính lambda: một hàm, khi được áp dụng cho bất kỳ đầu vào nào, sẽ tự giảm beta (thay thế cho tên biến). Có thể điều này là không thể, nhưng ít nhất là đối với tôi.
Nathaniel

8

Đây là một đề xuất:

Af=λt.(λz.t)

Điều này có thể được thực hiện bằng cách sử dụng các combinator fixpoint Y=λg.((λx.g (x x)) (λx.g (x x)))A=Yf=(λx.λz.(x x)) (λx.λz.(x x))

AAλz.Ay(λz.A)yβAβ(λz.A)


(λz.A)y(λz.A)A

1
Ah trong trường hợp này tôi khá chắc chắn nó là không thể, vì trực giác sau (không phải là một bằng chứng nhưng gần như): bạn muốn để chơi không có vai trò vì nó có làm việc cho tất cả các y , vì vậy y không nên được tự do trong Một . Sau đó (yyyA(λz.A)yAAλz.AA

1
λcalculus

Ahh, bạn đúng tất nhiên. Tôi nên thấy điều đó. Tôi không chắc có nên chấp nhận câu trả lời của bạn hay chỉnh sửa câu hỏi để yêu cầu định nghĩa tốt hơn. Tôi sẽ suy nghĩ một chút. (Dường như với tôi vẫn có thể đưa ra một định nghĩa không tầm thường khi bạn yêu cầu một thứ gì đó sẽ chấm dứt, nhưng tôi không chắc bằng cách nào.)
Nathaniel

zzAAif z==p then return q, otherwise return q
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.