Üst düzey programlar için program tersine çevirme algoritmaları


10

Programın tersine çevrilmesi terimi , birçok anlam gölgesine sahiptir, ancak muhtemelen J. McCarthy'nin AI bağlamında Turing Makineleri tarafından tanımlanan işlevlerin tersine çevrilmesi çalışmasıyla başlamıştır . Şimdiye kadar, program ters çevirme ve diğer alanlar arasında birçok bağlantı keşfedilmiştir, örneğin, tersinir programlama (fiziksel ve mantıksal), kısmi değerlendirme, doğrulama, çift yönlü programlama, mantık programlama ve makine öğrenimi.

Programın ters çevrilmesi nedir? İlk yaklaşımda bu gibi o şey: Bir program Verilen tipi argümanlarını dinleyerek ve tip sonuçlarını dönen , bir program üretmek "bir şekilde" tersidir . Burada kasıtlı olarak belirsiz oluyorum, çünkü kavram çeşitli şekillerde netleştirilebilir (ve açıklanabilir): örneğin nesnel olmaması gerekir mi? Meli tüm iade veya sadece bazı bir şekilde P ( a ) = b ?P:birBbirBP-1PPP-1(b)birP(bir)=b

Bir programı tersine çevirmenin genel yolları vardır, örneğin McCarthy tarafından daha önce belirtildiği gibi köşegenleştirme veya kısmi değerlendirme kullanma, ancak bunlar etkili olma eğilimindedir. Ayrıca aşina olduğum program ters çevirme ile ilgili çoğu çalışma, tam üst düzey programlama dilleriyle (yani -calculi) ilgilenmiyor gibi görünüyor .λ

Referans talebi. -calculi'nin program tersine çevrilmesi için açık algoritmalarda en son teknoloji nedir (daha yüksek zorluk derecesi kısıtlaması olmadan)?λ

Yanıtlar:


5

Bu alanda çok fazla iş yapılmadı, ancak orada iş oldukça ilginç.

  1. Torben Mogensen bu sorun üzerinde çalıştı. İşte onun iki makalesi.

    İlk makale birinci dereceden fonksiyonel programlar için bir algoritma verir ve ikincisi onu daha yüksek dereceye genişletir. Bu algoritmanın ne zaman başarılı olacağının kesin karakterizasyonu gelecekteki işlere bırakılmıştır.

  2. Tetsuo Yokoyama, Holger Bock Axelsen ve Robert Glück.

    Bu, birinci dereceden işlevsel programları tersine çeviren ancak geriye dönük değerlendirmenin ileriye doğru hızlı olmasını sağlayan enjektivite ve geriye doğru determinizm kısıtlamalarını uygulayan RFun programlama dilini açıklar. (Bu konuda ele almakta zorlandığım başka makaleler de yazdılar.)

  3. Bohne ve Baltasar Trancón Widemann Karşılaştırması.

    Bu gerçekten düzenli bir kağıt! (A) Morfizmlerin tersleri ile eşleştirilen işlevlerin olduğu bir kategori oluşturabileceğinizi gözlemler ( kullandığınız tersi ne olursa olsun) ve (b) bu ​​kategorinin hançer kompakt yapısı vardır. Bu, biraz funky lineer tip disipline sahip bir program yazabileceğiniz ve daha sonra anlambilimden ileri ve geri yorumları okuyabileceğiniz anlamına gelir.

    Oldukça vahşi bir sözdizimi ile fonksiyonel bir dil verirler: neredeyse rasgele ifadeler desen olarak kullanılabilir ve geri döndürülebilirlik bunu mantıklı kılar.

  4. Francesco Tiezzia, Nobuko Yoshida

    Bunu okumadım, ama sadece diğer belgeler için Googling yaparken keşfettim. Yazarlar ve konu göz önüne alındığında, bunun sokaktan yukarı doğru olduğundan şüpheleniyorum!


Teşekkürler. (2, 3, 4) program tersini değil, programların tanım gereği tersine çevrilebilir / tersine çevrilebilir olduğu programlama dillerini tasarlar. Bu yakından ilişkili, ancak farklı bir sorundur. Aslında bu sorunların nasıl bir ilişki olduğu konusunda net değilim. Daha önce yarı inversiyon görmemiştim belki de zaten problemi çözer çünkü inversiyon yarı inversiyonun bir örneği gibi görünüyor? BTW Mogensen'in ikinci makalesi yalnızca 2. sıraya kadar çıkıyor.
Martin Berger

@MartinBerger: İlişki program tersini ne kullanmak istediğinize bağlı sanırım! Sorunla ilgilenmeye başladım çünkü tip çıkarımına bakıyordum (eğer tip seviyesi fonksiyonlarınız varsa, niceliksel örneklemeleri anlamak için bu fonksiyonları tersine çevirmek yararlıdır) ve bu yüzden dilin kısıtlanması bir şovmen değildi ben mi. Ne yapmaya çalışıyorsun?
Neel Krishnaswami

Şu anda genel, soyut problemle ilgileniyorum. Programın tersine çevrilmeye ilgim program doğrulamasından kaynaklanıyor. Ve sadece bir lambda terimi (PCF demek veya STLC'den) alan ve tersine çeviren bir yer bulamadım. Doğru yere bakmadığım için mi?
Martin Berger
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.