2.2 simple type 簡單型別
型別變數 type variable: 用希臘字母表示。
:所有簡單型別,定義如下:
- 型別變數: ,表達基本型別,比如list, nat等
- 箭頭型別:
箭頭 是右結合的,和函數的apply代入不同。比較 和 。
註:在本書中, 和 指數學世界的自然數和列表,而nat和list指電腦程式世界的同樣的型別。
「term 有類型(type、型別) 」寫成
type有唯一性。比如:若 且 ,則
簡單型別lambda演算的出現的推演規則:
- application(代入):若 且 ,則
- abstration(抽象):若 且 ,則
在這種情況下,因為不可能既是 且 這種型別存在,所以這種式子不會被構造到。
若 ,則 是可賦予型別的(typable)。
2.3 Church-typing (explicit typing) 和 Curry-typing (implicit typing)
- typing à la Church(explicit typing,外顯型別):先給定型別予變數,再推出其他表達式的型別。
- typing à la Curry(implicit typing,隱藏型別):先給定一個表達式,再推論其內變數可能的型別。
explicit typing的案例:
設 ,如果 , , , ,則
implicit typing的案例(需要用推理和類似合一 (unification) 的方法): ,可以推論:
但是implicit typing的型別變數,只是一種示例,可以把β用「ω→ω」這種形式取代。
本書常用explicit typing。
我們用上面的explicit typing的範例,
可以推論到
,
則可以寫成:
在上下文 下,
用形式語言的方式寫出來如下:
2.4 Church lambda→演算的推演規則 (derivation rules)
先賦予型別的lambda term,其名為 ,定義如下:
,其中 表變數的集合。
定義
- statement形如 ,其中 且 ( 是型別)。 稱為主體(subject), 稱為類型(type)。
- declaration(宣告)是有變數當主體的statement
- context(上下文)是一系列不同主體(不同變數)的宣告列表(註:context可為空)
- judgement(判斷)形如 ,其中左邊的 是上下文,右邊的 是statement