Làm thế nào để bạn có được Tính toán công trình từ các điểm khác trong Lambda Cube?


21

CoC được cho là đỉnh cao của cả ba chiều của Lambda Cube. Điều này không rõ ràng với tôi cả. Tôi nghĩ rằng tôi hiểu các chiều riêng lẻ và sự kết hợp của bất kỳ hai thứ nào dường như dẫn đến một liên minh tương đối đơn giản (có thể tôi đang thiếu một cái gì đó?). Nhưng khi tôi nhìn vào CoC, thay vì trông giống như một sự kết hợp của cả ba, nó trông giống như một điều hoàn toàn khác. Loại nào, Loại, Prop và loại nhỏ / lớn đến từ đâu? Sản phẩm phụ thuộc đã biến mất ở đâu? Và tại sao có sự tập trung vào các đề xuất và bằng chứng thay vì các loại và chương trình? Có một cái gì đó tương đương tập trung vào các loại và chương trình?

Chỉnh sửa: Trong trường hợp không rõ ràng, tôi đang yêu cầu giải thích về cách CoC tương đương với sự kết hợp đơn giản của kích thước Lambda Cube. Và có một liên minh thực sự của cả ba nơi mà tôi có thể nghiên cứu (đó là về các chương trình và loại, không phải là bằng chứng và đề xuất)? Đây là phản hồi cho các bình luận về câu hỏi, không phải cho bất kỳ câu trả lời hiện tại.


1
Ít nhất đây phải là một soft-question. Tôi không thấy một câu hỏi kỹ thuật thực tế ở đây. Có lẽ bạn có thể cụ thể hơn một chút về những gì bạn đang hỏi?
Andrej Bauer

3
@AndrejBauer Không phải là câu hỏi: Mối quan hệ giữa bản trình bày Barendregt-cube / PTS của CoC và bản trình bày gốc của Coquand & Huet là gì?
Martin Berger

1
@AndrejBauer: Câu hỏi dường như cũng được hỏi về sự khác biệt trong cách trình bày CoC (trong cả hai chiêu bài) và sự nhấn mạnh vào các tính năng nhất định trong thực tế. Đúng là phiên bản CoC định hướng PTS nhấn mạnh một số tính năng là quan trọng, trong khi thực tế của Coq nhấn mạnh các tính năng khác. Tôi đồng ý rằng nó phải có thẻ câu hỏi mềm.
Jacques Carette

1
Tôi vui mừng khi thấy ai đó sẽ có thể trả lời điều này.
Andrej Bauer

Câu trả lời:


28

Đầu tiên, để nhắc lại một trong những điểm của cody, Giải tích các công trình quy nạp (mà nhân của Coq dựa trên) rất khác so với Công thức của các công trình. Tốt nhất là bắt đầu từ lý thuyết loại Martin-Löf với các vũ trụ, và sau đó thêm một Prop sắp xếp ở dưới cùng của hệ thống phân cấp loại. Đây là một con thú rất khác so với CoC ban đầu, được coi là phiên bản phụ thuộc của F-omega. (Ví dụ: CiC có các mô hình lý thuyết tập hợp và CoC thì không.)

Điều đó nói rằng, lambda-cube (trong đó CoC là thành viên) thường được trình bày dưới dạng một hệ thống thuần túy vì lý do kinh tế trong số các quy tắc gõ. Bằng cách coi các loại, loại và thuật ngữ là các thành phần của cùng một loại cú pháp, bạn có thể viết ra ít quy tắc hơn và bằng chứng của bạn cũng nhận được khá ít dư thừa.

Tuy nhiên, để hiểu rõ, có thể hữu ích để phân tách rõ ràng các loại khác nhau. Chúng tôi có thể giới thiệu ba loại cú pháp, các loại (nằm trong phạm vi biến đổi k), các loại (nằm trong phạm vi biến đổi A) và các thuật ngữ (nằm trong phạm vi biến đổi e). Sau đó, tất cả tám hệ thống có thể được hiểu là các biến thể về những gì được cho phép ở mỗi trong ba cấp độ.

λ → (Tính toán lambda đơn giản)

 k ::= ∗
 A ::= p | A → B
 e ::= x | λx:A.e | e e

Đây là phép tính lambda đánh máy cơ bản. Có một loại duy nhất , đó là loại. Các loại chính là loại nguyên tử pvà loại chức năng A → B. Điều khoản là các biến, trừu tượng hoặc ứng dụng.

λω_ (STLC + toán tử loại cao hơn)

 k ::= ∗ | k → k
 A ::= a | p | A → B | λa:k.A | A B
 e ::= x | λx:A.e | e e

STLC chỉ cho phép trừu tượng hóa ở cấp độ điều khoản. Nếu chúng ta thêm nó ở cấp độ của các loại, thì chúng ta sẽ thêm một loại mới k → klà loại hàm cấp độ loại, cũng như sự trừu tượng hóa λa:k.Avà ứng dụng A Bở cấp độ loại. Vì vậy, bây giờ chúng ta không có đa hình, nhưng chúng ta có các toán tử loại.

Nếu bộ nhớ phục vụ, hệ thống này không có sức mạnh tính toán nhiều hơn STLC; nó chỉ cung cấp cho bạn khả năng viết tắt các loại.

λ2 (Hệ thống F)

 k ::= ∗
 A ::= a | p | A → B  | ∀a:k. A 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

Thay vì thêm toán tử loại, chúng ta có thể đã thêm đa hình. Ở cấp độ loại, chúng tôi thêm ∀a:k. Aloại trước đây là loại đa hình và ở cấp độ hạn, chúng tôi thêm tính trừu tượng đối với loại Λa:k. evà ứng dụng loại e [A].

Hệ thống này mạnh hơn nhiều so với STLC - nó mạnh như số học bậc hai.

(Hệ thống F-omega)

 k ::= ∗ | k → k 
 A ::= a | p | A → B  | ∀a:k. A | λa:k.A | A B
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

Nếu chúng ta có cả toán tử loại và đa hình, chúng ta sẽ có F-omega. Hệ thống này ít nhiều là lý thuyết loại nhân của hầu hết các ngôn ngữ chức năng hiện đại (như ML và Haskell). Nó cũng mạnh hơn rất nhiều so với Hệ thống F - nó có sức mạnh tương đương với số học bậc cao.

λP (LF)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e

Thay vì đa hình, chúng ta có thể đã đi theo hướng phụ thuộc từ phép tính lambda được gõ đơn giản. Nếu bạn cho phép loại hàm để cho đối số của nó được sử dụng trong kiểu trả về (nghĩa là viết Πx:A. B(x)thay vì A → B), thì bạn nhận được λP. Để làm cho điều này thực sự hữu ích, chúng ta phải mở rộng tập hợp các loại với một loại toán tử loại lấy các thuật ngữ làm đối số Πx:A. k, và vì vậy chúng ta cũng phải thêm một sự trừu tượng hóa Λx:A.Bvà ứng dụng tương ứng A [e]ở cấp độ loại.

Hệ thống này đôi khi được gọi là LF, hay Khung logic của Edinburgh.

Nó có sức mạnh tính toán tương tự như phép tính lambda được gõ đơn giản.

P2 (không có tên đặc biệt)

 k ::= ∗ | Πx:A. k 
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e]
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

Chúng ta cũng có thể thêm đa hình vào P, để có được P2. Hệ thống này không thường được sử dụng, vì vậy nó không có tên cụ thể. (Một bài báo mà tôi đã đọc sử dụng nó là Cảm ứng của Herman Geuvers không thể có được trong Lý thuyết loại phụ thuộc bậc hai .)

Hệ thống này có sức mạnh tương đương với Hệ thống F.

Pω_ (không có tên đặc biệt)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e 

Chúng ta cũng có thể thêm toán tử loại vào P, để có được Pω_. Điều này liên quan đến việc thêm một loại Πa:k. k'cho các toán tử loại, và ứng Λx:A.Bdụng và trừu tượng mức độ tương ứng A [e].

Vì một lần nữa không có bước nhảy nào về sức mạnh tính toán so với STLC, hệ thống này cũng sẽ tạo ra một cơ sở tốt cho một khung logic, nhưng không ai đã làm điều đó.

Pω (Tính toán công trình)

 k ::= ∗ | Πx:A. k | Πa:k. k'
 A ::= a | p | Πx:A. B | ∀a:k.A | Λx:A.B | A [e] | λa:k.A | A B 
 e ::= x | λx:A.e | e e | Λa:k. e | e [A]

Cuối cùng, chúng ta có được λPω, Phép tính các công trình, bằng cách lấy λPω_ và thêm một kiểu ∀a:k.Atrừu tượng trước đây và mức độ trừu tượng Λa:k. evà ứng dụng e [A]cho nó.

Các loại của hệ thống này biểu cảm hơn nhiều so với trong F-omega, nhưng nó có cùng sức mạnh tính toán.


3
Tất nhiên, về mặt kỹ thuật CoC (không có tiên đề) có ít nhất nhiều mô hình lý thuyết tập hợp như CiC, họ không giỏi trong việc mô hình hóa tình huống mà chúng ta muốn, đó là CoC với các tiên đề cho các số tự nhiên (giả sử ). 01
cody

2
Tôi cũng thực sự đánh giá cao một tài liệu tham khảo về tính bảo thủ của so với STLC. Điều này có vẻ không rõ ràng. λω_
cody

3
@cody: Tôi không biết một tài liệu tham khảo - Kevin Watkins đã phác thảo bằng chứng cho tôi trên bảng trắng! Ý tưởng là bạn sử dụng một thuật ngữ được nhập vào λω_, đặt tất cả các loại vào dạng dài eta bình thường, sau đó nhúng nó vào STLC bằng cách giới thiệu một loại nguyên tử mới cho mỗi dạng bình thường riêng biệt trong chương trình gốc. Sau đó, rõ ràng các chuỗi giảm phải xếp thành một.
Neel Krishnaswami

1
@ user833970 thực tế là không có nguồn gốc thực sự đơn giản hơn nhiều so với những sự kiện khác mà bạn đề cập và không liên quan gì đến mã hóa của n a t : xuất phát từ thực tế là có một mô hình CC không liên quan bằng chứng , trong đó các loại có nhiều nhất một yếu tố . Đây là một thuộc tính xấu nếu bạn muốn một logic trong đó có một loại có nhiều hơn một phần tử (giả sử, nat). Một tài liệu tham khảo là: Mô hình CC không liên quan không đơn giản , của Miquel và Werner. 01nat
cody

1
Bạn nói rằng Fw "mạnh hơn rất nhiều" so với Hệ thống F. Bạn đã có tài liệu tham khảo cho việc này chưa? Cụ thể là có một hàm trên các số tự nhiên có thể chứng minh được tổng số trong Fw nhưng không có trong F?
Thorsten Altenkirch

21

Tôi đã thường muốn thử và tóm tắt mỗi chiều của -cube và những gì mà họ đại diện, vì vậy tôi sẽ cung cấp cho này một một shot.λ

Nhưng trước tiên, có lẽ nên cố gắng khắc phục các vấn đề khác nhau. Câu tục ngữ định lý tương tác Coq dựa trên một lý thuyết kiểu cơ bản, đôi khi được gọi một cách đáng yêu là phép tính của các cấu trúc quy nạp với vũ trụ . Bạn sẽ lưu ý rằng đây là một câu nói hay hơn là "Tính toán công trình", và thực sự, có rất nhiều thứ trong đó hơn là chỉ có CoC. Cụ thể, tôi nghĩ rằng bạn đang bối rối về chính xác các tính năng trong CoC thích hợp. Cụ thể, sự phân biệt Set / Prop và vũ trụ không xuất hiện trong CoC.

Tôi sẽ không cung cấp tổng quan đầy đủ về Hệ thống loại thuần túy ở đây, nhưng quy tắc quan trọng (đối với các PTS chức năng như CoC) là như sau

ΓA:sΓ,x:AB:kΓΠx:A.B : k (s,k)R

nơi là những yếu tố của một tập cố định S của các loại , và các cặp ( s , k ) là trong một tập cố định R của cặp S , được gọi là quy tắc .s,kS(s,k)RS

Sự thấu hiểu rất quan trọng là sự lựa chọn cẩn thận của R tạo sự khác biệt rất lớn trong những loại sản phẩm Π x : Một . B thực sự đại diện!SRΠx:A.B

Đặc biệt, trong tính toán của các công trình xây dựng, các thiết lập của các loại { * , } Thường được gọi là Prop và Type (mặc dù thuật ngữ này là một chút khó hiểu đối với người dùng Coq vì lý do tôi sẽ nói về sau), và đầy đủ bộ quy tắc: R = { ( , ) , ( , ) , ( , ) , ( , ) }S

{,}
R={(,),(,),(,),(,)}

Và do đó, chúng tôi có 4 quy tắc tương ứng với 4 mục đích khác nhau:

  • : Các loại chức năng(,)

  • (,)

  • (,) : Các loại đa hình

  • (,)

Tôi sẽ giải thích từng điều này một cách chi tiết hơn.


ABΠx:A.BxB

natboolx=yxy

listlist:listnat,listbool(,)

Πt:*. tt
λ(t:*)(x:t).xΠt:*._(,*)tt(*,*)

MộtB: =Πt:*. (MộtBt)t
MộtB: =Πt:*. (Mộtt)(Bt)t
: =Πt:*. t
: =Πt:*. tt
x:A. P(x):=Πt:. (Πy:A. P(y)t)t
(,) cai trị), nhưng điều này sẽ cung cấp cho bạn một ý tưởng về sức mạnh của đa hình.

(,)

(,)

Πc:.  c natc nat

0=1

= : natnat
= : Πt:. tt
natnat(,) .

ii=1,2,3,i:i+1 .

(i,i)

ΓA:iΓA:j ij

Với các loại và quy tắc bổ sung này, bạn sẽ có được thứ gì đó không phải là PTS, mà là thứ gì đó gần gũi. Đây là (gần như) Tính toán mở rộng của các công trình , gần với cơ sở của Coq. Phần còn thiếu lớn ở đây là các loại quy nạp, mà tôi sẽ không thảo luận ở đây.

Chỉnh sửa: Có một tài liệu tham khảo khá hay mô tả các tính năng khác nhau của ngôn ngữ lập trình trong khung PTS, bằng cách mô tả PTS là ứng cử viên tốt để thể hiện trung gian ngôn ngữ lập trình chức năng:

Henk: Một ngôn ngữ trung cấp đánh máy , SP Jones & E. Meijer.


2
Các chủ đề nâng cao về loại và ngôn ngữ lập trình, S2.6S2.7 .
Kaveh

2
BTW "Loại họ" thường được gọi là loại cao hơn.
Martin Berger

1
PTS là một ý tưởng tốt 20 năm trước nhưng mọi thứ đã chuyển từ đó.
Thorsten Altenkirch

@ThorstenAltenkirch không cần loại trừ, Thorsten! Vẫn còn một số điều thú vị để xem xét liên quan đến PTSes, ví dụ như công việc của Bernard về tính tham số được nội tâm hóa xuất hiện trong tâm trí.
cody

@cody Không có ý định loại trừ nhưng chúng ta không nên bị mắc kẹt trong quá khứ của lý thuyết kiểu cú pháp. Công việc của Bernard là tuyệt vời và có thể được thực hiện tốt hơn bằng cách sử dụng vũ trụ.
Thorsten Altenkirch
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.