Turing tamamlanmamış hesaplama modelleri için açık bir “hesaplanabilir” tanımı var mı?


9

Bu, burada başka bir sorunun takibi ve umarım çok felsefi değildir. Raphael'in önceki sorumla ilgili bir yorumda işaret ettiği gibi, gerçekten "hesaplanabilir" tanımını alamıyorum, ancak okuduğum bazı makalelere göre, tanım, turingden daha zayıf hesaplama modelleri söz konusu olduğunda da net değil. giriş ve çıkış kodlaması nedeniyle makineler.

Hesaplanabilir turingin tipik tanımı aşağıdaki gibidir:

Tanım 1: fonksiyonuna tur hesaplanabilir denirse , doğal sayıların dizeler olarak uygun bir kodlamasını kullanarak hesaplayan bir tur makinesi olarak adlandırılır.f:N-kN-Mf

Tanımlar tam olarak uygun bir kodlamanın ne olduğu konusunda farklılık gösterir , ancak çoğu ikili kodlama , tekli kodlama veya ondalık kodlamayı sabit ve uygun kodlama olarak ifade eder. Turing hesaplanabilirliğinin tanımı için bir kodlamanın sabitlenmesinin gerekli olduğunu göstermek de mümkündür. Ancak, doğal sayıların ikili kodlamasını özel kılan, onu uygun bir kodlama olarak aksiyomatize edebilmemiz için ne yapar? Muhtemelen hesaplanabilirliğin tesadüfen ne anlama geldiği sezgisel fikrine uyduğu için .

Peki ya turing makinelerinden daha zayıf hesaplama modellerine bakarsak ? Örneğin, sadece sağa doğru hareket edebilen alfabeli "sakat" makinelerinin setini ve turing hesaplanabilirliğiyle tutarlı olan sakatlanmış turing hesaplamalı tanımını ele alalım:Mc{0,1}

Tanım 2: fonksiyonuna hesaplanabilir veya hesaplanabilir sakat turing denir . Doğal sayıların uygun bir kodlamasını kullanarak hesaplayan sakat bir tur makinesi dizi.f:NkNMcMf

Biz "ikili kodlama" olarak "uygun bir kodlama", işlev tanımlarsak olduğu değil de hesaplanabilir . Biz "tekli kodlama" olarak "uygun bir kodlama" axiomatize, o zaman olup olarak hesaplanabilir . Herkesin istediği kadar sezgisel kodlamalardan birini düzeltebileceği göz önüne alındığında bu garip görünüyor. Bir hesaplama modelinin belirli bir kodlamaya başvurmadan hesaplayıp hesaplayamayacağı açık olmalıdır - en azından hiç kimse "döngü programlarının turing makinelerinden daha zayıf olduğunu" belirtirken hangi kodlamanın kullanıldığından bahsetmediğini hiç görmedim.f:NN,nn+1Mcf Mcf


Bu girişten sonra nihayet sorumu ifade edebilirim: Biri sezgisel hesaplanabilirlik kavramıyla örtüşmeyen rastgele hesaplama modelleri için "uygun kodlamalar" ve "hesaplanabilirlik" nasıl tanımlanır ? Turing hesaplanabilirliği çerçevesinde bu mümkün müdür?

Düzenleme: Giriş kısaltılmış, soruya eklemedi.

Yanıtlar:


6

Burada eksik olduğun bazı temel gerçekler, bahsettiğiniz tüm kodlamaların hesaplanabilirlik açısından eşdeğer olmasıdır: bir sayının ikili kodlamasını tekli kodlamasına eşleyen hesaplanabilir bir işlev vardır veya tersi de geçerlidir. Bu nedenle hesaplanabilirliği tanımlamak adına, bu kodlamalardan hangilerini sayılar için seçtiğiniz önemli değildir. En sevdiğiniz kodlamayı düzeltmeniz yeterlidir.

Hesaplanabilirlik özünde dize işlevlerinin bir özelliğidir f:Σ*Σ*. Hesaplanabilirliği başka bir etki alanında tanımladığınızda, bir kodlamayı düzeltmeniz gerekir. Uygulamada, tüm "makul" kodlamalar bir önceki paragraf anlamında eşdeğerdir, bu nedenle kesin kodlama önemli değildir.

Ancak kodlama, sınırlı hesaplama modellerinde önemlidir. Aşırı bir örnek vermek gerekirse, zaman kısıtlamalı Turing makinelerini düşündüğünüzü varsayalım: makinenizin zamanında sona ermesini istediğinizi varsayalımÖ(nc) bazı c, nerede ngirdinin uzunluğudur (dize olarak). İkili kodlama ve tekli kodlama arasında artık geçiş yapamıyoruz çünkü ikili kodlama çok daha kompakttır. Tamsayıların polinom zamanla hesaplanabilir bir fonksiyonu hakkında konuştuğumuzda, tam sayıların ikili olarak kodlandığını belirtiriz. Ondalık kodlama aynı polinom zaman hesaplaması kavramına yol açacağından, bu bile biraz keyfi bir seçimdir.

Sorunuzu cevaplamak için - kodlama, kısıtlanmış modelin tanımının bir parçası olarak belirtilmiştir.


"Burada eksik olduğunuz bazı temel gerçeği, bahsettiğiniz tüm kodlamalar hesaplanabilirlik açısından eşdeğerdir: bir sayının ikili kodlamasını tekli kodlamasına veya tam tersine eşleyen hesaplanabilir bir işlev vardır" - evet, ben sorumun orijinal sürümünde vardı, ancak daha zayıf modeller hakkındaki sorunun ne kadar alakalı olduğunu göremiyorum. Ayrıca, kodlamanın model tanımının bir parçası olarak belirtilmesi gerektiği açıktır, ancak soru, böyle makul bir tanıma nasıl ulaşılabileceği sorusudur .
Stefan Lutz

1
Biri bu tanımı şapkadan çıkarır. Farklı tanımlar eşdeğer olma eğiliminde olduğundan, kesin tanım önemli değildir. Böyle olduğunda, birkaç farklı karmaşıklık kavramı olacaktır. Örneğin, bazı grafik algoritmaları için, size bir bitişiklik matrisi veya kenar listesi vermeniz fark yaratır.
Yuval Filmus

Özetlemek gerekirse: a) Her bir hesaplama modelinin tanımında sözdizimi, anlambilim VE uygun bir kodlama bulunmalıdır. b) "Uygun kodlama" tanımı, modelin sözdiziminden ve anlambiliminden tamamen bağımsızdır. c) Tüm hesaplama modelleri için geçerli olan "uygun kodlama" tanımını vermenin bir yolu yoktur. Bu doğru mu?
Stefan Lutz

A) ve b) 'ye katılıyorum, ancak c)' ye sadece kısmen katılıyorum. Gerçeklerden açıkça bahsedilmedikçe kullanılan "standart kodlama" olarak işlev gören uygun bir kodlama tanımlayabilirsiniz. Sayılarda, böyle bir standart kodlama vardır - ikili kodlama.
Yuval Filmus

Tamam, ama bu gerçekten genel bir tanım değil, sadece insanların zamanından kazandırıyor çünkü açıklamayı yazmak zorunda değiller "Bu modelde M, ikili kodlama kullanıyoruz "çünkü yazmıyorlarsa ima ediliyorlar. Hala kendi modelleri için başka bir kodlama seçebilirler." Genel tanım "ile kastettiğim, her kodlamanın izin verilmesi gereken yerine getirmesi gereken bir dizi özelliktir bir kodlama olarak.
Stefan Lutz

4

Her şeyden önce, "uygun kodlamayı" ikili dizeler veya başka bir kodlama olarak düzeltemezsiniz. Bunun nedeni, çok sayıda hesaplama modelini kaybetmenizdir, çünkü farklı hesaplama modellerinde çok farklı girdi ve çıktı modelleri olabilir. Başka bir deyişle, dizeleri "konuşmayabilir".

Örneğin, türlenmemiş lambda hesabının terimleri ya değişkenlerdir ya da bir terimin diğerine uygulanması ya da bir lambda teriminin soyutlanmasıdır. Girdi ve çıktı terimler, rastgele dizelerdir. Yine de, türlenmemiş lambda hesabı Turing-complete'dur, çünkü doğal sayıları belirli bir formun lambda terimleri olarak kodlayan bir "uygun kodlama" vardır ve bu kodlama altında her bir hesaplanabilir fonksiyon için onu hesaplayan bir lambda terimi vardır.

Turing makinelerini referans hesaplama modeliniz olarak düzeltirseniz "uygun kodlamayı" resmileştirebilir ve daha sonra, ikili dizelerden ve ikili dizelere kodlama ve kod çözmenin her zaman duran bir Turing makinesi tarafından gerçekleştirilmesini isteyebilirsiniz. Örneğin, bir Turing makinesi, doğal bir sayıyı ikili bir dize olarak bu sayıyı ifade eden bir lambda terimine çevirebilir, lambda hesabındaki azalmayı simüle edebilir ve sonucu tekrar bir ikili dizgiye çevirebilir.

Daha basit hesaplama modelleri için aynı yaklaşımı beklerdim: referans hesaplama modeli alın ve doğal sayıların kodlamasını düzeltin ve sonra kodlamanın ve kod çözmenin bu basit modelin örnekleriyle yapıldığından emin olun. Belirttiğiniz gibi, sakat Turing makineleri için, tekli ve ikili kodlanmış sayılar kullanmak, eşdeğer bir hesaplama modeli sağlamaz.


Son paragrafta ters çevrilmiş şeylerin olması mümkün mü? Kodlamanın referans model değil basit model tarafından yapıldığını yazıyorsunuz - önceki paragrafta kodlamanın diğer model (lambda hesabı) tarafından değil referans model tarafından yapılmasını istiyorsunuz.
Stefan Lutz

Daha zayıf hesaplama modelleri üzerinde çalışıyorsanız, kodlama / kod çözme aşamasında bile Turing makinelerini herhangi bir yerde kullanmak istemezsiniz. Daha sonra sadece kodlama aşamasındaki tüm hesaplamaları gerçekleştirebilirsiniz ve herhangi bir hesaplama modeli Turing tamamlanmış olacaktır. Bu nedenle, kodlama / kod çözme için daha basit referans modelini kullanmanız gerekir.
Hoopje

1
Turing makinelerini tamir edersek, lambda hesabının turing-tamlığını kilise rakamlarıyla nasıl kanıtlayabileceğimizi göremiyorum. LC'nin TM'den daha zayıf olduğunu varsaymalıyız, bu yüzden "zayıf" model lambda calc'in bir örneğine bir sayı verilirnN- kodlamasını kullanarak church:N-lbirmbdbirterm gibi church(n), sonra işlevini hesaplar tÖBbennbirry:lbirmbdbirtermlbirmbdbirterm ikili dize çıktısı wΣ*? Kodonlar eşleşmiyor. Lambdatermlerin dize olarak yorumlanmasına izin versem bile, belirttiğiniz gibi dizeleri "konuşmayan" başka modeller de vardır.
Stefan Lutz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.