#show regex("\p{sc=Hani}+"): set text(font: ("Noto Serif CJK TC"), lang: "zh", region: "tw")
#set par(leading: 1.25em) // 行距

=== 2.8 型別檢查於$lambda arrow.r$
$x : alpha arrow.r alpha, space y : (alpha arrow.r alpha) arrow.r beta tack.r (lambda z : beta . lambda u : gamma .z)(y space x): gamma arrow.r beta $

```(a)| ``` \*$x : alpha arrow.r alpha$\*

```(b)||``` \*$y : (alpha arrow.r alpha) arrow.r beta$\*

```    || ...```

```(n)||```$(lambda z : beta . lambda u : gamma .z)(y space x): gamma arrow.r beta$

appl 拆解

```(a) | ``` \*$x : alpha arrow.r alpha$\*

```(b) ||``` \*$y : (alpha arrow.r alpha) arrow.r beta$\*

``` (m1)|| ``` $lambda z : beta . lambda u : gamma .z:?_1$

``` (m2)|| ``` $y space x:?_2$

```(n) ||```$(lambda z : beta . lambda u : gamma .z)(y space x): gamma arrow.r beta$

繼續反推

```(a) | ``` \*$x : alpha arrow.r alpha$\*

```(b) ||``` \*$y : (alpha arrow.r alpha) arrow.r beta$\*

```     |||  ``` \*$z : beta$\*

```     ||||  ``` \*$u : gamma$\*

```     ||||  ``` $lambda u.z : gamma -> beta$

``` (m1)|| ``` $lambda z : beta . lambda u : gamma .z:beta->(gamma->beta)$

``` (m2)|| ``` $y space x:beta$

```(n) ||```$(lambda z : beta . lambda u : gamma .z)(y space x): gamma arrow.r beta$

就可以得到一串推論過程。

但是，$(lambda z: beta lambda u : gamma .z )(y space x)$

用beta-reduction處理可得：

$(lambda u : gamma .(y space x))$

型別是：$gamma arrow.r beta$，也和剛才的推論出來的(n)的型別相同。

=== 2.9 找term於$lambda ->$

$a in T =>$ a 是 T 的inhabitant（居民）

type 是邏輯表達式(proposition)

term構築型別的證明

證明有一個term，滿足

$?:A->B->A$

證明法：逆著回推，箭頭$->$型別表示abst抽象。
#pagebreak()

```|```\*$x:A$\*

```||```\*$y:B$\*

```||``` $x : A$

```|``` $lambda y. x : B->A$

$lambda x.lambda y.x : A->B->A$

PAT-interpretation
- proposition as types命題即型別
- proof as terms證明即term

=== 2.10 $lambda -> $的一般性質
dom、$harpoon.tr$投影(projection)、$subset.eq$次上下文(subcontext)

定義
1. 上下文：$Gamma equiv x_1 : sigma_1, ..., x_n: sigma_n=>$即上下文的定義域(domain)是$(x_1, x_2, ..., x_n)$
2. 若所有的宣告變數一樣，且排序一致，則$Gamma' subset.eq Gamma$，即$Gamma'$是$Gamma$的次上下文
3. $Gamma'$是$Gamma$上下文的permutation(排列)，若$Gamma'$的變數宣告於$Gamma$有，且反之亦然。
4. 若$Gamma$是上下文，$Phi$是變數集合，$Gamma$在$Phi$上的投影(projection)，即$Gamma harpoon.tr Phi$是$Gamma'$，滿足$d o m ( Gamma')= d o m(Gamma) sect Phi$.

定理2.10.3自由變數公理

$Gamma tack.r L:sigma => F V(L) subset.eq d o m(Gamma)$

任何自由變數x在L出現，則在$Gamma$有$x:sigma$這個宣告。

任何變數的型別不會搞混。

Lemma 2.10.5
1. thinning(厚化): 令$Gamma'$和$Gamma''$是滿足$Gamma' subset.eq Gamma''$的上下文，$Gamma' tack.r M : sigma => Gamma'' tack.r M : sigma$
2. condensing(濃縮): $Gamma tack.r M: sigma => Gamma harpoon.tr F V\(M\) tack.r M : sigma $. 意思是可以移除$x:sigma$，若是x不是M的自由變數，所以保持這些和M有關的宣告。
3. Permutation(排列): 若$Gamma tack.r M:sigma $且 $Gamma'$是$Gamma$的permutation，則$Gamma'$是上下文，滿足$Gamma' tack.r M : sigma$. 指context的變數順序不影響推演能力（變數宣告互相獨立）

一個人可以加減junk變數到上下文，而不影響衍推能力(derivibility)。

junk包含於M中不自由的變數（typing的過程不會用到）

Lemma 2.10.7 - Generation Lemma

1. $Gamma tack.r x : sigma => x : sigma in Gamma$
2. if $Gamma tack.r M space N:tau$, then $exists sigma, space s.t. space Gamma tack.r M : sigma -> tau $ and $Gamma tack.r N : sigma $
3. $Gamma tack.r lambda x : sigma . M : rho => exists tau space s.t. space Gamma, x : sigma tack.r M : tau and rho equiv sigma -> tau$ 

Lemma 2.10.8 subterm Lemma

若M是legal$=>$任何M的subterm也legal。

if $exists Gamma_1, space sigma_1 space s.t. space Gamma_1 tack.r M:sigma_1$ 且L為M的subterm$=> exists Gamma_2, sigma_2 space s.t. space Gamma_2 tack.r L : sigma_2$

在一個上下文F，一個term至多有一個type，也就是：

$Gamma tack.r M : sigma and Gamma tack.r M : tau => gamma equiv tau$

我們可以分出4種求型別或term的類型：

1. well-typeness

? $tack.r $ term: $ ?$

1a. type assignment

context $tack.r$ term : ? 

2. type checking

#set math.vec(delim: none)
context $vec( ?, tack.r)$ term: type
#set math.vec(delim: "(")

3. term finding
context $tack.r ? :$ type


以上4種皆為decidible（可決定的）。

=== Sec.2.11 歸約與 $lambda arrow.r$
Ch1.6有beta-reduction（$beta$歸約）的公式：


1a) x[x:=N]≡N // x:=N 即N代入x

1b) y[x:=N]≡y (if x≢y)

2) (P Q)[x:=N]≡(P[x:=N])(Q[x:=N])

3) (λy.P)[x:=N]≡($lambda z.P^(y→z)$[x:=N])若 $lambda z.P^(y→z)$是λy.P的variation，且z∉FV(N) 

為了型別系統的改變，所以我們把3)改為：

***3)(λ$y:sigma$.P)[x:=N]≡($lambda z:sigma . P^(y→z)$[x:=N])*** 若$lambda z: sigma . P ^(y arrow.r z)$是$lambda y : sigma . P$的alpha variant，且滿足$z in.not F V (N)$

Lemma 2.11.1替換Lemma

假設$Gamma', x:sigma,Gamma'' tack.r M:tau$且$Gamma' tack.r N : sigma$

則$Gamma', Gamma'' tack.r M[x:=N]:tau$

==== Def 定義 One-step reduction$arrow.r_(beta)$ for $Lambda_(𝕋)$

1. (Basis)

$(lambda x : sigma . M) N arrow.r_(beta)M[x:=N]$

(compatibility)見定義1.8.1。

Theorem 2.11.3

Church-Rosser Theorem ( Theorem 1.9.8)在 $lambda arrow.r$也成立。

Corollary 推論 2.11.4

假設有 $M =_(beta) N$則$exists L space s.t. M arrow.twohead.r_(beta) L$且$N arrow.twohead.r_(beta) L$

Lemma 2.11.5 Subject Reduction:

$Gamma tack.r L : rho$且$L arrow.twohead.r L'$ 則$Gamma tack.r L' : rho$

beta歸約不改變typability和其型別。

Reduction是一種形式的calculation。

$x : alpha arrow.r alpha, y : (alpha arrow.r alpha) arrow.r beta tack.r lambda u : gamma. y space x : gamma arrow.r beta$

任何計算皆為finite（有限的）！

Theorem 2.11.6

strong normalization theorem (Termination theorem)

任何合法的M是strongly normalizing（強正規化的）。

strong normalizing 保證運算有結果

因為$lambda arrow.r$的能力有限，有足夠能力的運算系統會有無法終止的情況發生。雖然能終止的系統也可能要很久（雖然是有限久）才能算出結果。

== 2.12結果

untyped lambda運算的缺點會消失：
- 沒有自我代入(self-application)
- 保證有 beta-normal forms
- 不是所有的legal lambda term 都有不動點


== 2.13 結論
 positive points of untyped lambda calculation 擴展到簡單型別 lambda 運算
system$lambda arrow.r$太弱，不能封裝所有運算的函數，不能作為數學的形式化。

- call-by-value
$(lambda x : sigma . M) N$先求出N再代入
- call-by-name
$(lambda x : sigma . M) N$直接將N代入M中的各個x（$M[x:=N]$）