Herhangi bir programlama dilini seçelim ve bu dilde yazılmış bir programı ele alalım. Diyelim ki, C dilini ve "Hello World" programını seçtik ve programımız 50 karakterden oluşuyor. Programı diske kaydettiğimiz zaman disk üzerinde 50 byte'lık yer tutar; burada, her byte programın bir karakterini ASCII format ile temsil etmektedir. Byte yapısı, 0-255 arası değerler tuttuğuna göre, programımızı 256'lık sayı sisteminde 50 basamaklı bir sayı olarak düşünebiliriz (ya da ikilik sistemde 400 basamaklı olarak da düşünülebilir çünkü 50 byte x 8 bit/byte = 400 bit yapar). Bu, her program için böyledir. Demek ki, her program aslında bir doğal sayıdır. Peki, diyelim ki, C dilinde kaç farklı program yazılabilir? Elbette sonsuz adet! Ancak her program bir sayıdır ama her sayı bir program değildir; yani aslında yazılabilecek program sayısı doğal sayıların adedince bile değildir. Buradan da "Sonsuzluğun dereceleri mi var?" diye sorular aklımıza gelebilir.
Örneğin; doğal sayılar mı daha çoktur, yoksa tam sayılar mı? Acaba "sonsuz" demek yetmiyor mu, sonsuzları da karşılaştırabiliyor muyuz? Hem, hangisi çoktur derken çokluğu nasıl tanımlarız ki? İki sonlu kümeyi karşılaştırıyorsak elemanlarını sayıp hangisi daha çok elemanlı diye bakılabilir ama sonsuz elemanlı kümelerde bunu yapamayız. Bu yüzden, değil midir ki; küçükken "Aramızda en büyük sayıyı kim söyleyebilecek?" oyununda, ben "Üç" desem, arkadaş "Beş" derdi, ben "Bin" desem, o "On yüz bin" derdi, ben düzeltip "Milyon" derdim. (O zamanlar bir sakızın fiyatı bile bir buçuk milyon lira civarı olduğu için çok küçükken bile kafamız milyonlara çalışırdı, şimdiki çocuklar o noktada bizim kadar şanslı değil çünkü her şey 1 lira, 3 lira. Nerede kaldı o eski "Bakkal amca sakız ne kadar?", "Bir milyon üçyüz elli bin lira evladım" tipi konuşmalar...) Sonunda birimiz "Sonsuz" derdi ve olay biterdi. Artık "Sonsuz kere sonsuz" falan denilse de "O da sonsuz zaten" cevabı gelirdi hemen.
Kümelerin kardinalitelerini (nicelik) karşılaştırırken ille de elemanlarını saymak gerekmez (ve zaten bu da sonsuz kümelerde olanaksızdır). Alternatif olarak, bire bir eşleme yapılabilir. Bir A kümesinden bir B kümesine bire bir bir fonksiyon gösterilebilirse, bu iki kümeden "A'nın kardinalitesi B'den küçük eşittir" denilir. Örneğin; onluk sistemdeki 10 rakamını A kümesi olarak ele alalım ve B kümesi olarak da alfabemizdeki 29 harfi alalım. A kümesindeki "0" rakamını "a" harfine, "1" rakamını "b" harfine, vb. eşleyebiliriz. Fonksiyonun örten olması durumunda "kardinaliteleri eşittir" denilir. Bu örnekte A kümesinin eleman sayısı B'den küçüktür çünkü A'dan B'ye hem bire bir hem de örten bir fonksiyon bulunamaz.
Gelelim yukarıdaki küçük sorumuza, "Doğal sayılar mı daha çoktur yoksa tam sayılar mı?". Yani D kümesi mi yoksa Z kümesi mi daha çok eleman içerir? Aralarında bire bir ve örten bir eşleme bulabilirsek "kardinaliteleri eşittir" diyeceğiz. Burada 0-->0, 1-->1, 2-->2, 3-->3, ... şeklinde eşlersek negatif sayıları eşleyememiş oluyoruz, bu doğru ama aradığımız kötü (ve basit) bir eşleme değil, sonsuz gibi kompleks bir konuda çalışırken doğal sayılar ve tam sayıları bu denli basitçe eşlemek bir şey ifade etmez.
Doğal sayılar içerisinden tek olanları pozitif tam sayılara, çift olanları da negatif tam sayılara ve sıfıra eşleyerek, D ve Z'nin kardinalitelerinin eşit olduğunu göstermiş oluruz. Her ne kadar hala sizin gözünüze tam sayılar doğal sayılardan çok gibi görünüyor olabilirse de, bire bir ve örten bir eşleme bulduğumuz için aslında aynı çoklukta elemana sahiptirler diye yinelemek isterim. Nasıl ki, paylaşılan bir mutluluk artıyorsa ya da ancak kendinize yeteceğini düşündüğünüz bir yemeği arkadaşınızla bölüştüğünüz zaman her ikinize de yetiyorsa, bu da öyle bir şey. Yani sonsuzla uğraşıyorsanız böyle şeyleri garipsememek lazım çünkü sonsuzluğun tanımı da bir hayli enteresan. "Sonunda nokta nokta ile gösterilen şeydir" ya da "sonu olmayan şeydir" gibi cevapları duyar gibi oluyorum. Sonsuz kümenin tanımı şöyledir: Bir A kümesinin aynı kardinaliteye sahip bir özalt kümesi varsa, A sonsuz bir kümedir.
Konuya "Biraz da tanım icabı bu böyledir canım, aslında tam sayıların eleman sayısı doğal sayıların iki katından bir eksiktir" diyen yaklaşımları duyar gibi oluyorum ama dediğinizi kulağınız duysun, sizin bu dediğinize küçük çocuklar bile inanmaz, "İki kere sonsuz yine sonsuz, ben kazandım!" demezler mi size... Ve, bu kez çocuklar haklı olurdu...
Toparlamak gerekirse, bir A kümesinden D kümesine bire bir eşleme mümkün ise A kümesine "sayılabilir" denir. A kümesi aynı zamanda sonsuz ise A'ya "sayılabilir sonsuz" denir. Sayılamaz sonsuz olan kümelere basit örnekler olarak, reel sayılar kümesi, hatta (0, 1) aralığındaki reel sayılar kümesi verilebilir. Doğal sayılar kümesinden doğal sayılar kümesine yazılabilecek tüm fonksiyonların kümesi de sayılamaz sonsuz kümelerdendir. Sayılamaz sonsuz kümelere bir başka tür örnek de doğal sayılar kümesinin güç kümesidir (yani tüm doğal sayı alt kümelerini içeren küme). Bu güç kümesini fonksiyon gibi de düşünebiliriz, yani doğal sayılar kümesinden 0 ve 1 (ya da true/false) kümesine yazılabilecek tüm fonksiyonların kümesi de sayılamaz sonsuzdur. Yani, girdi olarak herhangi bir doğal sayı alan ve çıktı olarak true/false döndüren böyle basit bir fonksiyondan bile sayılamayacak kadar çok var. Örneğin, 5'ten büyük sayılara true döndüren bir C programı yazınız... 6'dan büyük sayılara true döndüren bir C programı yazınız... Çift sayılara true döndüren bir program yazınız... Basamaklarının toplamı 3'ün bir katı olan bir doğal sayı girdi olarak verildiğinde true döndüren bir program yazınız... Ne kadar çok soru üretilebilir, değil mi? O kadar çok ki, sayılamıyor. Oysa "Yazılabilecek program sayısı sayılabilir" demiştik, hatırladınız mı? Demek ki, geriye kalan sayılamayacak kadar çok probleme çözüm üretemiyoruz. Turing'in halting problemine bir de bu gözle bakılabilir. Turing çözülemeyecek bir problem olarak bu halting problemini örnek göstermişti aslında.
Bu arada, bu kavramların birçoğunu ortaya atan Cantor, o dönemde bazı fikirlere karşı epey zor durumda kalmıştı. Bunlardan biri de, ünlü matematikçi Kronecker'in "Tanrı tam sayıları yarattı, bunun dışındaki her sayı insan uydurmasıdır" şeklinde tercüme ettiğim sözüdür. Hatta 1874'te, Cantor, konuyla ilgili makalesini yayınlamak istediğinde, Crelle dergisinin editörü olan Kronecker'in gözüne takılmaması için yazısını "Bütün Reel Cebirsel Sayılar Kümesinin Bir Özelliği" diye kaçamak bir şekilde adlandırmış ve de ayrıca "sayılabilir" ve "sayılamaz" (yani "countable" ve "uncountable") kelimeleri yerine "numaralandırılabilir" ve "numaralandırılamaz" (yani "denumerable" ve "nondenumerable") kelimelerini seçmiştir. Reel sayıların sayılamaz olduğunu (yani pi sayısı, e sayısı gibi aşkın sayılardan sayılamayacak kadar çok olduğunu) kabul etmekte bugün zorlanmıyoruz. Ama yine de Cantor'un diyagonalleştirme adını verdiğimiz, 0-1 arasındaki reel sayıların sayılamaz olduğunu ispat için kullandığı teknik halen eleştirilmektedir. O kadar ki, modern bir derginin editörü, hatırlayabildiğim kadarıyla Türkçeye çevirecek olursam, şöyle söylüyordu: "Bu kadar basit ve inanılması kolay olan bir şeyin ispatında bir yanlış bulmak için neden bu kadar enerji sarfediliyor anlayamıyorum, bu makalelelerdeki yanlış
yerleri yazarlara geri bildirip makalelerini kibarca reddediyorum". Yine hatırlayabildiğim kadarıyla bu hatalı "çürütme" makalelerinden de bir derleme yapıp paylaşıma açacaktı. Bakalım, sonuçta Cantor mu Kronecker mi kazanacak. Kim kazanırsa kazansın, bence önemli olan bu şekilde güzel fikirler ortaya atabilmektir. Umuyorum bizlerin de bilgisayar bilimlerine, matematiğe, mantığa, bilişime güzel katkılarımız olur.