Algoritma inversi program untuk program tingkat tinggi


10

Istilah inversi program memiliki banyak corak makna, tetapi mungkin dimulai dengan karya J. McCarthy tahun 1956, The Inversion of Functions Defined oleh Turing Machines dalam konteks AI. Saat ini banyak koneksi antara inversi program dan bidang lain telah ditemukan, misalnya pemrograman reversibel (fisik dan logis), evaluasi parsial, verifikasi, pemrograman dua arah, pemrograman logika, dan pembelajaran mesin.

Apa itu inversi program? Dalam pendekatan pertama sesuatu itu seperti ini: Mengingat program mengambil argumen tipe A dan mengembalikan hasil tipe B , menghasilkan program P - 1 yang "entah bagaimana" kebalikan dari P . Saya sengaja tidak jelas di sini, karena konsepnya dapat (dan) diklarifikasi dengan berbagai cara: misalnya apakah P harus disuntik? Haruskah P - 1 ( b ) mengembalikan semua atau hanya beberapa yang seperti yang P ( a ) = bP:ABABP1PPP1(b)aP(a)=b?

Ada cara-cara umum untuk membalik suatu program, misalnya menggunakan diagonisasi seperti yang telah ditunjukkan oleh McCarthy, atau menggunakan evaluasi parsial, tetapi mereka cenderung tidak efisien. Juga sebagian besar bekerja pada inversi program yang saya kenal sepertinya tidak berurusan dengan bahasa pemrograman tingkat tinggi penuh (yaitu -calculi).λ

Permintaan referensi. Apa yang dimaksud dengan algoritma eksplisit dalam inversi program -calculi (tanpa batasan pada tingkat yang lebih tinggi)?λ

Jawaban:


5

Belum ada banyak pekerjaan di ruang ini, tapi pekerjaan apa yang ada, cukup menarik.

  1. Torben Mogensen telah mengatasi masalah ini. Ini dua makalahnya.

    Makalah pertama memberikan algoritma untuk program fungsional tingkat pertama, dan yang kedua meluas ke tingkat yang lebih tinggi. Karakterisasi yang tepat kapan algoritma ini akan berhasil diserahkan kepada pekerjaan di masa depan.

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

    Ini menjelaskan bahasa pemrograman RFun, yang membalikkan program fungsional orde pertama, tetapi menegakkan hambatan injektivitas dan determinisme mundur yang memastikan bahwa evaluasi mundur secepat ke depan. (Mereka telah menulis sejumlah makalah lain tentang hal ini, yang sulit saya dapatkan.)

  3. Stefan Bohne dan Baltasar Trancón Widemann.

    Ini kertas yang sangat rapi! Ia mengamati bahwa (a) Anda dapat membangun kategori di mana morfisme adalah fungsi yang dipasangkan dengan kebalikannya (untuk apa pun gagasan terbalik yang Anda gunakan), dan (b) kategori ini memiliki struktur kompak belati. Ini berarti Anda dapat menulis sebuah program dengan disiplin tipe linear yang sedikit funky, dan kemudian membacakan interpretasi maju dan mundur dari semantik.

    Mereka memberikan bahasa fungsional dengan sintaksis yang cukup liar: ekspresi hampir arbitrer dapat digunakan sebagai pola, dan reversibilitas membuatnya masuk akal.

  4. Francesco Tiezzia, Nobuko Yoshida

    Saya belum membaca yang ini, tetapi baru menemukannya ketika mencari di Google untuk makalah lain. Mengingat penulis dan subjeknya, saya curiga ini ada di depan Anda!


Terima kasih. (2, 3, 4) tidak melakukan inversi program, tetapi merancang bahasa pemrograman di mana program dapat dibalik / dibalikkan menurut definisi. Ini adalah masalah yang berkaitan erat, tetapi berbeda. Sebenarnya saya tidak sepenuhnya jelas tentang bagaimana masalah ini berhubungan. Saya belum pernah melihat semi-inversi sebelum mungkin sudah menyelesaikan masalah karena inversi tampaknya menjadi kasus tepi semi-inversi? Makalah kedua BTW Mogensen hanya naik ke urutan ke-2.
Martin Berger

@ MartinBerger: Saya kira hubungannya tergantung pada apa yang Anda ingin gunakan untuk inversi program! Saya tertarik pada masalah karena saya melihat inferensi tipe (jika Anda memiliki fungsi tipe-level, akan berguna untuk dapat membalikkan fungsi-fungsi tersebut untuk mencari tahu penghitungan kuantitatif), dan membatasi bahasa bukanlah penghenti untuk saya. Apa yang sedang Anda coba lakukan?
Neel Krishnaswami

Saat ini saya tertarik pada masalah umum dan abstrak. Ketertarikan saya pada inversi program berasal dari verifikasi program. Dan saya tidak dapat menemukan tempat yang hanya membutuhkan istilah lambda (dari PCF katakan atau STLC) dan membalikkannya. Apakah karena saya tidak melihat di tempat yang tepat?
Martin Berger
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.