§E16.27単純型付きラムダ計算

最終更新

型なしラムダ計算では、任意の項を任意の項へ適用することができる。単純型付きラムダ計算は、関数が受け取る入力型と返す出力型を型付け判断によって追跡する。本記事では型と型付け規則を定義し、捕獲回避代入が型を保つことを証明する。型付き代入補題から、項の任意の位置で行う一段のベータ簡約が型を保存することを導く。

1 型、項、および文脈

基本型記号の空でない集合をBase\mathsf{Base}とする。

定義 1.1. 単純型 (simple type) を次の規則で帰納的に定める。

A,B::=ι∣A→B(ι∈Base).A,B ::= \iota\mid A\to B \qquad(\iota\in\mathsf{Base}).

A→B→CA\to B\to CはA→(B→C)A\to(B\to C)と読む。型の大きさを

∣ι∣=1,∣A→B∣=1+∣A∣+∣B∣|\iota|=1,\qquad |A\to B|=1+|A|+|B|

と定める。

項の構文、自由変数、アルファ同値、および捕獲回避代入には、型なしラムダ計算で定義した§E15.8 定義 1.1、§E15.8 定義 2.2、§E15.8 定義 2.4を用いる。従って項は

M,N::=x∣λx.M∣MNM,N ::= x\mid\lambda x.M\mid MN

という構文をもち、束縛変数の名前だけが異なる項を同一視する。型注釈は項の構文には書かず、型は判断の導出が与える。この形式を Curry 形式という。

定義 1.2. 型付け文脈 (typing context)Γ\Gammaは、変数から単純型への有限部分関数である。x∉dom⁡(Γ)x\notin\operatorname{dom}(\Gamma)のとき、Γ\Gammaをx:Ax:Aで拡張した文脈をΓ,x:A\Gamma,x:Aと書く。

判断Γ⊢M:A\Gamma\vdash M:Aを、次の規則から生成される有限導出木の存在として定める。

Γ(x)=AΓ⊢x:A(Var)\frac{\Gamma(x)=A}{\Gamma\vdash x:A}(\mathrm{Var})Γ,x:A⊢M:BΓ⊢λx.M:A→B(Abs)Γ⊢M:A→BΓ⊢N:AΓ⊢MN:B(App).\frac{\Gamma,x:A\vdash M:B} {\Gamma\vdash\lambda x.M:A\to B}(\mathrm{Abs}) \qquad \frac{\Gamma\vdash M:A\to B\qquad\Gamma\vdash N:A} {\Gamma\vdash MN:B}(\mathrm{App}).

例 1.3 (恒等関数と合成). 任意の型AAについて

∅⊢λx.x:A→A\varnothing\vdash\lambda x.x:A\to A

である。また、任意の型A,B,CA,B,Cについて

∅⊢λf.λg.λx.f(gx):(B→C)→(A→B)→A→C\varnothing\vdash \lambda f.\lambda g.\lambda x.f(gx): (B\to C)\to(A\to B)\to A\to C

である。後者では、x:Ax:Aからgx:Bgx:Bを得て、f(gx):Cf(gx):Cを得た後、三つの仮定を逆順に抽象する。

2 文脈に関する補題

補題 2.1.Γ⊢M:A\Gamma\vdash M:Aとする。Δ\DeltaがΓ\Gammaのすべての変数へ同じ型を割り当てるならば、Δ⊢M:A\Delta\vdash M:Aである。

証明.Γ⊢M:A\Gamma\vdash M:Aの導出に関して帰納法を用いる。(Var)(\mathrm{Var})の場合、Γ(x)=A\Gamma(x)=Aならば仮定からΔ(x)=A\Delta(x)=Aである。(App)(\mathrm{App})の場合は二つの直前の導出へ帰納法の仮定を適用する。(Abs)(\mathrm{Abs})の場合、束縛変数をdom⁡(Δ)\operatorname{dom}(\Delta)の外の新鮮な変数へアルファ変換してよい。拡張文脈も型の割当てを保つため、本体の導出へ帰納法の仮定を適用し、再び(Abs)(\mathrm{Abs})を用いる。▨

補題 2.2.Γ,x:A⊢M:B\Gamma,x:A\vdash M:Bとし、z∉dom⁡(Γ)∪Var⁡(M)z\notin\operatorname{dom}(\Gamma)\cup\operatorname{Var}(M)とする。このとき

Γ,z:A⊢ρx→z(M):B\Gamma,z:A\vdash\rho_{x\to z}(M):B

である。特に、アルファ同値な項は同じ文脈で同じ型をもつ。

証明. 最初の主張を型付け導出に関して帰納的に示す。変数規則では、項がxxならば改名後のzzに型AAが割り当てられ、ほかの変数ならばΓ\Gammaの割当てが保存される。適用規則では二つの直前の導出へ帰納法の仮定を適用する。抽象規則では、内側の束縛変数がxxならば自由変数の改名はその抽象で遮蔽される。束縛変数がxxと異なる場合は、必要ならば当該束縛変数をさらに新鮮な変数へ変更してから本体へ帰納法の仮定を適用する。

アルファ同値は、捕獲を起こさない束縛変数の改名と項文脈に関する閉包から生成される。上の改名結果を抽象規則で閉じ、適用と抽象の文脈について導出を持ち上げれば、各生成段階で型付けが保たれる。対称性と推移性を用いると、アルファ同値な任意の二項が同じ型をもつ。▨

型付け判断に現れない自由変数は存在しない。

補題 2.3.Γ⊢M:A\Gamma\vdash M:AならばFV⁡(M)⊆dom⁡(Γ)\operatorname{FV}(M)\subseteq\operatorname{dom}(\Gamma)である。

証明. 型付け導出に関する帰納法を用いる。変数規則では定義から従う。適用規則では二つの自由変数集合の和を取る。抽象規則では、本体の自由変数から束縛変数を除き、Γ,x:B\Gamma,x:Bの定義域からxxを除けばdom⁡(Γ)\operatorname{dom}(\Gamma)に含まれる。▨

3 型付き代入補題

定理 3.1 (型付き代入補題).x∉dom⁡(Γ)x\notin\operatorname{dom}(\Gamma)とする。

Γ,x:A⊢M:B,Γ⊢N:A\Gamma,x:A\vdash M:B,\qquad \Gamma\vdash N:A

ならば

Γ⊢M[x:=N]:B\Gamma\vdash M[x:=N]:B

である。代入は変数捕獲を避け、アルファ同値類上で行う。

証明方針は、Γ,x:A⊢M:B\Gamma,x:A\vdash M:Bの最後の型付け規則に関する帰納法である。抽象の場合には、束縛変数をNNの自由変数と文脈の定義域の外へ先に改名する。従って、代入は捕獲を起こさず抽象の本体へ入る。

証明.Γ,x:A⊢M:B\Gamma,x:A\vdash M:Bの導出に関して帰納法を用いる。

最後が(Var)(\mathrm{Var})であるとする。M=xM=xならばB=AB=Aであり、M[x:=N]=NM[x:=N]=Nなので仮定Γ⊢N:A\Gamma\vdash N:Aから結論を得る。M=y≠xM=y\ne xならば(Γ,x:A)(y)=Γ(y)=B(\Gamma,x:A)(y)=\Gamma(y)=Bであり、M[x:=N]=yM[x:=N]=yなので変数規則からΓ⊢y:B\Gamma\vdash y:Bを得る。

最後が(App)(\mathrm{App})であるとする。このときM=M1M2M=M_1M_2であり、ある型CCが存在して

Γ,x:A⊢M1:C→B,Γ,x:A⊢M2:C\Gamma,x:A\vdash M_1:C\to B,\qquad \Gamma,x:A\vdash M_2:C

である。二つの導出へ帰納法の仮定を適用すると

Γ⊢M1[x:=N]:C→B,Γ⊢M2[x:=N]:C\Gamma\vdash M_1[x:=N]:C\to B,\qquad \Gamma\vdash M_2[x:=N]:C

を得る。適用規則と代入の再帰式からΓ⊢(M1M2)[x:=N]:B\Gamma\vdash(M_1M_2)[x:=N]:Bである。

最後が(Abs)(\mathrm{Abs})であるとする。このときM=λy.M0M=\lambda y.M_0、B=C→DB=C\to Dであり、

Γ,x:A,y:C⊢M0:D(1)\Gamma,x:A,y:C\vdash M_0:D \tag{1}

である。文脈の拡張では新しい変数だけを加えるため、(1) からy≠xy\ne xおよびy∉dom⁡(Γ)y\notin\operatorname{dom}(\Gamma)が従う。さらに、補題 2.3によりFV⁡(N)⊆dom⁡(Γ)\operatorname{FV}(N)\subseteq\operatorname{dom}(\Gamma)であるから、y∉FV⁡(N)y\notin\operatorname{FV}(N)である。必要ならば補題 2.2により、yyを

z∉dom⁡(Γ)∪Var⁡(M0)∪Var⁡(N)∪{x}z\notin\operatorname{dom}(\Gamma)\cup\operatorname{Var}(M_0)\cup \operatorname{Var}(N)\cup\{x\}

へ改名することができる。改名後も同じ記号yyを用いる。この代表元では捕獲回避代入が抽象の本体へ入り、

(λy.M0)[x:=N]=λy.(M0[x:=N])(\lambda y.M_0)[x:=N]=\lambda y.(M_0[x:=N])

である。帰納法の仮定を、文脈Γ,y:C\Gamma,y:Cと変数xxに適用する。弱化によりΓ,y:C⊢N:A\Gamma,y:C\vdash N:Aであるため、

Γ,y:C⊢M0[x:=N]:D\Gamma,y:C\vdash M_0[x:=N]:D

を得る。抽象規則から

Γ⊢λy.(M0[x:=N]):C→D\Gamma\vdash\lambda y.(M_0[x:=N]):C\to D

となる。変数、適用、抽象のすべての場合について結論を得た。▨

4 ベータ簡約と型保存

一段ベータ簡約には、型なしラムダ計算で固定した§E15.8 定義 3.1を用いる。すなわち、基本縮約

(λx.M)N→βM[x:=N](\lambda x.M)N\to_\beta M[x:=N]

を抽象の本体、適用の左項、および適用の右項を含むすべての項文脈について閉じる。特定の評価順序には限定しない。

補題 4.1. 次が成り立つ。

  1. Γ⊢λx.M:C\Gamma\vdash\lambda x.M:Cならば、ある型A,BA,Bが存在してC=A→BC=A\to BかつΓ,x:A⊢M:B\Gamma,x:A\vdash M:Bである。
  2. Γ⊢MN:B\Gamma\vdash MN:Bならば、ある型AAが存在してΓ⊢M:A→B\Gamma\vdash M:A\to BかつΓ⊢N:A\Gamma\vdash N:Aである。

証明. 型付け導出の最後の規則を調べる。抽象を結論にもつ規則は(Abs)(\mathrm{Abs})だけであり、適用を結論にもつ規則は(App)(\mathrm{App})だけである。各規則の直前の判断を読み取ると主張を得る。▨

定理 4.2 (型保存定理).

Γ⊢M:A,M→βM′\Gamma\vdash M:A,\qquad M\to_\beta M'

ならば

Γ⊢M′:A\Gamma\vdash M':A

である。

証明方針は、一段ベータ簡約の導出に関する帰納法である。根にあるβ基には型付けの反転と型付き代入補題を用いる。三つの文脈閉包規則には帰納法の仮定を適用し、同じ型付け規則で結論を再構成する。

証明. 基本縮約M=(λx.P)N→βP[x:=N]=M′M=(\lambda x.P)N\to_\beta P[x:=N]=M'を考える。補題 4.1を二回用いると、ある型BBが存在して

Γ,x:B⊢P:A,Γ⊢N:B\Gamma,x:B\vdash P:A,\qquad \Gamma\vdash N:B

である。束縛変数xxはdom⁡(Γ)\operatorname{dom}(\Gamma)の外へアルファ変換してよい。定理 3.1によりΓ⊢P[x:=N]:A\Gamma\vdash P[x:=N]:Aを得る。

抽象文脈でM=λx.PM=\lambda x.P、M′=λx.P′M'=\lambda x.P'、P→βP′P\to_\beta P'とする。反転によりA=B→CA=B\to CかつΓ,x:B⊢P:C\Gamma,x:B\vdash P:Cである。帰納法の仮定からΓ,x:B⊢P′:C\Gamma,x:B\vdash P':Cを得て、抽象規則からΓ⊢λx.P′:B→C\Gamma\vdash\lambda x.P':B\to Cとなる。

適用の左文脈でM=PNM=PN、M′=P′NM'=P'N、P→βP′P\to_\beta P'とする。反転により、ある型BBが存在してΓ⊢P:B→A\Gamma\vdash P:B\to AかつΓ⊢N:B\Gamma\vdash N:Bである。帰納法の仮定からΓ⊢P′:B→A\Gamma\vdash P':B\to Aを得て、適用規則を用いる。

適用の右文脈でM=PNM=PN、M′=PN′M'=PN'、N→βN′N\to_\beta N'とする。反転により、ある型BBが存在してΓ⊢P:B→A\Gamma\vdash P:B\to AかつΓ⊢N:B\Gamma\vdash N:Bである。帰納法の仮定からΓ⊢N′:B\Gamma\vdash N':Bを得て、適用規則を用いる。基本縮約と三つの文脈閉包規則を尽くしたため、任意の一段ベータ簡約が型を保存する。▨

5 型付けすることができない項

命題 5.1. 項λx.xx\lambda x.xxには、単純型を付けることができない。従って

Ω=(λx.xx)(λx.xx)\Omega=(\lambda x.xx)(\lambda x.xx)

にも単純型を付けることができない。

証明.λx.xx\lambda x.xxに型が付くと仮定する。型付けの反転により、ある型A,BA,Bが存在して、文脈x:Ax:Aの下でxx:Bxx:Bが型付けされる。適用の反転により、ある型CCが存在して

x:A⊢x:C→B,x:A⊢x:Cx:A\vdash x:C\to B,\qquad x:A\vdash x:C

である。変数規則から同じ変数xxの型はAAなので、A=C→BA=C\to BかつA=CA=Cである。従ってA=A→BA=A\to Bとなる。しかし型の大きさについて

∣A→B∣=1+∣A∣+∣B∣>∣A∣|A\to B|=1+|A|+|B|>|A|

であり、A=A→BA=A\to Bは不可能である。ゆえにλx.xx\lambda x.xxは型付け不能である。Ω\Omegaが型付け可能ならば、適用の反転によって左側の部分項λx.xx\lambda x.xxも型付け可能になるため矛盾する。▨

型なしラムダ計算ではΩ→βΩ\Omega\to_\beta\Omegaである。上の命題は、単純型がこの特定の自己適用を排除することを示す。ただし、本記事は型付け可能なすべての項について簡約が停止すると結論していない。

6 演習

問題 6.1. 次の問いに答えよ。

  1. ∅⊢λf.λx.fx:(A→B)→A→B\varnothing\vdash\lambda f.\lambda x.fx:(A\to B)\to A\to Bの導出木を書け。
  2. 型付き代入補題の抽象の場合に、束縛変数をFV⁡(N)\operatorname{FV}(N)の外へ取る必要がある理由を述べよ。
  3. 型保存定理の基本縮約の場合に、反転補題から得る二つの判断を記せ。
解答 (確認問題の解答).

1では、f:A→Bf:A\to Bとx:Ax:Aから適用規則でfx:Bfx:Bを得て、xxとffを順に抽象する。2では、NNの自由変数がλy\lambda yに捕獲されることを防ぎ、捕獲回避代入の再帰を本体へ適用するためである。3では、Γ,x:C⊢P:A\Gamma,x:C\vdash P:AとΓ⊢N:C\Gamma\vdash N:Cを挙げ、代入補題へ接続する。▨

7 境界と次の段階

本記事が証明した動的性質は、一段ベータ簡約に対する型保存だけである。閉項が値または簡約可能であるという進行定理、正規形の存在、弱正規化、および強正規化は扱っていない。型なしラムダ計算の Church–Rosser 性から型付き項の正規化を導くこともできない。後続の記事は、含意の自然演繹と本記事の型付け規則を対応させ、局所的なβ基の縮約だけを証明の迂回除去として解釈する。

参考文献

  1. Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002.
  2. Henk Barendregt, Wil Dekkers, and Richard Statman, Lambda Calculus with Types, Perspectives in Logic, Cambridge University Press, 2013.

前提記事