Алгоритми інверсії програм для програм вищого порядку


10

Термін "інверсія програми" має декілька відтінків значення, але, ймовірно, розпочався з роботи Дж. Маккарті 1956 р . Інверсія функцій, визначених машинами Тьюрінга в контексті ШІ. На сьогоднішній день виявлено багато зв'язків між інверсією програми та іншими сферами, наприклад, оборотне програмування (фізичне та логічне), часткове оцінювання, перевірка, двонаправлене програмування, логічне програмування та машинне навчання.

Що таке інверсія програми? У першому наближенні це що - щось на зразок цього: З огляду на програму приймають аргументи типу і повертати результати типу , виробляють програми , який «як - то» зворотний . Я навмисно маю тут розпливчастість, оскільки концепція може бути (і є) роз'яснена різними способами: наприклад, чи потрібно бути ін'єкційним? Повинен повернути все або тільки деякі такі , що ?P:ABABP1PPP1(b)aP(a)=b

Існують загальні способи інвертування програми, наприклад, за допомогою діагоналізації, як уже вказував Маккарті, або з використанням часткової оцінки, але вони, як правило, не є ефективними. Крім того, більшість робіт з інверсії програм, з якими я знайомий, не здається мати справу з повною мовою програмування вищого порядку (тобто -calculi).λ

Довідковий запит. Який найсучасніший у явних алгоритмах програмної інверсії -calculi (без обмеження для вищого порядку)?λ

Відповіді:


5

Не було великої кількості роботи в цьому просторі, але яка там робота, досить цікава.

  1. Торбен Могенсен працював над цією проблемою. Ось дві його статті.

    Перший документ дає алгоритм для функціональних програм першого порядку, а другий розширює його до вищого порядку. Точна характеристика, коли цей алгоритм матиме успіх, залишається для подальшої роботи.

  2. Тецуо Йокояма, Холгер Бок Аксельсен і Роберт Глюк.

    Це описує мову програмування RFun, яка інвертує функціональні програми першого порядку, але примушує обмеження інжективності та детермінізму назад, які забезпечують те, що оцінка зворотнього руху є такою ж швидкою, як і вперед. (Вони написали ряд інших робіт на цю тему, до яких у мене виникли проблеми.)

  3. Штефан Боне та Балтасар Транкон Відеман.

    Це дійсно акуратний папір! Він зауважує, що (а) ви можете побудувати категорію, де морфізми є функціями, сполученими зі своєю зворотною (для будь-якого конкретного поняття зворотного ви використовуєте), і (б) ця категорія має компактну структуру кинджала. Це означає, що ви можете написати програму з делікатною дисципліною лінійного типу, а потім прочитати інтерпретації вперед і назад із семантики.

    Вони надають функціональну мову з досить диким синтаксисом: майже довільні вирази можна використовувати як візерунки, а оборотність робить це чутливим.

  4. Франческо Теззіа, Нобуко Йосіда

    Я цього не читав, а лише виявив, коли Гуглінг для інших паперів. Враховуючи авторів та тематику, я підозрюю, що це правильно у вас на алеї!


Дякую. (2, 3, 4) не проводять інверсію програм, але розробляють мови програмування, де програми є оборотними / непереверненими за визначенням. Це тісно пов’язана, але інша проблема. Насправді мені не зовсім зрозуміло, як стосуються ці проблеми. Я раніше не бачив напівінверсії, можливо, вона вже вирішує проблему, оскільки, здається, інверсія є крайнім випадком напівінверсії? Другий документ BTW Могенсена виходить лише до другого порядку.
Мартін Бергер

@MartinBerger: Я думаю, що взаємозв'язок залежить від того, для чого ви хочете використовувати інверсію програми! Мене зацікавила проблема, тому що я дивився на висновок типу (якщо у вас є функції рівня типу, корисно мати можливість інвертувати ці функції для з'ясування екземплярів кількісних показників), і тому обмеження мови не було покажчиком для я. Що ти намагаєшся зробити?
Ніл Кришнасвамі

Зараз мене цікавить загальна, абстрактна проблема. Мій інтерес до інверсії програми походить від перевірки програми. І я не міг ніде знайти, що просто займає лямбда-термін (від PCF сказати або STLC) і перетворює його. Це тому, що я не шукаю в потрібному місці?
Мартін Бергер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.