Her kendini değiştiren algoritma, kendini değiştirmeyen bir algoritma ile modellenebilir mi?


12

Talimatlarını değiştirebilecek keyfi bir bilgisayar programımız varsa, bu programı talimatlarını değiştiremeyen bir programla simüle etmek mümkün müdür?


Düzenle:

Stackexchange'te yeniyim, bu yüzden burada YENİ bir soru sorma iznim olup olmadığından emin değilim, ama işte gidiyor: Tamam, mümkün olduğunun kanıtı, gerçekten gösterdiğiniz gibi gerçekten basit. Şimdi merak ediyorum: Girdi-çıktı eşdeğeri en verimli kendi kendine modifiye olmayan algoritmaya karşı, sorunu çözmek için en verimli kendi kendini değiştiren algoritmayı kullanmanın daha verimli (ve ne ölçüde) olduğu problemler var mı?

Yanıtlar:


29

Evet mümkün. Yazıldığı dil için bir tercüman kullanarak programı simüle edebilirsiniz. Şimdi, program (tercüman) sabittir ve eskiden kendi kendini değiştiren bir program olarak kullanılan şey artık tercüman verisidir.

Özellikle, TM'nin kendi açıklamasını değiştirmesine izin verdiği evrensel bir Turing makinesine mükemmel bir şekilde sahip olabilirsiniz. (Simüle edilen makinenin açıklaması, yani UTM değil.)


11
Varsayımsal tercümana bile ihtiyacınız yok. Kendini değiştiren algoritmanızı yürüten bir CPU'nun kendisi sabit bir algoritmayı yürüten bir makinedir (talimatları nasıl yürüttüğünü belirler)
Alexander - Monica'yı yeniden eski haline

1
@AlexanderMomchliov , talimatlarının bir kısmını anında ayarlayabilen CPU'lar var (ancak evet, fikir aynı - programlanabilir kısım, çalışan bir mikro denetleyici - bir FPGA hücresi içindeki bir mikro denetleyiciye işaret ediyor olsa da) zor olabilir)
John Dvorak

yanıt vermek için: "taklit ettiği TM'nin kendi tanımını değiştirmesine izin veren evrensel bir Turing makinesine sahip olabilirsiniz." Düşünüyorum: Bu bir soru değil mi? çünkü şimdi hala simüle edilen TM'nin kendini değiştiren algoritmayı modelleyebileceğini kanıtlamanız gerekiyor, değil mi? Yine de kendisi bir Turing makinesi OLMAYAN bir kendini değiştiren program var olabilir, bu yüzden Turing bütünlüğünü simüle edilebileceğini göstermek için kullanamayız, çünkü Turing bütünlüğü TM'lerin simülasyonu ve kendini değiştirme ile ilgilidir algo bir TM değildir.
user56834

@ Programmer2134 Soru hiç de dilenmiyor. Kendi kendini değiştiren programınızı çalıştırdığınızı düşündüğünüz CPU ne olursa olsun, bu CPU'yu bir Turing makinesinde simüle edebilirim. Bunu farklı bir şekilde açıklamak için, başlangıç ​​programı, bazıları programın kendisini değiştiren sınırlı bir talimat dizisidir. Talimatların her biri UTM tarafından simüle edilebilir, değişikliklerin her biri simüle edilebilir ve değiştirilen talimatların her biri simüle edilebilir. Bu sürecin herhangi bir aşamasında Turing makinelerinin gücünün ötesine geçen hiçbir şey yoktur.
David Richerby

10

Kod değiştirme (veya "kod") içermeyen herhangi bir Turing-complete hesaplama modeli bu ifadenin bir kanıtı olarak işlev görür. Ben standart modellerin herhangi biri (TM, RAM, ...) bilmiyorum do , kod değiştirerek var biz çok uzakta bakmak zorunda kalmamak.

Aklınızdaki herhangi bir dilde bir program almak için, böyle bir modelden derleyin (ve derleyicinin kod değişikliği yapmadığından emin olun).


Orada: Bu elbette bir varoluş argüman vardır olduğunu eşdeğer bir programdır. Ancak, herhangi bir Turing-complete dili arasında yinelemeli (yani hesaplanabilir) derleyiciler olduğunu da biliyoruz, bu nedenle istediğiniz bir form programını (okuma: dilde) bu şekilde elde edersiniz.


4

David Richerby'nin cevabına eklemek için :

Kendi kendini değiştiren algoritmaların kendi kendini değiştirmeyen algoritmalar tarafından modellenemeyeceği doğruysa, bu algoritmaların da kendini değiştiren bir şey üzerinde yürütülmesi gerekirdi. Tamamen kaplumbağa olmalı.

Yorumumda belirttiğim gibi, kendisinin değiştirdiği bir algoritma, makine talimatlarının nasıl yürütüleceğini "anlatan" statik bir algoritmanın (tasarımında kodlanmış) kurallarına uyan bir işlemci üzerinde yürütülebilir.


1
Bence bu ilginç bir bölme çizgisi olabilir. Bence "hayat", kendini değiştirmeyen algoritmalar tarafından modellenemeyen, kendini değiştiren bir algoritmadır, ama sonra tekrar, "hayat" genellikle bir algoritma olarak düşünülmez.
Cort Ammon

2
@CortAmmon: "Yaşam" ı bir algoritma olarak görürsek, girdisi ve çıktısı nedir? Eşdeğer bir algoritmanın (aynı girdi verildiğinde aynı çıktıyı üreten herhangi bir algoritmanın) kendi kendini değiştirmesi gerektiğini nasıl kanıtlayabiliriz?
ruakh

@ruakh Hayatın kendini değiştiren bir algoritma olduğunu iddia ederseydim, girdilerin kendisi olurdu ve çıktılarının kendisi olurdu. Kendini değiştirmeyen bir algoritmaya indirgenemeyeceğini kanıtlamak daha zor olacaktır, ancak bence popüler bir hipotez. Sonuçta, kaç kişi bir bilgisayarda çalışabilecek bir algoritmaya indirgenebileceklerine inanmak istiyor?
Cort Ammon

1
@CortAmmon: Ben bir bilgisayarda çalışan bir algoritmaya indirgenemez çünkü bu algoritma artık "ben"; Ben girdi ve çıktılarımdan daha fazlasıyım. Ancak, ben sadece bir algoritma olduğum varsayımından yola çıkarsak, o zaman "bilgisayarda çalışabilen" takmak aslında hiçbir şeyi değiştirmez. Re: "Hayatın kendini değiştiren bir algoritma olduğunu iddia edersem, girdilerin kendisi ve çıktılarının kendisi olurdu": Bu durumda CS'nin dışında ve tehlikeli bir şekilde crackpottery'e yaklaşacağınızı düşünüyorum.
ruakh

1
@CortAmmon Kendini girdi olarak verilen çıktıyı veren bir program sadece cat. (Kediler canlı şeyler olmasına rağmen hiçbir ceza amaçlanmamıştır)
user253751
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.