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

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

カリー/ハワード論理の6つのリーズナーの記法

リーズナー〈reasoner〉は、{定理|証明}コンビネータのこと。

  1. ; (二項)
  2. \otimes (二項)
  3. \oplus (二項)
  4. ◇ (任意項)
  5. □ (任意項)
  6. Λ (単項)

p, qが{定理|証明}で、Pが{定理|証明}のインデックス族とするときの適用結果は:

  1. p;q
  2. p\otimesq
  3. p\oplusq
  4. ◇P
  5. □P
  6. Λp

ただし、\otimesは'∧'に輪(丸囲み)、\oplusは'∨'に輪の記号がふさわしい。書けないので代用した。記号のオーバーロードを許すなら:

  • ∧, \otimes, ◇ に同じ記号∧
  • ∨, \oplus, □ に同じ記号∨

ただし、ウェッジとビッグラムダ(アッパーケース・ギリシャ文字のラージサイズ)が区別できない。手書きのときは、ビッグラムダの右脚を真っ直ぐに書く。(フォントと視認性の問題

演算子の記法の多様性を避けるために、結合的演算に関して二項中置記法とタプル・ポーランド記法〈tuppled Polish notation〉を暗黙セクション規約(混乱がないなら、セクション括弧を付けなくてもセクションとみなす)で運用する。

  1. p;q = ;(p, q)
  2. p\otimesq = \otimes(p, q)
  3. p\oplusq = \oplus(p, q)
  4. p◇q = ◇(p, q)
  5. p□q = □(p, q)
  6. Λp = Λ(p)

";(p, q)" はさすがにヤバいので (;)(p, q) か comp(p, q) か SeqComp(p, q)。

[追記]

Λ〈大きなラムダ | カリー化 | 関数抽象 | ラムダ抽象 | 含意導入 | 指数転置〉は除いて、他の5つのコンビネータをまとめる。

番号 名前 記号 二項 n項
1 直列結合 ; f;g f1;f2;...;fn
2 並列結合 \otimes f\otimesg f1\otimesf2\otimes...;\otimesfn
3 \oplus f\oplusg f1\oplusf2\oplus...\oplusfn
4 ?タプリング f◇g f1◇f2◇...◇fn
5 ?コタプリング f□g f1□f2□...□fn

定義:

  1. (f1;f2;...;fn)(x) := fn(...(f2(f1(x)))...)
  2. (f1\otimesf2\otimes...;\otimesfn)(x1, x2, ..., xn) := (f1(x1), f2(x2), ..., fn(xn))
  3. f1\oplusf2\oplus...\oplusfn := case x of x∈X1 => f1(x), x∈X2 => f2(x), ..., x∈Xn => fn(x) end
  4. (f1◇f2◇...◇fn)(x) := (f1(x), f2(x), ..., fn(x))
  5. f1□f2□...□fn := case x of x∈X1 => f1(x), x∈X2 => f2(x), ..., x∈Xn => fn(x) end

前置記法:

番号 n項 前置記法 項数
1 f1;f2;...;fn (;)(f1, f2, ..., fn) 有限項
2 f1\otimesf2\otimes...;\otimesfn (\otimes)(f1, f2, ..., fn) 有限項
3 f1\oplusf2\oplus...\oplusfn (\oplus)(f1, f2, ..., fn) 有限項
4 f1◇f2◇...◇fn (◇)(f1, f2, ..., fn) 有限項、無限項
5 f1□f2□...□fn (□)(f1, f2, ..., fn) 有限項、無限項

[/追記]