名前でだまされない その3

混合コンテキストは、次を混ぜたもの。

  1. 型宣言文
  2. 値割り当て文

型宣言文だけのコンテキスト(実体は依存レコード=テレスコープ)は指標〈signature〉。型宣言されたすべての名前に値割り当てしたコンテキストは環境〈environment〉と呼ぶ。

混合コンテキストは、指標と環境が混じったもの。混合コンテキストが非接地だとは、未宣言の名前がパターン変数として含まれるもの。しかし、混合コンテキストを環境と呼ぶこともある。

計算項の型チェック整合性〈consistency〉と、証明項の正当性〈correctness〉は同じ概念である。以下「≡」は定義等値〈definitionary equal〉。

  • 整合性: inferType(Γ, aTerm) ≡ aType
  • 正当性: inferType(Γ, aProof) ≡ aStatenamet

以上は、証明の検証系〈verifier〉の動作。Leanカーネルは検証系=証明チェッカー=型チェッカーになっている。項の型宣言(型と計算項)と定理(ステートメント命題と証明項)のチェッカーがカーネル機能=チェッカー機能。

カーネル=チェッカーへの入力構文をコア構文=カーネル構文と呼ぶ。表層構文からコア構文への変換はエラボレーターが行う。

実際の実装がどうであれ、次のような略記と考えるとよい。

  • theorem = @[theorem] def 関数
  • class = @[class] structure 機能型
  • instance = @[instance] def 関数
  • axiom = @[axiom] decl 型宣言
  • constant = @[constant] decl 型宣言

宣言文には整合性の概念はない。ただし、整形式性〈well-defined-ness〉はある。割り当て文には整合性の概念があり、チェッカー=検証系でチェックされる。

「関数」という概念と、関数定義文(名前に計算項の割り当て文)があるのと同様に、「定理=ルール」という概念があり、定理定義文(名前に証明項の割り当て文)がある。関数定義のボディが計算項〈計算の記述構文〉、定理定義のボディが証明項〈証明の記述構文〉。

  • 関数 = 定理
  • 計算 = 証明
  • 関数記述〈関数定義〉 = 定理記述
  • 関数名 = 定理名
  • 引数型 = 前提命題
  • 引数変数名 = 前提命題ラベル
  • 戻り値型 = ターゲット命題
  • 戻り値変数名 = ターゲット命題ラベル
  • 関数ボディの計算項〈computation term〉 = 定理ボディの証明項〈proof term〉
  • オラクル関数〈非計算的〉 = オラクル定理〈非証明的〉
  • 計算コンビネータ = 証明コンビネータ〈リーズニング〉
  • 基本関数 = 推論規則〈証明規則〉
  • 組み込み関数 = 公理規則 = 組み込み証明
  • 関数の適用 = 定理〈ルール〉の適用
  • 関数の結合 = 定理〈ルール〉の結合
  • 型の要素〈無引数関数〉 = 命題の保証〈無前提証明〉
  • 関数要素 = 含意命題の保証
  • カリー同型 = 演繹定理
  • カリー変形 = ゲンツェン変形
  • 計算の環境 = 証明の環境〈コンテキスト〉
  • call 関数呼び出し = use 定理呼び出し
  • let x:X := this = have p: A from this