標籤:

HoTT學習筆記1:類型論基礎

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

The HoTT Book

===========重要概念對照表============

類型 邏輯 集合 同倫

A ----------- 命題 -------- 集合 ---------- 空間

a:A -------- 證明 -------- 元素 ---------- 點

B(x) --------- 謂詞-------- 集合族 -------- 纖維化

b(x):B(x) --- 條件式證明 -元素族--------- 截面

	extbf{0,1} -----------	op, ot ----- -- varnothing, { varnothing}--------- varnothing, *

A+B -------- Avee B ------ 不交並 -------- 余積

A	imes B -------- Awedge B ------ 對子集合 ------ 積空間

A	o B-------- ARightarrow B ----- 函數集合 ------ 函數空間

Sigma_{(x:A)} B(x)----- exists _{x:A} B(x)----不交和 ------- 總空間

Pi_{(x:A)}B(x)----- forall_{x:A} B(x) ----積 -------------截面空間

	extsf{Id}_A ------------ 等於 =--- {(x,x)mid xin A} --路徑空間 A^I

1. 類型論和集合論的區別

作為數學的基礎語言之一,同倫類型論是Zermelo-Fraenkel集合論(ZFC)的競爭對手。類型論和集合論的重要區別羅列如下:

  • 集合論的基礎有兩個層次:一階邏輯的演繹系統,以及用一階邏輯闡述的特定理論,如ZFC,的公理。類型論本身就是一個演繹系統,不需要在一個超然的結構中闡述。
  • 集合論有兩個重要概念:集合與命題;類型論只有一個核心概念:類型。命題也是一種類型(見上表)。證明一個命題就是構造一個類型的對象的過程。
  • 類型論里的 a:A 是一個判斷(judgment),我們不能證偽它。集合論里的 ain A 是一個命題。我們可以證實或證偽它。 一般來說,Aa 唯一且確定的類型。而「子集」只是兩個對象 aA 之間可能存在的關係。
  • 在類型論中,等於關係(equality)是一個類型。例如對於 a,b:A ,如果類型 a=_A b 有棲居對象(be inhabited),那麼我們稱 ab命題等同(propositionally equal)的。

此外,在類型論中還有一個判斷/定義等同(judgmental/definitional equality),記為 aequiv b :A 。例如我們定義類型為 mathbb{N	o N} 的函數 f(x)=x^2 ,那麼 f(3)3^2 就是定義等同的,在這種情況下我們標記為 f(x):equiv x^2

判斷需要基於假設(assumptions),假設構成了語境(context)。如果類型 A 表示的是一個命題,我們可以省去它的證明的名稱,如把 p:x=_A y 寫成 x=_A y . 但這裡的等於不是判斷等同。判斷等同不能作為假設,也不能被證明。

在類型論中,規則(rules),而不是公理(axioms),是最重要的。我們可以把規則視為棋牌規則,把公理視為初始棋子的布局。

2. 函數類型(function types)

lambda 抽象(abstraction):給定類型為 B 的表達式 Phi ,其中可能出現 x:A ,我們定義函數如下:

(lambda (x:A).Phi):A	o B

eta 歸約(reduction)(計算規則): (lambda x.Phi)(a)equiv Phi[x:=a]

eta 擴展(expansion):對於任意一個函數 f:A	o B ,我們都可以做如下抽象:

fequiv (lambda x.f(x))

避免使用乘積類型的一個方式是柯里化(Currying),類型為 (A	imes B)	o C 的函數可以柯里化為類型為 A	o B	o C 的函數。例如 f(x,y):equiv Phi 可以改寫為 f:equiv lambda x.lambda y .Phi .

3. 宇宙和類型族(universes and families)

宇宙是元素為類型的類型。如果按樸素集合論的想法,我們可以構想出所有宇宙的宇宙 mathcal{U}_infty : mathcal{U}_infty ,這會導致羅素悖論(Russells paradox),為了避免羅素悖論。我們引入了宇宙的層級概念:

mathcal{U_0}:mathcal{U_1}:mathcal{U_2}:dots

Coq 中我們有時候會見到 	exttt{Type}:	exttt{Type} ,但這其實只是 	exttt{Type}_i:	exttt{Type}_j, ile j 的縮寫,這種縮寫法被稱為典型歧義(typical ambiguity)。此外,我們還假定宇宙是累積的(cumulative): A:mathcal{U}_iRightarrow A:mathcal{U}_{i+i} .

如果要描寫一組依賴類型 A 的類型,我們可以使用函數 B:A	o mathcal{U} ,我們把這樣的函數稱為類型族(或依賴類型,dependent types)。

4. 依賴函數類型(dependent function types, Pi 類型)

依賴函數類型的元素是值域類型依定義域元素的變化而變化的函數。由於也可以將其視為類型的笛卡兒積(Cartesian product),所以一般我們簡稱為 Pi 類型。

給定類型 A:mathcal{U} 和類型族 B:A	o mathcal{U} ,我們可以構建依賴函數 Pi_{(x:A)} B(x):mathcal{U} 。其他的標記方式有:

Pi_{(x:A)}B(x)phantom{two}prod_{(x:A)}B(x)phantom{two} Pi(x:A), B(x)

如果 B 是一個常類型族,那麼依賴函數類型就是普通的函數類型:

Variables A B:Type.Check (forall (a:A), B).A -> B : Type

1.5 乘積類型(product types)

如果 A,B:mathcal{U} ,那麼我們定義 A	imes B:mathcal{U} ,稱之為笛卡兒積A	imes B 的元素是對子 (a,b) 。我們再定義一個零元乘積類型(nullary product type),稱其為單位類型(unit type) 	extbf{1}:mathcal{U} . 單位類型的元素是一個特殊元素 star

類型論中類型引入的通用模式:

  1. 形成法則(formation rules):類型如何形成
  2. 構子,構造法則(construction rules):類型的元素如何構造
  3. 消除子,消除法則(elimination rules):如何使用類型的元素
  4. 計演算法則eta 歸約(computation rules, eta -reduction):消除子如何作用於構造子的
  5. (非必要的)唯一性原則eta 擴張(uniqueness principle, eta -expansion):以該類型為定義域或值域的映射的唯一性;如果唯一性原則不作為判斷等於法則,仍可以作為命題等於關係而得到證明,這就是命題唯一性原則

乘積類型的投射函數(projection functions)的類型:

	extsf{pr}_1:A	imes B 	o A\ 	extsf{pr}_2:A	imes B 	o B

投射函數的定義:

	extsf{pr}_1((a,b)) :equiv a\ 	extsf{pr}_2((a,b)):equiv b

使用遞歸子(recursor)來定義投射函數:

	extsf{rec}_{A	imes B} :prod_{C:mathcal{U}}(A	o B	o C)	o A	imes B 	o C

	extsf{rec}_{A	imes B}(C,g,(a,b)):equiv g(a)(b)\ 	extsf{pr}_1 :equiv 	extsf{rec}_{A	imes B}(A,lambda a.lambda b.a)\ 	extsf{pr}_2 :equiv 	extsf{rec}_{A	imes B}(B,lambda a.lambda b.b)\

單位類型的遞歸子:

	extsf{rec}_	extbf{1}: prod_{C:mathcal{U}}C	o	extbf{1}	o C\ 	extsf{rec}_	extbf{1}(C,c,star):equiv c.

對遞歸子的定義加以推廣從而可以定義作用於乘積類型的依賴函數(實質上是柯里化):

C:A	imes B	o mathcal{U} ,我們通過 g:prod_{(x:A)}prod_{(y:B)}C((x,y)) 來定義 f:prod_{(x:A	imes B)}C(x)

f((x,y)):equiv g(x)(y)

我們可以藉助這個定義來證明命題唯一性原則( A	imes B 中的每一個元素等同於一個對子):

	extsf{uniq}_{A	imes B}:prod_{x:A	imes B}((	extsf{pr}_1(x),	extsf{pr}_2(x)) =_{A	imes B} x).

對於任何一個 x:A ,我們都有一個自反元素 	extsf{refl}_x :x=_A x . 藉助這個自反元素,我們可以定義:

	extsf{uniq}_{A	imes B}((a,b)):equiv 	extsf{refl}_{(a,b)}

可以定義依賴函數的能力,意味著要想證明一個乘積里所有元素都擁有一個特徵,只需證明其典型元素(有序對子)擁有此特徵即可。針對全局應用以上原則,可以得到對於乘積類型的歸納(induction)函數。設 A,B:mathcal{U} ,我們有

	extsf{ind}_{A	imes B}: prod_{C:A	imes B	o mathcal{U}}(prod_{(x:A)}prod_{(y:B)}C((x,y)))	oprod_{x:A	imes B}C(x) \ 	extsf{ind}_{A	imes B}(C,g,(a,b)):equiv g(a)(b)

我們可以認為定義在對子上的依賴函數是通過笛卡爾乘積上的歸納原則(induction principle)獲取的。遞歸子實際上是 C 為常量時的一種特殊的歸納。歸納描述了乘積類型中元素的使用方法,所以也稱為依賴消除子(dependent eliminator),遞歸則被稱為無依賴消除子(non-dependent eliminator)

1.6 依賴對子類型(dependent pair types, Sigma -types)

依賴對子類型是對乘積類型的推廣。在集合論里它對應著不交和(見開頭的概念對照表)。對於類型 A:mathcal{U} 和類型族 B:A	omathcal{U} ,我們可以用以下方式標記依賴對子類型:

Sigma_{(x:A)}B(x), phantom{two}sum_{(x:A)}B(x),phantom{two}Sigma(x:A),B(x).

對於 a:A,b:B(a)(a,b):Sigma_{(x:A)}B(x) . 若 a 不在 B 中出現,那麼依賴對子類型就坍塌成無依賴對子類型,即普通的乘積類型。

依賴對子類型的第一和第二投射函數分別定義為:

	extsf{pr}_1:(sum_{x:A} B(x))	o A.phantom{two}	extsf{pr}_2: sum_{p:Sigma(x:a)B(x)} B(	extsf{pr}_1(p))

	extsf{pr}_1{((a,b))}:equiv a. phantom{two} 	extsf{pr}_2((a,b)):equiv b.

1.7 陪積類型(coproduct type)

對於 A,B:mathcal{U} ,我們引入 A+B:mathcal{U} 作為它們的陪積類型。陪積類型對應著集合論里的不交並(disjoint union)。我們同時也引入一個零元的情況:空類型 	extbf{0}:mathcal{U} .

A+B?{(0,a)|a∈A}∪{(1,b)|b∈B}

構建 A+B 的元素有兩種方法,一是通過左單射(left injection) 	extsf{inl}(a):A+B 得到 a:A ,一是通過右單射(right injection) 	extsf{inr}(b):A+B 得到 b:B 。空類型無從構建元素。

@inl : forall A B : Type, A -> A + B@inr : forall A B : Type, B -> A + B

要想構建一個定義域類型為 A+B 的無依賴函數 f:A+B	o C ,我們需要兩個函數: g_0:A	o C, g_1: B	o C ,然後再將 f 定義為:

f(	extsf{inl}(a)):equiv g_0(a),\ f(	extsf{inr}(b)):equiv g_1(b).

g_0:prod_{a:A}C(	extsf{inl}(a)),\ g_1:prod_{b:B}C(	extsf{inr}(b)).\

因此,函數 f 是通過分類分析(case analysis)來定義的。我們定義陪積類型的遞歸子如下:

	extsf{rec}_{(A+B)}:prod_{(C:mathcal{U})}(A	o C)	o(B	o C)	o A+B	o C.\ 	extsf{rec}_{(A+B)}(C,g_0,g_1,	extsf{inl}(a)):equiv g_0(a),\ 	extsf{rec}_{(A+B)}(C,g_0,g_1,	extsf{inr}(b)):equiv g_1(b).\

	extbf{0} 的遞歸子是 	extsf{rec}_0:prod_{(C:mathcal{U})}	extbf{0}	o C (無需給出定義等式,因為空類型是沒有元素的),邏輯上對應著爆炸原理(ex falso quodlibet)。

1.8 布爾值的類型(The type of booleans)

布爾值的類型 	extbf{2}:mathcal{U} 只有兩個元素 0_	extbf{2},1_	extbf{2}:	extbf{2} 。我們本可以通過陪積類型和單位類型來定義它: 	extbf{1}+	extbf{1}

和經典數學不同的是,布爾值不被視為真值或命題。

1.9 自然數(The natural numbers)

自然數類型 mathbb{N}:mathcal{U}無限類型(infinite types)的典型例子。通過自然數,我們可以遞歸地定義函數,並採用歸納法來進行證明(在這裡遞歸和歸納含義相近)。若要構建一個無依賴函數 f:mathbb{N}	o C ,我們只需要提供一個起點(starting point) c_0:C 以及一個「下一步」(next step)函數 c_s:mathbb{N}	o C	o C

f(c_0):equiv c_0,\ f(	extsf{succ}(n)):equiv c_s(n,f(n)).

我們稱 f 是通過原始遞歸(primitive recursion)來定義的。例如,我們可以用原始遞歸來定義函數 	extsf{double}

	extsf{double}(0):equiv 0\ 	extsf{double}(	extsf{succ}(n)):equiv 	extsf{succ}(	extsf{succ}(	extsf{double}(n)))

1.10 模式匹配和遞歸(pattern matching and recursion)

對於陪積,我們可以用兩種方式定義函數 f:A+B	o C 。第一種方式是使用遞歸子:

f:equiv 	extsf{rec}_{A+B}(C,g_0,g_1)

第二種方式是採用等式定義法:

f(	extsf{inl}(a)):equiv g_0(a)\ f(	extsf{inr}(b)):equiv g_1(b)

從後者到前者,我們可以使用 lambda 抽象便捷地定義函數:

f:equiv 	extsf{rec}_{A+B}(C,lambda a.Phi_0,lambda b.Phi_1)

如果我們在自然數上遞歸,可以使用下列方式定義函數:

f:equiv 	extsf{rec}_{mathbb{N}}(C,Phi_0,lambda n.lambda r.Phi_s)

其中 f(0):equiv Phi_0; f(	extsf{succ}(n)):equiv Phi_s , Phi_S :equiv Phi_s[f(n):=r] .

採用這種方式來遞歸地定義函數,或推廣至通過歸納來定義依賴函數,被稱為模式匹配(pattern matching)定義法。

1.11 命題作為類型(propositions as types)

從「命題作為類型」的角度來看,證明不再僅僅是數學推理的過程,證明本身也是一個數學對象。下面是一些用自然語言描述的命題及其類型論對應表示:

  • 真: 	extbf{1}
  • 假: 	extbf{0}
  • ABA	imes B
  • ABA+B
  • ABA	o B
  • A 當且僅當 B(A	o B)	imes (B	o A)
  • AA	o 	extbf{0}

最自然的類型論中的「命題作為類型」邏輯是構建主義/直覺主義邏輯,它不包括排中律。但類型論提供了「公設/公理自由」(axiomatic freedom),雖然在自然的直覺主義邏輯里沒有排中律,但這並不代表它「不承認」排中律。在適當的情境下我們仍然可以把排中律作為公理加入到邏輯系統里。

上面的命題-類型對應只考慮了命題邏輯。為了探討謂詞邏輯里的命題和類型的對應關係,我們有:

  • 對於所有 x:AP(x) 成立: Pi_{(x:A)}P(x)
  • 存在一個 x:A 使得 P(x) 成立: Sigma_{(x:A)}P(x)

此外,藉助類型論中的宇宙概念,我們還可以表達高階邏輯:

ig( prod_{P:A	omathcal{U}_i}P(a)	o P(b)ig):mathcal{U}_{i+1}

但值得注意的是,雖然我們有 mathbb{N}iff 	extbf{1} ,即 mathbb{N}	extbf{1}邏輯等同(logically equivalent)的。但它們的功能差別很大,所以兩者並不是「類型等同」的。

反過來看,類型也可以視為命題,通過提供一個元素作為證明。這樣的命題有時被讀為「 A被棲居的A is inhabited)」。

1.12 等同類型(Identity type)

根據類型論,命題「兩個同類型的元素 a,b:A 是等同(equal)的」必須對應著某個類型。這就是等同類型(equality/identity types)。等同類型是依賴於 A 的兩個副本的類型族。

	extsf{Id}_A:A	o A	omathcal{U}

	extsf{Id}_A(a,b) 就是表達上述命題的類型。這種等同關係是「命題等同」,而非之前討論的「判斷等同」。

除此以外,我們還可以將 a=b 的證據(witness)視為空間 Aab 之間的路徑(path)。兩點之間的路徑不止一條,所以兩個元素的等同也可以有不止一個證據。

等同類型是同倫類型論中最難理解的類型。因此這份筆記里僅僅對其做一個簡單的介紹,後續我會專門記錄一篇關於等同類型的筆記。

以上就是同倫類型論大致的類型論基礎,它和 Coq 的類型論還是有著細微的差別的,例如在同倫類型論中,沒有專門的命題宇宙 mathsf{Prop}

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


推薦閱讀:

【解析幾何】雙聯立(齊次化處理)解決定點問題
二重積分
「大炮打蚊子」計劃
Gauss與AGM(V-3)
【不等式】9-8不等式及其應用

TAG:類型論 | 數學 |