「型別理論與形式證明筆記」修訂間的差異
跳至導覽
跳至搜尋
Tankianting(討論 | 貢獻) |
Tankianting(討論 | 貢獻) |
||
行 104: | 行 104: | ||
# context(上下文)是一系列不同主體(不同變數)的宣告列表(註:context可為空) | # context(上下文)是一系列不同主體(不同變數)的宣告列表(註:context可為空) | ||
# judgement(判斷)形如<math display="inline">\Gamma \vdash M:\sigma</math>,其中左邊的<math display="inline">\Gamma</math>是上下文,右邊的<math display="inline">M:\sigma</math>是statement | # judgement(判斷)形如<math display="inline">\Gamma \vdash M:\sigma</math>,其中左邊的<math display="inline">\Gamma</math>是上下文,右邊的<math display="inline">M:\sigma</math>是statement | ||
==附註:本書使用的排版法== | |||
原本的書使用的排版法如下,類似[https://en.wikipedia.org/wiki/Fitch_notation Fitch的表示法(Fitch notation)],雖然可以用HTML硬畫,但是很不好當筆記使用: | |||
<div> | |||
<table style="margin-bottom:1em;"> | |||
<tr> | |||
<td style="border:1px solid black;padding:0.5em;">假設A</td></tr><tr> | |||
<td style="border-left:1px solid black; padding:1em;" ><table style="margin-bottom:0.5em;"> | |||
<tr> | |||
<td style="border:1px solid black;padding:0.5em;">假設B</td></tr><tr> | |||
<td style="border-left:1px solid black; padding:1em;" >C</td> | |||
</tr><tr> | |||
<td style="border-left:1px solid black; padding:1em;" >⋮</td> | |||
</tr><tr><td>D</td></tr> | |||
</table></td> | |||
</tr><tr><td>E</td></tr> | |||
</table> | |||
</div> | |||
所以姑且改編Fitch表示法,變如下: | |||
<pre> | |||
(a) *A* | |||
(b) | *B* | |||
(1) | | C | |||
| | ⋮ | |||
(n) | | D | |||
(n+1) | E | |||
</pre> | |||
[[category:資訊]] | [[category:資訊]] |
於 2024年7月9日 (二) 23:39 的修訂
ISBN 9781107036505
原標題:Type Theory and Formal Proof: An Introduction
作者:Rob Nederpelt, Herman Geuvers
編輯格式注意
- 章節內文太多的時候,拆成新頁面。
- typst 撰寫 + pandoc 產生貼上於個人維基的內容。
第1章:無型別lambda運算(untyped lambda calculus)
第2章:簡單型別lambda運算(simple typed lambda calculus)
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
附註:本書使用的排版法
原本的書使用的排版法如下,類似Fitch的表示法(Fitch notation),雖然可以用HTML硬畫,但是很不好當筆記使用:
假設A | ||||
|
||||
E |
所以姑且改編Fitch表示法,變如下:
(a) *A* (b) | *B* (1) | | C | | ⋮ (n) | | D (n+1) | E