標籤:

語言背後的代數學(九):笛卡爾閉範疇

回顧

上文我們簡單的介紹了一些範疇論相關的內容,

範疇由一些對象箭頭組成,範疇之間的箭頭稱為函子

函子之間的一族箭頭稱為自然變換

範疇的對象不一定是集合,所有的箭頭也不一定構成一個集合。

如果一個範疇 C ,它的對象都是集合,所有的箭頭也構成了一個集合,

就稱該範疇是一個小範疇(small categories)。

1. 定義域和值域

在集合論中,函數自變數所有可取值的集合,稱為函數的定義域

給定函數 f:A	o B ,其中 A 就是 f 的定義域,記為 D_f

集合 f(A)={f(x)|xin A} ,稱為 f值域,記為 R_f

在範疇論中,箭頭也有定義域和值域的概念。

箭頭 f:a	o b ,表示了對象 ab 之間的關係,

我們稱 a 為箭頭 f定義域(domain),記為 dom~f

b 為箭頭 f值域(codomain),記為 cod~f

由此,我們還可以定義範疇 C 中,從對象 a 到對象 b 所有箭頭的集合,

hom(a,b)={f|fin C,dom~f=a,cod~f=b} ,常被稱為hom-set

2. 笛卡爾閉範疇

笛卡爾閉範疇是一種帶有附加結構的範疇,這個名字雖然不是那麼熟悉,

而實際上,我們經常遇到它。

2.1 笛卡爾積

兩個集合 XY笛卡爾積,是以下所有可能有序對構成的集合,

X	imes Y={(x,y)|xin X,yin Y}

2.2 笛卡爾積上的函數

f:X	imes Y	o Z ,是從笛卡爾積 X	imes YZ 的函數,

我們可以用兩種不同的視角來看待它,

(1)它是一個一元函數,參數取遍 X	imes Y 中的所有元素。

(2)它是一個二元函數,一個參數來自於 X ,另一個來自於 Y

原則上,這兩種理解應該是不同的,然而它們卻是等價的。

2.3 柯里化

笛卡爾閉範疇就是反映這一類性質的數學結構,

一個範疇中,定義在乘積對象 a	imes b 上的箭頭 f

總是可以「自然的」由定義在某一個對象 ab 上的箭頭來決定。

這就是柯里化(curring)的概念,

將一個二元函數柯里化指的是,將它看成一個一元函數,這個函數返回另一個一元函數。

假設 f:X	imes Y	o Z 是一個函數,

Z^Y={f|f(y)in Z,yin Y} 是所有 YZ 的函數,

則存在唯一的 g=X	o Z^Y ,使得 g(x)(y)=f(x,y)forall xin X,yin Y

函數 g 稱為 f柯里化

用hom-set的術語來表述就是,存在一個一一映射,使得,

hom(X	imes Y,Z)cong hom(X,Z^Y)

2.4 Cartesian Closed

將以上柯里化的概念推廣到範疇論中,我們就有,

一個笛卡爾閉範疇(cartesian closed category) C ,是滿足以下幾個額外條件的範疇。

(1) C 中存在一個對象 1 ,使得對於任意對象 Ain C ,有唯一的箭頭 A	o 1

這樣的對象 1 ,稱為終對象(terminal object)。

(2)對於任意兩個對象 XY ,範疇 C 中存在一個對象 X	imes Y

以及兩個箭頭 p_1p_2 ,使得, p_1:X	imes Y	o Xp_2:X	imes Y	o Y

(3)對於任意兩個對象 YZ

範疇 C 中存在一個對象 Z^Y ,以及一個箭頭 e:Z^Y	imes Y	o Z ,使得,

對於任意的箭頭 f:X	imes Y	o Z ,存在唯一的箭頭 g:X	o Z^Y

f=ecirc (g	imes I) 恆成立。

即, (ecirc (g	imes I))(X	imes Y)=e((g	imes I)(X	imes Y))=e(Z^Y	imes Y)=Z

其中 I:Y	o Y ,為對象 Y 的恆等箭頭, Z^Y 稱為指數對象(exponential object)。

3. 項的解釋

在第六篇中,為了解釋簡單類型化 lambda 演算,

我們為每一個 lambda 項,找到了一個 Sigma 代數中數學對象與之對應,

簡要的說,我們用 Sigma 代數的載體 A^sigma 來解釋基本類型 sigma

用載體上的函數集 A^{sigma	o	au} 來解釋類型為 sigma	o	au 的所有函數。

現在有了笛卡爾閉範疇,我們準備為每一個基本類型選擇範疇中的一個對象,

而將項常量 b 解釋為範疇中的一個箭頭 unit	omathscr{A}[![b]!] (原因在下文解釋),

其中 mathscr{A}[![cdot]!] 為我們在Henkin模型中定義的含義函數

3.1 封閉項的解釋

我們這樣定義一個含義函數 mathscr{C}[![cdot]!]

(1) mathscr{C}[![unit]!]=unit

(2) mathscr{C}[![b]!]=unit	omathscr{A}[![b]!]

(3) mathscr{C}[![sigma	imes	au]!]=mathscr{C}[![sigma]!]	imesmathscr{C}[![	au]!]

(4) mathscr{C}[![sigma	o	au]!]=mathscr{C}[![sigma]!]	omathscr{C}[![	au]!]

3.2 帶有自由變數的項

如果 Gammavdash M:sigma 是一個含有自由變數的 lambda 項,

則在笛卡爾閉範疇中,它應該解釋為從自由變數的語義對象到 sigma 的語義對象的一個箭頭,

mathscr{C}[![Gammavdash M:sigma]!]=mathscr{C}[![Gamma]!]	omathscr{C}[![sigma]!]

值得一提的是,這裡說明了,項常量 b 為什麼不能被解釋為範疇中的對象,

而是解釋成了箭頭 unit	omathscr{A}[![b]!]

其中,類型上下文 Gamma 的解釋,定義如下,

(1) mathscr{C}[![varnothing]!]=unit

(2) mathscr{C}[![Gamma,x:sigma]!]=mathscr{C}[![Gamma]!]	imesmathscr{C}[![sigma]!]

回顧

本文介紹了笛卡爾閉範疇,是一種具有特殊結構的範疇,

它補充了柯里化這一概念所需滿足的約束條件。

接著我們用笛卡爾閉範疇解釋了,

帶有單位類型,乘積類型的簡單類型化 lambda 演算 lambda^{unit,	imes,	o}


參考

你好,類型(六):Simply typed lambda calculus

語言背後的代數學(六):Henkin模型

Small and Large Categories

Class

Category Theory for Computing Science

Cartesian closed category


下一篇:語言背後的代數學(十):Curry-Howard-Lambek correspondance


推薦閱讀:

TAG:範疇 | 解釋 |