Tại sao dấu hai chấm để biểu thị rằng một giá trị thuộc về một loại?


19

Pierce (2002) giới thiệu mối quan hệ đánh máy trên trang 92 bằng cách viết:

Mối quan hệ gõ cho các biểu thức số học, được viết "t: T", được xác định bởi một tập hợp các quy tắc suy luận gán các loại cho các thuật ngữ

và chú thích nói Biểu tượng thường được sử dụng thay vì:. Câu hỏi của tôi chỉ đơn giản là tại sao các nhà lý thuyết loại thích sử dụng: hơn ? Nếu một loại T là một tập hợp các giá trị thì sẽ rất hợp lý khi viết tT , không cần ký hiệu mới.

Đây có phải là tương tự như cách một số nhà văn cs thích 3n2=O(n2) thậm chí còn nghĩ nó là lạm dụng ký hiệu và nên được viết 3n2O(n2) ?


7
Vị từ thành viên có thể đúng hoặc sai, trong khi khai báox : X thường được đặt xen kẽ như một tuyên bố thực tế được tuyên bố là đúng hoặc sự thật có thể được suy ra bằng phương pháp cú pháp thuần túy . Tương phản điều này là một số nguyên tố, mà không có phương pháp cú pháp nào là đủ. xX x:X
Musa Al-hassy

4
@ MusaAl-hassy: đó là sự trình bày sai về những gì đang diễn ra. Nó không được tuyên bố là đúng, vì điều đó có nghĩa là tôi có thể "tuyên bố" rằng " false: int" chẳng hạn. Cũng không phải là trường hợp mà phán đoán phải nhất thiết phải xuất phát từ "phương tiện cú pháp thuần túy", ví dụ trong trường hợp lý thuyết kiểu nội bộ của một phạm trù với các gia đình.
Andrej Bauer


2
Để thêm vào bình luận @ MusaAl-hassy, trong loại lý thuyết computatioal của Bob Constable, Stuart Allen, Bob Harper, et al., được sử dụng thường xuyên cho bản án đánh máy vì nó giống hơn với một vị thành viên (xem này nói chuyện, slide 25, Ví dụ).
xrq

3
Chắc chắn cũng là một sự lạm dụng của ký hiệu và thực sự nên được viết λ n .3 n 2O ( λ n . N 2 ) ? (Các nhà toán học có thể thích n 3 n 2O ( n n 2 ) .)3n2O(n2)λn.3n2O(λn.n2)n3n2O(nn2)
Oscar Cickyham

Câu trả lời:


12

Bởi vì những gì ở bên phải của dấu hai chấm không nhất thiết phải là một tập hợp và những gì ở bên trái của dấu hai chấm không nhất thiết phải là một thành viên của tập hợp đó.

Lý thuyết loại bắt đầu vào đầu thế kỷ 20 như một cách tiếp cận nền tảng của toán học. Bertrand Russel đã khám phá ra một nghịch lý trong lý thuyết tập hợp ngây thơ, và ông đã nghiên cứu lý thuyết loại như một cách để hạn chế sức mạnh biểu cảm của lý thuyết tập hợp để tránh nghịch lý này (và bất kỳ điều gì khác). Trong những năm qua, Russel và những người khác đã xác định nhiều lý thuyết về các loại. Trong một số lý thuyết về các loại, các loại là các tập hợp với các thuộc tính nhất định, nhưng trong các lý thuyết khác, chúng là một loại quái thú khác.

Đặc biệt, nhiều lý thuyết về các loại có một công thức cú pháp . Có những quy tắc gây ra một điều có một loại. Khi các quy tắc gõ được sử dụng làm nền tảng cho một lý thuyết, điều quan trọng là phải phân biệt các quy tắc gõ nói gì với những gì người ta có thể suy luận bằng cách áp dụng kiến ​​thức bên ngoài bổ sung. Điều này đặc biệt quan trọng nếu các quy tắc đánh máy là nền tảng cho một lý thuyết bằng chứng: các định lý dựa trên lý thuyết tập hợp với logic cổ điển và tiên đề của sự lựa chọn có thể hoặc không thể giữ trong logic xây dựng, ví dụ. Một trong những giấy tờ tinh trong lĩnh vực này là Giáo Hội của một công thức của lý thuyết đơn giản của các loại (1940)

Có lẽ cách phân biệt giữa các loại và tập hợp rõ ràng nhất là quy tắc cơ bản nhất cho các bộ, cụ thể là hai bộ bằng nhau nếu chúng có cùng các phần tử, thường không áp dụng cho các loại. Xem câu trả lời của Andrej Bauer tại đâycâu trả lời của anh ấy cho một câu hỏi liên quan để biết một số ví dụ. Chủ đề thứ hai có câu trả lời khác đáng đọc.

Trong một phép tính đánh máy, để nói rằng các loại là tập hợp trên thực tế là đưa ra một ngữ nghĩa cho các loại. Đưa ra một phép tính một ngữ nghĩa lý thuyết loại không phải là chuyện nhỏ. Ví dụ: giả sử bạn đang xác định ngôn ngữ có chức năng. Tập hợp nào là một loại hàm? Tổng số hàm được xác định bằng biểu đồ của chúng, như chúng ta đã được dạy trong lý thuyết tập 101. Nhưng còn các hàm một phần thì sao? Bạn có muốn cung cấp cho tất cả các chức năng không kết thúc cùng một ngữ nghĩa? Bạn không thể diễn giải các loại dưới dạng tập hợp cho một phép tính cho phép các hàm đệ quy cho đến khi bạn trả lời câu hỏi đó. Đưa ra các ngôn ngữ lập trình hoặc tính toán một ngữ nghĩa học biểu thị là một vấn đề khó khăn vào đầu những năm 1970. Các giấy tinh ở đây là Hướng tới một ngữ nghĩa toán học cho các ngôn ngữ máy tính (1971) bởiDana ScottChristopher Strachey . Các wikibook Haskell có một bài thuyết trình tốt về chủ đề này.

Như tôi đã viết ở trên, phần thứ hai của câu trả lời là ngay cả khi bạn đã quản lý để đưa ra các kiểu ngữ nghĩa lý thuyết tập hợp, thì thứ bên trái của dấu hai chấm không phải luôn luôn là một yếu tố của tập hợp. Các giá trị có các loại, nhưng các thứ khác cũng vậy, chẳng hạn như biểu thức và biến . Ví dụ: một biểu thức trong ngôn ngữ lập trình được gõ có một kiểu ngay cả khi nó không kết thúc. Bạn có thể sẵn sàng conflate integerZ , nhưng (x := 0; while true; do x := x + 1; x)không phải là một phần tử của Z .

Tôi không biết khi ký hiệu đại tràng phát sinh cho các loại. Bây giờ nó là tiêu chuẩn về ngữ nghĩa và phổ biến trong các ngôn ngữ lập trình, nhưng cả Russel và Church đều không sử dụng nó. Algol đã không sử dụng nó, nhưng ngôn ngữ lấy cảm hứng từ Algol mà Pascal đã làm vào năm 1971. Tuy nhiên, tôi nghi ngờ đó không phải là ngôn ngữ đầu tiên, bởi vì nhiều tài liệu lý thuyết từ đầu những năm 1970 sử dụng ký hiệu, nhưng tôi không biết về sử dụng sớm hơn. Thật thú vị, điều này đã sớm xảy ra sau khi các khái niệm về các loại từ lập trình và từ logic đã được thống nhất - như Simon Martini thể hiện trong Một số loại hình trong ngôn ngữ lập trình , cái được gọi là một loại hình trong ngôn ngữ lập trình cho đến những năm 1960 đến từ tiếng bản địa sử dụng từ và không từ lý thuyết loại.


37

Lý do chính để thích ký hiệu dấu hai chấm t:T cho mối quan hệ thành viên tT là mối quan hệ thành viên có thể gây hiểu nhầm vì các loại không phải là (chỉ) các bộ sưu tập .

[ Bổ sung: Tôi nên lưu ý rằng về mặt lịch sử gõ thuyết được viết bằng . Quan niệm về loại Martin-LOF đã được có nghĩa là để tập chụp tinh thần xây dựng, và đã Russell và Whitehead dùng ϵ cho memebrship lớp. Nó sẽ là thú vị để theo dõi thời điểm hiện tại khi : ngày càng trở nên phổ biến hơn ].

Một loại mô tả một loại xây dựng nhất định, nghĩa là làm thế nào để tạo ra các vật thể có cấu trúc nhất định, cách sử dụng chúng và phương trình nào nắm giữ chúng.

Ví dụ một loại sản phẩm A×B có quy định giới thiệu để giải thích làm thế nào để làm cho cặp có thứ tự, và các quy tắc loại bỏ giải thích rằng chúng tôi có thể trình chiếu đầu tiên và các thành phần thứ hai từ bất kỳ yếu tố của A×B . Định nghĩa của A×B không không bắt đầu với dòng chữ "bộ sưu tập của tất cả ..." và cũng như thế nó nói bất cứ nơi nào bất cứ điều gì như "tất cả các yếu tố của A×B là cặp" (nhưng nó sau từ định nghĩa rằng tất cả các yếu tố của A×B được đề xuấtbằng một cặp). Tóm lại, định nghĩa lý thuyết tập hợp của X×Y được nêu là "tập hợp của tất cả các cặp theo thứ tự ...".

Các ký hiệu t:T nghĩa thực tế là t có cấu trúc được mô tả bởi T .

Một loại T không phải là để bị nhầm lẫn với nó mở rộng , đó là bộ sưu tập của tất cả các đối tượng của loại T . Một loại không được xác định bởi phần mở rộng của nó, giống như một nhóm không được xác định bởi bộ sóng mang của nó. Hơn nữa, có thể xảy ra rằng hai loại có cùng một phần mở rộng, nhưng khác nhau, chẳng hạn:

  1. Các loại tất cả, ngay cả các số nguyên tố lớn hơn hai: Σ(n:N).isprime(n)×iseven(n)×(n>2) .
  2. Các loại tất cả các số nguyên tố lẻ nhỏ hơn hai: Σ(n:N).isprime(n)×isodd(n)×(n<2) .

Phần mở rộng của cả hai đều trống, nhưng chúng không cùng loại.

Có sự khác biệt nữa giữa các loại lý thuyết : và các thiết lập lý thuyết . Một đối tượng a trong lý thuyết tập hợp tồn tại độc lập với những gì đặt nó thuộc về, và nó có thể thuộc về một số bộ. Ngược lại, hầu hết các lý thuyết loại đáp ứng độc đáo của gõ: nếu t:Tt:U sau đó TU . Hay nói cách khác, một cấu trúc theo lý thuyết loại t có chính xác một loại T và trên thực tế không có cách nào để chỉ có một đối tượng t mà không có loại (xác định duy nhất).

Khác biệt nữa là trong lý thuyết tập hợp chúng ta có thể phủ nhận một thực tế rằng aA bằng cách viết ¬(aA) hoặc aA . Điều này là không thể trong lý thuyết loại, bởi vì t:T là một phán đoán có thể được suy ra bằng cách sử dụng các quy tắc của lý thuyết loại, nhưng không có gì trong lý thuyết loại cho phép chúng ta nói rằng một cái gì đó không được dẫn xuất. Khi một đứa trẻ làm một cái gì đó từ các khối LEGO, chúng tự hào chạy đến bố mẹ để cho chúng xem công trình, nhưng chúng không bao giờ chạy đến bố mẹ để cho chúng xem những gì chúng không làm.


1
Andrej, câu trả lời tuyệt vời. Bạn có tình cờ biết nguồn gốc lịch sử của ký hiệu đại tràng không?
Andreas Rossberg

Than ôi, tôi thì không. Lý thuyết loại của nhà thờ đã sử dụng các chỉ số, tức là cho một biến loại α . Russell và Whitehead dùng ε cho mối quan hệ của thuộc về một lớp. Algol 68 đặt các loại trước tên biến. Các 1972 Martin-LOF lý thuyết loại sử dụng , và do đó, hiện phiên bản 1984 , nhưng [1994 phiên bản] sử dụng dấu hai chấm. xααϵ
Andrej Bauer

1
Vì vậy, đối số của bạn là một loại giống như một nhóm? Điều đó có ý nghĩa, nhưng ký hiệu là phổ biến trong đại số trừu tượng. gG
Bjorn Lindqvist

2
@ BjornLindqvist: Tôi không nghĩ câu trả lời này là toàn bộ câu chuyện. Ngay cả trong toán học tiêu chuẩn chúng tôi sử dụng " " để biểu thị rằng f là một hàm từ S đến T . Tại sao chúng ta không sử dụng " f ( S T ) " hoặc một cái gì đó tương tự? Vâng, chúng tôi chỉ không. Tất nhiên, có lý do chính đáng để tránh việc sử dụng " " trong một bài thuyết trình của một số loại lý thuyết loại, đơn giản chỉ vì chúng tôi không muốn mọi người ZFC-dạy để nghĩ nó giống như ZFC-bộ, mà rõ ràng không phải là trường hợp Nhưng điều đó không có nghĩa là ruột kết có không đãf:STfSTf(ST)đã được sử dụng rộng rãi từ lâu trước khi lý thuyết loại trở nên phổ biến.
user21820

1
@ user21820 "Tại sao chúng tôi không sử dụng ?" Chỉ cần suy đoán: bởi vì các nhà toán học không bao giờ nghĩ S T là một tập hợp. Đối với lịch sử của ký hiệu này xem ở đây . Tôi nghi ngờ rằng dấu hai chấm từ f : S T là nguồn cảm hứng cho các nhà lý thuyết loại. Nhiều khả năng loại nhà lý thuyết ruột đã làm với thực tế là không phải là một ký tự ASCII. f(ST)STf:ST
Michael

5

Bjorn,

Có lẽ có một tài liệu tham khảo trước đó nhưng vì một điều, dấu hai chấm được sử dụng trong ngôn ngữ lập trình Pascal:

First Google hit for Pascal


2
Không có ngôn ngữ lập trình trước đó được sử dụng :?
Andrej Bauer

@AndrejBauer thực sự, tôi đã viết "Có thể có một tài liệu tham khảo trước đó nhưng ..." để bảo vệ chống lại thực tế có khả năng đó.
Bjørn Kjos-Hanssen

@AndrejBauer Algol thì không. Đã :được sử dụng trong các bài báo lý thuyết trước những năm 1970?
Gilles 'SO- ngừng trở nên xấu xa'

1
Fortran có REAL :: xnhưng tôi không biết nếu điều này đến trước Pascal.
Michael

1
@Michael Fortran đến sớm hơn Pascal (khoảng năm 1955 so với năm 1970), nhưng tôi nghĩ cú pháp cụ thể này chỉ được giới thiệu trong Fortran 90, nên muộn hơn Pascal rất nhiều. Xem ví dụ tại đây fortranwiki.org/fortran/show/Modernizing+Old+Fortran
Federico Poloni
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.