Có tồn tại một tính toán Turing lambda hoàn thành gõ?


Câu trả lời:


37

Vâng, chắc chắn rồi. Nhiều tính toán lambda chỉ chấp nhận các thuật ngữ bình thường hóa mạnh mẽ , theo thiết kế, vì vậy chúng không thể biểu thị các tính toán tùy ý. Nhưng một hệ thống loại có thể là bất cứ điều gì bạn thích; làm cho nó đủ rộng, và bạn có thể diễn đạt tất cả các tính toán xác định.

Một hệ thống loại tầm thường bao gồm một đoạn hoàn chỉnh Turing của phép tính lambda là hệ thống chấp nhận mọi thuật ngữ được gõ tốt (với loại trên cùng ).

ΓM:

Thực tế hơn, các ngôn ngữ lập trình chức năng được gõ tĩnh có cốt lõi là một phép tính lambda được gõ, cho phép kết hợp điểm cố định cũng như được gõ. Ví dụ, bắt đầu với những phép tính đơn giản là gõ lambda (hoặc hệ thống kiểu ML hoặc hệ thống F hoặc bất kỳ hệ thống kiểu khác của sự lựa chọn của bạn) và thêm một quy tắc mà làm cho một số combinator fixpoint như đánh máy tốt. Γ f : T TY= =λf.(λx.f(xx))(λx.f(xx))

Γf:TTΓYf:TΓf:TTΓ(λx.f(xx))(λx.f(xx)):T
Yf
Γsửa chữa:(TT)Tsửa chữaff(sửa chữaf)

Bám sát tính toán lambda thuần túy, một hệ thống loại thú vị là phép tính lambda với các loại giao nhau.

ΓM:T1ΓM:T2ΓM:T1T2(tôi)ΓM:(tôi)

Các loại giao lộ có các thuộc tính thú vị đối với chuẩn hóa:

  • Một thuật ngữ lambda có thể được gõ mà không cần sử dụng tôi quy tắc iff nó đang bình thường hóa mạnh mẽ.
  • Một thuật ngữ lambda thừa nhận một loại không chứa Nếu nó có một hình thức bình thường.

Xem Đặc điểm của thuật ngữ lambda có các loại kết hợp để hiểu rõ hơn về lý do tại sao các loại giao lộ có phạm vi đáng chú ý như vậy.

Vì vậy, bạn có một hệ thống loại xác định ngôn ngữ Turing-Complete (vì mọi thuật ngữ đều được gõ tốt) và một đặc điểm đơn giản là chấm dứt tính toán. Tất nhiên, vì hệ thống loại này đặc trưng cho sự chuẩn hóa, nó không thể quyết định được.

Một nhận xét về tên quy tắc (tôi)(tôi): chúng không có ý nghĩa chính thức, nhưng chúng được chọn có chủ ý. cáctôi là viết tắt của giới thiệu về giới tính, vì đây là những quy tắc giới thiệu - họ giới thiệu biểu tượng ( hoặc là ) vào loại bên dưới dòng. Dần dần, bạn sẽ tìm thấy các quy tắc loại bỏ, khi một biểu tượng xuất hiện phía trên dòng nhưng không phải bên dưới. Ví dụ: quy tắc đánh máy một biểu thức lambda trong phép tính lambda được gõ đơn giản là quy tắc giới thiệu chovà quy tắc để đánh máy ứng dụng là quy tắc loại bỏ cho .

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.