高次プログラムのプログラム反転アルゴリズム


10

プログラム反転という用語に は複数の意味がありますが、おそらく、J。マッカーシーの1956年の著作 AIのコンテキストでチューリングマシンによって定義された関数の反転」から始まりました。これまでに、プログラムの反転と他のフィールドとの間の多くの関係が発見されました。たとえば、可逆プログラミング(物理的および論理的)、部分評価、検証、双方向プログラミング、論理プログラミング、機械学習などです。

プログラム反転とは何ですか?最初の近似では、のようなもの:プログラムを考えると型の引数を取る し、型の結果を返す、プログラム生成「何とか」の逆である。概念はさまざまな方法で明確にできるため(そして現在もそうです)、ここでは意図的にあいまいにしています。たとえば、は単射である必要がありますか?SHOULD 、すべてを返すか、単にいくつかのように?P:ABABP1PPP1(b)aP(a)=b

プログラムを逆にする一般的な方法があります。たとえば、すでにマッカーシーによって指摘されている対角化を使用したり、部分評価を使用したりしますが、効率的ではない傾向があります。また、私が精通しているプログラムの反転に関するほとんどの作業は、完全な高次のプログラミング言語(つまり -calculi)を扱っていないようです。λ

参照リクエスト。 -calculiのプログラム反転のための明示的なアルゴリズムの最先端技術とは何ですか(高次数に制限はありません)?λ

回答:


5

この分野での作業量はそれほど多くありませんが、どのような作業があるかは非常に興味深いです。

  1. Torben Mogensenはこの問題に取り組んできました。これが彼の2つの論文です。

    最初の論文は一次関数プログラムのアルゴリズムを示し、二番目の論文はそれをより高次に拡張します。このアルゴリズムが成功する時期の正確な特徴付けは、今後の作業に委ねられます。

  2. 横山哲夫、ホルガー・ボック・アクセルセン、ロバート・グリュック。

    これは、一次関数型プログラムを反転させるRFunプログラミング言語について説明しますが、後方評価が前方と同じくらい高速であることを保証する単射性と後方決定性制約を適用します。(彼らはこの主題に関して他の多くの論文を書いていますが、私はそれを理解するのに苦労しました。)

  3. ステファン・ボーネとバルタサール・トランコン・ワイドマン。

    これは本当にすてきな紙です!これは、(a)射がそれらの逆関数と対になっている関数(使用する逆行列の特定の概念について)であるカテゴリを構築できること、および(b)このカテゴリが短剣コンパクト構造であることを観察します。これは、少しファンキーな線形型の分野でプログラムを作成し、その後、セマンティクスから前方および後方の解釈を読み取ることができることを意味します。

    それらは、かなりワイルドな構文を持つ関数型言語を提供します。任意の式をパターンとして使用でき、可逆性により賢明になります。

  4. フランチェスコ・ティエツィア、吉田信子

    私はこれを読んだことはありませんが、他の論文をグーグルで調べたときに発見しただけです。著者と主題を考えると、これはまさにあなたの路地にあると思います!


ありがとう。(2、3、4)はプログラムの反転を行わず、プログラムが定義によって可逆/反転可能なプログラミング言語を設計します。これは密接に関連していますが、別の問題です。実際、これらの問題がどのように関連しているかは完全にはわかりません。私はセミインバージョンを見たことがありませんでした。おそらく、インバージョンはセミインバージョンのエッジケースのように思われるため、問題はすでに解決されていますか?ちなみに、モーゲンセンの2番目の論文は2次までです。
Martin Berger

@MartinBerger:関係は、プログラムの反転を何に使用したいかに依存すると思います!型推論(型レベルの関数がある場合は、それらの関数を逆にして数量詞のインスタンス化を理解できると便利です)で問題に興味を持ったので、言語を制限することが目的ではありませんでした私。あなたは何をしようとしているのですか?
Neel Krishnaswami 2017年

現在、私は一般的な抽象的な問題に興味があります。プログラムの逆転に対する私の興味は、プログラムの検証にあります。そして、ラムダ項(PCF sayまたはSTLCから)を取り、それを反転するだけの場所は見つかりませんでした。それは私が正しい場所を見ていないからですか?
Martin Berger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.