markdown
置換とα同値の基本
lecture/information/programming-languages/foundation/置換とα同値の基本-講義.n.md

置換ちかんとα同値どうち基本きほん

informationprogramming-languageslambda-calculuslecture

導入どうにゅう

この講義こうぎ核心かくしんは、「β簡約かんやく実体じったい置換ちかんであり、置換ちかん自由変数じゆうへんすうあやまって束縛そくばくしないようにおこなわなければならない」というてんにある。この「あやまった束縛そくばく」をふせ仕組しくみ捕縛回避置換ほばくかいひちかんcapture-avoiding substitutionであり、名前なまええが計算けいさん意味いみえないことの保証ほしょうがα同値どうちである。

中心ちゅうしん課題かだい

λx.(λy.x)y代入だいにゅうしようとするとなにきるか。なぜ単純たんじゅん文字列置換もじれつちかんでは不十分ふじゅうぶんなのか。

用語ようご

  • 置換ちかんsubstitution: こう tなか変数へんすう x自由じゆう出現しゅつげんこう sえる操作そうさt[x:=s]
  • 変数捕縛へんすうほばくvariable capture: 置換ちかんによって自由変数じゆうへんすう意図いとせず束縛そくばくされてしまう現象げんしょう
  • 捕縛回避置換ほばくかいひちかんcapture-avoiding substitution: 変数捕縛へんすうほばくふせぐために、必要ひつようおうじて束縛変数そくばくへんすう改名かいめいしてからおこな置換ちかん
  • α変換へんかんα-conversion: λx.txあたらしい名前なまえ yえて λy.t[x:=y] にする操作そうさ(ただし yFV(t)
  • α同値どうちα-equivalence: α変換へんかんできるこうどうしの同値どうち関係かんけい

方針ほうしん

まず単純たんじゅん文字列置換もじれつちかんがなぜ失敗しっぱいするかをる。つぎに捕縛回避置換ほばくかいひちかん定義ていぎを BNF の場合分ばあいわけでく。最後さいごにα同値どうちを「名前なまえちがいを無視むしする商集合しょうしゅうごううえひとしさ」としてとらえる。

直感的ちょっかんてき説明せつめい

xs置換ちかんする」を「文書ぶんしょなか単語たんご検索けんさく置換ちかんする」とおなじだとおもうと問題もんだいきる。

たとえば (λy.x)[x:=y] を「xyえる」と機械的きかいてきおこなうと λy.y になる。しかしもと意味いみは「x という外側そとがわあたいって、y 無関係むかんけいxかえ関数かんすう」だった。置換後ちかんごλy.y は「yって yかえ関数かんすう」になってしまい、意味いみわっている。

解決策かいけつさくは「置換ちかんしようとしている自由変数じゆうへんすう y束縛そくばくされる状況じょうきょうはいろうとしたら、束縛変数そくばくへんすう別名べつめい改名かいめいする」ことである。

問題もんだい
(λy. x)[x := y]
→ λy. y ← y が捕縛ほばくされた(意味いみわった)

ただしい手順てじゅん:まず y を z に改名かいめい
λy. x →(α変換へんかん)→ λz. x
(λz. x)[x := y] → λz. y ← y は自由じゆうのままたもたれた

厳密げんみつ説明せつめい

1. 捕縛回避置換ほばくかいひちかん定義ていぎ

t[x:=s]つぎ場合分ばあいわけで定義ていぎする。

x[x:=s]=s
y[x:=s]=y(yx)
(t1t2)[x:=s]=(t1[x:=s])(t2[x:=s])

λ抽象ちゅうしょう場合ばあい重要じゅうようである。

(λx.t)[x:=s]=λx.t$x$[/][/][/])[PARSE ERROR: Undefined("RBrace")]
(λy.t)[x:=s]=λy.(t[x:=s])$yx$$yFV(s)$)[PARSE ERROR: Undefined("RBrace")]
(λy.t)[x:=s]=λz.(t[y:=z][x:=s])$yx$$yFV(s)$$z$[/][/])[PARSE ERROR: Undefined("RBrace")]

最後さいごぎょう捕縛回避ほばくかいひのための改名かいめいである。

2. α同値どうち

α変換へんかん λx.tαλy.t[x:=y](ただし yFV(t))によってできるこうはα同値どうちである。

λx.x=αλy.y=αλz.z

記号きごうとしての名前なまえことなるが、「ったものをそのままかえ関数かんすう」という意味いみおなじである。

3. β簡約かんやくとの関係かんけい

β簡約かんやく定義ていぎつぎ講義こうぎ)は:

(λx.t)sβt[x:=s]

右辺うへん置換ちかんかなら捕縛回避ほばくかいひおこなわれる。α同値どうちみとめることで、t[x:=s]代表元だいひょうもとかた依存いぞんしない(名前なまええらかた依存いぞんしない)ことが保証ほしょうされる。

最小さいしょう具体例ぐたいれい

れい 1: 捕縛回避ほばくかいひ不要ふようなケース

(λx.λy.x)[x:=a]

a変数名へんすうめいだけとして a{y}仮定かていすると:

=λx.λy.x外側そとがわλxx束縛そくばくしているので置換ちかんしない)

れい 2: 捕縛回避ほばくかいひ必要ひつようなケース

(λy.x)[x:=y]yFV(y) なので改名かいめい必要ひつよう

zあたらしい名前なまえとして:

=λz.(x[y:=z])[x:=y]=λz.y

べつ見方みかた

α同値どうちを「しょう」としてると、λ項らむだこう集合しゅうごうをα同値どうちるいった商集合しょうしゅうごううえβ簡約べーたかんやく定義ていぎすることになる。あるいはde Bruijn 指標de Bruijn index変数へんすう名前なまえでなく「なん番目ばんめの λ に束縛そくばくされているか」という番号ばんごうあらわ方法ほうほう)を使つかえば、α同値どうちこう同一どうい表現ひょうげんになり改名かいめい不要ふようになる。

見分みわかた

  • t[x:=s]計算けいさんするとき、s自由変数じゆうへんすうふくまれるかをさきFV(s)確認かくにんする
  • λy.はいるとき、yFV(s) なら改名かいめいしてから置換ちかんする
  • λx.x=αλy.y のように束縛変数そくばくへんすうえはα同値どうち範囲はんいない

一言ひとことでいうと

置換ちかんは「xsえる」だけでなく「自由変数じゆうへんすうあやまって束縛そくばくしないように慎重しんちょうおこな操作そうさ」であり、α同値どうちは「変数名へんすうめい本質ほんしつでない」ことの形式化けいしきかである。

関連かんれんリンク

data/lecture/information/programming-languages/foundation/束縛と自由変数の基本-講義.n.md data/lecture/information/programming-languages/lambda-calculus/ラムダ計算の基本-講義.n.md
raw .n.md をコピー
loc をコピー (filepath:line ~ line)
copy share link
path をコピー
copy share link
copy share link
タブを全て閉じる