言語(とその型システム)は、それ自体の用語についての定理を証明することができるのは何ですか?

私は最近、Aaronの Cedille-Core
を実装しようとしました。これは数学的定理を証明できる最小限のプログラミング言語ですそれ自身の言葉について。私はλエンコードされたデータ型の誘導も実証されています。これにより、拡張が必要な​​理由が明確になりました。

ネーザーは少ないですが、私はまだそれらの拡張がどこから来たのか不思議に思っています。彼らはなぜ彼らであるのですか?何が彼らを正当化する?私は、例えば、再帰のようないくつかの拡張が、証明のためのシステムとして言語を台無しにすることを知っています。他のプリミティブでもCoCを拡張することに決めたら、どうすれば正当化できますか?私は正規化の証明が必要であると理解していますが、それはそれらのプリミティブが「意味をなさない」ことを証明するものではありません。

要するに、具体的に言えば、言語(とそのタイプシステム)を、それ自身の用語に関する定理を証明できるシステムとして認定するものは何か?

ベストアンサー

[自己広告は続きますが、これは関連性があると思います。]

この質問にはいくつかの考えられる方法があります。
MLのような言語の文脈で私のPhD論文の中で探求した方法の1つは、言語の用語を基になる論理のオブジェクトとして操作できるように、型システムを一次層で拡張することです。もちろん、いくつかの述部を含める必要がありますので、観察する必要があります。私のシステムの場合、これらの述語は同等の用語です。特に、$
t $と$ u $が言語の条件であれば、$ t $と$ u $が実際に(観測上)同等であれば、$ t equiv u
$型のみが存在する。 $ forall v、( lambda x.x); v equiv v
$などの型をエンコードするために一次数量子を使うことができ、それらは生きているプログラムを構築することによって証明されます。

もちろん、同値を仮定することもできます。また、いくつかの異なる形式の量指定子(型指定/型指定なし、汎用/実在型)があります。このメカニズムは、どのプログラムについても理由を付けるために使用することができます(ターミネーションや型付きを証明する必要はありません)。唯一の制約は、プルーフとして使用されるプログラムがシステムによって終了することが証明されなければならないことです(任意の一般的な再帰が不一致につながります)。

これをチェックしたい場合は、ここに参考文献が2つあります:

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です