Genel durumda, bir algoritmanın bir spesifikasyona eşdeğer olup olmadığını onaylayan bir algoritma oluşturmak mümkün değildir. Bu gayri resmi bir kanıt:
Neredeyse tüm programlama dilleri Turing-tamamlandı. Bu nedenle, bir TM tarafından karar verilen herhangi bir dile, bu dilde yazılmış bir program tarafından da karar verilebilir.
İki olarak bilinen aynı dili kabul edip etmediğini belirleme sorunu tespit edilemez. Turing'in eksiksiz olmasının bir sonucu olarak, aynısı, verilen dilin programları için de geçerlidir. Başka bir deyişle, programınızın kabul etmesini istediğiniz girişlerin ve gerçekte yaptığı girişlerin aynı olup olmadığını bilmek kararsızdır.Equivalence/TM
Dahası, tekrarlamalı sayılar bile değildir. Bunun nedeni, (bir TM'nin en az bir girişi kabul edip ) kabul edilebilir bir dil olmasıdır, çünkü tüm olası girişleri yineleyebilirsiniz. TM boş değilse, sonunda kabul edilen bir kelime bulacaksınız. Bu nedenle, kabul edilemezdir, aksi takdirde, karar verilebilir (ki olmadığını biliyoruz). Ancak, Emptiness / TM, TM'ye düşürülebilir , dolayısıyla de kabul edilemez. Bu nedenle, iki makinenin eşdeğer olup olmadığına dair bir algoritma kullanabilirsiniz, ancak bunların eşdeğer olup olmadığından emin olamazsınız veya algoritmanıza yeterince zaman vermediniz.Equivalence/TMNon−emptiness/TMEmptiness/TMEmptiness/TMEquivalence/TMEquivalence/TM
Ancak, bu sadece genel durum için. Sorunun daha rahat bir versiyonunu çözerek özelliklerin programla aynı olup olmadığına karar vermeniz mümkündür. Örneğin, yalnızca birkaç girdiyi inceleyebilir veya iki programın bazı belirsizliklerle eşdeğer olduğunu söyleyebilirsiniz. Bu, yazılım testlerinin neyle ilgili olduğu.
Diğer sorularınız için:
Not: Bu bölüm açıklama için düzenlenmiştir. Kaçınılmaya çalıştığım hatayı yaptığım ortaya çıktı, üzgünüm.
, karar verilebileceğini bildiğimiz dillerin bir koleksiyonu olsun . Tabii ki . Kişi daha sonra şunları kanıtlayabilir:TrueRTrueR⊆R
ProvableR=TrueR . Bunun olduğunu görmek kolaydır . Ancak, aynı zamanda . Kanıt çok kolaydır: . Tanım olarak, her girişinde YES veya NO. Bu nedenle, her girişte durur. olduğunu .ProvableR⊂TrueRTrueR⊂ProvableRAϵTrueRAAAϵProvableR
Gayriresmi olarak, bu şöyle özetlenebilir: Bir dilin böyle olduğunu kanıtlayana kadar karar verilebileceğini bilmiyorsunuz. Dolayısıyla, resmi bir sistemde bir dilin geçerliliği olduğu bilgisine sahipseniz, bu bilgi bunun için bir kanıt olabilir. Bu nedenle, bir dilin hem karar verilebileceğini hem de kanıtlanamayacağı bilgisine aynı anda sahip olamazsınız, bu yüzden bu iki ifade birbirini dışlar.
Son noktam, bilgimizin kısmi olduğu ve çalışmanın tek yolunun ile . Bu ayrım matematikte anlamlı olabilir ve bunu kabul edebiliriz, ancak çalışacak hiçbir aracımız yok. Yana , tamamen bilemezsin bağlanmıştır bütünüyle.RProvableRProvableR⊂RR
@Kaveh bunu en iyi şekilde özetler: Provable, her zaman bazı sistem / teorilerde kanıtlanabilir anlamına gelir ve genel olarak gerçeklerle örtüşmez.
Aynısı başka bir karmaşıklık sınıfı için de geçerlidir: Üyeliği belirlemek için önce bir kanıt gerekir. Bu nedenle, ikinci sorunuzun çok karmaşık olduğuna inanıyorum, çünkü dilin sahip olmasını istediğiniz özelliğe bağlı olarak sadece karmaşıklık teorisi değil, aynı zamanda hesaplama teorisi de var.