ここには確かに微妙な点がありますが、型チェックの場合にはうまくいきます。多くの関連するスレッドで発生するように見えるので、ここで問題を書き留め、「標準の」依存型理論で型チェックするときに問題がうまくいかない理由を説明しようとします(私は意図的にあいまいにします)これらの問題は関係なく発生する傾向があるため):
事実1:もしD導出されΓ ⊢ T :A、次に、派生あるD』のΓ ⊢ A :Sいくつかの種類のためs、及びすべての部分項ためU ≤ トン、いくつかのタイプが存在するB、コンテキストはΔそして、派生D」の。Δ ⊢ U :B
この素晴らしい事実は証明するのがやや難しく、かなり厄介な反面で相殺されます。
事実2:一般的には、D』およびD」 ありませんのサブ派生D!
これは型システムの正確な定式化に多少依存しますが、実際に実装されているほとんどの「運用」システムは事実2を満たしています。
これは、派生に関する帰納法で推論する場合、「サブタームに渡す」ことはできません。
この事実は、一見無害に見えるステートメントを証明しようとするときに、非常に厳しくあなたに噛み付きます。
ただし、型推論の場合は、Andrejが示唆するように、型指向アルゴリズムを伴う可能性のある、用語の構造に関する帰納法によって、型とソート(型の型)の推論アルゴリズムを同時に与えることができます。与えられた期間についてt(およびコンテキストΓ、あなたはどちらか失敗するかを見つけるA 、sようにΓ ⊢ T :AとΓ ⊢ A :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
ステートメントの本体を正規化して型チェックを試みる前に、決定可能な型チェックを備えていません。
とにかく、よく型付けされた用語の通常の形式の境界は非常に天文学的であり、決定可能性定理はこの時点ではほとんどが学術的である。実際には、忍耐力がある限り型チェックアルゴリズムを実行し、それまでに完了していない場合は別のルートを試します。