介紹
範疇論對理論電腦科學影響重大,其中一個應用提供各種型別理論(複數以上 type theories)的模型語意。為了解釋這兩者之間的關係,我們以 simply-typed lambda calculus λ→(或簡稱 simple type theory、STT)為例,討論其範疇上的詮釋。在 STT 中只討論最基本的函數型別(function type)以及變數型別,具體來看是非常簡單的函數式語言,型別系統只負責處理 function application 是否合適。
這題材預計分做兩篇,首先解釋 Cartesian closed category (簡稱 CCC)跟 simply typed lambda calculus 的定義跟基本性質,接著談論如何聯繫 CCC 與 simply typed lambda calculus 兩者。
背景知識
一個範疇 C 是 Cartesian closed 若
我們可以再整理一下 exponential object 的定義:任意 exponential object zy 都存在若對所有的 y 都具有以下對 x 以及 z 自然的一一對應
hom(x,zy)≅hom(x×y,z)λg:x→zy↦g=ϵ∘(λg×idy)=ϵ∘(λg×y)
(an isomorphism natural in x and z),也就是說將 (−)×y 看成一個函子的話,具有一個 right adjoint (−)y。
另外一個例子是給定一個 Boolean algebra A,用 A 上的 poset 結構當作一個範疇,也會得到一個 Cartesian closed category,留給讀者分辨對應的 product 跟 exponential object 是什麼。
- 所有有限的 product 都存在以及
- 對任意的物件 y,z∈C 都有 exponential object zy。
更明確地說,第一個條件相當於 C 有 terminal object 1 以及對任意物件 x,y 其 binary product x×y 都存在。第二個條件的 exponential object 定義為一個 object zy 以及一個「取值」態射 ϵ:zy×y→z 滿足
對任意的物件 x∈C 以及任意的態射 g:x×y→z 存在一個唯一的態射 λg:x→zy 使得 g=ϵ∘(λg×idy)基本的範例有集合範疇 Set:在此範疇下,只包含一個元素的集合 {∗} 為 terminal object,對任意集合 X,Y 都可以組成其卡式積 X×Y={(x,y)∣x∈X,y∈Y} 為此範疇的 binary product。而對 exponential object 則為所有從 Y 到 Z 構成的函數集合 Y→Z={f:Y→Z} 以及取值函數 eval:ZY×Y→Z 定義為 eval(f,y)=f(y)。
我們可以再整理一下 exponential object 的定義:任意 exponential object zy 都存在若對所有的 y 都具有以下對 x 以及 z 自然的一一對應
hom(x,zy)≅hom(x×y,z)λg:x→zy↦g=ϵ∘(λg×idy)=ϵ∘(λg×y)
(an isomorphism natural in x and z),也就是說將 (−)×y 看成一個函子的話,具有一個 right adjoint (−)y。
另外一個例子是給定一個 Boolean algebra A,用 A 上的 poset 結構當作一個範疇,也會得到一個 Cartesian closed category,留給讀者分辨對應的 product 跟 exponential object 是什麼。
基本性質
在 Set 上的 ZY 恰好是函數空間,也就是 Set(Y,Z)。一般來說,exponential object zy 可以看作是將 hom(y,z) 內化成範疇內的物件,考慮以上 adjunction 的刻畫,因為 y≅1×y,我們可以推出:
hom(y,z)≅hom(1×y,z)≅hom(1,zy)
對於所有態射 f:y→z 都可以對應到態射 λf:1→zy。
這個態射 λf:1→zy 代表什麼意思呢?從 Set 來看,任意 x:1→X 的函數,唯一決定 X 上的一點 x(∗)∈X。我們可以將 1→X 當作是 X 上的一個點。還可以從 exponential object 的「取值」態設來驗證這個想法:
引理:在 CCC 中,任意態設 f:x→y 以及任一點 a:1→x,我們有 1⟨λf,a⟩→yx×xϵ→y=1a→xf→y
證明:給定任意 f:x→y,考慮 f′=f∘π:1×x→x→y 我們有\xymatrix{1\times x\ar[d]_{\lambda f' \times x}\ar[rd]^{f'}\\ y^x \times x\ar[r]_{\epsilon} & y} 也就是 f′=ϵ∘(λf′×idx)。從此不難推出 fa=ϵ∘⟨λf,a⟩。除此之外,exponential object 跟 products 有著常見的指數運算,例如
- (xy)z≅xy×z:從 adjunction 可輕易推得
- x¹≅x(同上)
- 1x≅1 從 1 是 terminal 跟 adjunction 推得
- (x×y)z≅xz×yz 因為 (−)y 是 right adjoint。
Cartesian closed 函子
我們對於保持 CCC 結構的函子特別有興趣,相當於代數上 homomorphism 保持代數結構操作的觀念:給定兩個 Cartesian closed 範疇 C,D,我們稱函子 F:C→D 為 Cartesian closed 的若 F 保持 finite products 以及 exponential objects。具體來說,這代表
- F(1C)≅1D
- F(x×y)≅Fx×Fy
- F(zy)≅F(z)F(y)
要特別注意的是,這邊的 ≅ 不單指同構而是將諸如投影態射 πx:x×y→x 同樣對應到 Fx×FyFπ→Fx 投影態射。
舉例來說,給定兩個 Boolean algebra A,B,所有從 A 到 B 的 Boolean algebra homomorphism f 都可以視作 Cartesian closed 函子,因為任意的 Boolean algebra homomorphism 都滿足 f(⊤A)=⊤B、f(a∧Ab)=fa∧Bfb 且 f(a→Ab)=fa→Bfb。
下一篇將介紹 simply-typed lambda calculus λ→ 並且討論如何將 λ→ 當作 Cartesian closed 範疇。
舉例來說,給定兩個 Boolean algebra A,B,所有從 A 到 B 的 Boolean algebra homomorphism f 都可以視作 Cartesian closed 函子,因為任意的 Boolean algebra homomorphism 都滿足 f(⊤A)=⊤B、f(a∧Ab)=fa∧Bfb 且 f(a→Ab)=fa→Bfb。
下一篇將介紹 simply-typed lambda calculus λ→ 並且討論如何將 λ→ 當作 Cartesian closed 範疇。
沒有留言:
張貼留言
留言也可用 $...$ 輸入 LATEX 語法(注意:預覽畫面無法顯示)