構造計算の観点から穴を埋める一般的なアルゴリズムはありますか?


9

Calculus of Constructionsを「穴」で拡張するとします。つまり、まだ埋めていない不完全なコード片です。これらの役割を自動的に埋めるアルゴリズムはあるのでしょうか。例(モートの構文を使用):

ケースA:

λ (pred : ?) 
-> λ (Nat : *) 
-> λ (Succ : Nat -> Nat) 
-> λ (Zero : Nat)
-> (Succ (pred Nat Succ Zero))

このような状況では、型推論アルゴリズムは、それが識別することができ?、明らかに唯一できる∀ (Nat : *) -> (Nat -> Nat) -> Nat -> Natので、pred受信Nat : *Succ : Nat -> NatZero : Nat、と返す必要がありNat、それは最初の引数であるため、Succ

ケースB:

(Id ? 4)

ここで、4はλエンコードされId、単位関数(すなわち、∀ (t:*) -> λ (x:t) -> x)です。そのような状況では、「?」は再び明確∀ (N:*) -> (N -> N) -> N -> Nになり4ます。

ケースC:

(Id (Equals Nat 7 (add 3 ?)) (Refl 7))

ここでは、EqualsReflイドリスと同様の方法で定義されています。?明らかにできるのはだけですが4、どうやってそれを理解するのですか?1つの方法は、、? : NatおよびNatが列挙方法を知っている型であることを使用することです。そのため、型Natsチェックまですべてを試すことができます。これは、列挙可能な任意の型に対して実行できます。

ケースD:

(Id (Equal Nat 10 (MulPair ?)) 10)

ここで?は、タイプのみにすることができPair Natます。それができる:けれども、それは、唯一つ以上の有効な答えを持って(Pair 10 1)(Pair 2 5)(Pair 5 2)(Pair 1 10)

ケースE:

(Id (Equal Nat 7 (Mul 2 ?)) 7)

ここで7は、の倍数ではないため、有効な答えはありません2


これらすべての例から、いくつかの既知のパターンを識別し、特定のアルゴリズム(型推論、ブルートフォースなど)を手動で選択して答えを出す一般的なアルゴリズムを作成できることに気づきました。WolframAlphaのようなものは、積分を解きます。しかし、それはエンジニアリング/ハードコーディングされたアプローチのように聞こえます。この問題を解決する原則的な方法はありますか?調査研究/分野はありますか?

回答:


9

この問題については確かに多くの研究があります!それはしばしば精巧さという名前で行きます。ご想像のとおり、これは一般に決定不可能な問題です。「穴」はしばしばメタ変数または統一変数と呼ばれます

この回答で少し説明しますが、問題は高次の統一にまで減少します。これには、何人かの人々が博士論文全体を書いています。

例で説明しているように、いくつかのケースはやや簡単で、単純なルールを適用することで解決できますが、かなり難しいように見え、「定理を証明する」ような感じがする場合もあります。

3番目の可能性のあるケースは、「タイプクラス」タイプの問題です。ここで?は、グループやフィールド構造など、ある種の構造を表します。

mul ? 2 3

mul : forall G:Group, G.carrier -> G.carrier -> G.carrierか、いくつかの変種。ここでは、Gそのようなものを見つける必要がありますG.carrier == nat

一般に、問題のタイプごとに3つの異なる「レジーム」、単純な統一、定理証明、およびタイプクラス解決の問題をそれぞれ持つ必要があります。

これについては、次の論文で少し説明します。

Dependent Type Theory、de Moura、Avigad、Kong&Rouxの詳細。

詳細については、その論文のリファレンスをご覧ください。


私はあなたが強い胃を持ってきた、ここではリーンでの精緻化のためのオープンソースです。

これは、イドリスのエラボレーターへのインターフェースを説明するWiki投稿です。


それらは私が聞きたかった言葉です!これらすべてのリンク、参照、キーワードをお寄せいただき、ありがとうございます。今日モートプログラムを完了するために使用できるツールはありますか?もちろん、必ずしもモルトではなく、モルトプログラムを抽出するのに十分近いものです。
MaiaVictor 2016

1
依存型システム(Idris、Agda、Coq、Lean)のすべての定理証明と型チェッカーには、そのようなソルバーが根性の奥深くにあります。ただし、これらは非常にプログラム固有の傾向があるため、大幅な変更を加えずに独自の目的で使用できるとは楽観的ではありません。
cody
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.