Trong Hệ thống F à la Church, chúng ta có thể tự động hóa loại suy luận cho việc loại bỏ tất cả không?


9

Câu hỏi như sau. Nói chung khi một có thời hạn như , chúng ta có thể loại bỏ các forall bằng cách áp dụng thuật ngữ này để một kiểu, như ví dụ ( Λ X . t ) [ T ] t [ X : = T ] .ΛX.t(ΛX.t)[T]t[X:=T]

Bây giờ, giả sử đây là một mũi tên và chúng tôi muốn đưa ra một đối số, thì chúng tôi sẽ cần áp dụng thuật ngữ này cho loại thích hợp để nó có thể nhận được một đối số như vậy. Đó là những gì tôi đang hỏi nếu tôi có thể tự động hóa: Có thể xây dựng một hàm lấy hai nhiệm kỳ và trả về một kiểu như vậy f < Λ X . t > < r > cung cấp cho chúng tôi loại cần thay thế bằng trong sao cho có thể chấp nhận đối số ?ff<ΛX.t> <r>Xttr

Vài ví dụ:

  • f<ΛX.λxXX.t> <λxT.x> =T .

  • f<ΛX.λxX.r> <(λxR.tT) S> =T


2
Câu hỏi của bạn sẽ dễ đọc hơn một chút nếu bạn không đặt đối số thành f dưới dạng phụ / siêu ký tự, mỗi tệp chứa các phụ / siêu ký tự khác.
Dave Clarke

Để tham khảo: Loại vấn đề này là một trong hai vấn đề được giải quyết bằng "Suy luận kiểu cục bộ" ( dl.acm.org/citation.cfm?id=345100 ). Cũng có liên quan nên là dl.acm.org/citation.cfm?id=1086383 .
Blaisorblade

Câu trả lời:


8

Tôi không thực sự chắc chắn tôi đã hiểu câu hỏi. Đầu tiên, tôi cố gắng giảm vấn đề của bạn thành vấn đề thống nhất sau:

Cho một hệ thống loại F (X) với biến X (loại) tự do và loại σ.
Có thể tìm thấy một loại γ sao cho τ (γ) = σ?

Đây là một mã giả (với một ngoại lệ được nêu ra khi không thể xác định được) để giải quyết vấn đề này.

unify (X, σ) = σ
unify (Y, Y) = Y
unify (τ₁ → τ₂, σ₁ → σ₂) = unify(τ₁,σ₁) → unify(τ₂,σ₂)
unify (∀Y.τ(Y), ∀Y.σ(Y)) = ∀Y.unify(τ(Y),σ(Y)) (with Y a fresh variable)
unify (_,_) = raise Not_unifiable

Bạn có thể chứng minh (bằng cảm ứng) rằng γ = τ (thống nhất (τ (X), σ) hoạt động nếu và chỉ một ngoại lệ không được nêu ra.

Bây giờ cho vấn đề của bạn, bạn có thể mất

f (ΛX.t) (r) = match type of t with "τ₁ → τ₂" => unify (τ₁, type of r) | _ => fail end

(tất nhiên hàm f của bạn sẽ lấy làm đối số bối cảnh nếu các điều khoản của bạn được mở).

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.