Sonlandırıp sonlandırmadıklarını bilmediğimiz en basit program örnekleri nelerdir?


27

Durma problemi, belirli bir programın durup durmayacağını belirleyen bir algoritma olmadığını belirtir. Sonuç olarak, sonlandırıp sonlandırmadıklarını söyleyemediğimiz programlar olmalı. Bu tür programların bilinen en basit (en küçük) örnekleri nelerdir?


Cevaplarınızla çelişiyorsunuz ..... Teşekkürler! Ancak durma programı kaynağın bilgisini alır. ... Bu doğruysa sorunuzu cevapladınız. Durma programı zaten bilecekti. Bir işareti kontrol eden bir sistem hayal edin, ne zaman kapanır, daima yanar ve yanıp söner? Güç kesintisi, güç anahtarı veya flaş sekansı sırasında. Veya asla yedek pil ve jeneratör kullanılmaz.
htm11h


Durma sorununun sadece bir zamanlama üst sınırı koymazsanız sorun olacağını da ekleyeceğim. Elbette, uygulamada herhangi bir kullanım için çok geç bir cevap alma ile hiçbir zaman cevap alma arasında bir fark yoktur. Bir programın, gerçek zamanlı bir doğruluk tanımı gibi, birkaç adımda bir cevap döndürüp döndürmeyeceğini sorabilirsiniz. Zamanında cevap vermeyi garanti edemiyorsanız, sadece bir doğruluk garantisi olmayan bir programa sahip olursunuz.
Rob,

1
@Rob Bu aslında doğru değil. Bir makinenin durup durmayacağını bilmiyorsanız, durup durmadığını görmek için süresiz olarak bekleyebilirsiniz; Bir binyıldan sonra, ertesi gün ne durup durmayacağını bilemeyeceksiniz.
Kyle Strand,

@KyleStrand Seninle aynı fikirdeyim. Ama aynı zamanda pratikte tamamen abartılmış bir mesele olduğunu söylüyorum, çünkü tüm gerçekçi hesaplamalar son tarihlere tabi (aylarca milisaniye). Yararlı olması için 5 saniyede bir cevaba ihtiyacınız olursa, önemli olan tek şey 5 saniye içinde bir cevabı garanti edip edemeyeceğinizdir. Hesaplamak için belirsiz bir süre verilen bir cevabı garanti edebileceğinizi varsayalım . Bu yararsız bir garanti olurdu.
Rob,

Yanıtlar:


41

Oldukça basit bir örnek, Collatz varsayımını test eden bir program olabilir :

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

Bu var bilinen için durma noktasına , en azından kadar , ama genel olarak bir açık sorun.n5×2605.764×1018


9
Söz altındaki yorumun benim açımdan vurgulamak için: Sorun "does herkes için halt n ?" hesaplanabilir . f(n)n
Raphael

6
@KyleStrand Bkz burada .
Raphael

10
@KyleStrand, Raphael% 100 doğru. Bu yaygın bir yanılgıdır. Tanımın çok dikkatli bir şekilde söylediklerini izlemek zorundasınız ve sezginizin tanımla tam olarak uyuşmadığını keşfedebilirsiniz. Hesaplanabilirlilik tanımına göre, oradaki yeterli var onu hesaplamak için Turing makinesi - biz Turing makinesi nedir biliyor olmadığını önemli değildir. İlk önce, bu birçok öğrencinin hile yaptığını düşündüğü, ancak değil - bu sadece tanımlamanın bir sonucu.
DW

2
@KyleStrand Programın sorunu çözmek zorunda olduğu fikrinden kurtulmalısınız . O değil. Sadece önemsiz bir görev olan cevabı çıkarması gerekiyor. Algoritmik olarak, sınırlı örnek setleriyle ilgili problemlerin hepsi sıkıcıdır çünkü cevapları zorlayabiliriz. (Hatta eğer biz cevapları bilmiyoruz, biz hala doğru algoritma olduğunu biliyoruz.) Bir şey için hiçbir algoritma olduğunu gösterirken Genelde, vermen gereken alamadım herhangi nasıl gidiyor üzerinde varsayımlarda iş. Hayal gücünün eksikliğimizin bir kanıtı yoktur.
Raphael

2
@KyleStrand Afaik, bugünün öğretildiği gibi hesaplanabilirliğin standart tanımını kullanıyorum (ve, afaik, on yıllardır olmuştur). Cevapları ve bağlantılı materyalleri özümsemenizi ve yanlış yaptığınız yerde çalışmanızı öneririm. Aynı şeyleri tekrar tekrar yapmak benim için ve başkaları için anlam ifade etmiyor. Bir kez daha deneyin: hesaplanabilirliğin tanımı, yapıcı değil, doğası gereği var. Sürece klasik mantığın alemlere düşünmek gibi bir "çözme" algoritma üzerinde el edebilmek için hiç gerek yoktur - biz sadece zorunda göstermek olduğunu orada doğru cevaplar verendir.
Raphael

31

Durma problemi, belirli bir programın durup durmayacağını belirleyen bir algoritma olmadığını belirtir. Sonuç olarak, sonlandırıp sonlandırmadıklarını söyleyemediğimiz programlar olmalı.

"Biz" bir algoritma değil =) Belirli bir programın her program için durup durmayacağını belirleyebilecek genel bir algoritma yok .

Bu tür programların bilinen en basit (en küçük) örnekleri nelerdir?

Aşağıdaki programı göz önünde bulundurun:

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

İs_perfect işlevi n'in mükemmel bir sayı olup olmadığını kontrol eder . Tek bir mükemmel sayı olup olmadığı bilinmemektedir, bu nedenle bu programın durup durmayacağını bilmiyoruz.


7
Biz bir algoritmayız.
PyRulez

3
@PyRulez, insan aklının hesaplama gücünün Turing Makinesi'ne eşdeğer olduğuna dair bir kanıt yoktur. Kanıt işe yaramıyor, örneğin bir zihnin diğerinde nasıl simüle edileceği bilinmiyor.
avsmal

1
@ avsmal Tamam, ama hiperbilgisayar yeteneğimizin çok düşük olması muhtemel.
PyRulez

2
@ Pyulez John Lucas ve Roger Penrose, insan aklının bir tür kuantum-mekanik olarak geliştirilmiş, "algoritmik olmayan" hesaplamanın sonucu olabileceğini öne sürdüler. Bu güçlü bir varsayımdır. Fakat en azından aklımızda bir miktar belirsizlik kaynağı olabilir. Bu da kanıtı kırmak için yeterli: “randomize” i (rasgele ne anlama geldiğinin bazı uygun tanımları için) reddetmek mümkün değil. Turing Machine'in durup durmadığı bilinmiyorsa.
avsmal 01

5
Kuantum hesaplama hiper hesaplama olarak mı kabul edilir? Kuantum bilgisayarların, turing makineleriyle mükemmel bir şekilde simüle edilebileceğini düşündüm - sadece biraz daha yavaş.
MaiaVictor,

10

Sen yaz:

Durma problemi, belirli bir programın durup durmayacağını belirleyen bir algoritma olmadığını belirtir. Sonuç olarak, sonlandırıp sonlandırmadıklarını söyleyemediğimiz programlar olmalı.

Bu, her iki yönde de sekestör değildir. Ele almaya değer olan ortak bir yanlışlığa kapılıyorsun .

PPP

Sadece algoritmanın tüm programlar için Durdurma problemini çözmesi gerekiyorsa, böyle bir algoritmanın bulunmadığını gösterebilirsiniz.

Şimdi, Halting sorununun çözülemez olduğunu bilmek, kimsenin fesih veya döngüsünü kanıtlayamayacağı hiçbir program olmadığı anlamına gelmez . Bir Turing makinesinden daha güçlü olmasanız bile (yalnızca bir hipotezdir, kanıtlanmış bir gerçek değildir), bildiğimiz tek şey hiçbir algoritmanın / kişinin tüm programlar için böyle bir kanıt sağlayamayacağıdır . Her program için karar verebilecek farklı bir kişi olabilir.

Daha fazla ilgili okuma:


Dolayısıyla, asıl sorunuzun (aşağıda tekrarlandığı gibi) durma sorununun hesaplanabilir olup olmadığı ile ilgisi olmadığını görüyorsunuz. Hiç.

[Durdurmayı ya da döngülemeyi bilmediğimiz programların] bilinen en basit (en küçük) örnekleri nelerdir?

S

g(n)={1,S true,g(n+1),else.

Verilmiş, bunlar çok "doğal" değil.


  1. Mutlaka hepsi değil , ama bir anlamda "çok". En azından sonsuz sayıda.

Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
Raphael

Bunu kendi anlayışıma göre yeniden ifade etmeye çalışmak için, benzersiz bir algoritma olmasa da herhangi bir programın herhangi bir programın durup durmayacağını belirleyebileceğini, her olası programın durma problemini çözmek için programa özgü bir algoritmanın olabileceğini söylemek doğru mudur?
Asad Saeeduddin

@ AsadSaeeduddin "Daha da kötüsü": verilen her program için Halting sorunu önemsizdir . Her sonlu küme karar verilebilir.
Raphael

7

Belirli özelliklere sahip bir sayının varlığına ilişkin herhangi bir açık sorun, böyle bir programa (böyle bir sayıyı arayan) neden olur. Örneğin, Collatz varsayımına katılın; Bunun doğru olup olmadığını bilmediğimizden, aşağıdaki programın sonlandırılıp sonlandırılmadığını da bilmiyoruz:

    n:=1;
    found:=false;
    while not found do
      s:={};
      i:=n;
      while i not in s do
        add i to s;
        if i even then i:=i/2 else i:=3i+1
      if 1 not in s then found:=true;
      n:=n+1  


0

soru karmaşıktır çünkü karar verilebilirlik (CS eşdeğeri resmileştirme / durma sorununun genelleştirilmesi) dillerle ilişkili olduğundan, bu formatta tekrar ortaya çıkması gerekir. Bunun çok fazla belirtilmediği görülüyor, ancak matematik / CS'deki birçok açık sorun kolayca bilinmeyen kararsızlığa sahip sorunlara (dillere) dönüştürülebilir. bunun nedeni teorem ispatlanması ve (tek) kararsızlık analizi arasındaki sıkı bir ilişkiden kaynaklanmaktadır. örneğin (bir nevi tek sayıdaki mükemmel cevabın cevabı gibi), Yunanlılara tarihlenen (2 bin yıldan daha uzun bir süre önce) ve ikiz araştırmalar düşüncesine binin ve örneğin Zhang / Tao gibi son zamanlardaki önemli araştırma gelişmelerine tabi. aşağıdaki gibi algoritmik bir soruna dönüştürün:

Giriş: n . Çıktı: Y / N en az n ikiz asal bulunur.

algoritma ikiz primerleri arar ve n tanesini bulursa durur . Bu dilin karar verilip verilemeyeceği bilinmiyor . İkiz asal problemin çözülmesi (sonlu ya da sonsuz bir sayı olup olmadığını soran), bu dilin geçerliliğini de çözecektir (eğer sonlu ise kaç tane olduğu ispatlanmış / keşfedilmişse).

Başka bir örnek, Riemann hipotezini alın ve bu dili göz önünde bulundurun:

Giriş: n . Çıkış: E / H biri en az n Riemann zeta fonksiyonunun aşikar olmayan sıfır.

Algoritma önemsiz sıfırlar arar (kod özellikle karmaşık değildir, kök bulmaya benzer, ve temelde x vb'den küçük tüm primerlerin "paritesi" nin toplamlarını hesaplayan nispeten basit olan eşdeğer formülasyonlar vardır ) ve bunlardan n tanesini bulur ve bu dilin geçerliliğini yitirebiliyorsa ve çözünürlüğü Riemann düşüncesini çözmeye "neredeyse" eşdeğerse bilinmez.

Şimdi, daha muhteşem bir örneğe ne dersiniz? ( ihmal, muhtemelen daha tartışmalı)

Giriş: c: Çıkış: Y / N , SAT için bir O (n c ) algoritması var.

Benzer şekilde, bu dilin karar verilebilirliğinin çözülmesi P-NP problemine neredeyse eşdeğerdir . ancak bu durumda problem için "basit" kod için daha az belirgin bir durum vardır.


1
Redüktör bu cevapta neyin yanlış olduğunu açıklar mı?
MaiaVictor,

2
NnNNa,b,can+bn=cnnN=2
von

3
Ben aşağı değen değilim, ama bu cevabın tüm iddiaları yanlıştır. Bu sorunların her üçü de kanıtlanabilir bir şekilde kabul edilebilir (herhangi bir kanıtlanmamış varsayımda bulunmak zorunda kalmadan). Nedense, Raphael'in cevabını yakından inceleyin.
DW

Tamam belki girişin TM'nin belirtilmesi gerekir ve TM sorunu hesaplarsa algoritma karar verir. daha fazla düşünmeliyim ... temelde açık problemleri kararsız dillere bağlayan bu tür problemler için basit bir tarif olduğunu düşünün ... ama bunun CS belgelerinde nadiren belgelendiğini / formüle edildiğini kabul etti ... ref ... ya da belki girdi bir olduğunu ispat ve kanıt doğru olup olmadığını dil doğrular ... diğer yüksek cevapları vb garip mükemmel sayılar, Collatz sorunu söz olarak ... programlar belirli sabitleri için durma noktasına bilinmeyen veya olmayan .
vzn

karışıklık için özür dilerim! Bazı ileri görüşlerde iddialar, sonlandırılmayan (tüm girdiler için) (yani asıl soru) basit programlar tanımlamaları şeklinde doğrudur ve DW tarafından çizilen / işaretlenen genel fikrin başarısızlığı her birini dönüştürmeye çalışıyor kararsız diller. bu son inşaat fikrini başarılı olanı aramak için düşünmeye devam edecektir. Buna bakmanın başka bir yolu, sorunların durma problemi çözücüsü için ayrı ayrı durumlar / girdiler olarak görülebildiği, ancak durma sorununun kendisiyle eşdeğer olamadığıdır.
vzn

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.