Turing-eksiksizlik, bir şey ve sadece bir şey söyler: bir hesaplama modeli, bir Turing Makinesi tarafından modellenebilecek herhangi bir hesaplama da bu model tarafından modellenebilirse, Turing tamamlanır.
Peki, bir Turing Makinesinin modelleyebileceği hesaplamalar nelerdir? Öncelikle ve en önemlisi, Alan Turing ve tüm meslektaşları sadece doğal sayılardaki işlevlerle ilgilendiler. Bu nedenle, Turing Makinesi (ve λ-hesabı, SK-birleştiricisi hesabı, urs-özyinelemeli fonksiyonlar…) sadece doğal sayılardaki fonksiyonların hesaplanabilirliğinden bahseder. Eğer doğal sayılar üzerindeki bir fonksiyondan bahsetmiyorsanız, Turing-tamlık kavramı mantıklı bile değil, sadece uygulanabilir değil.
Bununla birlikte, birçok ilginç şeyi doğal sayılar olarak kodlayabileceğimizi unutmayın. Dizeleri doğal sayılar olarak kodlayabiliriz, grafikleri doğal sayılar olarak kodlayabiliriz, booleanları doğal sayılar olarak kodlayabiliriz. Turing Makinalarını doğal sayılar olarak kodlayabiliriz , bu da Turing Makinaları hakkında konuşan Turing Makinaları oluşturmamızı sağlar!
Ve tabii ki, doğal sayılardaki tüm işlevler hesaplanabilir değildir. Bir Turing Makinesi yalnızca doğal sayılardaki bazı işlevleri hesaplayabilir , λ-hesabı yalnızca doğal sayılardaki bazı işlevleri hesaplayabilir , SK birleştirici hesaplaması yalnızca doğal sayılardaki bazı işlevleri hesaplayabilir ,…. Şaşırtıcı bir şekilde (ya da değil), her hesaplama modelinin (aslında fiziksel evrenimizde gerçekleşebilir olan) doğal sayılarla (en azından şu ana kadar bulduğumuz tüm modeller için ) aynı işlevleri hesaplayabildiği ortaya çıktı. [Not: Açıkçası, daha zayıf hesaplama modelleri var , ancak henüz daha güçlü olan birini bulamadıkGerçek fiziksel sayıları veya zaman yolculuğunu kullanan modeller gibi fiziksel evrenimizle kesinlikle uyumsuz olanları hariç.]
Bu gerçek, çok sayıda farklı model aramanın uzun bir süresinin ardından, her seferinde tam olarak aynı işlevleri hesaplayabildiklerini görüyoruz (ki bu kabaca) tüm bunları söyleyen Kilise-Turing Tezi'nin temeli. hesaplama modelleri eşit derecede güçlüdür ve hepsinin "hesaplanabilir" olmanın ne anlama geldiğinin "ideal" kavramını yakalaması. (CTT'nin ikinci, daha felsefi bir yönü de vardır, yani bir algoritmayı takip eden bir insan aynı zamanda bir TM'nin hesaplayabileceği ve artık yapamayacağı aynı fonksiyonları hesaplayabilir.)
Ancak , bunların hiçbiri hakkında bir şey söylemiyor
- çeşitli modellerin ne kadar verimli olduğu
- nasıl rahat onlar kullanımına vardır
- Doğal sayılar üzerinde hesaplama fonksiyonlarının yanı sıra başka neler yapabilirler?
Ve bu tam olarak farklı hesaplama modelleri (ve programlama dilleri) arasındaki farkların ortaya çıktığı yerdir.
O ( s ı zebir r, r , bir y)O ( s ı ze2bir r, r , bir y)s i zebir r, r , bir ys i zebir r, r , bir y
Farklı kolaylıklara bir örnek olarak, çok yüksek düzeyde bir dilde yazılmış kodu, montajda yazılmış kodu ve aynı sorunu çözmek için bir TM'nin tanımını karşılaştırabilirsiniz.
Işık anahtarınız, üçüncü tür farklara bir örnektir, bazı modellerin doğal sayılar üzerinde çalışmayan ve bu nedenle Turing-bütünlüğü ile ilgisi olmayan şeyler yapabileceği şeyler.
Özel sorularınızı cevaplamak için:
Ancak Turing'in eksiksiz bir dilinde yazılmış herhangi bir program başka bir dilde tekrar yazılabilir mi?
Hayır. Yalnızca program doğal sayılar üzerinde bir Turing-hesaplanabilir işlevi hesaplarsa. Ve o zaman bile, karmaşık bir kodlamaya ihtiyaç duyabilir. Örneğin, λ-calculus bile doğal sayılara sahip değildir, fonksiyonlar kullanılarak kodlanmaları gerekir (çünkü λ-calculus'un sahip olduğu tek şey fonksiyonlardır).
Girdi ve çıkışın bu kodlaması algoritmayı ifade edebildiği gibi çok karmaşık olabilir. Herhangi bir program olduğu doğrudur süre Yani, olabilir yeniden yazılması, yeniden yazılmış bir program çok daha fazla bellek kullanabilir ve çok daha yavaş olması, çok daha karmaşık, çok daha büyük olabilir.
Meclisimin bir LIGHTBUTTON opcode'u varsa? Fiziksel olarak o dili, ampul olmadan bir sistemde (dilde) taklit edemiyorum.
Bir ampul, doğal sayılar üzerinde Turing-hesaplanabilir bir fonksiyon değildir. Gerçekten, bir ampul ne bir işlevdir ne de bir hesaplamadır. Bir ampulü açıp kapatmak, bir G / Ç yan etkisidir. Turing Makineleri G / Ç yan etkilerini modellemez ve Turing-tamamlama kendileri ile ilgili değildir.
Keyfi gerçek sayılar üzerinde.
Turing-eksiksizlik sadece doğal sayılardaki hesaplanabilir fonksiyonlarla ilgilenir, gerçek sayılarla ilgilenmez.
İki nedenden ötürü sizin gibi sorulara gelince, Turing-eksiksizliği çok da ilginç değildir:
- Çok yüksek bir engel değil. Eğer ihtiyacımız olan tüm
IF
, GOTO
, WHILE
ve tek bir tamsayı değişken (değişken varsayarak keyfi büyük tamsayılar tutabilir). Veya, özyineleme. Çok, çok ve çok şey Turing tamamlandı. Kart oyunu Magic: The Gathering tamamlandı. CSS3 Turing tamamlandı. sendmail
Yapılandırma dosyası Turing-tamamlandı. Intel x86 MMU Turing tamamlandı. Intel x86 MOV
talimatı Turing tamamlandı. PowerPoint animasyonları Turing tamamlandı. Excel (komut dosyası olmadan, yalnızca formülleri kullanarak) Turing tamamlandı. BGP yönlendirme protokolü Turing tamamlandı. sed
Turing tamamlandı. Apache mod_rewrite
kuralları Turing tamamlandı. Google için " (yanlışlıkla VEYA şaşırtıcı şekilde) turing tamamlandı"Başka ilginç örnekler bulmak için. Neredeyse her şey Turing tamamlandıysa, Turing tamamlandı olmak ilginç bir özellik olmayı durdurur.
- Yararlı olmak aslında gerekli değildir. Pek çok faydalı şey Turing-tamamlandı değil . Sürüm 3 önce CSS tam Turing-(ve CSS3 gerçeği değil ise aslında herkes tarafından kullanılabilir değildir). 1999'dan önce SQL Turing-tam değildi, henüz, o zaman bile çok yararlı oldu. Ek kütüphaneler olmadan C programlama dili Turing-tamamlanmış gibi görünmüyor . Bağımlı olarak yazılan diller, tanım gereği az ya da çokdır, Turing-complete değildir, ancak onlara işletim sistemleri, web sunucuları ve oyunlar yazabilirsiniz.
İdris'in yazarı Edwin Brady, bu yönlerden bazıları hakkında konuşmak için "Tetris-complete" terimini kullanıyor. Tetris-tam olmak titizlikle tanımlanmamıştır (açıkça "Tetris'i uygulamak için kullanılabilir" dışında), ama delirmeden bir oyun yazabileceğiniz, yeterince yüksek seviyeli ve yeterince etkileyici olmak gibi şeyleri kapsar. dış dünya ile etkileşime girme (girdi ve çıktı), yan etkileri ifade edebilme, bir olay döngüsü yazabilme, reaktif, asenkron ve eşzamanlı programlama ifade edebilme, işletim sistemiyle etkileşime girebilme, yabancı kütüphanelerle etkileşime geçmek (diğer bir deyişle: C kodu ile arayarak ve aranarak). Bunlar genel amaçlı bir programlama dilinin Turing-eksiksizliğinden çok daha ilginç özellikleridir.
Farklı bir soruyu cevaplasa da ilginç noktalara değinen bu soruya cevabımı bulabilirsiniz .