Tại sao Naturals thay vì số nguyên?


28

Tôi quan tâm đến việc tại sao các số tự nhiên lại được các tác giả sách về lý thuyết ngôn ngữ lập trình và lý thuyết loại ngôn ngữ yêu thích (ví dụ J. Mitchell, Cơ sở cho ngôn ngữ lập trình và B. Pierce, Các loại và Ngôn ngữ lập trình). Mô tả về phép tính lambda được gõ đơn giản và ngôn ngữ lập trình PCF cụ thể thường dựa trên Nat và Bool. Đối với những người sử dụng và giảng dạy PL công nghiệp đa năng, việc đối xử với các số nguyên thay vì tự nhiên là điều rất tự nhiên. Bạn có thể đề cập đến một số lý do tốt tại sao nhà lý thuyết PL thích nat? Bên cạnh đó nó là một chút ít phức tạp. Có bất kỳ lý do cơ bản hoặc nó chỉ là một vinh dự truyền thống?

CẬP NHẬT Đối với tất cả những nhận xét về nguyên tắc cơ bản của người Hồi giáo: Tôi khá nhận thức về tất cả những điều tuyệt vời đó, nhưng tôi thích xem một ví dụ khi thực sự quan trọng để có những tính chất đó trong lý thuyết loại PL. Ví dụ cảm ứng được đề cập rộng rãi. Khi chúng ta có bất kỳ loại logic nào (đơn giản là gõ LC), giống như logic thứ nhất cơ bản, chúng ta thực sự sử dụng cảm ứng - nhưng cảm ứng trên cây phái sinh (mà chúng ta cũng có trong lambda).

Câu hỏi của tôi về cơ bản đến từ những người từ ngành công nghiệp, những người muốn đạt được một số lý thuyết cơ bản về ngôn ngữ lập trình. Họ từng có số nguyên trong chương trình của mình và không có lập luận và ứng dụng cụ thể cho lý thuyết đang được nghiên cứu (lý thuyết loại trong trường hợp của chúng tôi) tại sao chỉ học ngôn ngữ chỉ với nat, họ cảm thấy khá thất vọng.


Tôi đoán đây không phải là một câu hỏi cấp độ nghiên cứu, mặc dù là một câu hỏi thú vị.
Raphael

4
Không phải, nhưng đó là một loại câu hỏi lớn, mà chúng tôi chấp nhận.
Suresh Venkat

1
Tôi tự hỏi liệu bằng cách nào đó, tập hợp các số nguyên không âm có thể còn cơ bản hơn các số tự nhiên do các thuộc tính duy nhất của giá trị 0 không tồn tại ở phần sau. Tôi cũng đề nghị rằng điều này hợp lệ hơn khi lựa chọn loại số cơ bản cho máy tính kỹ thuật số có tầm quan trọng là 0.
Richard Cook

Tôi không hiểu CẬP NHẬT của bạn . Naturals là cơ bản hơn so với số nguyên, và câu trả lời cho ví dụ về lý do tại sao đây là trường hợp.
Radu GRIGore

Re: CẬP NHẬT. Tôi không chắc tại sao "những người trong ngành" sẽ "thất vọng". (Tôi đã dành sự nghiệp của mình trong ngành công nghiệp.) Tại sao mọi người nên kỳ vọng rằng lý thuyết đó phải là một phần mở rộng rõ ràng của những gì họ đã quen thuộc? Một điều khá phổ biến là một số thứ phổ biến trong công nghiệp, giống như các biến số nguyên, có nhiều "lý do lịch sử" hơn là cho những lý thuyết sâu sắc.
Marc Hamann

Câu trả lời:


24

Câu trả lời ngắn gọn: Naturals là các giới hạn đầu tiên. Do đó, chúng đóng vai trò trung tâm trong lý thuyết tập hợp tiên đề (ví dụ, tiên đề của vô cực là sự khẳng định chúng tồn tại) và logic, và các nhà lý thuyết PL có xu hướng chia sẻ mối bận tâm nền tảng với các nhà logic học. Chúng tôi muốn có quyền truy cập vào nguyên tắc cảm ứng để chứng minh hoàn toàn chính xác, chấm dứt và các tính chất tương tự, và tự nhiên là một lựa chọn tự nhiên (er) của trật tự tốt.

Tuy nhiên, tôi không muốn ám chỉ rằng các số nguyên nhị phân có chiều rộng hữu hạn là bất kỳ đối tượng nào kém hấp dẫn hơn. Chúng là đại diện của p-adics, và cho phép chúng tôi sử dụng các phương pháp chuỗi lũy thừa trong lý thuyết số và tổ hợp. Điều này có nghĩa là tầm quan trọng của chúng trở nên rõ ràng hơn trong thuật toán so với PL, vì đây là khi chúng ta bắt đầu quan tâm nhiều hơn đến sự phức tạp hơn là chấm dứt.


20

Naturals là một khái niệm cơ bản hơn nhiều so với các số nguyên.

Cảm ứng xảy ra trên các naturals và các số nguyên có thể được bắt nguồn từ các naturals với sự bổ sung đơn giản của một toán tử nghịch đảo đơn phương.

Tôi thực sự muốn đặt câu hỏi ngược lại: tại sao các nhà thiết kế ngôn ngữ lập trình sớm (và máy đăng ký) lại coi các số nguyên là kiểu dữ liệu cơ bản khi chúng là thứ cấp và rất dễ xuất phát từ tự nhiên?

Tôi nghi ngờ đó chỉ là vì có một số mã hóa nhị phân thú vị có thể xử lý các số nguyên một cách thanh lịch. ;-)

Hãy suy nghĩ về tần suất bạn muốn bỏ qua phạm vi âm của số nguyên lập trình và xem xét xung có loại số nguyên không dấu để khôi phục bit bị mất.


5
Một lý do khác: nếu bạn muốn một cái gì đó như chữ số Church, một số nguyên âm sẽ phải biểu thị đảo ngược hàm. Vì vậy, trong các số nguyên bối cảnh đó sẽ tự nhiên hơn trong một phép tính các hàm tính toán tính toán.
Per Vognsen

@Per Vognsen: không chắc chắn cách bạn đang tranh luận ở đó. Nhưng tôi nghĩ an toàn khi nói rằng các hàm tính toán có thể tính toán ít cơ bản hơn các hàm tính toán tùy ý hầu hết thời gian. ;-)
Marc Hamann

Không có câu hỏi rằng các số phức, nằm ở đầu phân cấp số Số tự nhiên -> Số nguyên -> Số hợp lý -> Số thực -> Số phức là cơ bản hơn các số khác, vì chúng có các thuộc tính đại số "đẹp hơn". Họ ở khắp mọi nơi trong khoa học, nhưng lại vắng mặt một cách rõ rệt trong "nền tảng" của toán học. Vì vậy, câu trả lời cho các số nguyên hoặc cơ bản "cơ bản" hơn thực sự phụ thuộc vào người bạn hỏi: nhà thuật toán hoặc đại số.
Tegiri Nenashi

Vì đây là trang web của TCS, tôi nghĩ rằng chúng tôi an toàn trong việc ưu tiên quan điểm của khoa học máy tính. ;-) Về mặt tính toán, hệ thống phân cấp đó là lũy tiến: mỗi mục nhập mới được xây dựng theo nghĩa đen. Vì "cơ bản" thường đề cập đến một cái gì đó ở cơ sở, tôi nghĩ rằng kết thúc tự nhiên là cái đúng để trao danh hiệu đó.
Marc Hamann

17

NZ

NZ


11

Tuy nhiên, một lý do khác (liên quan đến những điều đã được đưa ra, nhưng câu trả lời này có thêm thông tin mới) là có một cấu trúc tự nhiên rất đơn giản, không có thương hiệu, đi kèm với một nguyên tắc cảm ứng tốt đẹp [như đã nói] . Điều chưa được mở rộng là việc xây dựng các số nguyên không khó khăn như thế nào .

Tôi càng lập trình nhiều hơn khi tôi muốn sự đảm bảo cao, tôi càng cần những người tự nhiên và tôi thấy chỉ có các số nguyên được xác định trước cho tôi một nỗi đau thực sự.


Có những ngôn ngữ có một loại cơ bản cho người tự nhiên, bạn biết đấy.
Raphael

@Raphael: Tôi biết. Nhưng không phải những người tôi thích (cụ thể là Haskell và OCaml). Tôi chưa sẵn sàng để bắt đầu 'lập trình' trong Agda hoặc Coq.
Jacques Carette

Điều gì là xấu về danh nghĩa?
David Harris

3
Quotents là tuyệt vời trong ngữ nghĩa. Chúng rất nhiều, khó hơn nhiều để đối phó với các tính toán thực tế và trong các biểu diễn cụ thể. Có vô số bài báo về cách đối phó với chúng trong Coq, Isabelle, Agda, (lý thuyết loại nói chung), v.v. Tôi chỉ cho rằng đó là kiến ​​thức văn hóa dân gian trong tất cả các cộng đồng mà các chỉ số chỉ là một nỗi đau để đối phó với 'trong thực tế'.
Jacques Carette

2
Tôi cảm thấy như đây là câu trả lời mạnh mẽ nhất của bó: Naturals là kiểu dữ liệu quy nạp không tầm thường đơn giản nhất. một khi bạn đã đưa ra định nghĩa và chứng minh các thuộc tính đơn giản cho các số tự nhiên, bạn đã mở đường cho các loại dữ liệu quy nạp phức tạp hơn, như danh sách hoặc cây.
cody

7

Có bất kỳ lý do chính đáng tại sao các nhà lý thuyết PL thích tự nhiên thay vì số nguyên? Có một số, nhưng trong một cuốn sách giáo khoa về ngữ nghĩa ngôn ngữ lập trình, tôi nghĩ không có lý do kỹ thuật nào khiến họ cần phải như vậy. Tôi không thể nghĩ đến bất kỳ nơi nào khác ngoài các hệ thống loại phụ thuộc, trong đó cảm ứng trên dữ liệu là quan trọng trong lý thuyết PL. Những cuốn sách văn bản khác của Mike Gordon , David Schmidt , Bob TennentJohn Reynold không làm điều đó. (Và, những cuốn sách đó có lẽ sẽ phù hợp hơn rất nhiều cho việc dạy những người quan tâm đến PL công nghiệp đa năng!)

Vì vậy, ở đó, bạn có bằng chứng rằng nó không cần thiết. Trong thực tế, tôi sẽ tuyên bố rằng một cuốn sách văn bản lý thuyết PL tốt phải là tham số trong các loại nguyên thủy của ngôn ngữ lập trình, và nó gây hiểu lầm khi đề xuất khác.


6

Naturals và bools và các thao tác trên chúng có thể được mã hóa trong phép tính lambda thuần túy theo cách đơn giản, như cái gọi là số Church (và bool Church, tôi đoán vậy). Không rõ người ta sẽ mã hóa số nguyên một cách độc đáo như thế nào, mặc dù điều đó rõ ràng có thể được thực hiện.


Ý tôi là trước hết là tính toán lambda. Quá trình của những cuốn sách tôi đã đề cập trong bài viết hàng đầu được dựa trên nó. Tôi đoán lambda chưa được nghiên cứu không quá quan trọng trong lý thuyết loại và lý thuyết PL hiện nay (tôi có thể sai nhưng đó là những gì tôi thấy trong những cuốn sách đó.). Dù sao thì cũng cám ơn bạn!
Artem Pelenitsyn
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.