我々は、様々なレベルのコンテキスト(ライブラリ、モジュール/セクション)を行為〈activity〉により拡張していくのだが、拡張のための行為は二種類しかない。
- 関数定義 (λΠ計算ベース)
- 帰納的型定義 (CICベース)
関数定義は def で、帰納的型定義は inductive 、これだけ。他のキーワード(例: theorem, structure)はシンタックスシュガー。
関数定義〈定理記述〉は、宇宙単相と宇宙多相がある。宇宙とカリー/ハワード対応は意識する。混合コンテキストには次が入る。
- 関数定義
- 計算項の型判断
- 関数名への計算項割り当て
- 定義的等式〈definitional equality〉
- 定義展開〈unfold〉書き換え規則
- 帰納的型定義
- 型名
- 型名名前空間
- コンストラクタ疑似関数(1つ以上、複数可能、0個なら空型)
- リカーサー
定理は証明ボディに名前を付けたもの。推論規則は定理なので、引数型=前提命題と戻り型=結論命題を持つ。推論規則の引数は、多くの場合命題ではなくて、証明/証拠である。証明項/証拠ラベル/定理名〈計算項/要素ラベル/関数名〉は交換可能である。
命題コネクティブ〈型演算子〉と証明コンビネータ〈計算コンビネータ〉は区别すべし。だが、命題型宇宙だと、Trueからの命題への証明が証明無関係〈proof irrelevance〉原理により本質的に1つしかないので、証明と命題の区别は困難である。