Yanıtlar:
İşte en kısa açıklama:
Bir Turing Complete sistemi, yanıt bulabilecek bir programın yazılabileceği bir sistem anlamına gelir (çalışma zamanı veya bellek ile ilgili herhangi bir garanti olmaksızın).
Yani, eğer birisi "benim yeni şeyim Turing Complete" ise, prensipte (genellikle pratikte olmasa da) herhangi bir hesaplama problemini çözmek için kullanılabilir.
Bazen bu bir şaka ... Bir adam vi'da bir Turing Machine simülatörü yazdı, bu yüzden vi'nin dünyada şimdiye kadar ihtiyaç duyulan tek hesaplama motoru olduğunu söylemek mümkün.
İşte en basit açıklama
Alan Turing, bir program alabilen, o programı çalıştırabilen ve sonuç gösterebilen bir makine yarattı. Ama sonra farklı programlar için farklı makineler yaratmak zorunda kaldı. Böylece HERHANGİ BİR programı alıp çalıştırabilen "Evrensel Turing Makinesi" yarattı.
Programlama dilleri bu makinelere benzer (sanal olmasına rağmen). Program alıp çalıştırıyorlar. Şimdi, bir Turing makinesinin yeterli zaman ve bellek verebileceği herhangi bir programı (dilden bağımsız olarak) çalıştırabiliyorsa, bir programlama diline "Turing complete" adı verilir.
Örneğin: Diyelim ki 10 sayı alan ve ekleyen bir program var. Turing makinesi bu programı kolayca çalıştırabilir. Ancak şimdi, herhangi bir nedenle programlama dilinizin aynı eklentiyi gerçekleştiremeyeceğini hayal edin. Bu "Turing tamamlanmamış" (tabiri caizse). Öte yandan, evrensel Turing makinesinin çalıştırabileceği herhangi bir programı çalıştırabilirse, Turing tamamlandı.
Modern programlama dillerinin çoğu (örn. Java, JavaScript, Perl, vb.) Tamamlanır, çünkü her biri toplama, çarpma, eğer-başka koşul, dönüş ifadeleri, saklama / alma / silme yolları gibi programları çalıştırmak için gerekli tüm özellikleri uygular. veri vb.
Güncelleme: Blog gönderimle ilgili daha fazla bilgi edinebilirsiniz: "JavaScript Tamamlanıyor" - Açıklama
Gönderen wikipedia :
Alan Turing'in adını alan Turing tamlığı, şimdiye kadar gelişmiş bir bilgi işlem cihazı için her makul tasarımın evrensel bir Turing makinesi tarafından taklit edilebilmesi bakımından önemlidir - bu, Church-Turing tezi olarak bilinen bir gözlemdir. Böylece, evrensel bir Turing makinesi olarak işlev görebilen bir makine, prensip olarak, başka herhangi bir programlanabilir bilgisayarın yapabileceği herhangi bir hesaplamayı yapabilir. Bununla birlikte, bunun, makine için bir program yazmak için gereken çaba, makinenin hesaplamayı gerçekleştirmesi için geçmesi gereken süre veya makinenin hesaplama ile ilgisi olmayan tüm yetenekleri ile ilgisi yoktur.
Gerçekten Turing-complete makineleri, sınırsız depolama alanına ihtiyaç duyduklarından fiziksel olarak imkansızdır, ancak Turing tamlığı, sınırsız depolama alanına sahip olsaydı evrensel olacak fiziksel makinelere veya programlama dillerine genellikle gevşek bir şekilde atfedilir. Tüm modern bilgisayarlar bu anlamda Turing-complete'tur.
"Tam turing '' yeterli zaman ve mekan verildiğinde hesaplanabilir problemi cevaplayabilme '' diyerek bundan daha teknik olmayan olabileceğinizi bilmiyorum.
Turing tam dili, herhangi bir hesaplama yapabilen dildir. Church-Turing Tezi herhangi performable hesaplama Turing makinesi tarafından yapılabileceğini belirtir. Bir Turing makinası sonsuz rasgele erişim bellek ve sonlu 'programında' olan bir makine olduğunu dikte o belli bir sonuçla sona gerektiğini belleğin genelinde yazma ve hareket, ve ne bir sonraki yapmalıyım okumalı zaman. Bir Turing makinesine giriş, başlamadan önce belleğine konur.
Bir Turing makinesi bellekte gördüklerine dayanarak kararlar alabilirsiniz tek destekler işte dil '- +
, -
, *
, ve /
onun girişine dayalı bir seçim yapamaz çünkü tamsayılar üzerinde tam Turing değil, bir Turing makinesi can.
Bir Turing makinesi sonsuza kadar çalışabilir - Java, Javascript veya Python'u alıp herhangi bir döngü, GOTO veya işlev çağrısı yapma yeteneğini kaldırsaydık, Turing tamamlanmazdı çünkü rastgele bir hesaplama yapamaz. asla bitmez. Coq , sona ermeyen programları ifade edemeyen bir teorem kanıtlayıcısıdır, bu yüzden Turing tamamlanmamıştır.
Bir Turing makinesi sonsuz bellek kullanabilir - Tam olarak Java'ya benzeyen ancak 4 Gigabayttan fazla bellek kullandığında sona erecek olan bir dil Turing tamamlanmayacaktır, çünkü Turing makinesi sonsuz bellek kullanabilir. Bu yüzden gerçekten bir Turing makinesi inşa edemiyoruz , ancak Java hala bir Turing tam dilidir, çünkü Java dilinin sonsuz bellek kullanmasını engelleyen bir kısıtlaması yoktur. Bu, düzenli ifadelerin Turing'i tamamlamamasının bir nedenidir.
Turing makinesinin rasgele erişim belleği vardır - Yalnızca bellekte çalışmanıza push
ve pop
bir yığının işlemlerine izin veren bir dil Turing tamamlanmayacaktır. Bir dizeyi bir kez okuyan ve yalnızca bir yığından itip haşhaş kullanarak belleği kullanabilen bir 'dilim' varsa (
, dizede her birinin )
daha sonra gördüğü zaman iterek (
ve gördüğünde haşlayarak kendi kendine sahip olup olmadığını söyleyebilir )
. Her Ancak, bu söyleyemezsin (
kendi vardır )
daha sonra ve her [
kendi vardır ]
(not sonradan ([)]
bu kriterleri karşılayan ama ([]]
does not). Bir Turing makinası izlemek için onun rasgele erişim belleği kullanabilirsiniz ()
's ve[]
ayrı olarak, ancak bu dil sadece bir yığın ile olamaz.
Bir Turing makinesi herhangi bir Turing makinesini simüle edebilir - Uygun bir 'program' verildiğinde bir Turing makinesi başka bir Turing makinesinin 'programını' alabilir ve keyfi girişte simüle edebilir. Python tercümanı uygulamaktan yasaklanmış bir diliniz olsaydı, Turing tamamlanmış olmazdı.
Dilinizde sonsuz rasgele erişim belleği, koşullu yürütme ve bir tür tekrarlanan yürütme varsa, muhtemelen Turing tamamlandı. Bir Turing makinesinin yapabileceği her şeyi hala başarabilen daha egzotik sistemler vardır, bu da onları Turing'i de tamamlar:
cyclic tag system
, değil universal cyclic tag system
. Bu nedenle - makale SQL turing tamlığını kanıtlamaz. (Ya da bir şeyi yanlış anladım)
Temel olarak, Turing-tamlık sınırsız bir gerekliliktir, sınırsız özyineleme.
Bellek ile sınırlı bile değil.
Bunu bağımsız olarak düşündüm, ama işte iddianın tartışılması . LSP tanımım daha fazla bağlam sağlıyor.
Buradaki diğer cevaplar Turing-tamlığının temel özünü doğrudan tanımlamıyor.
while (p) { /* ... */ }
. "Genel özyineleme ile olası herhangi bir hesaplamayı yapabilme yeteneği arasındaki denkliği belirtiyorum." Kilisenin tezi çok farklı bir konudur ve gerçekten ayrıca tartışılmalıdır.
Tam Turing, en az bir Turing Makinesi kadar güçlü olduğu anlamına gelir . Bu, bir Turing Makinesi tarafından hesaplanabilecek her şeyin bir Turing Complete sistemi tarafından hesaplanabileceği anlamına gelir.
Hiç kimse bir Turing Makinesinden daha güçlü bir sistem bulamadı. Şimdilik, bir sistemin Turing Complete olduğunu söylemek, sistemin bilinen herhangi bir hesaplama sistemi kadar güçlü olduğunu söylemekle aynıdır (bkz. Church-Turing Tezi ).
En basit ifadeyle, Turing-complete sistemi olası herhangi bir hesaplama problemini çözebilir.
Temel gereksinimlerden biri, karalama alanı boyutunun sınırsız olması ve karalama alanına önceki yazma işlemlerine erişmek için geri sarmanın mümkün olmasıdır.
Böylece pratikte hiçbir sistem Turing-tamamlanmış değildir.
Daha ziyade bazı sistemler sınırsız belleği modelleyerek ve sistemin belleğine sığabilecek olası bir hesaplamayı gerçekleştirerek Turing-tamlığı yaklaşık olarak gösterir.
"Turing Complete" (Turing Complete) kavramının önemi, süreçlerinin daha basit ve basit olan "basit" talimatlara göre yapılandırılabilmesini sağlayacak bir bilgi işlem makinesini (mutlaka mekanik / elektriksel bir "bilgisayar") tanımlama yeteneğinde olduğunu düşünüyorum. Evrensel makinenin yorumlayabileceği ve çalıştırabileceği talimatlar.
Açıklamalı Turing'i tavsiye ederim
@Mark açıkladığınız şeyin Evrensel Turing Makinesi ile Turing Complete arasındaki bir karışım olduğunu düşünüyorum.
Turing Complete, pratik anlamda, Universal Machine (masaüstü bilgisayar) tarafından yürütülecek, program olarak yazılabilen ve temsil edilebilen bir makine / süreç / hesaplama olacaktır. Diğerleri tarafından belirtildiği gibi, zaman veya depolama için dikkate almasa da.
Basit kelimelerle anladıklarım:
Turing Complete: Hesaplama yapabilen bir programlama dili / programı Turing tamamlandı.
Örneğin :
Eğer sadece kullanarak iki numaraları ekleyebilirsiniz HTML . (Ans ' Hayır ', ekleme yapmak için javascript kullanmanız gerekir.) Dolayısıyla HTML Turing Complete değil.
Java, C ++, Python, Javascript, Ethereum için Solidity vb. Diller Tamamlanıyor. Çünkü bu dilleri kullanarak iki sayı eklemek gibi bir hesaplama yapabilirsiniz.
Bu yardımcı olur umarım.
Test edip dallayabiliyorsa tam ('if' var)
Turing Machine, herhangi bir programın durum testi yapabilmesini gerektirir. Bu temeldir.
Bir oyuncu piyano rulosu düşünün. Oyuncu piyano oldukça karmaşık bir müzik parçası çalabilir, ancak müzikte hiçbir zaman koşullu mantık yoktur. Turing Tamamlandı.
Koşullu mantık, Turing Complete olan bir makinenin hem gücü hem de tehlikesidir.
Piyano rulosunun her seferinde durması garanti edilir. TM için böyle bir garanti yoktur. Buna “durdurma sorunu” denir.
As Waylon Flinn söyledi :
Tam Turing, en az bir Turing Makinesi kadar güçlü olduğu anlamına gelir.
Bunun yanlış olduğuna inanıyorum, Turing Makinesi kadar güçlü ise bir sistem Turing'i tamamlıyor, yani makine tarafından yapılan her hesaplama sistem tarafından yapılabilir, ancak sistem tarafından yapılan her hesaplama Turing makinesi tarafından yapılabilir .
Çoğu programcıya tanıdık gelen pratik dil terimlerinde, Turing tamlığını tespit etmenin genel yolu, dilin iç içe sınırsız ifadelerin simülasyonuna izin verip vermemesidir (ifadeler için Pascal stilinin aksine, sabit üst sınırları olan).
İlişkisel bir veritabanı yer ve yolların enlem ve boylamlarını girebilir ve aralarındaki en kısa yolu hesaplayabilir - hayır. Bu, SQL'in Turing tamamlanmadığını gösteren bir sorundur.
Ancak C ++ bunu yapabilir ve herhangi bir sorun yapabilir. Böylece öyle.