Điều gì làm cho một ngôn ngữ (và hệ thống loại của nó) có khả năng chứng minh các định lý về các thuật ngữ của chính nó?


12

Gần đây tôi đã cố gắng thực hiện Cedille-Core của Aaron , một ngôn ngữ lập trình tối giản có khả năng chứng minh các định lý toán học về các thuật ngữ của riêng nó. Tôi cũng đã chứng minh cảm ứng cho các kiểu dữ liệu được mã hóa on trên nó, điều này cho thấy rõ hơn tại sao các phần mở rộng của anh ta lại cần thiết.

Ít hơn, tôi vẫn không biết những phần mở rộng đó đến từ đâu. Tại sao họ là những gì họ đang có? Điều gì biện minh cho họ? Tôi biết, ví dụ, một số phần mở rộng, chẳng hạn như đệ quy, hủy hoại ngôn ngữ như một hệ thống để chứng minh. Nếu tôi quyết định mở rộng CoC với các nguyên thủy khác, tôi sẽ biện minh như thế nào? Tôi hiểu một bằng chứng bình thường hóa là cần thiết, nhưng điều đó không chứng minh những nguyên thủy đó "có ý nghĩa".

Nói tóm lại, những gì cụ thể đủ điều kiện một ngôn ngữ (và hệ thống loại của nó) là một hệ thống có khả năng chứng minh các định lý về các thuật ngữ riêng của nó?


Tôi đọc một blog mà có liên quan đến câu hỏi này, nhưng tôi không thể tìm thấy nó bây giờ :( Nó chứa câu "Hệ thống T là đủ!" Hoặc một cái gì đó như thế và nó nói về hệ thống loại phụ thuộc.
Labbekak

2
Đã tìm thấy nó: queuea9.wordpress.com/2010/01/17/ Từ Nó thực sự được viết bởi Aaron Stump để bạn có thể biết về nó.
Labbekak 16/03/18

Đệ quy không chấp nhận "hủy hoại" ngôn ngữ như hệ thống bằng chứng, đệ quy bảo vệ không. Để chứng minh rằng người nguyên thủy có ý nghĩa, tôi muốn nói rằng bạn xây dựng một mô hình. Và để chứng minh các định lý về các thuật ngữ của riêng nó, nó cần một loại đẳng cấu Curry Curry Howard và loại phụ thuộc để những điều bạn chứng minh (các loại) có thể nói về các thuật ngữ của bạn.
xavierm02

Câu trả lời:


5

[Tự quảng cáo theo sau, nhưng tôi nghĩ rằng điều này có liên quan.]

Có một số cách tiếp cận có thể cho câu hỏi này. Một trong những cách (mà tôi đã khám phá trong luận án tiến sĩ trong bối cảnh ngôn ngữ giống ML) là mở rộng hệ thống loại với lớp thứ nhất, để các thuật ngữ của ngôn ngữ có thể được xử lý như các đối tượng của logic cơ bản . Tất nhiên, bạn cũng cần bao gồm một số vị ngữ để có một cái gì đó để quan sát. Trong trường hợp hệ thống của tôi, các vị từ này là tương đương hạn. Cụ thể, nếu và là các thuật ngữ của ngôn ngữ, thì loại chỉ có người ở nếu và thực sự tương đương (quan sát). Bạn có thể sử dụng các bộ lượng hóa thứ nhất để mã hóa các thuộc tính nhưtbạntbạntbạnv,(λx.x)vv trong các loại, và chúng được chứng minh bằng cách xây dựng các chương trình sinh sống chúng.

Tất nhiên bạn cũng có thể giả sử tương đương, và có một số dạng lượng tử khác nhau (gõ / gỡ, phổ / tồn tại). Cơ chế này có thể được sử dụng để lý giải về bất kỳ chương trình nào (chúng không phải được chứng minh là chấm dứt hoặc thậm chí là gõ). Hạn chế duy nhất là các chương trình được sử dụng làm bằng chứng phải được chứng minh chấm dứt bởi hệ thống (đệ quy chung tùy ý dẫn đến sự không nhất quán).

Dưới đây là một vài tài liệu tham khảo nếu bạn muốn kiểm tra điều này:

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.