(n +1)度目:カリー/ハワード対応

  • 型と値は区別する必要がある。
  • 計算と演算を区別するのは難しい。曖昧に区別されていることもあるが、混同して使っても差し支えない。
  • 関数と計算は一応区別するが、ヘッド部(後述)の有る無しの違いしかないので、混同して使っても差し支えない。
  • 型と型の非空性宣言(後述)は区別する必要がある。
  • 関数の存在宣言(後述)と関数の実装要求(後述)は区別する必要がある。
  • プログラミングとメタプログラミング(プログラムをデータとみなして操作するプログラミング)は区別する必要がある。
|- null
string, number |- boolean
string, number |-? boolean
命題
型の値 命題の証拠
計算 証明
関数 定理
演算 推論
存在宣言 証明可能性判断
非空宣言 命題の証明可能性判断
プログラミング 証明作業
メタプログラミング リーズニング作業
関数定義のヘッド部 定理記述のヘッド部
  • 証明作業とリーズニング作業は区別する必要がある。
  • 証明と推論を区別するのは難しい。曖昧に区別されていることもあるが、混同して使っても差し支えない。
  • 定理と証明は一応区別するが、ヘッド部(後述)の有る無しの違いしかないので、混同して使っても差し支えない。
  • 命題と証拠は区別する必要がある。
  • 命題と命題の証明可能性判断は区別する必要がある。
  • 定理の証明可能性判断と定理の証明要求は区別する必要がある。

現状:

  • 証明作業とリーズニング作業を区別してない、またはゴッチャにしている場合が多い。
  • 証明と推論を区別していて、その区別を絶対視している場合がある。
  • 定理と証明を区別していて、まったく違うものとして扱っていることがある。
  • 命題と証拠を区別してない、またはゴッチャにしている場合が多い。
  • 命題と命題の証明可能性判断を区別してない、またはゴッチャにしている場合が多い。
  • 定理の証明可能性判断と定理の証明要求を区別してない、またはゴッチャにしている場合が多い。
関数定義 定理記述
関数定義のヘッド部 定理記述のヘッド部
関数定義のボディ部 定理記述の証明部
関数定義のプロファイル部 定理記述のステートメント部
プロファイルの引数の型 ステートメントの前提の命題
プロファイルの戻り型 ステートメントの結論の命題