カリー/ハワード論理の6つのリーズナーの記法
リーズナー〈reasoner〉は、{定理|証明}コンビネータのこと。
- ; (二項)
(二項)
(二項)
- ◇ (任意項)
- □ (任意項)
- Λ (単項)
p, qが{定理|証明}で、Pが{定理|証明}のインデックス族とするときの適用結果は:
- p;q
- p
q
- p
q
- ◇P
- □P
- Λp
ただし、は'∧'に輪(丸囲み)、
は'∨'に輪の記号がふさわしい。書けないので代用した。記号のオーバーロードを許すなら:
- ∧,
, ◇ に同じ記号∧
- ∨,
, □ に同じ記号∨
ただし、ウェッジとビッグラムダ(アッパーケース・ギリシャ文字のラージサイズ)が区別できない。手書きのときは、ビッグラムダの右脚を真っ直ぐに書く。(フォントと視認性の問題)
演算子の記法の多様性を避けるために、結合的演算に関して二項中置記法とタプル・ポーランド記法〈tuppled Polish notation〉を暗黙セクション規約(混乱がないなら、セクション括弧を付けなくてもセクションとみなす)で運用する。
- p;q = ;(p, q)
- p
q =
(p, q)
- p
q =
(p, q)
- p◇q = ◇(p, q)
- p□q = □(p, q)
- Λp = Λ(p)
";(p, q)" はさすがにヤバいので (;)(p, q) か comp(p, q) か SeqComp(p, q)。
[追記]
Λ〈大きなラムダ | カリー化 | 関数抽象 | ラムダ抽象 | 含意導入 | 指数転置〉は除いて、他の5つのコンビネータをまとめる。
| 番号 | 名前 | 記号 | 二項 | n項 | |
|---|---|---|---|---|---|
| 1 | 直列結合 | ; | f;g | f1;f2;...;fn | |
| 2 | 並列結合 | |
f |
f1 |
|
| 3 | ? | |
f |
f1 |
|
| 4 | ?タプリング | ◇ | f◇g | f1◇f2◇...◇fn | |
| 5 | ?コタプリング | □ | f□g | f1□f2□...□fn |
定義:
- (f1;f2;...;fn)(x) := fn(...(f2(f1(x)))...)
- (f1
f2
...;
fn)(x1, x2, ..., xn) := (f1(x1), f2(x2), ..., fn(xn))
- f1
f2
...
fn := case x of x∈X1 => f1(x), x∈X2 => f2(x), ..., x∈Xn => fn(x) end
- (f1◇f2◇...◇fn)(x) := (f1(x), f2(x), ..., fn(x))
- 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 |
( |
有限項 |
| 3 | f1 |
( |
有限項 |
| 4 | f1◇f2◇...◇fn | (◇)(f1, f2, ..., fn) | 有限項、無限項 |
| 5 | f1□f2□...□fn | (□)(f1, f2, ..., fn) | 有限項、無限項 |
[/追記]