Trong phép đồng phân Curry-Howard được áp dụng cho các loại Hindley-Milner, mệnh đề nào tương ứng với một -> [a]?


7

(Sử dụng cú pháp Haskell, vì câu hỏi được lấy cảm hứng từ Haskell, nhưng nó áp dụng cho các hệ thống loại đa hình Hindley-Milner chung, chẳng hạn như SML hoặc Elm).

Nếu tôi có chữ ký loại f :: a -> [a], mệnh đề logic được mã hóa bởi chữ ký loại đó là gì?

Tôi biết rằng các hàm tạo kiểu như ->, (,)tương ứng với "hoạt động" trong logic của bạn: ->tương ứng với biểu tượng "ngụ ý" .

Tôi giả sử []là một nhà xây dựng kiểu, và có cảm giác rằng câu trả lời có thể có liên quan đến định nghĩa đệ quy của nó, mà tôi biết có thể được thực hiện như một cái gì đó như:

data List a = Cons a (List a) | Nil

nhưng tôi không chắc điều này có nghĩa gì trong câu thơ logic.

Câu trả lời:


5

Một cách để giải thích các kiểu như logic là điều kiện tồn tại cho các giá trị của kiểu trả về. Vì vậy, f :: a -> [a]chúng tôi định lý rằng, nếu tồn tại một giá trị của loại a, tồn tại một giá trị của loại [a]. Việc thực hiện chức năng là bằng chứng của các đề xuất.

Đây là một lời giải thích chi tiết hơn:

Về cơ bản, các nhà xây dựng dữ liệu cho phép chúng tôi xây dựng những thứ tương tự như tổng và sản phẩm (OR và AND), nhưng chúng tôi có thể có nhiều biến thể và chúng tôi có thể đặc biệt "gắn thẻ" loại có tên để phân biệt (như tên List).

Họ cũng cho chúng tôi xây dựng chúng một cách đệ quy: cho một đề xuất một, các đề xuất [một] có thể được xem như là một giải pháp cho phương trình x(một)(mộtx(một))

Mọi thứ trở nên rõ ràng hơn một chút khi bạn viết định nghĩa Danh sách bằng cách sử dụng kiểu GADT, mã giả tương tự như những gì bạn thấy trong Agda:

data List : Type -> Type where
    Nil : ∀ a . List a
    Cons : ∀ a . a -> List a -> List a

Điều này cho chúng ta hai điều: các hàm tạo (hoặc hàm), đóng vai trò là tiên đề cho các mệnh đề Listvà các tiên đề cho khớp mẫu hoặc giải mã chúng.

Nói một cách đơn giản, nó đưa ra các tiên đề sau vào logic:

  • Đối với bất kỳ đề xuất một, [một] giữ
  • Nếu một giữ, và [một] giữ, sau đó [một] giữ
  • Nếu [một] giữ, sau đó hoặc giữ, hoặc một[một] giữ

Chúng khá vô dụng khi được hiểu là logic, vì chúng ta luôn biết giữ, giải cấu trúc ở đó không cung cấp cho chúng tôi nhiều thông tin hữu ích

Không có bộ định lượng hoặc tiện ích mở rộng loại mạnh hơn (GADT, Loại gia đình, loại phụ thuộc, v.v.), bạn có thể thấy rằng chúng tôi thực sự không thể chứng minh những điều thú vị, đó là lý do tại sao bạn thường không thấy nhiều về việc diễn giải các loại Haskell tiêu chuẩn là logic .


Tôi đoán bạn có thể chứng minh định lý miễn phí cho f.
Bút danh

2
@jmite Giới thiệu Cons : ∀ a . a -> List a: ý bạn là Cons : ∀ a . a -> List a -> List agì?
Anton Trunov

3

Danh sách các loại hơi lạ như mệnh đề. Chúng không thực sự tương ứng với bất cứ thứ gì quen thuộc trực tiếp nhưng thật dễ dàng để xem chúng tương đương với cái gì. Bởi vì không tồn tại, bạn luôn có thể chứng minh [a]cho bất kỳ aloại danh sách nào vì vậy luôn rất dễ chứng minh, đặc biệt chúng tương đương tầm thường với bất kỳ tautology nào đã được chứng minh. Vì vậy, giới thiệu họ là một chút không thú vị. Hơn nữa, quy tắc loại bỏ có một vấn đề với nó. Cụ thể, bạn phải chứng minh một cái gì đó từ đó []để loại bỏ một danh sách không cung cấp cho bạn bất kỳ giả định mới nào. Vì vậy, tôi thường có thể chuyển đổi bất kỳ bằng chứng nào bằng cách sử dụng loại bỏ danh sách thành bằng chứng không sử dụng nó. Tuy nhiên tôi có thể biết một cái gì đó về danh sách mâu thuẫn với nó trống rỗng trong trường hợp nó thú vị hơn nhiều.

Vì vậy, rất nhiều thời gian nó hơi nhàm chán nhưng những lần khác nó thực sự hơi thú vị nhờ bằng chứng liên quan. Haskell không có bằng chứng liên quan tuy nhiên trong danh sách Haskell chỉ là nhàm chán.

Theo một nghĩa nào đó (tôi đang làm mờ các công cụ ở đây) liệt kê trong Haskell tương ứng với một cái gì đó tương đương với toán tử boolean liên tục đúng. Vì vậy, không phủ nhận một boolean, id giữ cho nó giống nhau, và điều mà danh sách hành xử như luôn luôn đúng cho dù bạn cắm vào nó là gì.

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.