Định lượng phổ / tồn tại?


11

Tôi đang đấu tranh để hiểu mục đích của định lượng phổ quát và hiện sinh của các loại. Tôi đang chơi xung quanh với việc viết một ngôn ngữ đồ chơi dựa trên tính toán của các công trình . Tôi đã đọc về MorteHenk để giúp tôi hiểu rõ hơn.

Tôi không hiểu tại sao CoC có cả trừu tượng lambda và trừu tượng.

( x : Một . B )

(λx:A.B)
(x:A.B)

Dường như với tôi rằng lambda bao gồm tất cả trong một hệ thống mà các loại được truyền bằng tay. Nói cách khác, rằng sau đây

(x:.λa:x.a)

Có thể được thay thế bằng

(λx:.λa:x.a)

Nếu nó lần đầu tiên được áp dụng cho loại đang được sử dụng.

Tôi đang thiếu gì? Những giấy tờ hoặc blog hoặc bài viết có sẵn để đọc có thể giúp tôi?

Cảm ơn.

Câu trả lời:


12

Nó giúp ghi nhớ rằng (hoặc như bạn đôi khi thấy) là một loại. Đó là khái quát . Vì vậy, trong khi nó có ý nghĩa hoàn hảo để nói , thì không có nghĩa gì để nói vì chỉ là một loại. Bạn sẽ không nói becaues không cho máy tính mỗi gia nhập, nó ở đó để về lambda classify có thể được áp dụng như thế này .pi ( λ x : Một . M ) N ( x : Một . M ) N . . . ( A B ) N Π(λx:A.M) N(x:A.M) N...(AB) N

Đây cũng là thứ khiến tôi vấp ngã, nhưng đây là cách tính toán các công trình (cũng như bất kỳ hệ thống đánh máy phụ thuộc nào khác được xác định).

Hai chương trình bạn viết có ý định rất khác nhau và chương trình đầu tiên không được đánh máy. Không có nghĩa gì khi nói bởi vì yêu cầu cả hai đối số của nó theo các loại có nghĩa là nếu phải được gõ tốt, chúng ta phải có . Tuy nhiên, không phải là một loại, nó chỉ có thể được gán một loại có dạng , never . Điều thứ hai, mặt khác là hầu hết (Tôi nghĩ rằng bạn có nghĩa là để trở lại không ) là một hàm và được đưa ra một loại sử dụng hai s.x : Một . B B : λ x . x x : Một . B a x x:A. λx. xx:A.BB:λx.xx:A.Bax


Vâng, tôi có nghĩa là để trở lại . a
oconnor0

@ oconnor0 Điều đó có hợp lý không :)
Daniel Gratzer

Không chính xác. Tôi vẫn còn một chút bối rối. Tôi có thể phải suy nghĩ nhiều hơn về nó. Tôi đã thay đổi cả hai chương trình ví dụ để trả về thay vì vì tôi đang cố gắng thực hiện . :)x i daxid
oconnor0

Tôi nghĩ, ở một mức độ nào đó, tôi đã muốn đưa ra các điều khoản và loại giống nhau. Giữa câu trả lời của bạn và cs.stackexchange.com/questions/49531/ nam Tôi nghĩ rằng tôi thấy tôi đã đi đâu. Tôi muốn làm điều này trong một hệ thống bình thường hóa mạnh mẽ.
oconnor0

5

Hãy nhớ rằng các loại tồn tại và phổ quát là khá khác nhau. Đó là logic xây dựng, không phải logic cổ điển và trong logic xây dựng và không liên quan như trong logic cổ điển.

A B ( x ) B ( x ) x x x x B ( x ) x A B A Bx:A.B(x) là loại chương trình nhận một đối tượng loại và trả về một đối tượng loại . Điều quan trọng ở đây là loại phụ thuộc vào và không giống nhau cho tất cả . Nó có thể thay đổi tùy thuộc vào là gì . Đối với một đầu vào chúng tôi có thể xuất một số nguyên. Đối với một số khác, chúng tôi có thể xuất ra một số thực. Đối với một số khác, chúng ta có thể xuất một hàm trên các số thực. Nếu không thay đổi theo sau đó bạn có thể sử dụng ở vị trí đó là loại chức năng từ đến .AB(x)B(x) xxxxB(x)xABAB

Một B Một B Một B x : Một . B ( x ) B ( x ) x : Một B ( x ) x : Một B x : Một x : Một . B B x : A A × Bx:A.B(x) là phiên bản phụ thuộc của phân tách (mang tính xây dựng). Bạn có thể nghĩ mang tính xây dựng phân ly của hai loại và là sự kết hợp rời nhau của và . là sự kết hợp rời nhau của một bộ sưu tập các loại được lập chỉ mục bởi . Thực tế là loại van khác nhau tùy thuộc vào giá trị của làm cho nó trở thành một loại phụ thuộc. So sánh với trường hợp không phụ thuộc vào : . Chúng tôi đang lấy một bản sao giống nhauABABABx:A.B(x)B(x)x:AB(x)x:ABx:Ax:A.BB cho mỗi . Đây là đẳng cấu với .x:AA×B

Bây giờ bạn có thể hỏi tại sao chúng ta cần các loại sản phẩm và tổng phụ thuộc ? Bởi vì họ cho chúng ta sức mạnh biểu cảm nhiều hơn. Bây giờ chúng ta có thể bỏ qua các loại hoàn toàn và có lập trình lý thuyết / lập trình chức năng loại bỏ. Nhưng điều đó sẽ loại bỏ lợi ích của việc có các loại ở vị trí đầu tiên, ví dụ bạn sẽ không biết liệu tất cả các chương trình sẽ luôn chấm dứt (chuẩn hóa mạnh). Xem Lambda Cubeloại phụ thuộc . Tôi nghĩ rằng một cách tốt để hiểu rõ các loại phụ thuộc là xem xét các quy tắc giới thiệu và loại bỏ các loại phụ thuộc trong lý thuyết loại của Martin-Lof .

Điểm chính của các loại phụ thuộc là: chúng tôi muốn duy trì bên trong một lý thuyết đánh máy tốt vì nhiều lý do (ví dụ: tránh lỗi, bằng chứng tự động chấm dứt, v.v.). Chúng tôi không muốn đi đến một cái gì đó giống như tính toán lambda chưa được chỉnh sửa, nơi chúng tôi có thể diễn đạt như những gì bạn đã nêu và cách mạnh mẽ hơn. Chúng ta có thể nói rằng các loại phụ thuộc đã được phát minh để cho phép diễn đạt nhiều thứ hơn trong khi vẫn còn trong một lý thuyết loại tốt đẹp.


1
"X: AB (x) x: AB (x) là phiên bản phụ thuộc của phân biệt (mang tính xây dựng)." nghĩa là?
oconnor0
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.