Loading [MathJax]/jax/output/HTML-CSS/jax.js

2014年2月19日 星期三

Cartesian Closed Categories 與簡單型別論 (二)

型別理論

簡單型別(simple type theory)由一部份的 lambda term 以及函數型別構成,我們先從基本的名稱開始講起。

變數(variable)僅是一個給定的可數集合的元素,通常用小寫英文字母 x,y,z, 代表,而 lambda term 係由以下規則建立的所有的 term
M:=xλx.MMM
其中 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 範疇:
  1. 物件為所有的 context Γ。仔細來說,假定我們有可數無窮多的 xi:τi,則物件是所有的有限子集合。
  2. 給定 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,所以 Mx=M 。同樣地,因為 Mi[x/x]=Mi 我們得到 xM=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 語法(注意:預覽畫面無法顯示)