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

出自Tan Kian-ting的維基
跳至導覽 跳至搜尋
行 130: 行 130:


注意上面的符號,逗號,表示連結上下文。上下文<math>\Gamma</math>可以為空。
注意上面的符號,逗號,表示連結上下文。上下文<math>\Gamma</math>可以為空。
推論可以由上到下讀,或是下到上讀推到目標。
推論不只是建構judgement,更是一種justify的方式。


1.變數沒有前提,只有conclusion,可以用在推演開頭,意思是在上下文內的變數可以從這個上下文推演出來。
1.變數沒有前提,只有conclusion,可以用在推演開頭,意思是在上下文內的變數可以從這個上下文推演出來。
行 147: 行 151:
}
}
</math>
</math>
;比較數學和邏輯學:
1. 數學:
<math> (func-appl)\cfrac{f : A \rightarrow B and ~c \in A}{f(c)\in B}</math>
<math> (func-abst)\cfrac{\forall x \in A, f(x)~\in~B}{f:~A\rightarrow B}</math>
2. 邏輯學:
*(⇒-elim 消去)<math display="inline">\cfrac{A \Rightarrow B\quad A}{B}</math>
*(⇒-intro 引入)(參考附錄的表記法)
<pre>
*Assume : A*
| ...
| B
------
A⇒B
</pre>
旗標flag(本筆記用雙星號**夾起來的地方表示變數定義或assumption假設)
旗杆(本筆記用串聯的豎線|標記)表示定義假設的範圍(scope)。
若∃上下文Γ, ∃型別ρ s.t.(such that) Γ⊢M:ρ(且M是pre-typed),則M是legal。


=附註:本筆記使用的邏輯推演排版法=
=附註:本筆記使用的邏輯推演排版法=

於 2024年7月17日 (三) 22:20 的修訂

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
Premiss 前提和Conclusion結論表達式

表達如:


其中前提(premiss)可以0個以上。

derivation scheme(推演規範)是:對於所有premiss都成立,則結論(conclusion)成立。

這個推演系統(derivation system)的三條規律

1. (var, 變數)

2. (appl, 應用)

3. (abst, 抽象)

注意上面的符號,逗號,表示連結上下文。上下文可以為空。

推論可以由上到下讀,或是下到上讀推到目標。

推論不只是建構judgement,更是一種justify的方式。

1.變數沒有前提,只有conclusion,可以用在推演開頭,意思是在上下文內的變數可以從這個上下文推演出來。

因為我們在conclusion(結論)不需要在左邊的上下文,所以3.抽象的被移到右邊的statement去。

自然演繹natural deduction的推演範例:

比較數學和邏輯學:

1. 數學:



2. 邏輯學:

  • (⇒-elim 消去)
  • (⇒-intro 引入)(參考附錄的表記法)
*Assume : A*
| ...
| B
------
A⇒B

旗標flag(本筆記用雙星號**夾起來的地方表示變數定義或assumption假設)

旗杆(本筆記用串聯的豎線|標記)表示定義假設的範圍(scope)。

若∃上下文Γ, ∃型別ρ s.t.(such that) Γ⊢M:ρ(且M是pre-typed),則M是legal。

附註:本筆記使用的邏輯推演排版法

原本的書使用的排版法如下,類似Fitch的表示法(Fitch notation),雖然可以用HTML硬畫,但是很不好當筆記使用:

假設A
假設B
C
D
E

所以姑且改編Fitch表示法,變如下:

(a) *假設A*
(b)   | *假設B*
(1)   | | C
      | | ⋮
(n)   | | D
(n+1) | E


範例:

*y : α → β*
| *z : α*
| | y : α → β
| | z : α
| | y z: β
| λz.(y z): α → β
λy.λz.(y z): (α → β) → α → β