Theo kinh nghiệm của tôi, một tốt và cách hoạt động để hiểu tính hai mặt của các loại cho -calculi là bằng cách đi qua π -calculus.λπ
Khi bạn dịch (phân tách) các loại thành phép tính quy trình, tính hai mặt trở nên đơn giản: đầu vào là kép thành đầu ra và ngược lại . Không có (nhiều) nhiều hơn cho nhị nguyên.
Trong -calculus bạn có tính đối ngẫu đơn giản (và gần như đối xứng) giữa đầu vào và đầu ra. Giả sử bạn có một loại α = ( B o o l , tôi n t ) ↑ . Sau đó, α nói rằng một kênh có loại απα=(Bool,Int)↑αα tạo ra chính xác một đầu ra, mang giá trị boolean và số nguyên. Một quá trình sinh sống kiểu này tại kênh sẽ ¯ x ⟨ f một l s e , 7 ⟩ . Loại kép, mà chúng ta có thể viết
¯ αxx¯¯¯⟨false,7⟩α¯¯¯, sẽ diễn tả rằng một đầu vào xảy ra của một cặp trong đó v là một boolean và w là một số nguyên. Ta viết ¯ α là ( b o o l , i n t ) ↓ . Một quá trình sinh sống ¯ α tại x sẽ là c ( v , w ) .0 . (v,w)vwα¯¯¯(bool,int)↓α¯¯¯xc(v,w).0
β=(int,(int)↑)↓(v,w)vwβ¯¯¯=(int,(int)↓)↑αα¯¯¯PαxQα¯¯¯xPQββ¯¯¯
∀X.(X,(X)↑)↓(v,w)vXwXx
x(vw).w¯¯¯¯v
∀X.(X,(X)↑)↓
Định lượng phổ quát có ý nghĩa gì ở cấp độ quá trình? Có một cách giải thích đơn giản: nếu dữ liệu được gõ bởi một biến loại, nó không thể được sử dụng làm chủ đề của đầu ra, chỉ một đối tượng. Vì vậy, chúng tôi không thể kiểm tra dữ liệu này, chúng tôi chỉ có thể truyền nó hoặc quên nó.
∀X.(X,(X)↑)↓∃X.(X,(X)↓)↑
Lý thuyết về điều này đã được nghiên cứu chi tiết trong [1, 2, 3] và một số khác, khó tiếp cận công việc hơn và liên quan rất chính xác đến logic tuyến tính phân cực và khái niệm về tính đối ngẫu trong 4 .
Bây giờ nhiều bạn hỏi làm thế nào điều này liên quan đến gõ vào λλπλπλ
π
π
π
4 K. Honda và cộng sự, Một sự tương ứng chính xác giữa một phép tính pi được đánh máy và lưới bằng chứng phân cực .
5 R. Milner, Chức năng như các quá trình .