カーネルがLCF定理証明書でどのように機能するか
-
29-09-2020 - |
質問
LCFベースのTHEREM PRVERSERSには、TypeRem Type TypeRemの値を作成できるようにするためのいくつかのメカニズムがあると聞いた。これらは抽象データ型に基づいていると思います。
誰かが疑似コードでスケッチすることができますかこれはどのように機能しますか?(上記の場合は正しい場合)
解決
ここには、isabelleからのカーネル(ISABELLE / PUREのファイルthm.ml)からのいくつかの考えやコードがあります:
abstype thm = Thm of
deriv * (*derivation*)
{cert: Context.certificate, (*background theory certificate*)
tags: Properties.T, (*additional annotations/comments*)
maxidx: int, (*maximum index of any Var or TVar*)
shyps: sort Ord_List.T, (*sort hypotheses*)
hyps: term Ord_List.T, (*hypotheses*)
tpairs: (term * term) list, (*flex-flex pairs*)
prop: term} (*conclusion*)
and deriv = Deriv of
{promises: (serial * thm future) Ord_List.T,
body: Proofterm.proof_body}
with
.
ここでもPaulson BookのMLの引用符です。抽象的なデータ型について彼は言う:
モジュラー構造はプログラムを理解しやすくします。それでもよく、 モジュールは交換可能な部品として機能する必要があります.1つのモジュールを交換する 改善されたバージョンの残りの部分を変更する必要はありません。プログラム。標準 MLの抽象的なタイプと身体障害者もこの目的を達成するのに役立ちます。 モジュールはその内部の詳細を明らかにするかもしれません。モジュールが交換されると、その他 そのような詳細に依存するプログラムの一部は失敗します。 mlはいくつかを提供します タイプの隠蔽中の抽象的なタイプと関連操作を宣言する方法 表現。
だから抽象データ型をインスタンス化することはできません(フィールド+関数)。この機能をどのように実装するかについての問題は、言語に依存しています。あなたがLambda-calculusでそれをしたいのなら、後の章のBenjamin PierceのTAPL本のようなものがあるはずです。
他のヒント
私が正しく思い出すならば、これはJohn Harrisonのハンドブックの第5章または6の実用論理と自動推論。
Jon Sterlingはいくつかの注意事項朗読のために、具体的には、特にSequentCalulusを使用したLCF Proverのための概要。