λ→ à la Church 學習筆記-7(數據類型的表示)

目錄:類型論驛站寫作計劃

前一篇:λ→ à la Church 學習筆記-6(邏輯的表示)

這是我學習 λ→ à la Church 的最後一篇筆記。

lambda2 中表示數據類型

定義1

  1. 數據類型(data structure)是一個沒有特定關係(relations)的多類別(many-sorted)結構。數據結構里的類別被稱為數據集合(data set)。
  2. 數據系統(data system)是數據結構的識別簽(signature)。數據系統里的類別被稱為數據類型(data type)。

例如:

  • 類別: 	extbf{A, B}
  • 函數: 	extbf{f: A}	o 	extbf{B}, 	extbf{g: B}	o	extbf{A}	o	extbf{A}
  • 常數: 	extbf{c}in	extbf{A}

上述數據系統可以用下圖來表示:

再比如,自然數的數據系統 	extbf{Nat} 可以表示為:

  • 類別: 	extbf{N}
  • 函數: 	extbf{S: N}	o 	extbf{N}
  • 常數: 	extbf{0}in	extbf{N}

類別 	extbf{A} 上的列表 	extbf{List}_	extbf{A} 的數據系統可以表示為:

  • 類別: 	extbf{A}, 	extbf{L}_	extbf{A}
  • 函數: 	extbf{cons: A}	o 	extbf{L}_	extbf{A} 	o 	extbf{L}_	extbf{A}
  • 常數: 	extbf{nil}in	extbf{L}_	extbf{A}

定義2(參數)

  1. 如果數據系統里的某個類別沒有進來的箭頭,而且該類別沒有常量,則該類別被稱為參數類別(parameter sort)
  2. 如果一個數據系統沒有參數類別,我們稱這樣的數據系統為無參數(parameter-free)數據系統

自然數系統是無參數數據系統;列表系統是以 	extbf{A} 為參數類別的有參數數據系統。

定義3(語言)

mathcal{D} 為一個數據系統,與其對應的語言 L_mathcal{D} 定義如下:

  1. mathcal{D} 的(開放)項模型(open termmodel),記為 mathcal{T(D)} ,包含 mathcal{L}_mathcal{D} 中的項(包含自由變數),以及函數符號給出的顯著映射(obvious map)。也就是說,對於 mathcal{D} 中的每一個類別 	extbf{C} ,對應的集合 C 包含 mathcal{L}_mathcal{D} 中類別為 	extbf{C} 的所有項。和函數符號 	extbf{f: C}_1 	o	extbf{C}_2 相對應的函數 f:C_1	o C_2定義為 f(t)=	extbf{f}(t) . 類別為 	extbf{C} 的常量 	extbf{c} 詮釋為自身: 	extbf{c}in C
  2. 閉合項模型(closed termmodel),記為 mathcal{T}^circ mathcal{(D)} ,參照上述定義定義。

例如自然數的閉合項模型包含集合 	extbf{0, S0, SS0,} dots 這個類型結構是 langle {0,1,2,dots},S,0 
angle同構副本(isomorphic copy)

定義4(語境)

對於一個數據系統 mathcal{D}

  • 	extbf{A}_1,dots,	extbf{A}_n :參數類別
  • 	extbf{B}_1,dots,	extbf{B}_m :其他類別
  • 	extbf{f}_1:	extbf{A}_1	o	extbf{B}_1	o	extbf{B}_2
  • dots
  • 	extbf{c}_1:	extbf{B}_1
  • dots

我們有語境(context)

Gamma_mathcal{D}=A_1:*,dots,A_n:*,B_1:*,dots , B_m:*, f:A_1	o B_1Rightarrow B_2,dots c_1:B_1,dots

對於每一個項 tin L_mathcal{D} ,我們定義 lambda 2t^sim 和語境 Gamma_t 如下:

引理5

對於一個類型為 C 的項 tin L_mathcal{D} ,我們有:

Gamma_mathcal{D},Gamma_tvdash_{lambda 2}t^sim:C.

上面的翻譯方式比較直接,但是卻無法找到如 Plus 一樣的項,使得 Plus(S0)(S0) =_eta SS0.

原因是, S 不過是一個變數,我們不能把複合項 S0S00 分成各自的部分來探究他們所代表的數字之間的關係。所以我們需要一個更好的表示方法。

定義6

mathcal{D} 是按照定義4定義的數據系統。

  1. Delta_mathcal{D}=underline{A}_1:*,dotsunderline{A}_n:* (標記法)
  2. mathcal{D} d lambda 2 表示包括:
  • 類型 underline{B}_1,dots,underline{B}_n ,使得 Delta_mathcal{D}=underline{B}_1:*,dotsunderline{B}_m:*
  • underline{f}_1,dots,underline{c}_1,dots ,使得 Delta_mathcal{D}vdash underline{f}_1:underline{A}_1	ounderline{B}_1	ounderline{B}_2; dots; Delta_mathcal{D}vdash underline{c}_1:underline{B}_1;dots
  • 對於 mathcal{D} 的特定 lambda2 表示,對於每一個項 tin L_mathcal{D} ,我們定義 lambda 2underline{t} 和語境 Delta_t 如下:

  • 如果對於在 L_mathcal{D} 中的所有項 t,s ,我們有 underline{t}=_eta underline{s} iff tequiv s , 那麼我們稱 mathcal{D} 的這個 lambda 2 表示是自由(free)的。

標記法7

Gamma=x_1:A_1,dots,x_n:A_n 是一個語境,我們有

lambdaGamma.Mequiv lambda x_1:A_1dotslambda x_n:A_n.M;\ PiGamma.Mequiv Pi x_1:A_1dotsPi x_n:A_n.M;\ MGammaequiv Mx_1dots x_n.

定理8(Leivant 1983, B?hm-Berarducci 1985, Fokkinga 1987)

每一個數據系統 mathcal{D} 都有一個 lambda2 的自由表示(free representation)。

實例:

列表(Lists)

列表 langle a_1,a_2
angle in L_mathcal{A} 以及 cons 可以定義如下:

underline{L}_mathcal{A}=(Pi L:*.L	o(A	o L	o L)	o L);\ langle a_1, a_2
angle = (lambda L:* lambda nil:L lambda cons:A	o L	o L.cons a_1 (cons a_2 nil )));\ cons=lambda a:A lambda x:(Pi L:*.L	o (A	o L	o L)	o L) \lambda L:* lambda nil:L lambda cons:A	o L	o L.\ cons(x L nil cons);

此外, A:*,a_1:A,a_2:Avdash langle underline{a}_1,underline{a}_2
angle:underline{L}_mathcal{A}

布爾值(Booleans):

  • 類別: Bool
  • 常量: true, false in Bool

表示如下:

underline{Bool}=Pialpha:*.alpha	oalpha	oalpha,\ underline{true}=lambdaalpha:*lambda x:alpha lambda y:alpha.x,\ underline{false}=lambdaalpha:*lambda x:alpha lambda y:alpha.y.

對子/二元組(Pairs):

  • 類別: 	extbf{A}_1, 	extbf{A}_2, 	extbf{B}
  • 函數: 	extbf{p}:	extbf{A}_1	o	extbf{A}_2	o 	extbf{B}

表示如下:

underline{B}=Pialpha:*.(A_1	o A_2	o alpha)	o alpha,\ underline{p}=lambda x:A_1lambda y:A_2 lambda alpha:* lambda z:(A_1	o A_2	oalpha).zxy.

目錄:類型論驛站寫作計劃

前一篇:λ→ à la Church 學習筆記-6(邏輯的表示)


推薦閱讀:

安客誠成為阿里數據銀行首批認證服務商 助力數據營銷新生態
框架為數據科學家帶來哪些編程語言所不能帶來的優勢
若想修鍊成數據科學家,最重要的技能居然是...?
數據科學的新生代工具(附實操代碼)
健身應用暴露了美軍秘密基位置

TAG:類型論 | 數據 | Lambda演算 |