Mengapa ada lebih banyak fungsi yang tidak dapat dikomputasi daripada yang dapat dikomputasi?

29

Saat ini saya sedang membaca buku tentang algoritma dan kompleksitas. Saat ini saya sedang membaca tentang fungsi yang dapat dikomputasi dan yang tidak dapat dikomputasi, dan buku saya menyatakan bahwa ada lebih banyak fungsi yang tidak dapat dikomputasi daripada yang dapat dikomputasi, bahkan mayoritasnya tidak dapat dikomputasi. Dalam beberapa hal saya secara intuitif dapat menerimanya tetapi buku itu tidak memberikan bukti formal juga tidak banyak menguraikan topik tersebut.

Saya hanya ingin melihat bukti / biarkan seseorang di sini menguraikannya / mengerti lebih ketat mengapa ada begitu banyak fungsi yang tidak dapat dikomputasi daripada yang dapat dihitung.

hsalin
sumber
Ketika membandingkan dua set tanpa batas, semantik "lebih" harus direvisi.
Raphael

Jawaban:

31

Adalah countably banyak fungsi dihitung:

Setiap fungsi yang dapat dihitung memiliki setidaknya satu algoritma. Setiap algoritma memiliki deskripsi hingga menggunakan simbol dari himpunan terbatas, misalnya string biner terbatas menggunakan simbol . Jumlah string biner terbatas yang dilambangkan dengan { 0 , 1 } dapat dihitung (yaitu sama dengan jumlah bilangan alami N ).{0,1}{0,1}N

Oleh karena itu paling banyak terdapat banyak fungsi yang dapat dihitung. Ada setidaknya dihitung banyak fungsi dihitung karena untuk setiap , fungsi konstan f ( x ) = c adalah dihitung.c{0,1}f(x)=c

Dengan kata lain, ada korespondensi antara:

  • set fungsi yang dapat dihitung,
  • set algoritma,
  • , himpunan string hingga dari { 0 , 1 } , dan{0,1}{0,1}
  • , himpunan bilangan asli.N

Di sisi lain, ada banyak fungsi yang tak terhitung banyaknya di atas string (atau bilangan alami). Fungsi (atau f : { 0 , 1f:NN ) memberikan nilai untuk setiap input. Masing-masing nilai ini dapat dipilih secara independen dari yang lain. Jadi ada N N = 2 N fungsi yang mungkin. Jumlah fungsi lebih dari bilangan asli sama dengan jumlah bilangan real.f:{0,1}{0,1}NN=2N

Karena hanya banyak fungsi yang dapat dihitung, sebagian besar tidak. Bahkan jumlah fungsi uncomputable juga .2N

Jika Anda ingin menggambarkan ini secara intuitif, pikirkan tentang bilangan asli dan bilangan real, atau tentang string biner terbatas dan string biner tak terbatas. Ada jauh lebih banyak bilangan real dan string biner tak terbatas daripada bilangan alami dan string terbatas. Dengan kata lain (untuk bukti fakta ini lihat argumen diagonal Cantor dan Aritmatika Kardinal ).N<2N

Kaveh
sumber
Jawaban yang bagus! Apa yang saya tidak mengerti (saya mungkin kehilangan sesuatu yang sepele di sini) adalah bagaimana Anda mendapatkan ? NN=2N
hsalin
Ini adalah hitung kardinal. Tuliskan bilangan asli dalam urutan tak terbatas dari bilangan asli dalam biner, yang seharusnya memberikan intuisi.
Kaveh
Mengapa asumsi ini benar - "Setiap algoritma memiliki deskripsi hingga menggunakan simbol dari himpunan terbatas"? Mengapa suatu algoritma tidak dapat memiliki deskripsi yang tak terbatas?
Roland Pihlakas
@RolandPihlakas yang merupakan bagian dari definisi suatu algoritma (jika Anda lebih suka, program komputer).
Kaveh
9

Ini adalah konstruksi "eksplisit" dari banyak fungsi Boolean yang tidak dapat dihitung. Biarkan menjadi beberapa fungsi Boolean yang tidak dapat dihitung, katakanlah fungsi karakteristik dari masalah penghentian. Pertimbangkan rangkaian fungsi F = { f : N{ 0 , 1 } : x N , f ( 2 x ) = K ( x ) } . Setiap f F tidak dapat dihitung, dan F tidak dapat dihitung.K

F={f:N{0,1}:xN,f(2x)=K(x)}.
fFF

R

G={g:N{0,1}:nNmn,g(m)=R(m).}
gGRGG

Jadi ada banyak fungsi yang tidak dapat dihitung karena kita memiliki derajat kebebasan "tak terhingga banyaknya" - tak terhingga yang sebenarnya daripada tak terhingga "potensial" seperti dalam kasus yang dapat dihitung.

Yuval Filmus
sumber