互いに異なる つの原子型 をもち、定数をもたない単純型付きラムダ計算(チャーチ流)を考える。矢印型は右結合()とし、 同値な項は同一視する。型
をもつ閉じた項で、η 長 β 正規形であるものの個数を求めよ。
型の住人(η 長 β 正規形)の数え上げ
型 の η 長 β 正規形の閉じた項を、仮定 のうち結論が のものを頭に選び引数を再帰的に埋める形で場合分けし、 のような型の住人の個数を求められる
前提
- 単純型付けと型の数え上げ (大学院数学 計算理論・ラムダ計算)
この技能までの道筋(8 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- β 簡約と β 正規形 (大学院数学 計算理論・ラムダ計算)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 順列・円順列・重複順列 (数学A 場合の数と確率)
- 組合せ (数学A 場合の数と確率)
- カタラン数 (大学数学 離散数学・組合せ論)
- 単純型付けと型の数え上げ (大学院数学 計算理論・ラムダ計算)
説明
単純型付きラムダ計算で、与えられた型をもつ閉じた項(型の住人)が「本質的に何通りあるか」を数えます。項を η 長 β 正規形という決まった形にそろえると、項は「どの仮定を頭に使うか」と「その引数をどう埋めるか」の選択の列で表され、樹形図と積・和の法則で数えられます。型を命題とみたときの証明の数え上げに当たり、型の構造の理解や、型から項が 1 つに決まるか(プログラムの一意性)の判定に使います。
なぜそうしてよいのか
β 正規形の項を考えます。項が 抽象なら中身を見ます。 抽象でないなら、それは適用 を左から展開した形で、頭 は 抽象ではありえません( 抽象に引数を適用すると β 基になってしまうため)。頭は適用でもないので、頭は変数です。したがって β 正規形はいつも ( は変数、各 も β 正規形)の形をしています。
さらに η 長(η-long)とは、「矢印型の項は必ず で包み、変数の適用は原子型になるまで引数を全部与える」という約束です。たとえば をそのまま引数に渡さず と書きます。この約束のもとでは、型 ( は原子型)の項は必ず となり、頭 はそのとき使える変数のうち型が (結論がちょうど )のもの、 は型 の η 長 β 正規形です。どの閉じた項も βη 変換でちょうど 1 つの η 長 β 正規形(束縛変数の名前の付け替えを除く)に移ることが知られているので、この形の項を数えればよく、形が違えば別の住人です。
この形は「ゴール(いま作るべき型)」と「文脈(使える変数)」の組で再帰的に決まります。ゴールが矢印型なら引数を文脈に足して結論の原子型をゴールにし、原子型 なら結論が の変数を頭に選んで、その引数の型を新しいゴールにします。選び方は頭ごとに和、引数ごとに積で数えます。頭の候補がなければその分岐は 通りです。無限個になるかどうかには注意が要ります。ある(文脈, ゴール) から分岐をたどって、同じゴールで文脈の型が少なくとも元と同じだけそろった組に戻ってくる(循環する)とします。この循環をいくらでも重ねられるのは、(i) 循環の途中で埋めるほかの引数がすべて住人をもち、(ii) 自身に住人が少なくとも 1 つある(循環を止める「基底」がある)ときに限ります。このとき循環を 回重ねた項がすべて別の住人になって無限個です。基底がなければ循環は永久に終わらず、項は 1 つも完成しません。たとえば では、ゴール の頭の候補は だけで、その引数のゴールがまた になります。 は有限の項にならないので、住人は 個です。
手順
型を右結合で ( は原子型)と読み、仮定 を文脈に入れる。ゴールは原子型
文脈の変数のうち、結論(矢印の一番右)がゴールの原子型と一致するものを頭の候補としてすべて挙げる。候補がなければ 通り
各候補 について、引数 のゴールを とする。 が矢印型なら、その仮定を新しい変数として文脈に足してから( で包んで)同じ手順を再帰的に行う
頭の選び方ごとの個数は引数の個数の積、全体は頭の候補にわたる和:
同じゴール(文脈の型は元以上)に戻る循環があるときは、循環の途中のほかの引数がすべて住人をもち、かつそのゴールに循環を使わない住人が少なくとも 1 つあるときに限り無限個と判定する。基底がなければその分岐は 個(例: は 個)
例題
原子型 について、型 をもつ閉じた η 長 β 正規形の項の個数を求めよ。
例題の解答
【手順 1】右結合で読むと、仮定は , , , で、ゴールは 。
【手順 2】結論が の変数は だけ。よって項は の形。
【手順 3】 のゴールは で矢印型なので、新しい変数 を文脈に足して , とする。文脈は 。
- (ゴール )の頭の候補(手順 2): 結論が の変数は と の 2 つ。
- どちらも引数は型 を 1 つとる。ゴール の頭の候補は と の 2 つで、どちらも引数なし( は原子型)。
【手順 4】 の個数は、頭 の場合 、頭 の場合 で、和は 。 の引数は の 1 つなので、全体は 。
【手順 5】たどった分岐のゴールは と進むだけで、同じゴールに戻る循環はないので有限。住人は
, , , の 個。
答え:
答え:
よくある誤り
η 長でない項を別に数えてしまう誤り(例: 上の例で を 5 個目とする)。 は η 長形 と βη 同値なので同じ住人。正しくは η 長形だけを数える。
内側の で入った変数を文脈に入れ忘れる誤り(例: 上の例で の に だけを入れて 1 通りとし、全体を 2(頭が ) 個とする)。正しくは も使えるので は の 2 通りで、全体は 2(頭が ) 個。
結論の原子型ではなく型全体で頭を選んでしまう誤り(例: ゴール に対して は型が でないから使えないとする)。正しくは結論が なら頭にでき、足りない引数 を新たなゴールとして埋める。
循環があれば必ず無限個、または循環を 1 回で打ち切って有限個と数える誤り。 では基底 があるので ()がすべて住人で無限個( と の 2 個ではない)。一方 では基底がないので住人は 個(無限個ではない)。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
この技能を使う問題
原子型として ただ 1 つをもち、定数をもたない単純型付きラムダ計算(チャーチ流)を考える。型は で生成される式とし、括弧の付け方(木としての形)が異なる型は異なる型とみなす。型 が住人をもつとは、型 の閉じた項(自由変数をもたない項)が存在することをいう。
矢印 をちょうど 個含む型(したがって をちょうど 個含む型)のうち、住人をもつものの個数を求めよ。
互いに異なる つの原子型 をもち、定数をもたない単純型付きラムダ計算(チャーチ流)を考える。型は
で生成される式とする。括弧の付け方(木としての形)または原子型の配置が異なる型は、異なる型とみなす。 は右結合とし、型に現れる の個数をその型の矢印数とよぶ。型 の住人とは、型 をもつ閉項であって、 正規形かつ 長形(long normal form)であるもののこととする。住人は 同値なものを同一視して数える。
矢印数がちょうど である型のうち、住人をちょうど つだけもつ型の個数を求めよ。
原子型を ただ 1 つだけもつ単純型付きラムダ計算(チャーチ流、定数なし)を考える。矢印型は右結合()とし、 同値な項は同一視する。型
の閉じた項で、 正規形かつ 長形(-normal -long form)であるものは、ある項 を用いて の形に書ける。このような項のうち、 の中に変数 と が合わせてちょうど 回出現するもの( の出現回数と の出現回数の和が )の個数を求めよ。互いに異なる 3 つの原子型 をもつ単純型付きラムダ計算(チャーチ流、定数なし)を考える。矢印型は右結合()とし、 同値な項は同一視する。型 の閉じた項のうち、 正規形かつ 長形(-long form)であるものを の住人とよぶ。(住人は、型 の閉じた項の 同値類と 1 対 1 に対応する。)
型
の住人の個数を求めよ。