Logic affine sơ cấp có thể được sử dụng làm hệ thống loại cốt lõi của ngôn ngữ lập trình thực tế không?


9

Logic affine sơ cấp là một hệ thống kiểu nắm bắt lớp các thuật ngữ có thể giảm trong thời gian sơ cấp. Hơn nữa, các thuật ngữ có thể đánh máy EAL có thể được giảm bằng cách sử dụng đoạn trừu tượng của thuật toán Lamping, điều này đặc biệt thú vị đối với tôi vì tôi đang khám phá các tổ hợp tương tác tương ứng.

Câu hỏi của tôi là, làm thế nào người ta có thể tạo ra một ngôn ngữ lập trình thực tế bằng cách sử dụng EAL làm hệ thống loại cơ bản? Tức là, loại tiện ích mở rộng nào (điểm sửa lỗi, đa hình, loại phụ thuộc, kiểu dữ liệu, v.v.) có thể được tạo cho hệ thống loại lõi mà không ảnh hưởng đến đặc tính đó, và liệu ngôn ngữ đó có thể sử dụng được trong thực tế hay không hạn chế vì lý do tôi không biết?


"Logic affine sơ cấp là một hệ thống kiểu nắm bắt lớp các thuật ngữ có thể giảm trong thời gian sơ cấp": đây là điều không chính xác. EAL nắm bắt một tập hợp con nghiêm ngặt của -termsλ đại diện cho các chức năng cơ bản (viết mã hóa Church). Đúng là tất cả các hàm cơ bản đều được bảo vệ: đối với mỗi hàm cơ bản , có ít nhất một thuật toán EAL f , nhưng thường có hàng tấn thuật ngữ khác tương ứng với thuật toán cơ bản tính toán f không có trong EAL. fff
Damiano Mazza

Ái chà, phải rồi. Ngoài ra, theo như tôi hiểu, cũng có những thuật ngữ có thể rút gọn bằng thuật toán trừu tượng, nhưng không có loại EAL, phải không? Vì vậy, trong khi tất cả các thuật ngữ EAL có thể được giảm mà không có lời tiên tri, vẫn còn một số điểm không phù hợp giữa thuật toán trừu tượng và EAL. @DamianoMazza
MaiaVictor

Vâng đúng rồi.
Damiano Mazza

1
"Dù sao, không ai cấm bạn thử và xem những gì bạn có thể nhận được!" - 3 năm sau: vâng, không ai cấm tôi, vì vậy tôi đã làm điều đó! docs.formality-lang.org . Cảm ơn tất cả sự giúp đỡ của bạn :)
MaiaVictor

Câu trả lời:


10

Một cái gì đó rất giống nhau, nhưng sử dụng logic affine nhẹ (LAL) thay vì EAL, đã được Baillot, Gaboardi và Mogbil (bạn có thể tìm thấy bài báo ở đây ). Tôi nghĩ rằng công việc của họ có thể dễ dàng khái quát thành EAL, đó là một hệ thống tự do hơn.

Đối với các tính năng của ngôn ngữ như vậy, bạn có tính đa hình nguyên bản (EAL là một hạn chế của logic tuyến tính bậc hai). Theo như tôi biết, không ai đã xem xét các loại phụ thuộc, nhưng tôi không hiểu tại sao chúng không nên hoạt động. Trong thực tế, EAL chưa được gõ cũng hoạt động giống như gõ EAL, vì các thuộc tính chuẩn hóa của nó không phụ thuộc vào các loại.

Một hậu quả là trong EAL, bạn có thể sử dụng các loại điểm cố định tùy ý (xem ví dụ bài báo này của Baillot) và xác định các loại dữ liệu theo kiểu đệ quy tự nhiên (như ), cùng với định nghĩa F hệ thống ít tự nhiên (từ góc độ lập trình). Tuy nhiên, theo nhận xét trên về việc chuẩn hóa chưa được kiểm tra, một ngôn ngữ lập trình dựa trên EAL sẽ luôn luôn là toàn bộtôiTôiSt Một: =nTôitôi|Một * tôiTôiSt Một, điều đó có nghĩa là bạn sẽ không có bộ kết hợp sửa lỗi và việc sử dụng các kiểu đệ quy không tự nhiên như bạn mong đợi. Ví dụ, lấy số Scott: không có định nghĩa đệ quy (được đưa ra bởi bộ kết hợp điểm cố định), thật khó để diễn tả bất cứ điều gì ngoài các hoạt động thời gian không đổi với biểu diễn số nguyên này. Vì vậy, bạn vẫn sẽ cần phải sử dụng chữ số Giáo Hội cho lặp (ví dụ, vòng), bằng cách sử dụng mà bạn sẽ phải chịu trong việc hạn chế sự phân tầng cơ bản của logic ánh sáng (mà tạo cho họ tính phức tạp của họ): bạn có thể không lặp một chức năng N a tN a t mà chính nó đã được xác định bởi phép lặp ( N a tforNmộttNmộttNmộtt đây là loại số nguyên của Giáo hội).

Một ví dụ: với một số "hack số nguyên Church", có thể định nghĩa trong EAL sao cho d b l n _ = 2 n _ mà không cần sử dụng phép lặp. Sau đó, bạn có thể lặp lại d b l để xác định hàm số mũ e x p , tuy nhiên, không thểdbtôi:NmộttNmộttdbtôi n_= =2n_ dbtôiexpchính nó được lặp đi lặp lại. Vì vậy, bất cứ ngôn ngữ lập trình nào dựa trên EAL sẽ cần phải có một số loại cơ chế cấm một số định nghĩa nhất định bằng cách lặp; thật khó để tưởng tượng làm thế nào hạn chế như vậy sẽ không dẫn đến một ngôn ngữ mà người lập trình cảm thấy khó xử. Dù sao, không ai cấm bạn thử và xem những gì bạn có thể nhận được!

Trong mọi trường hợp, nếu bạn quan tâm đến mối quan hệ giữa đánh giá tối ưu, EAL và logic nhẹ nói chung, tôi khuyên bạn nên xem qua các bài báo của Coppola từ đầu đến giữa những năm 2000.

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.