このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

Pureの機能、分からない所

次は最初から使える。

  1. typedecl 型または型構成子を導入できる。型レベルでの定数(=型名)と定関数(=型構成子)のシグネチャ宣言のようなもの。
  2. class 型クラスは使える。「class 名前だけ」というのも特別にあって、これでユニバーサルな型クラスを定義できる。ユニバーサルな型クラスは、Coqで言えばTypeに相当するもの。typeというクラス定数(ソートか?)はある。
  3. locale 型クラスがあるんだから、localeもあるだろう。
  4. default_sort 「ソート」と「クラス」の使い分けがワカランけど、ともかく型変数が特定のクラスのインスタンスでないときは、デフォルトソートだとみなすようだ。ソート≒クラス≒カインドだと思う。
  5. axiomatization/where シグネチャと公理の登録。シグネチャだけ、公理だけでもいい。セオリーの素材を登録(=生成)する基本的な道具。
  6. judgment 意味不明だったが、ポールソンの古い論文 foundation(https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-130.pdf) でだいたい分かった。ユーザー定義論理の論理式を、Pureの論理式(なぜか命題と呼ぶ)にマップする関数とその構文を定義する。Truepropという名にするのが習慣だが、isTrueとかProvableとかでもいいと思う。ポールソン論文ではjudgmentにスコットブラケットを使っている。しかし、最近はスコットブラケットがPure内部で使っているからまずいだろう。
  7. definition, abbreviation 定義・略記の展開が出来る。unfoldメソッドを使うのだろう。axiomatization、definition, abbreviationの使い分けがイマイチわからない。
  8. assumes/shows形式の定理の記述(ステートメントというのか?)が出来る。よく分かってない。
  9. THENなどのタクティカルが使える。よく分かってない。
  10. ルール=Pureの公理(ファクトか?)を使うapply以外だと、assumption, (unfold def) がapplyとして使える。
  11. OFというタクティカルもある。
  12. insertというメソッド
  13. カンマ、縦棒、プラスというタクティカル。
  14. nonterminal, syntax, translationはたぶん構文的な何かだろう。知らない。
  15. lemmaは、接続詞(and)なしで、複数慣れべてもよい。まとめて書ける。
  16. abbreviationには、where宣言部の前にシグネチャを書ける。
  17. mixfixにbinderというのがある。
  18. notationはけっこう複雑な指定が出来る。

ワケワカンナカッタのは、judgmentだが、ポールソンの言うメタ論理とオブジェクト論理の関係から分かった。メタ論理=Pureについては、Pureの証明機構がどうなっているか、まだ理解できない。Pureにおける証明状態がどう保持されていて、証明メソッドでどう遷移するか、その操作的(operational)意味論がまだ不鮮明。

ウェンツェルはIsar証明マシン(Isar/VM)を(不十分に)定義しているが、Pure証明マシンの詳細な構造と操作方法が必要だ。