Rice teoreminin şaşkınlığı


37

Özet: Rice teoremine göre her şey mümkün değildir. Yine de, sözde imkansız şeyleri her zaman yapıyorum !


Tabii ki, Rice teoremi sadece "her şey imkansız" demiyor. Daha spesifik bir şey söylüyor: "Bir bilgisayar programının her özelliği hesaplanamaz."

(Eğer kılları bölmek istiyorsanız, her "önemsiz" mülkün mülkiyeti vardır. Yani, tüm programların sahip olduğu veya hiçbir programın sahip olmadığı mülkler önemsiz bir şekilde hesaplanabilir. Fakat diğer mülkler hesaplanamaz.)

Teorem öyle diyor ya da öyle görünüyor. Muhtemelen çok sayıda zeki insan bu teoremin doğruluğunu dikkatlice doğrulamıştır. Fakat bu tamamen mantığa meydan okuyor gibi görünüyor! Hesaplamak için önemsiz olan programların sayısız özelliği vardır ! Örneğin:

  • Bir program durmadan önce kaç adım uygular? Bu sayının sınırlı mı yoksa sonsuz mu olduğuna karar vermek kesin olarak hesaplanamayan Halting Sorunu'dur. Bazı sonlu daha bu sayı daha büyük veya daha küçük olup olmadığına karar vermek ise önemsiz! Programı adımlara kadar çalıştırın ve durup durmadığına bakın. Kolay!nn

  • Benzer şekilde, daha programı kullanımı daha fazla veya daha az yapan , ilk bellek birimleri yürütme adımları? Özel olarak hesaplanabilir.nm

  • Program metni isimli bir değişkenden mi söz ediyor ? Önemsiz bir metinsel analiz cevabı ortaya çıkaracaktır.k

  • Program komutunu mı? Yine, bu komut adını arayan program metnini tarayın.σ

Ben özelliklerinin bol görebilirsiniz yapmak hem de olmayan hesaplanabilir bakmak; örneğin, programın tam bir çalışması kaç tane ekleme yapar? Peki, bu neredeyse programın kaç adım attığını sormakla aynıdır; Ancak, hesaplanması gerçekten çok kolay olan program özelliklerinin tekne yükleri var gibi görünüyor . Yine de Rice'ın teoremi, hiçbirinin hesaplanamadığı konusunda ısrar ediyor.

Burada ne özlüyorum?


8
"Rice teoremine göre, her şey imkansız." -- Hayır. "Bir bilgisayar programının her özelliği hesaplanamaz." -- Hayır. Yine de yalnız değilsiniz: çoğu öğrenci bu yanılgı ile karşılaşıyor.
Raphael

Yanıtlar:


36

Bu tartışmanın amaçları doğrultusunda, bir "program" her zaman bir tamsayıyı girdi olarak alan ve sonsuza kadar çalışan ya da bir tamsayı döndüren bir kod parçasıdır. Bu iki program söylemek ve edilir eşit extensionally aynı işlevi hesaplamak ise her numara için, diğer bir deyişle her ikisinin ve sonsuza kadar çalışabilir, ya da aynı sayıda sonlandırmak ve çıkış.g n f ( n ) g ( n )fgnf(n)g(n)

Bir genişlemeli mülkiyet programların bir özelliktir eğer saygı genişlemeli eşitlik, yani o ve extensionally vardır o zaman ya ikisi de mülk var eşit veya her ikisi de yok.f gr PPfgP

İşte bazı örnekler olmayan -extensional özellikleri:

  1. Program adımda durur . (Bir programı her zaman, daha uzun süre çalışan, uzantıları eşit olan bir programla değiştirebiliriz.)n
  2. Program , yürütmenin ilk adımlarında daha az bellek hücresi kullanır . (Bir programı her zaman, eşit derecede eşit bir programla değiştirebiliriz, böylece hafızayı iyi bir sebep olmadan kullanır.)mnm
  3. Program metni, adlandırılmış bir değişkenden bahseder k. (Değişkenleri yeniden adlandırabiliriz.)
  4. Komut çağırmak programı mu . Bu, ne olduğuna biraz bağlı olabilir , ancak bir şekilde simüle edilebilecek bir şeyse, o zaman kaçabiliriz ve hala orijinaline eşit bir programa sahip olabiliriz.σ σσσσ

Eminim ki, Rice'ın teoremine karşı iddia ettikleri karşı örnekleri tam olarak listelediğimi fark etmişsinizdir:

Teorem (Rice): Programların hesaplanabilir bir uzama özelliği ya tüm programları tutar ya da hiçbirini içermez.

Bunu açıklamanın başka bir yolu var: Bir program ile hesapladığı işlev arasında ayrım yapmalısınız. Pek çok farklı program aynı işlevi hesaplar (hepsi uzamsal olarak eşittir). Rice teoremi, onları hesaplayan programların özellikleriyle değil, fonksiyonların özellikleriyle ilgilidir.


Bu cevabı alamıyorum .. (Aynı soruyu sorduğum için üzgünüm, ama bu noktayı netleştirmek iyi olur). Bu programları, bir uzantı eşdeğeri elde etmek için sözdizimlerini değiştirerek değiştirebileceğinizi söylüyor , ancak bunların ilk etapta uzantı eşdeğeri olup olmadığını nasıl kontrol edeceksiniz ? Genel olarak , bu programların işlevlerinin her ikisinin de özelliğine sahip olup olmadığını karşılaştırmak için bir program kullanamazsınız , bu nedenle "değiştir" deyince mümkün olabilir çünkü basit örneklerdir ("dikkatlice değiştir" ekler miydiniz? Bunun için IDE "? ..) Sanırım bir kez değiştirilmiş , genel olarak kontrol edemezsiniz , bu yüzden belki de Rice tutar.
Hernan_eche

1
Genel olarak, iki özel programın , durumun böyle olduğunu kanıtlayarak , eşit olarak eşit olduğunu kontrol edersiniz . Bir bilgisayar tüm değerleri için bu eşitliği "kontrol edemese bile" tüm tamsayılar için olduğuna itiraz ediyor musunuz ? Neyse ki değil. Bir boolean değeri hesaplayan bir program yazmak ile belirli bir ifadenin belirli bir doğruluk değeri olduğunu kanıtlamak arasında bir fark vardır. Kanıtlayabileceğimiz ancak hesaplayamadığımız şeyler var (örneğin, iki özel programın boyutsal olarak eşit olması ya da eklemenin değişmeli olması gibi). n+m=m+n
Andrej Bauer

Ayrıca, muhakemenizde garip bir akıl yürütme sıçraması yapıyorsunuz: genişlemeli eşitlik karar verilemediğinden, Rice teoremi yanlış olabilir. Nasıl yani? Ve sadece boyutsal eşitlik kararsız olduğu için, bu bizim karar verebileceğimiz hiçbir durum olmadığı anlamına gelmez. Bahsettiklerim - bunlara karar verebiliriz.
Andrej Bauer

36

Temel yanlış anlama:

Bir bilgisayar programının her özelliği hesaplanamaz

Rice teoreminin bahsettiği şey bu değil. İşlevlerin özellikleri ve bu işlevi hesaplayan program kümesinin kararsız olmadığı hakkında konuşur . Resmen, verilen kümesiniPRE

{MfMP}

karar verilemez. Bahsettiğiniz özellikler için, program grubunun bu forma sahip olduğu uygun bir bulamazsınız . Bir işlev için bazı programlar özelliğe sahipken diğerleri (aynı işlev için) olmayabilir. Bazı örnekler için buraya bakınız .P

Rice teoremi, anlamsal özelliklerle ilgilenmektedir ( bir program tarafından hesaplanan fonksiyonun özellikleri , örneğin alan veya değer aralığı). Bahsettiğiniz şey, sözdizimsel özelliklerdir ( programın çalışma zamanı veya kaç değişken kullanıldığı gibi özellikleri).

Sözdizimsel özellikler için pek bir şey bilinmemektedir; bu soruya bakınız .


1
İlk cümle ya da öylesine kayboldum. Üzgünüm. Birileri anlambilimsel ve sözdizimsel bir özellik arasındaki farkı açıklayabilir mi?
MathematicalOrchid

@ Matematiksel Orkide: Bu cümleyi güvenle yok sayabilirsin; ilk paragraf ihtiyacınız olan tüm bilgileri içerir. Zaten detaylandırırım.
Raphael

2
Anlamsal = programın ne yaptığı hakkında. Sözdizimsel = programın neye benzediği hakkında.
reinierpost
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.