Durma problemi belirli girdiler / varsayımlar için hesaplanabilir mi?


19

Durma sorununun hesaplanamayacağına dair kanıtımdan, bu sorun hesaplanamaz çünkü eğer x programının durup durmadığını hesaplayan bir P (x) programımız varsa, P'ye bir girdi olarak P verirken bir paradoksumuz var. aynı P, sahip: P (P), P'nin durup durmadığına karar vermeye çalışıyor.

Benim sorum şudur: durma problemi, girdi olarak kullanılan P dışındaki tüm programlar için P programı tarafından hesaplanabilir mi? Başka bir deyişle: durdurma sorunu yalnızca bu özel durumda hesaplanamıyor mu yoksa kanıt daha genel ve bir şey eksik mi?


Sanırım durma sorununun hesaplanamaz olduğuna dair kanıtları yanlış anlıyorsunuz. P (P) sadece true değerini döndürür, çünkü P her zaman bir programın sınırlı sürede durup durmayacağını belirler. Bir çelişkiye ulaşmak için biraz daha hileli bir yapı yapmanız gerekiyor.
Dan Staley

Durma sorununun çözülebileceği birçok program olup olmadığını sorduğunuzda daha iyi ve belki de daha alakalı cevaplar alacağınızı düşünüyorum. Sonuçta, birçok program resmi olarak doğrulanabilir , bu da verilen girdilerle durup durmadıklarına dair bir belirleme içerir. Bu grubun belirlenemeyeceğini kuvvetle tahmin ediyorum (çünkü bu çözme anlamına gelecektir ..., bilirsiniz), ancak gerçek dünya programlarının büyük çoğunluğu için ilgili girdiler için durup durmadıklarını anlamanın önünde herhangi bir engel yoktur.
Peter - Monica'yı

Yanıtlar:


10

Eğer hesaplanabilir bir fonksiyonu, daha sonra g olarak tanımlanır,fg

g(n)={f(n)if nkvotherwise

ayrıca .k,v

Temel olarak, bir program varsa hangi değerlerini hesaplar g ( n ) herkes için n 'haricinde s , n = k yapabilirsiniz 'düzeltme' Eğer durum (örn bir kullanarak ) ve başka bir program elde P değerlerini hesaplar g ( n ) için bütün n .Pg(n)nn=kif then elsePg(n)n

Bu nedenle, "bir vaka hariç" durdurma fonksiyonunu hesaplayabiliyorsanız, durdurma fonksiyonunu da (istisnasız) hesaplayabilirsiniz. Bundan, her zamanki gibi bir çelişki elde edebilirsiniz.

Sonuç: hayır, "bir vaka hariç" (ne de "sonlu birçok vaka hariç") ​​durdurma sorununa karar veremezsiniz.


1
Tamam, sanırım matematiksel olarak anladım ... Ama merak ediyordum: HP'yi hesaplayan bir program yazmaya çalışırsam hangi somut sorunlarla karşılaşırdım? Neden ve nasıl bir noktada böyle bir program yazamıyorum?
Alessio Martorana

@AlessioMartorana Bağlıdır: böyle bir soruna nasıl yaklaşırsınız? Ana sorun, girdisi durmayan bir program olsa bile her zaman durması gerektiğidir - bu nedenle giriş programını simüle etmeye çalışamazsınız. P
chi

Ve varsayalım ki giriş programının kodunu görebiliyoruz? Koddan programın durup durmadığını göremiyor muyuz?
Alessio Martorana

2
@AlessioMartorana Gerçekten kodu görebiliriz, ancak örneğin bir while döngüsü varsa, genel olarak fazla bir şey söyleyemeyiz. Bir while döngüsü, keyfi bir matematiksel varsayımın tüm olası kanıtlarını kontrol edebilir ve yalnızca bir kanıt bulunursa durabilir. Bu döngünün durup durmayacağına karar vermek, varsayımın kanıtlanabilir olup olmadığına karar vermek anlamına gelir. HP'nin çözümü bize herhangi bir resmi matematiksel soruya Evet (kanıtlanabilir) / Hayır (kanıtlanamaz) şeklinde cevap verecek bir makine verecektir. Bu gerçekçi olmayan bir şekilde güçlü olurdu.
chi

1
@AlessioMartorana HP'yi çözen bir program yazdığınızı düşünüyorsanız, programınızın başarısız olacağı iki yoldan birisidir: bazı programlar için yanlış sonuç döndürebilir (bir şey çalışmadığında durduğunu söyleyerek veya bir şey yapmadığını söyleyerek ' t durduğunda durdurun) ve / veya karar verme programınızın kendisi, gerçekten durmayacağını veya cevabı hesaplamak için daha fazla zamana ihtiyaç duyup duymadığını bilmediğiniz birçok girişte durmaz.
Shufflepants

21

durdurma problemi, girdi olarak kullanılan ancak P'nin kendisi için kullanılan diğer tüm programlar için P programı tarafından hesaplanabilir mi?

Hayır programlar sonsuz dizisini düşünün , P i olan "kafa Taşı i  sağa kareler, o zaman ben  kareler sola, sonra tam olarak ne P yapardı." Bu programların her biri, her giriş için P ile tam olarak aynı çıktıyı üretir  ( P sonsuza kadar döngü yaparsa sonsuza kadar döngü dahil  ), ancak hepsi farklı programlardır.P1,P2,...PbenbenbenPPP

Ve sadece kendisiyle işlevsel olarak eşdeğer olmayan programlarda çalışmasını zorunlu kılarak bu sorunu çözemezsiniz, çünkü bu özellik de kararsızdır. Belki de bu örneklerle sınırlı olduğunda sorun çözülebilir (buna rağmen şüphelenmeme rağmen), ancak örnekler kümesi kararsızdır, bu yüzden aslında kısıtlamayı gerçekleştiremezsiniz.P


15
Son cümlenizin muhtemelen doğru olduğundan şüpheleniyorum, ancak bir özelliğin, bu özelliğe dayalı giriş kümesinin kısıtlanmasının sorunu çözülemez bırakacağı kararlaştırılamadığını düşünmüyorum. Aptal bir örnek olarak, girdi kümesini sonlandırma programlarıyla (belirlenemeyen bir özellik) kısıtladıysanız, sorun karar verilebilir (her zaman true döndüren bir program tarafından).
Owen

3
@Owen Kısıtlamanın kendisi kararsız olduğunda, kısıtlamayı uygulayamazsınız, böylece size gerçekte hiçbir şey satın alamaz.
David Richerby

5

Belirli program sınıflarının durduğunu veya durmadığını gösteren algoritmalar vardır. Örneğin,

  • Sonlu durum makinesini modelleyen bir programın durup durmadığını algoritmik olarak belirlemek mümkündür.
  • Lineer bağlı bir turing makinesinin durup durmadığını aritmetik olarak belirlemek mümkündür
  • Bir programın hangi karmaşıklık sınıfında olduğunu biliyorsanız, programın sonlu girdiler için durduğunu bilirsiniz.

Rasgele bir programın durup durmadığını belirleyen bir algoritma olmasa da, kodun çoğunluğu ya durmak (çoğu alt rutin gibi) ya da durmamak (olayları işlemek için sonsuz bir döngü gibi) için tasarlanmıştır ve hangisinin hangisi olduğunu belirlemek için algoritmik olarak mümkündür. Başka bir deyişle, olabilir cevaplar ya "durur", ya da "Ben bilmem" "durdurmak olmadığı" bir algoritma var ve bu tür bir algoritma yararlı olacağını yeterince programlarını kapsayacak şekilde tasarlanabilir.


Bunun goto ile ne ilgisi var? Sonlu durum makinesini modellediği sürece, goto kullanan ve hala durup durmadığına karar veren bir programımız olamaz mı?
Bergi

Döngüler için durma hakkında yazacaktım ve sonra sadece sonlu durum makineleri ve ne hakkında konuşmak için değiştirdim
Antonio Perez

4

Çelişkili kanıtların kapsamlı olması gerekmez , tek bir karşı örnek yeterlidir. Durdurma sorununun kararsız olduğuna dair kanıt, durdurma özelliğine karar verilemeyen bir P örneği sağlar. Bu kanıt, P'nin bu tür tek program olduğunu göstermez, aslında, tamamen farklı P sınıfları inşa eden bağımsız kanıtlar olabilir.


3

Kanıtı aslında daha geneldir: durdurulması problemi özel bir durumdur Rice'ın teoremi , devletler

Φ

birBΦ(bir)Φ(B)

xx

Sen olabilir bu kısıtlamaların oldukça şiddetli olmak zorunda olsa, çalışmak istediğiniz programların alanını kısıtlayarak bazı sonuçlar elde ederler. Örneğin, size verilen programın 100 adımda durduğunu veya sonsuza kadar çalışacağını garanti ederseniz, durup durmadığına karar vermek kolaylaşır.

N-kBB(k)


1
N-

1
Son paragraf Meşgul Kunduz'a benzer.
Kötü

"Oldukça sert" kısıtlamalar ile ilgili olarak: toplam programlama dilleri önemlidir. Nispeten yüksek derecede karmaşıklık gerektirme eğilimindedirler, bu yüzden belki de bu kadar sert düşünürsünüz, ancak kanıtları durduran bir program alanında gerçek sorunları çözmek mümkündür.
Ben Millwood

En.wikipedia.org/wiki/Rice%27s_theorem için bir bağlantı eklemek IMO'yu anlamlandıracaktır.
Dmitry Grigoryev

Teşekkürler, cevabı güncelledim. @BenMillwood Kesinlikle, ama onların çözümü verilen "her şeyi durdurmak olun" olduğunu bilmiyorum Alessio ne arıyor emin değilim. Durma davranışının karar verilebilir, ancak önemsiz olmadığı bir durum ilginç olabilir: belki Agda + koindüktif tipler?
Anton Golov

0

R, yinelemeli olarak numaralandırılabilir ancak yinelemesiz küme olsun. Sonsuz sayıda böyle set var. T, yalnızca k R'deyse ve k girişinde durdurulan bir Turing makinesi olsun. Bu T için durma problemini çözebilecek bir program yazmak imkansızdır. Bunun nedeni, T durmalarının R üyeliğini belirlemek için bir algoritma üretip getirmeyeceğini belirleyen herhangi bir algoritmanın, R'nin tekrarlayıcı olmaması durumunda imkansız olmasıdır. Her biri farklı Turing makineleri veren sonsuz sayıda R olduğundan, herhangi bir durdurma girişimi P'nin başarısız olacağı sonsuz sayıda Turing makinesi vardır.

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.