依存型チェックが決定可能であることを示すための証明手法


10

私が取り組んでいる依存的に型付けされた計算の型検査が決定可能であることを示す必要がある状況にいます。これまでのところ、私はシステムが強く正規化していることを証明できたので、その定義上の同等性は決定可能です。

私が読んだ多くの参考文献では、タイプチェックの決定可能性は強力な正規化の結果としてリストされており、それらの場合にはそれを信じていますが、実際にこれをどのように表示するのかと思います。

特に、私は次のことに行き詰まっています。

  • 適切に型付けされた項が強く正規化されているからといって、適切に型付けされていない入力でアルゴリズムが永久にループしないわけではありません
  • 論理関係は通常、強力な正規化を示すために使用されるので、型チェックの用語を進めるにつれ、測定値を減少させる便利な方法はありません。したがって、私のタイプルールが構文指向である場合でも、ルールの適用が最終的に終了する保証はありません。

私は疑問に思っています、依存型付けされた言語のタイプチェックの決定可能性の証明への良い参照は誰にもありますか?小さなコアの計算であれば、それで十分です。決定可能性を示すための証明技法について説明するものはすべてすばらしいでしょう。


7
通常の双方向型チェックアルゴリズムでは、最初に適切な型指定(または整形式)をチェックしない限り、用語(または型)の正規化を試みません。型なし用語の正規化について心配する必要はありません。
Andrej Bauer

7
ルールの適用に関して:タイプ変換を除いて、すべての用語とタイプのルールは目標を減らします。したがって、双方向変換を使用して行う型変換を制御する必要があります。
Andrej Bauer

回答:


9

ここには確かに微妙な点がありますが、型チェックの場合にはうまくいきます。多くの関連するスレッドで発生するように見えるので、ここで問題を書き留め、「標準の」依存型理論で型チェックするときに問題がうまくいかない理由を説明しようとします(私は意図的にあいまいにします)これらの問題は関係なく発生する傾向があるため):

事実1:もしD導出されΓt、次に、派生あるDΓsいくつかの種類のためs、及びすべての部分項ためあなたt、いくつかのタイプが存在するB、コンテキストはΔそして、派生Dの。ΔあなたB

この素晴らしい事実は証明するのがやや難しく、かなり厄介な反面で相殺されます。

事実2:一般的には、DおよびD ありませんのサブ派生D

これは型システムの正確な定式化に多少依存しますが、実際に実装されているほとんどの「運用」システムは事実2を満たしています。

これは、派生に関する帰納法で推論する場合、「サブタームに渡す」ことはできません。

この事実は、一見無害に見えるステートメントを証明しようとするときに、非常に厳しくあなたに噛み付きます。

ただし、型推論の場合は、Andrejが示唆するように、型指向アルゴリズムを伴う可能性のある、用語の構造に関する帰納法によって、型とソート(型の型)の推論アルゴリズムを同時に与えることができます。与えられた期間についてt(およびコンテキストΓ、あなたはどちらか失敗するかを見つけるsようにΓtΓs。あなたは後者の導出を見つけるために、誘導性の仮説を使用する必要があり、そうではありません特に、上記で説明した問題を回避します。

決定的なケース(そして本当に変換が必要な唯一のケース)はアプリケーションです:

infer(t u):
   type_t, sort_t <- infer(t)
   type_t' <- normalize(type_t)
   type_u, sort_u <- infer(u)
   type_u' <- normalize(type_u)
   if (type_t' = Pi(A, B) and type_u' = A' and alpha_equal(A, A') then
      return B, sort_t (or the appropriate sort)
   else fail

正規化の呼び出しはすべて、適切に型指定された条件で行われinferました。これは、が成功するための不変条件であるためです。


ちなみに、Coqは実装されているため、fixステートメントの本体を正規化して型チェックを試みる前に、決定可能な型チェックを備えていません。

とにかく、よく型付けされた用語の通常の形式の境界は非常に天文学的であり、決定可能性定理はこの時点ではほとんどが学術的である。実際には、忍耐力がある限り型チェックアルゴリズムを実行し、それまでに完了していない場合は別のルートを試します。


あなたの答えはとても役に立ちました、ありがとう。2つの質問があります。1.「運用システム」とはどういう意味ですか?代替は何ですか?2.例でより明確にできますか?それが何を意味するか(どのような事実を証明しようとしているのですか?)「型付き変換を持つシステムは、型なし変換を持つシステムと同等です。」?ありがとう!
ルカシュルー

1
@ŁukaszLew運用システム(CoqやAgdaソフトウェアなどで実際に実装されているもの)に代わるものは、理論システムであり、メタ理論的な特性を証明するのに役立ちますが、実際に使用するには非効率的または不便です。運用システムと理論システムの同等性を証明することは、多くの場合、システム設計の重要な部分です。これについては、ここで詳しく説明し
cody

Lennart AugustssonのSimpler 、Easierについて言及する価値があると思います。これは、型チェックの最小限のHaskell実装であり、依存して型指定されたラムダ計算のいくつかの推論です。codyに密接に対応するコードがありinfer(t u):ます。それを見つけるには、「tCheck r (App f a) =」を検索します。より完全でありながら単純な実装については、MortetypeWithをチェックできます。
ルカシュルー

1
@ŁukaszLewザ・は型なし変換の問題対型付けは型理論の2つの製剤に関するよく知られた未解決の問題であり、むしろ最近は解決されました:pauillac.inria.fr/~herbelin/articles/...
コーディ

あなたt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.