依存型システムの証明のプリミティブとして再帰型が必要なのはなぜですか?


10

型理論と依存プログラミングは比較的新しいです。私は構造計算(CoC)やその他の純粋型システムについて研究してきました。特にコンパイラシステムの証明を保存する中間表現として使用することに興味があります。

(共)再帰型は、を唯一の型コンストラクタとして使用して、計算上表現できることを理解しています。しかし、それらは帰納法による証明の構築には使用できないことを許しました(許してください、今どこにあるかわかりません!)、たとえば、プレーンなCoC でであることを証明できませんでした(ただし、は)。0 ≠ 1 ナット Π (N:* )。Π (S :N → N)。Π (Z :N)。NΠ0≠1NatΠ(N:∗).Π(S:N→N).Π(Z:N).N

これが、彼らが帰納的構造(CIC)の計算を構築した理由だと思います。これは正しいです?しかし、なぜ?(共)帰納型をプリミティブとして使用しないと、そのような証明を表現できない理由を説明する資料は見つかりませんでした。これが当てはまらない場合、CICでそれらをプリミティブとして追加するのはなぜですか?

回答:


7

私は専門家ではありませんが、これまでに理解したことを例を挙げて説明します。

のは、その標準エンコーディングを使用して、CoC認証でboolean型を考えてみましょう: 我々は証明することができるように期待するかもしれない ΠのB :Bを bの= トン

B=Πτ:∗τ→τ→τtt=λτ:∗,x:τ,y:τ. xff=λτ:∗,x:τ,y:τ. y
確かに、これはすぐに我々がCICに例えばを持っている依存除去/誘導原理から、次の B I N D:Π P :B → * P (T T)→ P (F F)→ ΠのB :B P (B )
Πb:Bb=tt∨b=ff(∗)
Bind:ΠP:B→∗P(tt)→P(ff)→Πb:BP(b)

ただし、CoCのすべてのモデルで(*)が保持されることを実際に期待することはできません。直感的に、の値概ね機能のファミリーであるべきである { F τ } τ各タイプに割り当てるτの解釈の値τ → τ → τ。しかし、これは強制するものではありませんF τの値の間の一つであることがトンのトン、F 、F。たとえば、(非公式に) f N(n )(m )= n + mB{fτ}τττ→τ→τfτtt,ff

fN(n)(m)=n+m

値ことを確認するために唯一可能な値は、我々はに自分自身を制限する必要があるパラメトリックモデル。確かに(私は思う)特性(∗ )は、ポリタイプBに関連付けられた自由定理から証明できます。tt,ff(∗)B

(∗)(∗)Bind


(λ(Nat:∗).(...))(Π(N:∗).Π(S:N→N).Π(Z:N).N)SZ
— paulotorrens 2017年

NatS,Znn(T)(ST)(ZT)=ZTTT=Bn(B)(S)(Z)=S(Z)nλT:∗.if T=B then …n

ΠT:∗T→Tv(T)(x)=xTT=Nv(N)(x)=x+1
— 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.