Bir program yazdığınızı düşünün. Düğmeye basıyorsunuz ve makine çalışmaya başlıyor. Ekranda imleç yanıp sönüyor. Kahveniz bitiyor, gün kararıyor, sabrınız çatlıyor. Soru basit gibi görünür: Bu program bir gün duracak mı, yoksa sonsuza kadar dönüp duran dijital bir hamster tekerleğine mi mahkûm? İşte Alan Turing’in meşhur Durma Problemi, yani Halting Problem, tam bu sorunun kalbine hançer gibi saplanır: Her programın, her girdide durup durmayacağını önceden söyleyen genel bir algoritma yazılamaz.
Bu cümle ilk bakışta karamsar bir yazılımcı atasözü gibi gelebilir. “Tabii canım, bazı kodlar karmaşıktır.” Hayır, mesele karmaşıklık değil; mesele ilkesel imkânsızlıktır. Turing bize sadece bazı işleri zor yaptığımızı değil, bazı işlerin doğası gereği yapılamayacağını gösterdi. Bilgisayar biliminin en sarsıcı dersi budur: Her şey hesaplanabilir değildir.
Kâhin Programın Trajedisi
Hayal edelim: Elimizde HALT adında mucizevi bir program var. Bu program, başka bir programı ve girdisini alıyor; “durur” ya da “sonsuza kadar çalışır” diye kesin yanıt veriyor. Harika! Yazılım dünyası bayram ederdi. Sonsuz döngüler tarihe karışır, test ekipleri çiçek dağıtır, proje yöneticileri ilk kez huzurla uyurdu.
Fakat Turing’in zekâsı burada devreye girer. Der ki: Bu HALT programını kullanarak tuhaf bir program yazalım. Adı da TERS olsun. TERS, kendisine verilen programın kendi üzerinde durup durmayacağını HALT’a sorar. Eğer HALT “durur” derse, TERS sonsuz döngüye girer. Eğer HALT “durmaz” derse, TERS hemen durur. Yani TERS, kâhinin söylediğinin tersini yapar.
Şimdi büyük sahneye geldik: TERS programını kendi kendisine verelim. TERS(TERS) ne yapar? Eğer duracaksa, tanımı gereği durmamalıdır. Eğer durmayacaksa, tanımı gereği durmalıdır. Mantık kendi kuyruğunu ısıran bir yılan gibi kıvrılır. Çelişki kaçınılmazdır. Demek ki başta varsaydığımız kusursuz HALT programı var olamaz.
Bu Sadece Kod Meselesi Değil
Durma Problemi, programlama derslerinde anlatılan teknik bir numara olmaktan çok daha fazlasıdır. Modern dünyanın “her şeyi ölçer, tahmin eder, optimize ederiz” inancına atılmış matematiksel bir tokattır. Bazı süreçlerin sonucunu, sürecin dışına çıkıp tepeden bakarak bile kesin biçimde bilemezsiniz. Onları çalıştırmanız gerekir. Ya biterler ya da beklemeye devam edersiniz.
Bu, yazılım geliştiricinin günlük hayatında çok somut görünür. Bir derleyici tüm hataları yakalayamaz. Bir güvenlik aracı her zararlı davranışı kesin olarak belirleyemez. Bir analiz programı, her olası kodun davranışını eksiksiz çözemez. Bu yüzden pratikte yaklaşık yöntemler, zaman sınırları, testler, tip sistemleri, biçimsel doğrulama araçları ve insan sezgisi kullanılır. Mutlak kehanetin yerini mühendislik disiplini alır.
Burada önemli ayrım şudur: “Genel çözüm yok” demek, “hiçbir şey bilemeyiz” demek değildir. Pek çok özel program için durup durmayacağını anlayabiliriz. Örneğin belirli sayıda dönen bir döngü, açıkça sona eren bir hesaplama, iyi tasarlanmış bir algoritma analiz edilebilir. Turing’in yasakladığı şey, tüm programlar ve tüm girdiler için çalışan evrensel bir karar makinesidir.
Sonsuzlukla Pazarlık Yapılmaz
Durma Problemi bize sonsuzluk hakkında da mütevazı olmayı öğretir. Bilgisayarlar hızlıdır, acımasızca mantıklıdır, yorulmazlar. Ama sonsuzluk karşısında onların da bileği bükülür. Çünkü mesele hız değildir. Bir programın trilyon yıl sonra duracağını bilmek ile asla durmayacağını bilmek arasında uçurum vardır. Bekleyerek kanıt elde edemezsiniz; sadece henüz durmadığını görürsünüz.
Bu yüzden Halting Problem, dijital çağın bilgelik taşlarından biridir. Bize şunu fısıldar: Her sorunun bir butonu, her belirsizliğin bir raporu, her karanlığın bir algoritmik feneri yoktur. Bazı kapılar hesaplamanın duvarına açılır. Orada yapılacak şey paniklemek değil, sınırı tanımaktır.
Turing’in dehası, bilgisayarı icat etmeden önce bilgisayarın rüyalarını ve kâbuslarını görmesiydi. Durma Problemi o kâbuslardan biridir: Bir makineye geleceği tamamen sordurmak istersiniz; makine size mantığın aynasını tutar ve der ki, “Beni ne kadar hızlandırırsan hızlandır, bazı sorular kendi gölgelerine takılır.” İşte bu yüzden bilgisayar bilimi yalnızca makinelerle değil, bilinebilirliğin sınırlarıyla da ilgilidir. Ve bazen en güçlü cevap, dürüst bir imkânsızlıktır.