「型別理論與形式證明筆記」修訂間的差異

出自Tan Kian-ting的維基
跳至導覽 跳至搜尋
行 41: 行 41:
若<math display="inline">\exists\sigma\text{ such that }M:\sigma</math>,則<math display="inline">M</math>是可賦予型別的(typable)。
若<math display="inline">\exists\sigma\text{ such that }M:\sigma</math>,則<math display="inline">M</math>是可賦予型別的(typable)。


=== 2.3 Church-typing (explicit typing) 和 Curry-typing (implicit typing) ===
== 2.3 Church-typing (explicit typing) 和 Curry-typing (implicit typing) ==


# typing à la Church(explicit typing,外顯型別):先給定型別予變數,再推出其他表達式的型別。
# typing à la Church(explicit typing,外顯型別):先給定型別予變數,再推出其他表達式的型別。
行 91: 行 91:


用形式語言的方式寫出來如下: <math display="inline">u:(\alpha \rightarrow \alpha) \rightarrow \beta,v:(\alpha \rightarrow \alpha) \vdash \left( \left( \lambda x: \beta.\lambda y: \gamma.x \right)(u\ v) \right):\gamma \rightarrow \beta</math>
用形式語言的方式寫出來如下: <math display="inline">u:(\alpha \rightarrow \alpha) \rightarrow \beta,v:(\alpha \rightarrow \alpha) \vdash \left( \left( \lambda x: \beta.\lambda y: \gamma.x \right)(u\ v) \right):\gamma \rightarrow \beta</math>
=== 2.4 Church lambda→演算的推演規則 (derivation rules) ===
先賦予型別的lambda term,其名為<math display="inline">\Lambda_{\left\{ {\mathbb{T}} \right\}}</math>,定義如下:
<math display="inline">\Lambda_{\mathbb{T}} = V\left| \left( \Lambda_{\mathbb{T}}\ \Lambda_{\mathbb{T}} \right) \right|\left( \lambda V:{\mathbb{T}}.\Lambda_{\mathbb{T}} \right)</math>,其中<math display="inline">V</math>表變數的集合。
'''定義'''
# statement形如<math display="inline">M:\sigma</math>,其中<math display="inline">M \in \Lambda_{\mathbb{T}}</math>且<math display="inline">\sigma \in {\mathbb{T}}</math>(<math display="inline">\sigma</math>是型別)。<math display="inline">M</math>稱為主體(subject),<math display="inline">\sigma</math>稱為類型(type)。
# declaration(宣告)是有變數當主體的statement
# context(上下文)是一系列不同主體(不同變數)的宣告列表(註:context可為空)
# judgement(判斷)形如<math display="inline">\Gamma \vdash M:\sigma</math>,其中左邊的<math display="inline">\Gamma</math>是上下文,右邊的<math display="inline">M:\sigma</math>是statement


[[category:資訊]]
[[category:資訊]]

於 2024年7月8日 (一) 23:25 的修訂

ISBN 9781107036505

原標題:Type Theory and Formal Proof: An Introduction

作者:Rob Nederpelt, Herman Geuvers

編輯格式注意

  1. 章節內文太多的時候,拆成新頁面。
  2. typst 撰寫 + pandoc 產生貼上於個人維基的內容。

第1章:無型別lambda運算(untyped lambda calculus)

第2章:簡單型別lambda運算(simple typed lambda calculus)

2.2 simple type 簡單型別

型別變數 type variable:用希臘字母表示。

:所有簡單型別,定義如下:

  1. 型別變數:,表達基本型別,比如list, nat等
  2. 箭頭型別:

箭頭是右結合的,和函數的apply代入不同。比較

註:在本書中, 指數學世界的自然數和列表,而nat和list指電腦程式世界的同樣的型別。

「term 有類型(type、型別)」寫成

type有唯一性。比如:若,則

簡單型別lambda演算的出現的推演規則:

  1. application(代入):若 ,則
  2. abstration(抽象):若 ,則

在這種情況下,因為不可能既是這種型別存在,所以這種式子不會被構造到。

,則是可賦予型別的(typable)。

2.3 Church-typing (explicit typing) 和 Curry-typing (implicit typing)

  1. typing à la Church(explicit typing,外顯型別):先給定型別予變數,再推出其他表達式的型別。
  2. typing à la Curry(implicit typing,隱藏型別):先給定一個表達式,再推論其內變數可能的型別。

explicit typing的案例:

,如果,則

implicit typing的案例(需要用推理和類似合一 (unification) 的方法): ,可以推論:

但是implicit typing的型別變數,只是一種示例,可以把β用「ω→ω」這種形式取代。

本書常用explicit typing。

我們用上面的explicit typing的範例,

可以推論到

則可以寫成:

在上下文下,

用形式語言的方式寫出來如下:

2.4 Church lambda→演算的推演規則 (derivation rules)

先賦予型別的lambda term,其名為,定義如下:

,其中表變數的集合。

定義

  1. statement形如,其中是型別)。稱為主體(subject),稱為類型(type)。
  2. declaration(宣告)是有變數當主體的statement
  3. context(上下文)是一系列不同主體(不同變數)的宣告列表(註:context可為空)
  4. judgement(判斷)形如,其中左邊的是上下文,右邊的是statement