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.
sumber
Jawaban:
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.
sumber
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.
sumber
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).N Z
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.N ≤ Z
sumber
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.
sumber
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.
sumber
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.
sumber