markdown
束縛と自由変数の基本
lecture/information/programming-languages/foundation/束縛と自由変数の基本-講義.n.md

束縛そくばく自由変数じゆうへんすう基本きほん

導入どうにゅう

この講義こうぎ核心かくしんは、「変数へんすう名前なまえ本質ほんしつでなく、どこに束縛そくばくされているかが本質ほんしつである」というてんにある。λx.xλy.y名前なまえちがうが「おな関数かんすう」である。この見方みかたをできるようにするために、束縛そくばく自由変数じゆうへんすう・スコープの概念がいねん正確せいかく定義ていぎする。

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

λx.(λy.xy) において、最外側そとがわx内側うちがわy はどうちがうか。また λx.(xy)y はなぜ「そとから来るなにか」なのか。

用語ようご

  • λ項らむだこうλ-term: 変数へんすう・λ抽象ちゅうしょう適用てきようのいずれかから再帰的さいきてき構成こうせいされるしき
  • 束縛変数そくばくへんすうbound variable: λ抽象ちゅうしょうのパラメータとして宣言せんげんされ、そのスコープない参照さんしょうされる変数へんすう
  • 自由変数じゆうへんすうfree variable: 束縛そくばくされていない出現しゅつげん変数へんすう
  • スコープscope: λ抽象ちゅうしょう λx.M において x束縛そくばくする領域りょういき M

方針ほうしん

まずλ項らむだこう構文こうぶん(BNF)を確認かくにんする。つぎに自由変数じゆうへんすう集合しゅうごう FV(t)構造帰納法こうぞうきのうほう定義ていぎする。最後さいごに、束縛そくばくかさなり(ネスト)がスコープになにをもたらすかをる。

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

プログラミングの経験けいけんから「関数かんすう引数名ひきすうめいはその関数かんすうなかだけで有効ゆうこうだ」という感覚かんかくはあるはずである。λx.Mx はちょうどそれで、Mそとでは x という名前なまえ意味いみたない。

逆に λx.(xy)y は「この関数かんすうばれる文脈ぶんみゃくから来るなにか」であり、定義ていぎなかにスコープが存在そんざいしない。これが自由変数じゆうへんすうである。

λx. (λy. x y)
↑ ↑↑
y は内側うちがわの λy で束縛そくばく
x は外側そとがわの λx で束縛そくばく
外側そとがわのスコープは λy. x y 全体ぜんたいである

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

1. λ項らむだこう構文こうぶん

t::=xλx.tt1t2
  • x: 変数へんすう(Variable)
  • λx.t: λ抽象ちゅうしょう(Abstraction)—「xって tかえ関数かんすう
  • t1t2: 適用てきよう(Application)—「t1t2わたす」

2. 自由変数じゆうへんすう集合しゅうごう FV(t)

FV(x)={x}
FV(λx.t)=FV(t){x}
FV(t1t2)=FV(t1)FV(t2)

λ抽象ちゅうしょう場合ばあいx束縛そくばくされるので FV(t) からのぞかれる。

3. 束縛変数そくばくへんすう集合しゅうごう BV(t)

BV(x)=
BV(λx.t)={x}BV(t)
BV(t1t2)=BV(t1)BV(t2)

4. 閉項へいこう

FV(t)= であるこう閉項へいこうclosed term(またはコンビネータcombinator)という。閉項へいこう外部がいぶ文脈ぶんみゃく依存いぞんしない。

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

れい 1

t=λx.(xy)

FV(t)=FV(xy){x}=({x}{y}){x}={y}

y自由変数じゆうへんすうである。

れい 2

t=λx.λy.(xy)

FV(t)=FV(λy.(xy)){x}=({x,y}{y}){x}=

閉項へいこうである。

れい 3: スコープのかさなり

t=(λx.x)(λx.xx)

がわ右側みぎがわ別々べつべつx束縛そくばくされており、2 つの x別物べつものである。どちらもそとからえない。FV(t)=

べつ見方みかた

λ抽象ちゅうしょうを「あたらしいスコープをひらくブロック」とみると、スコープのはファイルシステムの階層かいそうている。変数へんすう名の解決かいけつは「もっと内側うちがわのスコープから外側そとがわさがす」ルールでおこなわれる。自由変数じゆうへんすうはどのスコープにもつからなかった変数へんすう名である。

見分みわかた

  • 変数へんすう xある出現あるしゅつげん束縛そくばく自由じゆうかは、「そこから外側そとがわかって λxあらわれるか」を確認かくにんする
  • FV(t)計算けいさんするには、BNF の場合分ばあいわけにしたがって内側うちがわから再帰的さいきてきもとめる
  • FV(t)= なら閉項へいこうであり、単独たんどく評価ひょうかできる

一言ひとことでいうと

λ項らむだこうにおける変数へんすう意味いみ名前なまえでなくスコープでまる。自由変数じゆうへんすうとは「このこうそとから供給きょうきゅうされるあたいのプレースホルダ」であり、束縛変数そくばくへんすうとは「このこう内部ないぶ宣言せんげん参照さんしょうされるもの」である。

関連かんれんリンク

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
タブを全て閉じる