型別理論
簡單型別(simple type theory)由一部份的 lambda term 以及函數型別構成,我們先從基本的名稱開始講起。
變數(variable)僅是一個給定的可數集合的元素,通常用小寫英文字母 x,y,z,… 代表,而 lambda term 係由以下規則建立的所有的 term
M:=x∣λx.M∣MM
其中 x 爲一變數。有效的 lambda term 包含 λx.x,λx.λy.x 以及 λx.xx 等等。另外還有型別變數(type variable),我們常用 σ,τ,… 等希臘字母代表。對每個 term : type 的配對 x:τ:=(x,τ) 讀作 term x 的型別為 τ。最後,用作給定有限多個的(變數 : 型別變數)序列稱為環境(context)通常記作 Γ:=x1:τ1,x2:τ2,…,xn:τn。
我們用 Γ⊢M:τ 代表在環境 Γ 下,lambda term M 的型別爲 τ,這樣的表述本身稱為 judgement。型別理論(type theory)或型別系統(type system)意指特定一組規則說明如何構造 Γ⊢M:τ。通常包含一組基本的結構規則(structural rules):x:τ⊢x:τ(identity)Γ⊢M:σΓ,x:τ⊢M:σ(weakening)Γ,x:τ,y:σ,Δ⊢M:ρΓ,y:σ,x:τ,Δ⊢M:ρ(exchange)雖然實作上會用更有效率的規則,但為了解說方便這些便已足夠。由此我們可以推出一些常見的規則,例如使用一次 (identity) 接著反覆使用 (weakening) 以及 (exchange) 兩個規則做有限次的歸納後可得到:Γ,x:τ⊢x:τ(variable)
簡單型別論
簡單型別理論除了結構規則外,多了兩個規則說明如何建構與消除函數型別:Γ,x:σ⊢M:τΓ⊢λx.M:σ→τ(→-introduction)Γ⊢M:σ→τΓ⊢N:σΓ⊢MN:τ(→-elimination)其中 (→-introduction) 代表如果能在 Γ,x:σ 下推得 M:τ 的話,則我們能在 Γ 下推得 λx.M 的型別為 σ→τ 也就是 Γ⊢λx.M:σ→τ,這條規則也被稱為 abstraction。同樣地,(→-elimination) 代表如果給定 M:σ→τ 以及另一個 term N 的型別為 σ 的話,我們可以推論 MN 的型別為 τ,這條規則常被稱為 application。
舉例來說,我們可以判斷 λx.x 的型別為 σ→σ,因為我們可以透過 (identity) 以及 (→-introduction) 得知:
x:σ⊢x:σ⊢λx.x:σ→σ 對於 λx.λy.x 則有 ⊢(λx.λy.x):σ→(τ→σ),演繹的過程留給讀者練習。最後要注意的是,並不是所有的 lambda term 都能夠推得型別,像是 xx 就沒辦法,這類的問題在此不考慮。
語法範疇
簡單型別本身也能夠構成範疇,這類的範疇稱為語法範疇(syntactic category)或是 classifying category。首先定義 STT 範疇:
- 物件為所有的 context Γ。仔細來說,假定我們有可數無窮多的 xi:τi,則物件是所有的有限子集合。
- 給定 context Γ,Δ,從 Γ 到 Δ=(y1:σ1,…,ym:σm) 的一個態射代表 →M=(M1,…,Mi,…,Mn) 使得 Γ⊢Mi:σi 都成立。
那麼給定態射 →M:Γ→Δ 跟 →L:Δ→Θ ,我們可以把 Lj 當中出現變數 y:σ 的部分取代成 M:σ,表示為 Lj[→y/→M],如此以來就得到 Γ⊢Lj[→y/→M]:ρj。也就得到一個態射 (L1[→y/→M],…,Lm[→y/→M]):Γ→Δ→Θ定義為態射的合成。
對每一個 context Γ,從 (Var) 我們可以得到態射 (x1,…,xm):Γ→Γ。我們可以很簡單地驗證此態射為單位態射:因為根據替換的操作我們有 xi[→x/→M]=Mi,所以 →M∘→x=→M 。同樣地,因為 Mi[→x/→x]=Mi 我們得到 →x∘→M=→M 說明 →x:Γ→Γ 為單位態射(identity)。
對每一個 context Γ,從 (Var) 我們可以得到態射 (x1,…,xm):Γ→Γ。我們可以很簡單地驗證此態射為單位態射:因為根據替換的操作我們有 xi[→x/→M]=Mi,所以 →M∘→x=→M 。同樣地,因為 Mi[→x/→x]=Mi 我們得到 →x∘→M=→M 說明 →x:Γ→Γ 為單位態射(identity)。
結構規則的範疇性質
接下來我們觀察範疇 STT 上一個特殊的物件——空環境。根據定義 Γ→∅ 都有一個長度為零的序列 →M=() 使得 ∅ 內所有的 y:σ 都可以被推導出來(!)。而長度為零的序列只有一個,也就是空序列,因此空環境 ∅在這語法範疇是 terminal object。
我們還可以再證明該範疇具有 binary product。為了簡化說明,我們只考慮環境的長度為 2 的情況,也就是 Γ=x:τ,y:σ。從結構規則中,我們可以推得 x:τ,y:σ⊢x:τx:τ,y:σ⊢y:σ 也就是兩個態射 x:(x:τ,y:σ)→(x:τ) 跟 y:(x:τ,y:σ)→(y:σ);如果考慮任意兩個 judgement Γ⊢M:τ 以及 Γ⊢N:σ,我們得到一個從 Γ 到 (x:τ,y:σ) 的態射 (M,N) 並且我們知道 x∘(M,N)=x[x/M]=M 以及 y∘(M,N)=N 也就是滿足以下的交換圖:
\xymatrix{(x : \tau) & (x : \tau, y : \sigma) \ar[r]^-{y}\ar[l]_-{x}& (y:\sigma) \\ & \Gamma \ar[u]_{(M, N)} \ar[ru]_{N} \ar[lu]^{M}} 至於 (M,N) 的唯一性,用數學歸納法考慮變數替換的定義,在此略過不談。由此可知,僅用結構規則便能證明該範疇具有所有的有限 product。
在下一篇,我們將證明 STT 為 Cartesian closed 。
沒有留言:
張貼留言
留言也可用 $...$ 輸入 LATEX 語法(注意:預覽畫面無法顯示)