Mengapa alami bukan bilangan bulat?

28

Saya tertarik pada mengapa bilangan asli sangat disukai oleh penulis buku tentang teori bahasa pemrograman dan teori tipe (misalnya J. Mitchell, Yayasan untuk bahasa pemrograman dan B. Pierce, Jenis dan Bahasa Pemrograman). Deskripsi tentang lambda-calculus yang diketik sederhana dan khususnya bahasa pemrograman PCF biasanya didasarkan pada Nat dan Bool. Bagi orang-orang yang menggunakan dan mengajar PL industri untuk tujuan umum, lebih alami untuk memperlakukan bilangan bulat daripada alami. Bisakah Anda menyebutkan beberapa alasan bagus mengapa teoritikus PL lebih suka nat? Selain itu sedikit kurang rumit. Apakah ada alasan mendasar atau itu hanya suatu kehormatan tradisi?

UPD Untuk semua komentar tentang "fundamentalitas" alami: Saya cukup sadar tentang semua hal keren itu, tetapi saya lebih suka melihat contoh ketika sangat penting untuk memiliki sifat-sifat tersebut dalam tipe teori teori PL. Misalnya induksi yang disebutkan secara luas. Ketika kita memiliki logika apa pun (yang cukup diketik LC), seperti logika first-order dasar, kita benar-benar menggunakan induksi - tetapi induksi pada pohon derivasi (yang juga kita miliki di lambda).

Pertanyaan saya pada dasarnya berasal dari orang-orang dari industri, yang ingin mendapatkan beberapa teori dasar bahasa pemrograman. Mereka dulu memiliki bilangan bulat dalam program mereka dan tanpa argumen dan aplikasi konkret untuk teori yang dipelajari (ketik teori dalam kasus kami) mengapa mempelajari bahasa dengan hanya nat, mereka merasa sangat kecewa.

Artem Pelenitsyn
sumber
Saya kira ini bukan pertanyaan tingkat penelitian, meskipun yang menarik.
Raphael
4
Bukan, tapi ini pertanyaan besar, yang kami terima.
Suresh Venkat
1
Saya bertanya-tanya apakah dalam beberapa cara himpunan bilangan bulat non-negatif mungkin bahkan lebih mendasar daripada bilangan alami karena sifat unik dari nilai 0 yang tidak ada di yang terakhir. Saya juga akan menyarankan bahwa ini lebih valid sebagai pilihan tipe numerik dasar untuk komputer digital mengingat pentingnya 0.
Richard Cook
Saya tidak mengerti UPD Anda . Alam lebih mendasar daripada bilangan bulat, dan jawaban memberikan contoh mengapa ini terjadi.
Radu GRIGore
Re: UPD. Saya tidak terlalu yakin mengapa "orang-orang dari industri" akan "kecewa". (Saya telah menghabiskan karir saya di industri sendiri.) Mengapa ada orang yang berharap bahwa teori seharusnya menjadi perpanjangan yang jelas dari apa yang sudah mereka kenal? Sangat umum bahwa hal-hal tertentu yang umum dalam industri, seperti halnya variabel integer, ada lebih karena "alasan historis" daripada yang teoretis.
Marc Hamann

Jawaban:

24

Jawaban singkat: naturals adalah tata cara batas pertama. Oleh karena itu mereka memainkan peran sentral dalam teori himpunan aksiomatik (misalnya, aksioma ketidakterbatasan adalah pernyataan yang ada) dan logika, dan teoretikus PL cenderung berbagi keasyikan mendasar dengan ahli logika. Kami ingin memiliki akses ke prinsip induksi untuk membuktikan kebenaran total, terminasi, dan sifat-sifat serupa, dan alami adalah (er) pilihan alami dari keteraturan.

Saya tidak ingin menyiratkan bahwa bilangan bulat biner dengan lebar terbatas adalah objek yang kurang keren. Mereka adalah representasi dari p-adics, dan memungkinkan kita untuk menggunakan metode deret pangkat dalam teori bilangan dan kombinatorik. Ini berarti bahwa signifikansi mereka menjadi lebih terlihat dalam algoritmik daripada PL, karena ini adalah ketika kita mulai lebih peduli tentang kompleksitas daripada penghentian.

Neel Krishnaswami
sumber
20

Natural adalah konsep yang jauh lebih mendasar daripada bilangan bulat.

Induksi terjadi pada naturals dan bilangan bulat dapat diturunkan dari naturals dengan penambahan sederhana dari operator inversi unary.

Sebenarnya saya ingin mengajukan pertanyaan sebaliknya: mengapa desainer bahasa pemrograman awal (dan mesin register) mengabadikan bilangan bulat sebagai tipe data dasar ketika mereka begitu sekunder dan begitu mudah diturunkan dari alam?

Saya menduga itu hanya karena ada beberapa pengkodean biner keren yang dapat menangani bilangan bulat dengan elegan. ;-)

Pikirkan seberapa sering Anda ingin mengabaikan rentang negatif dari integer terprogram, dan pertimbangkan dorongan untuk memiliki tipe integer yang tidak ditandai untuk memulihkan bit yang hilang.

Marc Hamann
sumber
5
Alasan lain: jika Anda menginginkan sesuatu seperti angka Gereja, bilangan bulat negatif harus menunjukkan fungsi inversi. Jadi dalam konteks itu bilangan bulat akan lebih alami dalam kalkulus fungsi bijektif yang dapat dihitung.
Per Vognsen
@ Per Vognsen: tidak yakin ke mana Anda berdebat di sana. Tapi saya pikir aman untuk mengatakan bahwa fungsi bijektif yang dapat dihitung lebih mendasar daripada fungsi yang dapat dihitung secara arbitrer. ;-)
Marc Hamann
Tidak ada pertanyaan bahwa bilangan kompleks, yang berada di bagian atas hirarki angka Bilangan Alam -> Bilangan Bulat -> Bilangan Rasional -> Bilangan Nyata -> Bilangan Kompleks lebih mendasar daripada yang lain, karena mereka memiliki sifat aljabar yang "lebih bagus". Mereka ada di mana-mana dalam sains, tetapi secara mencolok tidak ada dalam "dasar" matematika. Jadi jawaban untuk apa yang lebih "fundamental" bilangan bulat atau alami benar-benar tergantung pada yang Anda tanyakan: algoritme atau aljabar.
Tegiri Nenashi
Karena ini adalah situs TCS, saya pikir kami aman dalam mengistimewakan pandangan ilmu komputer. ;-) Secara komputasi, hierarki itu progresif: setiap entri baru secara harfiah dibangun di atas yang sebelumnya. Karena "fundamental" biasanya merujuk pada sesuatu di pangkalan, saya pikir ujung alami adalah yang tepat untuk memberikan gelar itu.
Marc Hamann
17

Ada ada bijection komputasi antara dan Z . Oleh karena itu cukup untuk alasan tentang komputabilitas dan sejenisnya hanya menggunakan bilangan alami, sepanjang waktu mengetahui bahwa hasil Anda digeneralisasi ke bilangan bulat (dan bilangan rasional, dan semua set enumerable rekursif lainnya).NZ

Berargumentasi hanya dengan alami itu nyaman karena Anda memiliki induksi dan adalah set yang beralasan dengan urutan alami . Yang terakhir ini sangat penting karena dapat diinstrumentasi dalam bukti terminasi. Meskipun Anda dapat menentukan pesanan yang beralasan pada Z , itu kurang nyaman karena tidak cocok dengan pesanan yang biasa.NZ

Raphael
sumber
11

Namun alasan lain (terkait dengan yang sudah diberikan, tetapi jawaban ini memang menambah informasi baru) adalah adanya konstruksi alami yang sangat sederhana, bebas bagi hasil, yang disertai dengan prinsip induksi yang bagus [seperti yang telah dikatakan] . Apa yang belum diperluas adalah betapa sulitnya untuk membuat konstruksi bilangan bebas dari bilangan bulat.

Semakin banyak pemrograman yang saya lakukan di mana saya ingin jaminan tinggi, semakin saya membutuhkan naturals, dan saya menemukan hanya memiliki bilangan bulat yang sudah ditentukan sebelumnya bagi saya rasa sakit yang nyata.

Jacques Carette
sumber
Ada bahasa yang memiliki tipe dasar untuk naturals, lho.
Raphael
@ Raphael: Saya tahu. Tapi bukan yang saya sukai (yaitu Haskell dan OCaml). Saya belum siap untuk memulai 'pemrograman' dalam Agda atau Coq.
Jacques Carette
Apa yang buruk dari negosiasi?
David Harris
3
Quotients hebat dalam semantik. Mereka jauh, jauh lebih sulit untuk dihadapi dalam perhitungan aktual dan dalam representasi konkret. Ada banyak makalah tentang bagaimana menangani mereka dalam Coq, Isabelle, Agda, (ketik teori secara umum), dll. Saya hanya berasumsi bahwa itu adalah pengetahuan cerita rakyat di semua komunitas bahwa para perunding hanya susah untuk berurusan dengan 'dalam kenyataan'.
Jacques Carette
2
Saya merasa ini adalah jawaban terkuat dari kumpulan itu: Natural adalah tipe data induktif non-sepele. setelah Anda memberikan definisi dan membuktikan properti sederhana untuk bilangan asli, Anda telah membuka jalan untuk tipe data induktif yang lebih kompleks, seperti daftar atau pohon.
cody
7

Apakah ada alasan bagus mengapa ahli teori PL lebih memilih natural daripada bilangan bulat? Ada beberapa, tetapi dalam buku teks tentang bahasa pemrograman semantik, saya pikir tidak ada alasan teknis mengapa mereka perlu. Saya tidak bisa memikirkan tempat lain selain sistem tipe dependen, di mana induksi pada data penting dalam teori PL. Buku teks lainnya oleh Mike Gordon , David Schmidt , Bob Tennent dan John Reynolds tidak melakukannya. (Dan, buku-buku itu mungkin akan jauh lebih cocok untuk mengajar orang yang peduli tentang PL industri yang bertujuan umum!)

Jadi, di sana, Anda punya bukti bahwa itu tidak perlu. Bahkan, saya akan mengklaim bahwa buku teks teori PL yang baik harus parametrik dalam jenis primitif bahasa pemrograman, dan menyesatkan untuk menyarankan sebaliknya.

Uday Reddy
sumber
6

Natural dan bools dan operasi pada mereka dapat dikodekan dalam kalkulus lambda murni secara langsung, seperti yang disebut angka Gereja (dan bool Gereja, saya kira). Tidak jelas bagaimana orang akan menyandikan bilangan bulat dengan baik, meskipun jelas bisa dilakukan.

Dave Clarke
sumber
Maksud saya pertama-tama kalkulus lambda yang diketik. Kursus buku yang saya sebutkan di posting atas didasarkan pada itu. Saya kira lambda yang tidak diketik tidak begitu vital dalam teori jenis dan teori PL saat ini (saya mungkin salah tetapi itulah yang saya lihat dalam buku-buku itu.). Pokoknya terima kasih!
Artem Pelenitsyn