Bu sorunun ilham kaynağı şu (belirsiz) sorudur: AI'nın kendi kaynak kodu hakkında akıl yürütüp onu değiştirebilecek programlama dili / mantıksal temelleri nelerdir?
Bu çok titiz değil, işte burada somut bir soru çıkarmaya çalışıyorum. İlgilendiğim iki şey var:
(A) Kendi programlarını bir veri tipi Programı (örn., AST olarak) olarak temsil edebilen ve değiştirebilen bir programlama dili P. (İstenirse, Program türündeki bir nesne, o dilde geçerli bir programın metni olan bir Dize'ye dönüştürülebilir. Bu, bir derleyicinin yaptıklarının tersidir.)
(B) P dilinde bir programın ne yaptığını anlamaya yönelik bir yöntem. İşte düşündüğüm iki seviye:
- Bir P-programının ne yaptığını modelleyen bir başka dil Q (teorem kanıtlama yetenekleri ile). "Program p'nin çalıştırılmasının sonucu foo" gibi ifadeleri ifade edebilmeli ve kanıtlayabilmelidir.
- Bir programın p: Programın P dilinde ne yaptığını anlamanın bir yolu . (Yani yukarıda P = Q alıyoruz.)
Böyle bir şey ne dereceye kadar uygulandı veya bu yönde ilerleme nedir? Pratik engeller nelerdir? Sorunun asıl amacı ışığında, sorunu resmileştirmenin en iyi yolu nedir?
*
Cevapların gösterdiği gibi (teşekkürler!), Hem (A) hem de (B1) ayrı ayrı yapılabilir, ancak bunları birlikte yapmak daha çok bir araştırma sorusudur.
İşte soru hakkındaki ilk düşüncelerimden bazıları (uyarı: oldukça belirsiz). Martin Berger'in cevabı hakkındaki yorumlarıma da bakınız.
Ben daha basit bir dil yerine , aynı programlama dili modelleme programlama dili ile ilgileniyorum (yani P = Q yukarıda). Bu, bir programın "kendi kaynak kodu hakkında akıl yürütme" yeteneğinin "kavram kanıtı" olacaktır. Bağımlı olarak yazılan programlama dilleri, işlevlerinin çıktıları hakkında garanti verebilir, ancak bu, "kendi kaynak kodu hakkında akıl yürütme" olarak "Merhaba dünya!" otomatik olarak çıplak bir dize basacak bir dilde bir quine olarak sayılır --- bir tür alıntı / öz referans olması gerekir. Buradaki analog, Programı temsil eden bir veri tipine sahip.
Oldukça büyük bir proje gibi görünüyor - dil ne kadar basitse, içindeki her şeyi ifade etmek o kadar zor; dil ne kadar karmaşıksa, dili modellemek için o kadar fazla çalışma yapılması gerekir.
Özyineleme Teoreminin ruhuna göre, bir program daha sonra kendi kaynak kodunu "alabilir" ve değiştirebilir (yani, kendisinin değiştirilmiş bir versiyonunu çıkarabilir). (B2) daha sonra, programın değiştirilmiş program hakkında bir garanti ifade edebilmesi gerektiğini söyler (bu, tekrar okuyabilmelidir, yani gelecekteki tüm değişiklikler hakkında bir şeyler ifade edebilmelidir-?).