Gerçekleşebilirlik teorisi: Lambda matematiği ve Turing Makineleri arasındaki güç farkı


48

Aşağıdaki mermi noktalarıyla vurgulanmış üç ilgili alt sorum var (merak ediyorsanız, hayır, bölünemezlerdi). Andrej Bauer, burada bazı işlevlerin bir Turing makinesi üzerinden gerçekleştirilebileceğini, ancak lambda-calculus aracılığıyla gerçekleştirilemediğini yazdı . Akıl yürütmenin önemli bir adımı:

Bununla birlikte, eğer lambda matematiğini kullanırsak, o zaman [program] c bir f fonksiyonunu temsil eden bir lambda teriminden bir Turing makinesini temsil eden bir sayıyı hesaplamalıdır. Bu yapılamaz (ayrı bir soru olarak sorarsanız nedenini açıklayabilirim).

  • Bir açıklama / gayrı resmi kanıt görmek istiyorum.

Rice teoremini burada nasıl uygulayacağımı bilmiyorum; "Bu tornalama makinesi T ve bu lambda terimiyle L eşdeğeri mi?" sorununa da uygulanacaktır, çünkü bu yüklemeyi eşdeğer terimlere uygulamak aynı sonucu verir. Bununla birlikte, istenen işlev farklı, ancak eşdeğer lambda terimleri için farklı, ancak eşdeğer, TM'leri hesaplayabilir.

  • Dahası, eğer sorun bir lambda teriminin içgüdü ile ilgili ise, bir lambda terimini kodlayan bir Gödel'i geçmenin de kabul edilebilir olacağını düşünüyorum, öyle değil mi?

Bir yandan, örneğinin lambda hesabında, bir Turing Makinesi tarafından verilen bir görevi tamamlamak için gereken adım sayısını hesaplamayı içerdiği göz önüne alındığında, çok şaşırmadım.

  • Fakat burada lambda-calculus Turing-makine ile ilgili bir problemi çözemediğinden, lambda-calculus için benzer bir problem tanımlayıp, Turing makineleri için çözülemez olduğunu ispatlayabilir mi, yoksa aslında güç lehine bir fark var mı? Turing Makineleri (beni şaşırtacak).

Yanıtlar:


56

John Longley, “Yüksek Tipte Hesaplanabilirlik Kavramları” konusunu tartışan çok kapsamlı bir anket makalesine sahiptir .

NN(NN)N

Daha yüksek türde bir hesaplama modelini tam olarak tanımlamak için, bir işlevin argüman olarak aldığı başka bir işlevin çağrılmasını sağlamak için işlevler için çağrı kuralını belirtmemiz gerekir . Lambda matematiğinde standart çağrı kuralı, fonksiyonları lambda terimleriyle temsil etmemiz ve lambda matematiğinde bir lambda ile yapabileceğiniz tek şey uygulamaktır. Turing makineleriyle yapılan tipik kodlamalarda, belirli bir Godel kodlamasını sabitleyerek argüman olarak işlevler, sonra da argüman olarak iletmek istediğiniz makinenin dizinini temsil eden dizgileri geçiyoruz.

NNn

Kayda değer bir şey, daha yüksek türlerde, eğer bir dil bir düzende daha az anlamlıysa, bir düzen daha sıra dışıdır, çünkü işlevler çelişkilidir. Benzer şekilde, LC'ye yazabileceğiniz, TM tarzı kodlama ile yapamayacağınız işlevler de vardır (çünkü işlevsel argümanları iletebildiğinize ve alıcının verdiğiniz işlevin içine bakamayacağına inanırlar) .

EDIT: İşte PCF'de tanımlanabilir, ancak TM + Goedel kodlamalarında tanımlanmamış bir fonksiyon örneği. isAlwaysTrueFonksiyonu ilan edeceğim

 isAlwaysTrue : ((unit → bool) → bool) → bool

Argümanı argümanını yok sayar ve her zaman doğru döndürürse true döndürmeli, argümanı herhangi bir girdide false döndürürse false döndürmeli ve argümanı herhangi bir girdideki bir döngüye girerse bir döngüye girmelidir. Bu işlevi aşağıdaki gibi kolayca tanımlayabiliriz:

isAlwaysTrue p = p (λ(). true) ∧ p (λ(). false) ∧ p (λ(). ⊥)

nerede döngü hesaplama ve boolelerde üzerinde ve operatörü olduğunu. Bu işe yarıyor, çünkü unit → boolPCF'de yalnızca üç kişi yaşıyor ve bu yüzden onları ayrıntılı bir şekilde sıralayabiliyoruz. Bununla birlikte, bir TM + Goedel kodlama stili modelinde, pargümanının bir yanıt vermesinin ne kadar sürdüğünü test edebilir ve buna bağlı olarak farklı yanıtlar verebilir. Bu nedenle, isAlwaysTrueTM'lerin uygulanması bu spesifikasyonu yerine getirme konusunda başarısız olacaktır.


1
Bu mükemmel bir anket. bağlantı için teşekkürler!
Suresh Venkat

Bir cevap kabul etmeyi unuttuğumu fark ettim, ancak sizinkini kabul etmek istemiştim. Üzgünüm!
Blaisorblade

“Kodlamadaki fark, argümanın sözdizimini bir TM tarzı kodlama ile analiz edebileceğiniz ve standart bir lambda-calculus gösterimi ile yapamayacağınız anlamına gelir.”: Ancak işlev kompozisyonu için gösterimleriniz varsa? Ayrıca, HOL’a yazdığınız lambda matematiği teorisinden daha fazlası olduğunu söylemiştiniz, bundan daha fazlası?
Hibou57

Ayrıca, bu ne hakkında: cs.virginia.edu/~evans/cs150/classes/class39/lecture39.pdf . Bu bir şekilde yanlış mı?
Hibou57

Sevgili Neel, lambda matematiği modelinde gerçekleştirilebilecek, ancak Turing modelinde gerçekleştirilemeyen bir işleve örnek var mı?
Ingo Blechschmidt

29

Neel ne dedi ve ayrıca.

NNλλλ

λNN


λNNλ

NNλappn¯f:NNf(k)appn¯k¯n¯nappλ

Xf:X×NNλtf~:X(NN)λsXNNλff~NNλλNNλ

XNNλXX


2
hala daha iyi bir örnek bekliyorum ...
Jacques Carette 10:11 0

1
λ

Köriliğin nasıl hesaplanabileceğini anlamıyorum. Smn teoremini yeniden kullanabilmelisiniz, çünkü kanıtı birinci dereceden verilere (naturals) bir işlev oluşturuyor. Kilise-Turing tezi ile, doğadaki bu davranış bir lambda terimi (içsel olarak yerel işlevleri kullanan, ancak bunun nasıl yasaklandığını anlamıyorum) olarak uygulanabilir. Biri, benzer şekilde utm teoremini ispatlayabilir, bu nedenle görevinize göre yapılmalı. Neyi kaçırıyorum?
Blaisorblade

1
Yanıtta, körlemenin hesaplanamayacağı anlamına geldiğini, yani önerilen nesnenin temsil edilen kümeler kategorisinde bir üstel olmadığını açıkladım.
Andrej Bauer

Açıklama için teşekkürler! Maalesef tekrar oylayamıyorum. Teknik detayların çoğunu takip edebilirim; Topolojik modellere aşina değilim, ama yine de "fonksiyonel programlama / λ-matematikte işlevleri denetleyemezsiniz" hakkında bilgim var. Son paragrafınız ayrıca neden smn'den geçemediğimi de açıklıyor, çünkü smn tarafından verilen körleme, istediğiniz gibi standart işlevler yerine Gödel kodları üretiyor. Bu paragraf üzerinde meditasyon yapacağım.
Blaisorblade
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.