Cook-Levin teoremi; P sınıfının birbirine denk olup olmadığı güncel matematik ve teorik bilgisayar biliminin bir türlü çözemediği bir sorun olacağı kesin olarak söylenmiş olacaktır?
Teoremin ispatına geçmeden önce teoremin çıkış noktası üzerinde duralım.
SAT problemi bir NP-tam sınıfı problemidir. Giriş: Teoremin ispatına geçmeden önce teoremin çıkış noktası üzerinde duralım. Polinom zamanda kararlaştırılan problem (P sınıfı problemleri) ile polinom zamanda doğrulanabilen problem (NP sınıfı problemleri) sınıflarının birbirine denk olup olmadığı güncel matematik ve teorik bilgisayar biliminin bir türlü çözemediği bir sorun olagelmiştir. Eğer bu sınıflar birbirine denk olduğu gösterilirse herhangi polinom zamanda doğrulanabilen bir problemin (NP sınıfı problemi) artık polinom zamanda kararlaştırılabiliyor olacağı kesin olarak söylenmiş olacaktır. 1970’lerde P ve NP sınıflarının arasındaki ilişkiye Stephen Cook ve Leonid Levin adındaki iki bilim adamı farklı bir açıdan yaklaşmışlardır, bazı NP sınıfı problemlerinin karmaşıklıklarının tek başlarına tüm NP sınıfının karmaşıklığına eşit olduğunu fark etmişler.Eğer bu tip problemlerin polinom zamanda bir çözümü bulunursa NP sınıfındaki tüm problemler polinom zamanda çözülebilir.Bu tip problemlere ileride değineceğiz ve bun tip problemlere NP-tam sınıfı problemleri diyeceğiz. Dolayısıyla Cook- Levin yaklaşımının bir sonucu olarak P sınıfıyla NP sınıfının eşitliğini iddia eden biri NP-tam bir problemi polinom zamanda çözmesi iddiasını ispatlamak için yeterli olacaktır. SAT Problemi: SAT (Doğrulanabilirlik) probleminin ne olduğundan bahsedelim. SAT problemi verilen bir boolean ifadenin sonucunun doğru olup olmayacağıyla problemidir. Yani boolean ifadeyi doğru kılacak, boolean ifadenin değişkenlerinin bir “doğru,yanlış” kombinasyonunun oluşturup oluşturmayacağıyla ilgilenir. Dolayısıyla SAT problemi aşağıdaki gibi ifade edilebilir: :SAT=\left\\{\langle\varnothing\rangle\vert\varnothing\, \text{dogrulanabilir boolean ifadedir}\right\\} Örneğin \varnothing=\left(\bar x\scriptstyle\land y\right)\scriptstyle\lor\left(x\scriptstyle\land z\right) gibi herhangi bir boolean ifadenin sonucunun doğru olmasını inceleyen probleme SAT problemi denir.Bu örnekte x=doğru, y=yanlış, z= doğru için problem doğrulanabilirdir. NP-Tam Sınıfı: Bir B dili NP-tam ise şu iki şartı sağlamalıdır: # B dili NP sınıfındadır. # NP sınıfındaki her dil B diline polinom zamanda indirgenebilir. Burada yeni bir kavramla karşılaşıyoruz, “polinom zamanda indirgemek”. Bunu fazla derine inmeden şöyle özetleyebiliriz, eğer bir problemin çözümünü bilmiyorsak ya da çözümü bulmakta çok zorlanıyorsak asıl problemimizi çözmeye yardımcı olacak yeni bir probleme indirgeriz ve çözüme yeni indirgenmiş problem aracılığıyla ulaşırız. Eğer bu indirgememiz polinom zamanda gerçekleştirilirse buna da “polinom zamanda indirgemek” adını veririz. Buna şöyle bir örnek verebiliriz: Bilmediğiniz bir yere gitmek istediğinizi farz edelim ve bu problemin sizin için zor bir problem olduğunu düşünelim. Bu durumda gideceğiniz yere ulaşmak için bir yardımcıya ihtiyacınız olacaktır. Bu yardımcılar taksiye binmek, harita elde etmek ya da bilen birine sormak bunlar arasında sayılabilir. Böylelikle bizim için zor olan problemimiz taksi ya da harita bulmak kadar basit bir probleme indirgenmiş oldu. Kısaca buna da değindikten sonra artık teoremimize dönelim. İspat: SAT probleminin NP- tam sınıfına ait bir problem olduğunu göstermek için öncelikle SAT dilinin NP sınıfında olduğunu göstermemiz lazım. SAT probleminin NP sınıfında olduğunu göstermenin iki farklı yolu vardır: # SAT problemini polinom zamanda doğrulayan bir Turing Makinesi(TM) tasarlamalıyız. # Ya da SAT problemini polinom zamanda kararlaştıran bir deterministik olmayan Turing Makinesi (NTM) tasarlamalıyız. Biz burada 2. yolla bunu ispatlayalım: Deterministik olmayan N Turing Makinesi, SAT dilini polinom zamanda aşağıdaki gibi kararlaştırsın: N: “ ∅ ’nin Boolean ifade, x1, x2, x3,...., xk’nin de bu ifadenin bir değişkeni olsun ve makine girdi olarak < ∅, x1, x2, x3,...., xk > katarını alsın. # Deterministik olmayacak şekilde boolean ifadedeki değişkenlere “doğru ve yanlış” değerlerini ata. # Elde edilen kombinasyonla boolean formülün doğru cevap üretip üretmediğini kontrol et. Eğer cevap doğruysa kabul ver. Eğer cevap yanlışsa ve tüm kombinasyonlar denenmişse ret ver, eğer cevap yanlış ve tüm kombinasyonlar denenememişse 1’e dön. Şimdi sıra NP’deki her dilin SAT diline polinom zamanda indirgemekte. A dilini nk zamanda kararlaştıran determinist olmayan bir N Turing Makinesi düşünelim. Aşağıda anlatacağım yöntem aracılığıyla N makinesini SAT diline indirgeyeceğiz.Michael Sipser: "Introduction to the Theory of Computation" Course Technology Press Second Edition, 2005. sol 453 × 337px Bu tabloda her bir satır N makinesinin konfigürasyonunu ifade ediyor. Kolaylık olsun diye her konfigürasyonun # ile başlayıp # ile bittiğini farz edelim. Her konfigürasyondan bir sonrakine N makinesinin geçiş fonksiyonu aracılığıyla ulaşılmaktadır yani konfigürasyonlar arasındaki geçişlerde N makinesinin kurallarına uyulmak zorundadır.