Durma problemi, ideal bir bilgisayardaki saf programlar için belirlenebilir mi?


25

Durma sorununun neden saf olmayan programlar için (örneğin, makinenin global durumuna bağlı I / O ve / veya durumlara sahip olanlar) kararsız olduğunu anlamak oldukça basittir. ancak sezgisel olarak, saf bir programın ideal bir bilgisayarda durması, örneğin statik analizler ile karar verilebilir gibi görünüyor.

Aslında durum bu mu? Olmazsa, bu iddiayı doğrulayan bazı ön örnekler veya makaleler nelerdir?


35
Standart, durdurma sorununun çözülemez olduğunu kanıtladığının (örneğin, Wikipedia'da tanımlandığı gibi: en.wikipedia.org/wiki/Halting_problem#Sketch_of_proof ) G / Ç'yi temsil etmeyi denemeyen hesaplama modelleriyle çalıştığını unutmayın. Ve örneğin Turing Makineleri durumsal olsa da, davranışları resmen saf fonksiyonlar olarak tanımlanmaktadır. Yani bir anlamda "ideal bilgisayardaki saf programlar" aslında durma sorununun genellikle kararsız olduğu kanıtlanmış bir ayardır.
Ben

1
Hangi araştırmayı yaptın? Googling "Halting problem" bu soruyu sizin için zaten cevaplamış olmalıydı.
Jonathan Cast

Yanıtlar:


38

Halting probleminden kaynaklanan indirgenemezliğin bir kanıtı.

Azaltma: Bir makine Verilen ve bir giriş x , yeni Turing Makinesi inşa H herhangi bir giriş okumuyor, ama yazıyor M ve x kasete ve simüle M üzerindeki x dek M alıkoymaların.MxHMxMxM

Bu yeni makinenin davranışı giriş bandından bağımsızdır, dolayısıyla üzerine sadece statik analizin uygulandığı saf bir Turing Makinesidir. Statik analiz yeterli olsaydı, H'nin durup durmadığını gösterebilirdi ki bu, M'nin x üzerinde durup durmadığını gösterecekti ;HHMx



@HendrikJan Kesinlikle!
Lieuwe Vinkhuijzen 13:16

16

Hayır değildir ve ayrıca G / Ç'ye bağlı değildir.

Basit counterexample: Mükemmel bir tek sayı (bu açık bir problemdir: biz bir var olup olmadığını henüz bilmiyoruz) bulmak için bir program yazmak - bu herhangi bir giriş almaz ve herhangi gerçekleştirmez saf olmayan görevleri; birini bulduğunda durabilir veya sonsuz çalışabilir (böyle bir sayı yoksa). Şimdi eğer durgunluk durumunu belirleyen statik analiz yeterince güçlüyse, durmanın böyle bir sayının pozitif varlığı anlamına geleceği ve durdurulamamasının böyle bir sayının olmadığı, ancak ne yazık ki statik analiz anlamına geleceği bu soruyu cevaplamak için kullanılacaktır. o kadar güçlü değil.


18
Bu cevaptaki noktayı gerçekten göremiyorum. Sadece şu anda böyle bir sayının var olup olmadığını bilmiyoruz, bunun ne anlama geldiği anlamına gelmiyor, ne de gelecekte buna karar verebilecek statik bir analizör yazamadık. Daha iyi bir alternatif, bilinen bazı kesin olmayan problemleri kullanmaktır. Örneğin, tüm diophantine denklemlerini çözebilecek bir program olmadığı ve böyle bir denklemi çözmenin cevapta gösterilene benzer bir görev olduğu bilinmektedir.
Bakuriu

2
Eğer Halting sorunu kararlaştırılabilir olsaydı, o zaman bir programın durup durmayacağını soracağımız bir forma sokabilirsek her sorun çözülebilir olur. Veya formun herhangi bir sorusu: Sayılabilir bir küme var ve herhangi bir potansiyel unsurun kümede olup olmadığına karar verebilirim. Set boş mu? Diophantine denklemlerinin sayılabilir bir potansiyel çözüm kümesi vardır ve her bir potansiyel çözümün bir çözüm olup olmadığını kontrol edebilirim. Halting problemi karar verilebiliyorsa, Diophantine denklemleri kararlaştırılabilirdi.
gnasher729

10
@ gnasher729 Evet ve olmadıkları için Halting sorunu çözülemez. Bu benim amacım. Bu cevaptaki ifadenin gerçek bir çıkarımı olmasa da: "Bu matematiksel tanımı göz önünde bulundurun. Halen buna karar veren bir programın durup durmayacağına dair hiçbir fikrimiz yok, ama yarın bir erkek bunu yapıp yapmadığını ve bu cevabın 100 olduğunu öğrenebilir % anlamsız".
Bakuriu

6
Bu, benzer bir rakam dizisi olup olmadığı konusunda nasıl bir karar veremez? Durma problemi, tek problemler değil problem sınıflarında belirlenemez .
npostavs 13:16

2

Köşegenleştirme ile klasik ispat saf bir makinedir , sadece saf bir Turing Makinesi değildir, aynı zamanda “Açık Sorunlar” a dayanmaz.

Örnekte, yürütür bir Turing makinesi Collatz Hipotezi'ni bilinmeyen durdurulması statüsüne sahip, ancak Collatz Sanısı hakkındaki cehalet dayanmasıdır, bir gün Collatz haklı olduğunu kanıtlamaya olabilir ve o zaman varsayım Halting durumunu karar verebilecek oldu ediyorum (Bazı girişler için durmuyor veya Her zaman duruyor).

Böylece, Collatz Konjeksiyonu sorunuzu zaten cevaplayabildi (Geçici olarak en azından), ama bilmediğimiz bir şeye dayanıyor . Bunun yerine, klasik ispat çözülmüş bir problemdir: bunun kararsız olduğunu zaten biliyoruz .


0

Sadece kayıt için durma probleminin kararsızlığının standart kanıtı quines ile aynı düşünceye dayanıyor: bir alt-terimi bütün programın kaynak kodunu değerlendiren bir program yazmak mümkün. Daha sonra, haltsbir programın kaynak kodunu verilen, eğer o program tüm girdilerde durduysa True döndüren, aksi takdirde False olan bir fonksiyon varsa, bu yasal bir program olacaktır:

prog() = if halts "prog" then prog() else ()

"prog"kaynak koduna göre değerlendirilen bir ifadenin nerede olacağı prog; Bununla birlikte, progdurmadığında (tüm girdiler için) durmanın hızlı bir şekilde olduğunu görebilirsiniz ; bu bir çelişkidir. Bu ispattaki hiçbir şey hiçbir şekilde G / Ç'ye dayanmaz (bir yazı yazmak için G / Ç'ye ihtiyacınız var mı?).

Bu arada, G / Ç'nin sorununuzla tamamen alakasız olduğuna dair daha fazla kanıt için "iletişim tabanlı G / Ç" ye bakmak isteyebilirsiniz (temel olarak, G / Ç yapan programlar giriş yapan programlara indirgenebilir). (açık) işlevsel argümanlar ve çıktının (açık) tembel bir dilde ek sonuçlar vermesidir. Maalesef şu anda web’de makul, önyargılı (veya iletişim kuralı yanlısı) bir sayfa bulamıyorum.

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.