Thật không may "phân cực" là một khái niệm hơi quá tải trong lý thuyết loại. "Vị trí tích cực" và "vị trí tiêu cực" đề cập đến một khái niệm khác về cực tính so với những gì Bob nói về việc tập trung / phân cực.
Ý nghĩa của bạn
Khi bạn xác định loại quy nạp, bạn đưa ra một loạt quy tắc tương ứng với các thao tác cho loại bạn đang xác định. Ví dụ, bạn có thể nói a Nat
là một cái gì đó với
- một giá trị
zero : Nat
- một chức năng
suc : Nat -> Nat
Và sau đó mong đợi rằng Nat
có chứa tất cả các giá trị có thể được tạo ra từ việc áp dụng nhiều lần suc
cho các Nat
s khác và bao gồm zero
. Để phù hợp với cấu trúc quy nạp này, chúng ta có một nguyên tắc đệ quy trên Nat
các s hoạt động dựa trên thực tế là bất kỳ Nat
được tạo bởi các nhà xây dựng đó.
rec : A -> (A -> A) -> Nat -> A
vậy nên
rec Z S zero = zero
rec Z S (suc n) = S (rec Z S n)
Tuy nhiên, có một số hạn chế về những gì chúng ta có thể viết như các quy tắc. Mặt khác, chúng ta có thể viết ra một loạt các quy tắc mà nguyên tắc đệ quy không thể được biện minh. Xem xét "loại quy nạp" D
với một hàm tạo
Ở đây không có một nguyên tắc đệ quy lành mạnh ở đây. và vì lý do tốt! Nếu chúng ta có một số nguyên tắc đệ quy, chúng ta có thể sử dụng nó để mã hóa một phiên bản của ứng dụng tự và với nó, không có lỗi. Điều này có nghĩa là D
không thể được gọi là "quy nạp" bởi vì các loại quy nạp là các cấu trúc hữu hạn được tạo ra từ các nhà xây dựng áp dụng nhiều lần!
Để giải quyết vấn đề này, chúng tôi hạn chế cách các loại quy nạp có thể được đệ quy trong lý thuyết loại. Cụ thể, chúng tôi ngăn chúng xuất hiện ở "những nơi tiêu cực". Đây là khái niệm về sự phân cực mà bạn đang nói đến. Do đó, cực tính của một vị trí được xác định,
- Đối số bắt đầu ở một vị trí tích cực
- Mỗi khi chúng ta đi sang bên trái một mũi tên, cực sẽ lật
Vì vậy, X
là tích cực trong hai đầu tiên và tiêu cực trong hai thứ hai
X
Int -> X
X -> Int
(Unit -> X) -> Int
Ý tưởng này là hợp lý với một sự đòi hỏi đối với lý thuyết thể loại trong đó một loại quy nạp mà chỉ có tái phát là tích cực sẽ dẫn đến một functor covariant. Các chi tiết về cách thức này hoạt động và tại sao nó thú vị một chút dài.
Ý nghĩa của Bob Harper
Trong blog của mình, Harper đã nói về một ý nghĩa khác của sự phân cực. Phân cực này là tham chiếu đến cách các kết nối khác nhau trong logic được đưa ra ý nghĩa. Cụ thể, chúng ta có thể phân loại các kết nối theo hai cách
- Kết nối tích cực có thể được xác định bằng cách xác định cách giới thiệu chúng (quy tắc giới thiệu của chúng)
- Kết nối phủ định có thể được xác định bằng cách xác định cách sử dụng chúng (quy tắc loại bỏ của chúng)
Trong thuật ngữ ngôn ngữ lập trình, điều này độc đáo nắm bắt sự phân biệt giữa các loại lười biếng và nghiêm ngặt. Một loại nghiêm ngặt được xác định bởi các giá trị của nó. Một người lười biếng được định nghĩa bằng cách làm thế nào mô hình có thể phù hợp với họ. Để xử lý vấn đề này một cách chính xác, chúng tôi xác định một ngôn ngữ có 2 cấu trúc chính, cách xây dựng các loại tích cực và "gai" để phân tách các loại tiêu cực. Chúng ta có thể sử dụng điều này để kết hợp cả tính toán nghiêm ngặt và lười biếng vào một ngôn ngữ.
Để hiểu rõ hơn về điều này, tôi giới thiệu bạn đến chương 38 của cuốn sách của Bob Harper .