Có một hệ thống phân cấp biểu cảm cho các hệ thống loại?


23

Lấy cảm hứng từ các hệ thống phân cấp mở rộng trong lý thuyết phức tạp, tôi tự hỏi liệu các hệ thống phân cấp như vậy cũng có mặt cho các hệ thống loại. Tuy nhiên, hai ví dụ tôi tìm thấy cho đến nay đều giống như danh sách kiểm tra (với các tính năng trực giao) hơn là phân cấp (với các hệ thống loại biểu hiện ngày càng nhiều hơn).

Hai ví dụ tôi đã tìm thấy là khối Lambda và khái niệm đa hình xếp hạng k . Cái đầu tiên là một danh sách kiểm tra với ba tùy chọn, cái thứ hai là một hệ thống phân cấp thực sự (mặc dù tôi xếp hạng k cho các giá trị cụ thể của k là không phổ biến tôi tin). Tất cả các tính năng hệ thống loại khác mà tôi biết hầu hết là trực giao.

Tôi quan tâm đến các khái niệm này bởi vì tôi đang thiết kế ngôn ngữ của riêng mình và tôi rất tò mò về cách nó được xếp hạng trong số các hệ thống loại hiện có (hệ thống loại của tôi có phần khác thường, theo như tôi biết).

Tôi nhận ra rằng khái niệm 'biểu cảm' có thể hơi mơ hồ, điều này có thể giải thích tại sao các hệ thống loại có vẻ giống như danh sách kiểm tra đối với tôi.


4
Tôi chắc chắn rằng các so sánh biểu cảm khó và nhanh chỉ có thể được thực hiện giữa các hệ thống loại lý thuyết hơn. Nếu bạn đang thiết kế một ngôn ngữ lập trình đầy đủ, thì bạn có thể thực hiện so sánh từng tính năng với các ngôn ngữ / hình thức hiện có. Thật không may, vì nhiều tính năng có thể được mã hóa theo các tính năng khác, đây sẽ không phải là một nhiệm vụ tầm thường. Nếu bạn có thể có những kiểu lạ mắt như của Scala hoặc Haskell, thì bạn sẽ làm tốt về mặt biểu cảm.
Dave Clarke

3
Tôi thực sự nên viết bài đăng trên blog của mình về "Cách so sánh ngôn ngữ lập trình" ...
Andrej Bauer

@Andrej Bauer: Đó sẽ là một bổ sung thú vị cho các câu trả lời và nhận xét đã có ở đây. Tôi đã học được khá nhiều về cách "tính biểu cảm" có thể được định nghĩa - thay vào đó tôi nên hỏi điều đó ...
Alex ten Brink

Tôi chắc chắn tôi đã thấy đa hình cấp 2 được sử dụng ở một vài nơi. Một cái mà tôi nhớ ngay bây giờ là Lammel, Peyton-Jones, Scrap Your Boilerplate, 2003.
Radu GRIGore

2
@Radu GRIGore: Đa hình bậc 2 có ý nghĩa quan trọng bởi vì nó cho phép các đối số kiểu xuất hiện ở vị trí đối lập đôi khi, theo loại đối ngẫu thông thường cho phép mô hình hóa các kiểu tồn tại bằng mã hóa Church của chúng. Hạng 3 chỉ đưa ra định lượng phổ quát một lần nữa và nó thay thế từ đó, do đó, có rất ít sức mạnh biểu cảm được thêm vào so sánh.
CA McCann

Câu trả lời:


22

Có một số ý nghĩa về "tính biểu cảm" mà bạn có thể muốn cho một hệ thống loại.

  1. F

  2. ABFF

  3. AB

  4. Có một hệ thống đảm bảo các thuộc tính mạnh hơn so với hệ thống khác. Ví dụ, các hệ thống loại tuyến tính chỉ từ chối nhiều chương trình hơn, nhưng điều đó cho phép chúng đưa ra tuyên bố mạnh mẽ hơn về các chương trình mà chúng chấp nhận.

Thật không may, tôi không tin rằng đã có công việc phân loại hoặc chính thức hóa các khái niệm này, ngoại trừ lambda-cube của Barendregt, như @cody thảo luận.


3
Tôi đoán bởi "bài viết biểu cảm của Felleisen", ý bạn là Sức mạnh biểu cảm của ngôn ngữ lập trình .
Martin Berger

Đúng chính xác. Tôi đã làm rõ rằng một chút của câu trả lời.
Sam Tobin-Hochstadt

13

Tôi không chắc chắn tôi có câu trả lời thỏa đáng cho câu hỏi của bạn, nhưng nếu bạn xem xét Pure Type Systems, đó là sự khái quát hóa các hệ thống được tìm thấy trong khối lambda (một cách tổng quan, có thể tìm thấy trong văn bản Barendregt cổ điển ) sau đó có một vài khái niệm tự nhiên về thứ bậc:

  1. ΓA t:TΓB t:TΓ,tT:(,,)PTS theo nghĩa là có một hình thái từ mọi PTS khác với nó. Đây có thể được coi là thước đo tính biểu cảm của một hệ thống loại, trong đó PTS cuối cùng là hệ thống biểu cảm nhất.

  2. ABAFωECC

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.