Halting Halen neden bu kadar önemli?


149

Halting Probleminin neden bir programın durup durmayacağını belirleme olasılığını reddetmek için neden bu kadar sık ​​kullanıldığını anlamıyorum . Wikipedia [makale] [1], sınırlı belleğe sahip deterministik bir makinenin önceki durumu durduracağını ya da tekrarlayacağını doğru bir şekilde açıklıyor. Bağlantılı bir listenin, Halting Fonksiyonunu uygulamak için O (1) uzay karmaşıklığına sahip olup olmadığını algılayan algoritmayı kullanabilirsiniz.

Bana göre Halting Problemi kanıtı, Liar'ın paradoksuyla aynı şekilde “paradoksu” olarak adlandırılan kendinden referanslı (en azından döngüsel) bir çelişkiden başka bir şey değildir. Yaptığı tek sonuç, Durdurma Fonksiyonunun bu tür yanlış biçimlendirilmiş sorulara duyarlı olduğu yönündedir.

Bu nedenle, paradoksal programlar hariç, Halting Fonksiyonu kararlaştırılabilir. Öyleyse neden bunun aksini kanıt olarak tutuyoruz?

4 yıl sonra : Bunu yazdığımda, bu videoyu daha yeni izledim . Bir programcı bazı programları alır, hangilerinin sonlandırılacağını belirlemelidir ve video bunun neden imkansız olduğunu açıklamaya devam eder. Sinirlenmiştim, çünkü bazı keyfi programlar göz önüne alındığında, kahramanın sonlandırılıp sonlandırılmadıklarını ispatlayabilecekleri bir ihtimal olduğunu biliyordum. Genellik kavramı bir şekilde kayboldu. “Bazı programların sonlandırıldığı kanıtlanamıyor” ve “hiçbir programın sonlandırıldığı kanıtlanamaz” demek arasındaki fark budur. Pek çok algoritma resmen bunun için gösterilmiştir. Çevrimiçi olarak bulduğum her referansta, bu ayrımın yapılmaması, bu sorunun başlığına nasıl geldiğimden kaynaklanıyordu. Bu nedenle cevabı gerçekten takdir ediyorum . bu, hal işlevini boolean yerine üçlü olarak yeniden tanımlıyor.


16
"sonlu belleğe sahip deterministik bir makine" "sıkıcı" çünkü sonlu bir otomattan başka bir şey değil; bunlar genel olarak hesaplamayı modellemek için kullanışlı değildir. Durma problemine gelince: bu, (Turing) hesaplanabilir olmayan bir fonksiyon için özel bir örnek. Yapıcı olmayan bir kanıtdan memnunsanız, buna "ihtiyacınız yoktur". Yine de tarihi bir önemi var.
Raphael

16
Bununla birlikte, sorunuz habersiz olarak karşımıza çıkıyor. Hesaplanabilirlik teorisinin temellerini tazelemek isteyebilirsiniz (bu , orada tartışılan modelleri değil, gerçek tarafından bildirilen sezginize meydan okuyacaktır). Bir başlangıç ​​için referans sorularımıza bakın . Sezginizin (teoride olduğu kadarıyla) ölümcül kusurlu olduğuna dair daha fazla "kanıt" istiyorsanız, bu soruyu okuyun .
Raphael

12
"Bağlama listesinin O (1) alan karmaşıklığına sahip Halting İşlevini uygulamak için döngüye girip girmediğini algılayan algoritmayı kullanabilirsiniz" - ancak sorunu 2 GB depolama alan bir bilgisayarla çözmek istiyorsanız, 2 ^ 2000000000 adım ve daha büyük bir bilgisayar.
user2357112

11
Uzun zaman önce, durma problemi hakkında bir arkadaşımla sohbet ediyordum ve yakınlarda oturan biri "durma problemi nedir, önemli mi?" ve arkadaşım ona döndü ve "durma problemini çözebilirsek bulutların üzerine şehirler kurabiliriz" dedi. Bu doğru.
Francis Davey

8
@emory Hak talebi açık bir şekilde doğrudur: P => QEğer Pyanlış olduğunu biliyorsak (ve Halting Probleminin çözülemez olduğunu biliyoruz) herhangi bir Q için geçerlidir . Francis de "Durma problemini çözebilirsek ölümün kendisinin çaresini bulabiliriz" diyebilirdi. Mantıksal uygulamanın tanımlanma şekli.
amalloy

Yanıtlar:


217

Çünkü gerçekten pratik sorunların çoğu kılık değiştirmenin durmasıdır. Onlara bir çözüm durma problemini çözer.

Belirli bir program için mümkün olan en hızlı makine kodunu bulan bir derleyici mi istiyorsunuz? Aslında durma problemi.

Bazı değişkenler yüksek güvenlik düzeylerinde ve bazıları düşük güvenlik düzeylerinde olan bir JavaScript'iniz var. Bir saldırganın yüksek güvenlik bilgilerine ulaşamadığından emin olmak istiyorsunuz. Bu aynı zamanda sadece durma problemidir.

Programlama diliniz için bir ayrıştırıcınız var. Bunu değiştirirsiniz, ancak alıştığı tüm programları ayrıştırdığından emin olmak istersiniz. Aslında durma problemi.

Bir antivirüs programınız var ve kötü niyetli bir talimatı yerine getirip getirmediğini görmek istiyorsunuz. Aslında sadece durma problemi.

Wikipedia örneğine gelince, evet, modern bir bilgisayarı sonlu durumlu bir makine olarak modelleyebilirsiniz. Ancak bununla ilgili iki sorun var.

  1. Her bilgisayar, RAM bitinin tam sayısına bağlı olarak, farklı bir otomat olacaktır. Dolayısıyla, bu, belirli bir kod parçasını incelemek için kullanışlı değildir, çünkü otomat, çalışabileceği makineye bağlıdır.

  2. N bit RAM varsa, duruma ihtiyacınız olacak. Bu yüzden modern 8 GB'lık bilgisayarınız için . Bu, o kadar büyük bir sayı ki, wolfram alpha, nasıl yorumlanacağını bile bilmiyor. yaptığımda ondalık basamak olduğunu söylüyor . Bu, normal bir bilgisayarda depolamak için kesinlikle çok büyük.2 32000000000 2 10 9 3000000002n2320000000002109300000000

Durma problemi bize algoritmaların göreceli zorluğu hakkında sebep verir. Var olan bazı algoritmalar olduğunu bize bildirir, bazen yapabileceğimiz tek şey bir problem olduğunu tahmin etmek ve bunu çözüp çözemeyeceğimizi asla bilememek.

Durma problemimiz olmasaydı, Hilbert'in teoremleri girip doğru olup olmadıklarını veren sihirli algoritmasını aramaya devam edecektik. Artık bakmayı durdurabileceğimizi biliyoruz ve bu sorunları çözmek için sezgisel ve ikinci en iyi yöntemleri bulma çabalarımızı harcayabiliriz.

GÜNCELLEME: Sadece yorumlarda dile getirilen birkaç konuyu ele almak.

@Tyler Fleming Cloutier: "Saçma sapan" problemi, durma probleminin tespit edilemez olduğunun ispatıyla ortaya çıkar, fakat kararsızlığın çekirdeğinde olan şey gerçekten sonsuz bir arama alanına sahip olmasıdır. Belirli bir özelliği olan bir nesneyi arıyorsunuz ve biri yoksa, ne zaman yapıldığını bilmenin yolu yoktur.

Bir problemin zorluğu, sahip olduğu niceleyici sayısı ile ilgili olabilir. Keyfi özelliğe sahip bir nesne olduğunu ( ) göstermeye çalışıyorsanız, bir tane bulana kadar aramanız gerekir. Hiçbiri mevcut değilse, bunu bilmenin yolu yoktur (genel olarak). Tüm nesnelerin ( ) bir özelliğe sahip olduğunu kanıtlamak zordur, ancak bunu için bir özelliği olmayan bir nesneyi arayabilirsiniz. Forall ve varolma arasındaki varyasyon ne kadar fazla olursa, sorun o kadar zordur.

Bununla ilgili daha fazla bilgi için, Aritmetik Hiyerarşisine bakın . üstündeki herhangi bir şey kararsızdır, ancak seviye 1 yarı kararsızdır.Σ00=Π00

Halting problemi veya Yalancılar paradoksu gibi saçma sapan bir paradoks kullanmadan, tespit edilemeyen problemlerin olduğunu göstermek de mümkündür. Bir Turing Makinesi, bir dizi bit, yani bir tamsayı kullanılarak kodlanabilir. Ancak bir problem bir dil, yani tamsayıların bir alt kümesi olarak kodlanabilir. Tamsayılar kümesiyle tamsayıların tüm altkümeleri kümesi arasında hiçbir itiraz olmadığı bilinmektedir. Bu nedenle, ilişkili bir Turing makinesine (algoritmasına) sahip olmayan bazı problemler (diller) olmalıdır.

@Brent: evet, bu modern bilgisayarlar için karar verilebileceğini itiraf ediyor. Ancak belirli bir makine için karar verilebilir. Disk alanı olan veya bir ağda ya da başka bir şeyde saklayabilme olanağına sahip bir USB sürücü eklerseniz, makine değişti ve sonuç hala geçerli değil.

Ayrıca, algoritmanın "bu kod duracak" dediği yerde kodun birçok kez olacağı, çünkü kodun başarısız olacağını ve hafızasının tükeneceğini ve ayrıca fazladan bir miktar bellek eklemenin kodun bozulmasına neden olacağı söylenmelidir. başarılı ve farklı bir sonuç verin.

Mesele şu ki, Turing makineleri sonsuz miktarda hafızaya sahip değil. Kasete sonsuz miktarda sembolün yazıldığı bir zaman yoktur. Bunun yerine, bir Turing makinesi "sınırlandırılmamış" belleğe sahiptir, yani ihtiyaç duyduğunuzda daha fazla bellek kaynağı almaya devam edersiniz. Bilgisayarlar böyle. RAM veya USB çubukları veya sabit sürücüler veya ağ depolama ekleyebilirsiniz. Evet, evrendeki atomların bittiği zaman hafızanız tükenir. Ancak sınırsız belleğe sahip olmak çok daha kullanışlı bir model.


4
@Mehrdad "Belirli bir program için mümkün olan en hızlı makine kodu" nun makul bir tanımı için, soru mantıklıdır ve cevabı "Böyle bir derleyici olamaz" dır.
David Richerby

13
Ayrıca, çıktısı alınabilecek en kısa makine kodunu bulmak için çalışır, en az hafıza erişimine sahip olana vb. Bu temelde Rice teoremidir.
jmite

4
Hala Hilbert'in büyülü algoritmasını aramaya ilişkin bir sonuç olarak, yakından ilişkili Turing denkliği kavramı olmadan, hala hesaplamalı olarak daha güçlü donanım biçimleri aramaya başlayıp, kodları kendinden değiştiren kodların daha güçlü bir hesaplamaya izin verip vermediğini tartışıyor olacağız. ve üzerinde en iyi programlama dili olan argümanlar şimdi olduğundan bile daha öznel olacaktır.
sdenham

3
Beklediğiniz yerlerde bile ortaya çıkıyor. Tüm geçerli programları derlerken geçersiz tüm programları reddeden bir C ++ derleyicisi yazmak ister misiniz? İlk önce durma problemini çözün - C ++ şablon metaprogramlaması Turing tamamlandı, bu nedenle şablonlarınızın geçerli olup olmadığını söylemek genel durumda çözülmesini gerektirir.
Mark

7
@Merhrdad: "Bilgisayar programının tamamını simüle etme" örneğiniz, durma sorununun neden bu kadar önemli olduğunun mükemmel bir örneğidir. Bazı programlar için, programı simüle etmek göründüğü kadar kolay değildir (örneğin, durma konusundaki wikipedia sayfasına bakınız). Sorun bu şekilde aldatıcı olabiliyorsa, birine daha gizli bir formun (antivirüs sorunu gibi) açıklanmasının ne kadar zor olduğunu hayal edebilirsiniz
Cort Ammon

49

Pratik açıdan önemlidir, çünkü cahil patronlarınıza "ne sorduğunuzu matematiksel olarak imkansızdır" demenizi sağlar.

Durdurulması problemi ve çeşitli NP-tam problemler (örneğin gezgin satıcı problemi) bir gelip çok "Neden sadece X yapar bir program yapamaz?" Şeklinde ve bir açıklama yapmak gerekiyor Bunun neden evrenin geri kalan ömrü boyunca imkansız veya olanaksız olduğunu.

O bir dil tasarlamak mümkün olduğuna dikkat musunuz değil Turing tamamlama, yani sınırsız Rekursif yinelemeyi yasaklayarak, analiz edilebilir.



16
Pekala, bishop, Flickr hariç neredeyse imkansızdı .
Francisco Presencia

8
Turing tamamlanmayan bir dil tasarlamak mümkündür : Turing tamamlanmayan yararlı bir dil örneği: SQL (aslında soyulmuş bir SQL). Turing-bütünlüğü otomatik olarak dile bir sonlandırma eklemez; bu, bir db sorgusu çalıştırırken muhtemelen istemediğiniz bir şeydir. (Her ne kadar korkarım ki tüm modern SQL uygulamaları yine de tam bir bütünlük sunuyor)
Bakuriu

8
@FranciscoPresencia: Bir araştırma ekibi kullandılar, bu nedenle genel husus hala geçerli.
RemcoGerlich

4
@ MoooDuck: Flickr olayı parklar ve kuşlar arasında seçim yapmaz, onaylamaya çalışır (ya da ikisini birden onaylar). VEYA, XOR değil.
rickster

45

Bağlantılı bir listenin, Halting Fonksiyonunu uygulamak için O (1) uzay karmaşıklığına sahip olup olmadığını tespit eden algoritmayı kullanabilirsiniz.

Bunu yapmak için, programın kısmi durumunun en az iki kopyasını hafızasına ve ayrıca kontrol programının ek yüküne kaydetmeniz gerekir. Böylece, belirli bir bilgisayarda, o bilgisayarda çalışabilecek tüm programları, yalnızca yarısı kadar bellek harcayan daha küçük bir bilgisayarda çalışan programları test edemezsiniz.

Belirli bir sonlu boyutlu bilgisayar için durma sorunu bu sonlu boyutlu bilgisayarda çözülemez . Sadece daha büyük bir bilgisayarda çözülebilir. (Bu, sadece önerdiğiniz yöntem için değil, herhangi bir yöntem için geçerlidir. Resmi bir kanıt vermeyeceğim, ancak işte ana fikir. Bir C bilgisayarı bir N çalıştırabilirse, en az bir P sonlandırmaz. , o zaman bu N programının durup durmadığını test edebilecek bir bilgisayar V, N farklı doğrulama programlarını da çalıştırabilmelidir. C ve V aynı bilgisayar ise, P, V'nin çalıştığı farklı N programlarından biri değildir. Bilgisayar, en az N + 1 farklı program çalıştırmalıdır; bu, C'nin N farklı program çalıştırdığı varsayımına aykırıdır.)

M2M256

Buradaki sayılar, bir bilgisayarı sonlu durumlu bir makine olarak düşünmenin nadiren pratik olduğunu göstermektedir. Devletlerin sayısı sınırlı olabilir, ancak zihinsel bir şekilde, pratik açıdan çok büyük. Oyuncak olmayan programlar hakkında akıl yürütmenin tek yolu, durumları sıralayarak değil, mantıksal akıl yürütmeyle soyutlamaktır.

Dolayısıyla, paradoksal programlar hariç, Halting Sorunu kararlaştırılabilir

Paradoks, problemden değil, bir çözüm girişiminin sonucudur. Herhangi bir program için, program sonlanırsa “evet”, program sonlanmazsa “hayır” yazan bir algoritma vardır. Bu önemsiz: ya print "yes"da print "no"yapacak. Sorun hangisini arayacağınızı belirlemektir. Durma problemini çözmenin imkansızlığı, bu tespitini yapacak bir algoritma olmadığı anlamına gelir. Geçirmez bir kösegenlestirilmesi argümanı kullanan nedeni olduğunu göstermek için ihtiyacı var hayırçözüm çalışmaları; Bunu yapmak için, keyfi bir çözümden başlar ve cevapsız bir program oluşturarak bazı programları kaçırması gerektiğini gösterir. Köşegenleştirme (uygun olmayan şekilde “paradoks” dediğiniz şey), ortaya çıkan programda değil, yapım aşamasındadır. Sonuçta ortaya çıkan programlar kendi kendine referans değildir.

Rice'ın teorem denilen ve önemsiz olmayan herhangi bir özellik olduğunu belirten daha genel bir sonuç var.Programların seçimi çözülemez - yalnızca programın davranışına bağlı olan ve yazıldığı şekilde değil (örneğin, kaynak kodu 42 karakterden az mıdır?) açıkça belirlenemez, ancak “orada bir kaynak kodu 42 karakterden az olan ve tüm girişler için aynı sonucu veren program nedir? ”değil,“ bu program hiç bir şey çıkarıyor mu? ”). Durmak sadece bir örnektir. Bu önemlidir, çünkü pratikte sık sık ortaya çıkar (genellikle, bir programın çalıştığı bilgisayarın sonlu kaynakları göz önüne alındığında, bir programın makul bir sürede sonuç getirip getirmeyeceğini bilmek isteriz, ancak bu nadiren pratik olarak yanıtlanabilir. Programın yeterli zaman ve hafızada verilen sonlandırıp sonlandırmayacağı konusundaki daha basit soruya razı olmaya istekli.


2
"Verilen bir programla aynı çıktıyı üretecek bir program var mı (programın kendisinden başka bir giriş yok), ancak programın yükleneceği zaman dahil olmak üzere daha kısa sürede ?" aday programların azami uzunluğu sınırlandırılacağından, her birini test etme zamanı geleceğinden, anlaşılmaz olsa bile, karar verilebilir.
supercat

@supercat Evet, bu özellik karar verilebilir. Girdi alan bir programın genel durumu için bu karar verilemez.
Gilles

1
Halting Probleminin tipik olarak bir programın yürütülmesi sırasında alacağı tüm girdilerin programla birlikte verildiğini varsaydığı izlenimindeydim. Herhangi birinin belirli bir giriş sırasını besleyen herhangi bir program için Halting Problemini sihirli bir şekilde çözebilecek bir makinesi varsa , böyle bir makine bir programın tüm sınırlı uzunluktaki girişler için durup durmayacağını belirleyebilir mi?
Supercat

3
@supercat Hayır, her şey için giriş durdurma kehaneti , bir giriş için durdurma kehanetinden bir adım daha ileride olacaktı . Bu site için iyi bir soru olurdu… aslında bizde de var . Bu arada, benim varsayılan zihinsel modelim özyinelemeli işlevlerdir; burada “girdi” “argüman” anlamına gelir ve bir programı çalıştırmak onu argümana uygulamak anlamına gelir; Ben haklı ifadem Turing makineleri ile ilgili bir bağlamda yanlış, haklısın, ben güncellerim.
Gilles

28

Bana öyle geliyor ki, Halting Sorunu, Liar'ın paradoksuyla aynı şekilde “paradoks” olarak adlandırılan kendinden referanslı (en azından döngüsel) bir çelişkiden başka bir şey değildir. Yaptığı tek sonuç, Durdurma Fonksiyonunun bu tür yanlış biçimlendirilmiş sorulara duyarlı olduğu yönündedir.

Hayır, durdurma probleminin konusu bu değil . Yalancının paradoksu gibi paradokslar doğru ya da yanlış değildir, sadece mantıklı gelmezler. Öte yandan deterministik bir algoritma, belirli bir giriş için duracak veya sonsuza dek çalışacaktır. Fonksiyon halts(program, input), her program için, her giriş için mükemmel bir şekilde tanımlanmış, deterministik bir değere sahiptir. Biz sadece edemez karar Herhangi bir program için. Ya da daha doğrusu: Her program / giriş çifti için karar verebilecek bir program yazamayız.

Σ(n): =nnnnΣ(n)


2
Liar Paradoksunun ortak haliyle kendisine açıkça atıfta bulunduğunu, ancak aynı sorunun olmasa bile ortaya çıkabileceğini belirtmek gerekir. "Alınan ifadenin cevabı, metni alarak ve ilk virgülden sonra tırnak içine alınmış bir kopya ekleyerek mi?" ve ilk virgülden sonra tek tırnak içine alınmış bir kopya ekleyerek, hayır? Böyle bir ifade açıkça kendinden referanslı değildir, ancak karakter karakteriyle özdeş olan bir ifadenin doğruluğuna işaret eder.
supercat

2
@supercat: huh, daha önce İngilizce'de bir
inilti

@SamB: Birkaç tane gördüm ama elimi orijinal bir formülasyonda denemeye karar verdim, bazılarından daha ayrıntılı olsa da (belki de) daha doğal olarak okur.
Supercat

24

Halting Probleminin neden bir programın durup durmayacağını belirleme olasılığını reddetmek için neden bu kadar sık ​​kullanıldığını anlamıyorum. Wikipedia makalesi, sınırlı belleğe sahip deterministik bir makinenin bir önceki durumu durduracağını ya da tekrarlayacağını doğru bir şekilde açıklıyor. Bağlantılı bir listenin, Halting Fonksiyonunu uygulamak için O (1) uzay karmaşıklığına sahip olup olmadığını tespit eden algoritmayı kullanabilirsiniz.

İlk olarak, evet, teorik olarak, sonlu belleği olan gerçek bir bilgisayarı sonlu durumlu bir makine olarak görmek mantıklıdır. Fakat pratikte , gerçek bir bilgisayarın durumları o kadar büyüktür ki, gerçek bilgisayarlar Turing makineleri veya diğer sonsuz durum hesaplama modelleri tarafından modellenir.

İkincisi, teorik olarak bile, modern bir bilgisayarı sonsuz durum makinesi olarak görmek mantıklıdır. Bir Turing makinesinin sonsuz bir bandı yoktur, makine belleği yetersiz olduğunda her zaman uzatılabilen bir kaseti vardır. Ve gerçek bilgisayarlarla yapabileceğimiz tam olarak bu değil mi? (Eğer CPU'nun adres alanı tükenirse, bulutu vb. Kullanabiliriz.)

Bana öyle geliyor ki, Halting Sorunu, Liar'ın paradoksuyla aynı şekilde “paradoks” olarak adlandırılan kendinden referanslı (en azından döngüsel) bir çelişkiden başka bir şey değildir. Yaptığı tek sonuç, Durdurma Fonksiyonunun bu tür yanlış biçimlendirilmiş sorulara duyarlı olduğu yönündedir. Dolayısıyla, paradoksal programlar hariç, Halting Sorunu kararlaştırılabilir. Öyleyse neden tam tersini kanıt olarak tutuyoruz?

'HPx'HPx

Turing'in durma sorununun kararsızlığına dair kanıtı , yalancı paradoksuna benzer bir numara kullanır, evet. Bir paradoks, genellikle belirgin bir çelişki olarak tanımlanır ve bazı insanlar bir paradoksun gerçek bir çelişki olmadığını çıkarırlar. Bununla birlikte, Russel'in paradoksu (yalancı paradoksuna resmi set-teorik muadili) matematikte gerçek bir çelişki ortaya koydu ve durma sorununun kararsızlığının kanıtı, çelişkiyle kanıtı için gerçek bir çelişki kullandı .


1
Sorunun kurulumunun önemli bir parçası olan gerçek bilgisayarlar, sonlu durum makineleri ve Turing makineleri arasındaki ilişkiyi açıklamak için +1.
David Richerby

1
İlgimi çektin. Belirgin bir çelişki ile gerçek bir çelişki arasındaki fark nedir?
Brent

Bu anlatmanın başka bir yolu: Genel olarak konuşacak olursak, programlama biz edilir yazma tasarlayabilmeye algoritmalar veya programların sınırlı resources.Most üstlenmez değil biz özellikle bu onları tasarım sürece, bilgi işlem kaynaklarının sınırlı, hatta sabit miktarda kullanmak yazılı yol (örneğin, gömülü sistemler için programlama yaparken bu genellikle gereklidir).
reinierpost 11:14

3
@Brent. Birçok paradoks hiç de çelişkili değil, sadece ilk bakışta. Daha yakına baktığımız zaman, muhakemede bir hata ya da anlamını farklı bir bağlamda kullanarak hafifçe değiştirilen bir kelimenin veya benzer bir şeyin olduğu ortaya çıkıyor. Bununla birlikte, bazen bir paradoks gerçek bir çelişki ortaya çıkarmaktadır.
Hoopje

OP’imden beri bu sorunu açık ve kapalı olarak inceliyorum. Gödel'in eksiklik teoremi, kullanılan mantık sistemine bakılmaksızın her zaman bir paradoks bulmanın mümkün olduğunu mu ima ediyor?
Brent,

17

jmite soruyu gerçekten çok güzel cevapladı. Kendine bir referans mekanizması kullanmasının neden olduğunu düşündüğüm "Liar Paradoksu" ile algılanan benzerlik hakkında küçük bir not ekleyeyim.

Kendi kendine referans paradoksal değildir!

Kendi kendine referans, hesaplamada (bir algoritmanın koduna, yansımasına başvurabildiği ) ve insan dilinde (kendimize, kendimize -bilinçliliğe başvurabileceğimiz) gerçekten faydalı bir araçtır .

Yalancı Paradoksuna neden olan sorun kendi kendine referans değildir, dil içindeki (resmi) bir dil için hakikat belirtisini kullanmaya çalışıyor. Kendi kendine referans olmadan bile sorunlara yol açacaktır, bir paradoks elde etmek için kendi kendine referans kullanma yeteneğine ihtiyacımız yoktur: kendi kendine referans ortadan kaldırılabilir! . Sadece cümleyi daha az güzel ve özlü hale getirirdi ama yapmak zor değil. Temel olarak Kleene'nin Sabit Nokta teoreminin kanıtlanması budur. Yalancı Paradoksunun ima ettiği şey, (biçimsel) bir dilde yapılan ifadelerin gerçeğinin kendisinin referansının problemli değil, o dilin aşağısında olduğudur.


Bana öyle geliyor ki, rahatsızlığınız durma probleminin kararsızlığından (Turing makineleri için) değil, Turing makinelerini bilgisayarların teorik modeli olarak kabul etmemizden kaynaklanıyor. Tipik olarak (her zaman olmasa da) Turing makineleri (ve Rasgele Erişim Makineleri gibi eşdeğer hesaplama modelleri ), gerçek bilgisayarlardaki hesaplamanın sonlu otomatlardan ziyade tartışılması için çok faydalıdır ve bunun için iyi sebepler vardır (bir Turing makinesinin sahip olmadığını unutmayın) sonsuz miktarda bellek, sınırsız miktarda belleğe sahiptir ve bunlar farklı şeylerdir: sınırsız, makineye ihtiyaç duyulduğunda daha fazla bellek sağlayabilir, sınırsız miktarda bellek kullanması anlamına gelir).

Elbette, bilgisayarları sonlu otomata olarak düşünmek istiyorsanız ve bu sizin amacınıza uygunsa, o zaman sonlu otomatlar için durma problemi kesinleşebilir (ve reddedilirse, sonlu bir otomata ile değil, bir Turing makinesi tarafından reddedilebilir demek istiyoruz). Bununla birlikte, insanlar normalde durma problemini kullandıklarında ne anlama geldiklerini ifade etmiyorlar, Turing makinelerinde durma problemi anlamına geliyorlar.

s2s


14

durma problemi daha önce matematikte bulunmayan yeni bir “kararsızlık” kavramı ortaya koydu. bazı sorunların “kanıtları” olmadığını gösteren bir (“görünüşte paradoksal”) kanıtıydı. Godelian'ın çözümsüzlük kavramıyla bağlantılı. Godels teoremi , Turing'in durdurma problemi formülasyonundan birkaç yıl önce geçti. Godels sonucu o zaman oldukça soyut olarak kabul edildi ve sadece araştırmacılar ve uzmanlar tarafından biliniyordu. Turings formülasyonu, karar verilemezlik ilkesinin son derece pratik / pragmatik / uygulanan bu tür keyfi programları durdurmak ve bir çok daha az teorik kavram olarak kabul edilir olmadığının belirlenmesinde olarak bilgisayar bilimi soruları, bu gibi modern zorlukları renkte görünür " (bilgisayarların teoremleri keşfedebilecekleri bir zorluktur) ve programın sonlandırıldığını ispatlamak.

Bir başka ilginç açı da, (Diophantine) sayı teorisinde millenia için kanıtlanmayan Yunanlılardan kaynaklanan çok eski bazı problemlerin var olmasıdır. Diophantine denklemleriyle ilgili genel soruların Hilberts 10. problem / teorem adı verilen kararsız olduğu sonucuna varılmıştır . Hilbert, 20. yüzyılın başında yaşadı ve matematiğin matematik problemlerine sistematik yaklaşımlar bulabileceği bir araştırma programı olarak önerdi. Bu meydan okuma / plan birkaç on yıl sonra kararsızlığın keşfedilmesiyle ciddi şekilde etkilendi. kararsızlık çok ileri bir araştırma alanı olmaya devam ediyor ve kararsız ve kararsız sorunlar arasındaki sınır muhtemelen her zaman daha fazla inceleme ve analiz altında olacak.


14

Halting sorununun Halting problemi (aka Halt) ile çözülemeyeceğine dair kanıt olan klasik "öz referans" temelini karıştırıyor gibi görünüyorsunuz.

Bu kendi kendine referans olan program - ancak eğer durmazsa duracak olan program - Halt'i çözemeyeceğinizi kanıtlamayı kolaylaştırmak için inşa edilmiştir. Biz X ispat gerçeği Y gelmez tekniği yoluyla imkansız değil Y'nin biz X'i çözemez tek nedeni ima

Başka bir deyişle, sadece Halt'i çözmekle kalmaz, bir programın, "1 dakikadan daha uzun sürerse, sürmek gibi davranırsa" gibi kaba bir önlem dışında durup durmadığını belirleyemediğimiz bir program olduğunu tespit edemeyiz. durmuyor ".

Eğer Halting probleminden başlayıp diğer problemleri azaltırsanız, sonuçta programlarla ilgili neredeyse her soruyu azalttığınız noktaya ulaşırsınız. Rice Teoremi ile bitiyoruz:

S bazı önemsiz olmayan özellik olalım 1Turing Machine'in kabul ettiği olsun. Bunun anlamı, S özelliği ile girişi kabul eden ve kabul etmeyen en az bir Turing Makinesi olduğu anlamına gelir.

O zaman, belirli bir Turing Machine T'nin S özelliği ile girişi kabul etmesi kabul edilemez.

Bir Turing Makinesinin tamsayıları kabul edip etmediğini bilmek ister misiniz? Undecidable.

Turing Machine'in aritmetik dizileri kabul edip etmediğini bilmek ister misiniz? Undecidable.

Turing Machine'in genel olarak bağırsakları hakkında sebep olabilirsiniz. Belirli bir Turing Makinesi hakkında aklınıza gelebilir ve bir dizi / vb'yi durduracağını / kabul edeceğini ispatlayabilirsiniz. Ancak tekniğinin, beslediğin bir sonraki Turing Makinesi üzerinde çalışıp çalışmayacağını bilemezsin.


1 By property ofsadece bir - o da kabul edilmektedir nasıl mekanizmasını içermez neyi kabul edilmektedir. "100 veya daha az adımda kabul eder" kabul edilenin değil, kabul ettiği bir özelliktir.


Bir "özellik" in ne olduğunu açıklamak isteyebilirsiniz, çünkü yapılabilecek naif yorumlama muhtemelen yanlış olacaktır.
Rick Decker

@rick Bence dipnot şimdi onu kapsıyor mu?
Yakk

7

Yaygın olarak belirtildiği ve belirtildiği gibi durma sorununun sadece bir sorun olduğu konusunda haklısınız. Pratikte her zaman "dur" ya da "döngüler" döndüren ve yalnızca "don" döndüren üç değerli ("dur", "döngüler", "bilmiyorum") durma işlevinin olamayacağını kanıtlamaz. Örneğin, özel olarak imal edilmiş köşe kasaları için.

Durma sorununun iki nedeni önemlidir:

1) Bu, kanıtlanabilir ilk kararsız sorunlardan biridir. Varsayımsal olarak sadece 'bilmeyen' biri olsa bile, yine de büyük matematiksel ilgi alanı olacaktır.

2) Bazı sorunlar, kötü niyetli bir saldırganın analiz edilmesi gereken durumu sağlayabileceği durma sorununu azaltır. Bu bizi reddetmek zorunda olduğumuz geçerli davalar olabileceğini kabul etmeye zorlar.

İkinci noktaya gelince, yazılım analizi zor bir sorundur, ancak analizi kolaylaştırmak için hem analizde hem de dil tasarımında büyük ilerleme kaydedilmiştir. Belirli bir görevin yazılım analizine benzer olduğunu gösterebiliyorsanız, evet, bu büyük bir sermaye H ile zor. 'Bu, durdurma sorununun çözülmesi yeterli olacaktır çünkü', çoğu zaman teknik olarak yanlış veya ilgisiz olmasına rağmen, bu gözlem için kısa yol.


5

Halting Sorununun çözülemezliğinin genellikle yanlış anlaşıldığını iddia eden bir dizi makalede Eric Hehner tarafından ortaya konan çelişkili bir tartışma var. "Epimenides, Gödel, Turing: Ebedi Altın Karmakarışıklığı", "Halting Problemiyle İlgili Sorunlar", "Halting Problemini Yeniden Yapılandırmak" ve "Halting Problemi" adlı makaleleri burada bulabilirsiniz . Bu yüzden bu cevap "sadece bağlantı" değildir, onun sonuçlarından birini özetlemeye çalışacağım, argümanı değil.

f(0)=1f(0)=2hh(M)M'Hhh


3
Ben takip etmiyorum Durma işlevi, mükemmel bir şekilde tanımlanmış ve geçerli bir belirteçtir - herhangi bir Turing makinesi ve herhangi bir giriş için, makine durur veya döngüler. (Uygun bir referanstan yoksun; hangi papar'ı özetliyorsunuz?)
Raphael

@Raphael İşlevin iyi tanımlanmış olması genellikle bir gerçek olarak kabul edilir. Hehner'in bakış açısı farklıdır ve makalelerinde açıklanmıştır. Cevabımı kağıtların adlarını sağlamak için düzenleyeceğim.
Theodore Norvell

Diyelim ki Hehner'in argümanı her ne ise [Belgeleri okumadım], en azından ilk okuma / yaklaşımlarında tartışmalı olduğu ortaya çıktı: ' cs.toronto.edu/~hehner/Shallitaffair.pdf ve recursed.blogspot.com/ 2013/10 / eric-hehner-replies.html
Fizz

Ve Hehner'in makalelerinin (bu konudaki) herhangi bir ek okumalarının (bu konudaki çalışmalarının) uğraşmaya değdiğinin niteliği ve alıntı sayısı göz önüne alındığında net değildir.
Fizz

Kanıtları çok sağlam gözüküyor ve felsefede yapabileceği aptalca şeylerin sadece kendi kendini ifade eden ifadesini doğrulamak için analiz etmeye çalışmak gibi bir aptallık olduğuna işaret ediyor: "Bu cümle yanlıştır." eğer doğru ise yanlış olduğu anlamına gelir, bu da aslında doğru olduğu anlamına gelir, hayır tekrar tekrar yanlış yapmaz ... bu yüzden çok önemli bir felsefi deniz bakışı sorusu gibi görünmüyor. en.wikipedia.org/wiki/Liar_paradox Durma paradoksu, filozoflarla konuşmayan bir bilim adamı olayı olabilir.
James Wakefield,

3

Makinelerden ziyade insanları içeren durma sorununun önemi hakkında farklı bir açıklama yapmak istiyorum.

MIT 1986 Yapı ve Yorum dersinin son dersi; Profesör, "Herhangi bir sorunuz var mı?" diye soruyor. ve öğrencilerden biri: “Bu son soru mu?” diye sorduğunda dersi bitirmeye hazırlanır.

Bir an için düşünün. Öğretmen buna nasıl cevap verebilir? Öğrenci, öğretmenle çelişmeye karar verirse, öğretmenin verebileceği geçerli bir cevap yoktur - bu sadece durma problemi gibidir.

Fonksiyonları ve makineleri kullanarak, durma problemini soyut olarak düşünmeye alışkınız ama bundan çok daha derin. Temel olarak, cevaplanamayacak mükemmel geçerli sorular olduğu anlamına gelir.

Not: Hangi kurstan bahsettiğimi bilmiyorsan, git izle, harikaydı.


Ancak çalıştırırsam doesHalt(programCode, input);, program doesHaltfonksiyonun ne döndürdüğünü bilemez . doesHaltİşlev değerlendirildikten sonra programın durması mümkün değildir .
Tvde1

0

N girişi verilen ya da en küçük p> n'yi p + 2'nin de asal olduğu şekilde veren veya böyle bir p yoksa sonsuza kadar çalışan bir program yazabilirim. Programımın her girdi için durup durmayacağını tahmin etmek için sorunu çözebiliyorsanız, Twin Prime Conjecture'u çözdünüz.

Bu varsayımın kararsız olduğu kanıtlanmış olabilir, bu durumda durdurma programının başarısız olduğu basit bir programımız olur.


Bence "Turing-undecidable" ı farklı bir fikirle karıştırıyorsunuz; Aslında, kazayla “aynı eski” haksızlığa rastlamış olabilirsiniz. Ayrıca buraya ve buraya bakın .
Raphael
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.