Bir süre sonra başka bir cevap ekleyip eklemeyeceğimi düşündüm. Diğer cevaplar, sorusunun ortasına odaklanır ("turing complete", "tautology" ve diğerleri hakkında). İlk ve son kısmı ve böylece daha büyük ve biraz felsefi tabloyu çekeyim:
Ama bu ne demektir?
Turing'in eksiksiz olmasının anlamı nedir?
Sadece "başka bir Turing Makinesi simüle edebilmek" demeden Turing Makinesi'nin yeteneklerini tanımlamanın bir yolu var mı?
Gayri resmi konuşmak gerekirse, Turing'in eksiksiz olması, ne kadar karmaşık, derin, özyineli, karmaşık, ne kadar uzun olursa olsun (kod açısından) ve ne kadar saklama veya zamana bakılmaksızın , mekanizmanızın aklınıza gelebilecek herhangi bir algoritmayı çalıştırabilir . değerlendirmek için gerekli. Bu sorunun hesaplanabilir ise sadece başarılı söylemeye gerek yok, ama eğer olduğunu hesaplanabilir, bu olacak (halt) başarılı.
(Not: Bunun niçin "gayrı resmi" olduğunu bulmak için, bu satırlar boyunca devam eden Kilise-Turing tezini inceleyin; bir yorumda bu küçük ihmali işaret ederek.)
"Algoritma", günümüzde yaygın olarak bilgisayar algoritması olarak anladığımız anlamına gelir; yani, bazı kontrol mantıkları karıştırılmış olarak depolamayı manipüle eden bir dizi ayrı adım. Bir Oracle makinesi gibi değildir, yani "tahmin edemez".
Pratik tc olmayan bir dil için örnek
Kendinizi programladıysanız, muhtemelen dizeleri bir kalıpla eşleştirmek için kullanılan normal ifadeleri bilirsiniz.
Bu Turing Complete değil bir yapı örneğidir . Belirli ifadelerle eşleşen düzenli bir ifade oluşturmanın imkansız olduğu egzersizleri kolayca bulabilirsiniz.
Örneğin (ve bu, gerçek uygulamalarda birçok programcıyı kesinlikle sarstı), bir programlama dili veya XML belgesine uyan düzenli bir ifade oluşturmak teorik ve pratik olarak imkansızdır: Bir regexp'in blok yapısını bulması imkansızdır ( do ... end
veya { ... }
(dillerde, etiketleri XML belgelerinde açma ve kapatma) isteğe bağlı olarak derinlemesine izin verilirse. Orada bir sınır varsa, örneğin sadece 3 seviye “özyineleme” ye sahip olabilirsiniz, o zaman düzenli bir ifade bulabilirsiniz; ama eğer sınırlı değilse, o zaman gitmez.
Kaynak kodu ayrıştırmak için Turing tamamlandı bir dilde (C gibi) bir program oluşturmak açıkça mümkün olduğu için (herhangi bir derleyici bunu yapar), düzenli ifadeler asla söz konusu programı taklit edemez, bu nedenle bunlar tam anlamıyla Turing-tamamlanmadı
Motivasyon
Döner makinanın fikri kendi başına pratik değildir; Örneğin, Turing kesinlikle, örneğin Charles Babbage veya von Neumann'ın aksine gerçek bir bilgisayar veya bunun gibi bir şey yaratmaya icat etmedi. Turing Makinesi konseptine sahip olmanın amacı son derece basittir. Neredeyse hiçbir şeyden oluşmuyor. Olası (ve gerçek) bilgisayarları hayal edilebilecek en düşük seviyeye indirger.
Bu sadeleştirmenin amacı ise, bunun teorik sorular (problemleri durdurmak, karmaşıklık sınıfları ve ne teorik bilgisayar bilimi ile uğraştığı gibi) hakkında düşünmeyi kolaylaştırmasıdır. Özellikle bir özellik, söz konusu Turing Machine'i (bu çok kolay!) Bu dilde programlayarak belirli bir dilin veya bilgisayarın Turing Machine'i simüle edip edemediğini doğrulamanın çok kolay olmasıdır.
Sonsuzluğa
Asla sonsuz zamana veya depolamaya ihtiyacınız olmadığını unutmayın ; ancak hem zaman hem de depolama sınırsızdır. Her hesaplanabilir her çalıştırma için maksimum değere sahip olacaklardır, ancak bu değerin ne kadar büyük olabileceği konusunda bir sınır yoktur. Gerçek bir bilgisayarın sonunda RAM tükeneceği gerçeği burada belirtilmiştir; Elbette bu, herhangi bir fiziksel bilgisayar için bir sınırdır, ancak aynı zamanda, makinenin teorik "hesaplama gücü" ile de ilgilidir. Ayrıca, gerçekte ne kadar sürdüğü ile de ilgilenmiyoruz. Böylece küçük makinemiz keyfi zaman ve mekan kullanabilir ve bu da kesinlikle pratik değildir.
... ve ötesinde
Bir şaşırtıcı son nokta, o zaman, böyle basit, basit bir şey yapabilmesidir şeyi herhangi akla gerçek bir bilgisayar olabilir hiç bugün bildiğimiz kadarıyla en azından -, evrenin içindeki (sadece çok yavaş) başarmak.