Một loại là một tài sản của tính toán. Đó là những gì bạn viết ở phía bên phải của dấu hai chấm.
Hãy để tôi giải thích về điều đó. Lưu ý rằng thuật ngữ không hoàn toàn chuẩn: một số bài viết hoặc sách có thể sử dụng các từ khác nhau cho các khái niệm nhất định.
Một thuật ngữ là một yếu tố của một cú pháp trừu tượng được dự định để đại diện cho tính toán. Theo trực giác, nó là một cây phân tích. Chính thức, nó là một cây hữu hạn nơi các nút thuộc về một số bảng chữ cái. Một phép tính chưa được định nghĩa xác định một cú pháp cho các thuật ngữ. Ví dụ: phép tính lambda (chưa được ) chứa các thuật ngữ (viết , , v.v.) được xây dựng từ ba loại nút:NMN
- các biến, của arity 0 (một bộ sưu tập có thể đếm được), được viết , , v.v.;yxy
- áp dụng một biến, của arity 1 (một bộ sưu tập có thể đếm được, với một mệnh đề cho các biến), được viết , v.v.;λ x . M
- ứng dụng, của arity 2, được viết .MN
Một thuật ngữ là một cú pháp xây dựng. Một ngữ nghĩa liên quan đến các điều khoản để tính toán. Có nhiều loại ngữ nghĩa, phổ biến nhất là hoạt động (mô tả cách các thuật ngữ có thể được chuyển đổi thành các thuật ngữ khác) hoặc biểu thị (mô tả các thuật ngữ bằng cách chuyển đổi sang không gian khác, thường được xây dựng từ lý thuyết tập hợp).
Một loại là một tài sản của các điều khoản. Một hệ thống loại cho một phép tính chưa được mô tả mô tả thuật ngữ nào có loại nào. Về mặt toán học, ở cốt lõi, một hệ thống loại là mối quan hệ giữa các điều khoản và loại. Chính xác hơn, một hệ thống kiểu là một họ các quan hệ như vậy, được lập chỉ mục bởi các bối cảnh - thông thường, một bối cảnh cung cấp ít nhất các loại cho các biến (tức là một bối cảnh là một phần chức năng từ biến đến loại), vì vậy một thuật ngữ chỉ có thể có một loại trong bối cảnh cung cấp một loại cho tất cả các biến miễn phí của nó. Loại đối tượng toán học nào phụ thuộc vào hệ thống loại.
Một số hệ thống loại được mô tả với các loại là tập hợp, sử dụng các khái niệm về lý thuyết tập hợp như giao điểm, kết hợp và hiểu. Điều này có lợi thế của việc nghỉ ngơi trên nền tảng toán học quen thuộc. Một hạn chế của phương pháp này là nó không cho phép suy luận về các loại tương đương.
Nhiều hệ thống kiểu tự mô tả các loại như các thuật ngữ trong một phép tính các loại. Tùy thuộc vào hệ thống loại, đây có thể là các điều khoản giống nhau hoặc các điều khoản khác nhau. Tôi sẽ sử dụng thuật ngữ cơ sở cụm từ để chỉ một thuật ngữ tính toán mô tả tính toán. Ví dụ: phép tính lambda được nhập đơn giản sử dụng phép tính các loại sau (viết , v.v.):τ
- các loại cơ sở, của arity 0 (một bộ sưu tập hữu hạn hoặc có thể đếm được), được viết , , v.v.;BMộtB
- chức năng, của arity 2, được viết .τ0→ τ1
Mối quan hệ giữa các thuật ngữ và loại xác định phép tính lambda được gõ đơn giản thường được xác định bằng cách gõ quy tắc . Quy tắc gõ không phải là cách duy nhất để xác định một hệ thống loại, nhưng chúng là phổ biến. Chúng hoạt động tốt cho các hệ thống loại thành phần, tức là các hệ thống loại trong đó loại (s) của một thuật ngữ được xây dựng từ các loại subterms. Quy tắc gõ xác định một hệ thống loại theo quy nạp: mỗi quy tắc gõ là một tiên đề cho biết đối với bất kỳ công thức khởi tạo nào trên quy tắc ngang, công thức bên dưới quy tắc cũng đúng. Xem Làm thế nào để đọc quy tắc gõ? để biết thêm chi tiết. Có tồn tại một tính toán Turing lambda hoàn thành gõ? cũng có thể được quan tâm.
Đối với phép tính lambda được gõ đơn giản, phán đoán gõ có nghĩa là có kiểu trong ngữ cảnh . Tôi đã bỏ qua định nghĩa chính thức về bối cảnh.
M τ gamma x : τ ∈ gammaΓ ⊢ M: τMτΓ
x : τ∈ ΓGamma ⊢ x : τ( Γ )Γ , x : τ0⊢ M: τ1Γ ⊢ λ x . M: τ0→ τ1( → tôi)Γ ⊢ M: τ0→ τ1Γ ⊢ N: τ0Γ ⊢ MN: τ1( → E)
Ví dụ, nếu và B đều dựa loại, sau đó λ x . λ y . xMộtB có loại ( A → B ) → A → B trong bất kỳ bối cảnh nào (từ dưới lên trên, áp dụnghai lần, sau đóvà cuối cùngtrên mỗi nhánh).λ x . λ y. xy( A → B ) → A → B( → tôi)( → E)( Γ )
Có thể giải thích các loại phép tính lambda được gõ đơn giản là tập hợp. Số tiền này để đưa ra một ngữ nghĩa biểu thị cho các loại. Một ngữ nghĩa biểu thị tốt cho các thuật ngữ cơ sở sẽ gán cho mỗi thuật ngữ cơ sở là thành viên của biểu thị của tất cả các loại của nó.
Lý thuyết loại trực giác (còn được gọi là lý thuyết loại Martin-Löf) phức tạp hơn chỉ đơn giản là gõ tính toán lambda, vì nó có nhiều yếu tố hơn trong phép tính các loại (và cũng thêm một vài hằng số vào các thuật ngữ cơ bản). Nhưng các nguyên tắc cốt lõi là như nhau. Một đặc điểm quan trọng của lý thuyết loại Martin-Löf là các loại có thể chứa các thuật ngữ cơ sở (chúng là các loại phụ thuộc ): vũ trụ của các thuật ngữ cơ sở và vũ trụ của các loại là như nhau, mặc dù chúng có thể được phân biệt bằng các quy tắc cú pháp đơn giản (thường được gọi là sắp xếp, tức là gán các loại cho các thuật ngữ, trong lý thuyết viết lại).
Có các hệ thống loại đi xa hơn và hoàn toàn trộn lẫn các loại và các điều khoản cơ bản, do đó không có sự phân biệt giữa hai loại. Hệ thống loại như vậy được cho là có thứ tự cao hơn . Trong phép tính như vậy, các loại có các loại - một loại có thể xuất hiện ở phía bên trái của . Tính toán của xây dựng là mô hình của các loại phụ thuộc bậc cao. Khối lambda (còn được gọi là khối Barendregt) phân loại các hệ thống loại theo việc chúng có cho phép các thuật ngữ phụ thuộc vào các loại ( đa hình - một số thuật ngữ cơ sở chứa các loại dưới dạng subterms), các loại phụ thuộc vào các thuật ngữ (loại phụ thuộc) hoặc loại phụ thuộc trên các loại ( toán tử loại - phép tính của các loại có khái niệm tính toán).:
Hầu hết các hệ thống loại đã được đưa ra ngữ nghĩa lý thuyết tập hợp, để gắn kết chúng với nền tảng thông thường của toán học.
Làm thế nào là ngôn ngữ lập trình và nền tảng của toán học liên quan? và
sự khác biệt giữa các khung nhìn ngữ nghĩa và cú pháp của các loại hàm là gì? có thể được quan tâm ở đây. Cũng đã có nghiên cứu sử dụng lý thuyết loại làm nền tảng của toán học - lý thuyết tập hợp là nền tảng lịch sử, nhưng nó không phải là sự lựa chọn duy nhất có thể. Lý thuyết loại đồng luân là một cột mốc quan trọng theo hướng này: nó mô tả ngữ nghĩa của lý thuyết loại trực giác có chủ ý về mặt lý thuyết đồng luân và xây dựng lý thuyết đặt trong khung này.
Tôi khuyên bạn nên sử dụng các loại sách và ngôn ngữ lập trình của Benjamin Pierce và các chủ đề về ngôn ngữ lập trình . Họ có thể truy cập vào bất kỳ đại học nào mà không có điều kiện tiên quyết nào ngoài sự quen thuộc cơ bản với lý luận toán học chính thức. TAPL mô tả nhiều hệ thống loại; các loại phụ thuộc là chủ đề của chương 2 của ATTAPL.