Skip to content

Commit ff94937

Browse files
committed
add note of TAPL
1 parent 92dc8d0 commit ff94937

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

_posts/2025-10-27-types_and_ptogramming_languages.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ ast的节点开头包含一个info,描述了节点的来源。
205205

206206
lambda-calculus可以作为核心语言,只包含函数定义和函数应用。类似的还有pi-calculus和object-calculus。这些运算可以互相迁移。
207207

208+
ref: [Church, Alonzo. The Calculi of Lambda Conversion. Princeton University Press, 1941.](https://archive.org/details/the-calculi-of-lambda-conversion-couverture-alonzo-church-princeton-university-p)
209+
208210
丰富lambda-calculus,对各种特性增加语法糖,增加复杂的特性。对核心语言的拓展通常也会涉及类型系统的拓展。
209211

210212
### Basics
@@ -266,3 +268,45 @@ $$
266268
#### Church Numerals
267269

268270
数字是0的后继。表示一个函数执行多次某个操作。
271+
272+
$scc = \lambda_n. \lambda_s.\lambda_z. s (n\ s\ z);$
273+
274+
$plus = \lambda_m.\lambda_n.\lambda_s.\lambda_z.m\ s(n\ s\ z);$
275+
276+
$times = \lambda_m.\lambda_n.m(plus\ n) c_0;$
277+
278+
$iszro = \lambda_m.m(\lambda_x.fls) tru;$
279+
280+
$$
281+
zz = pair\ c_0\ c_0;\\
282+
ss = \lambda_p.pair(snd\ p)(plus c_1(snd p));
283+
prd = \lambda_m.fst(m\ ss\ zz);
284+
$$
285+
286+
$nil = \lambda c.\lambda n. n$
287+
288+
$cons = \lambda h.\lambda t.\lambda c.\lambda n. c\ h(t\ c\ n);$
289+
290+
$isnil = \lambda t. t (\lambda x.\lambda y.fls) tru;$
291+
292+
$head = \lambda t. t (\lambda x.\lambda y.x) nil;$
293+
294+
#### Enriching the Calculus
295+
296+
$\lambda$NB加入代数和布尔表达式的lambda-calculus。
297+
298+
$\lambda$NB中对代数和布尔都存在两种实现,可以相互转换。
299+
300+
Church encoding的问题是因为`call by value strategy`,代数运算的求值会被延迟,而原始类型则没有这个问题。
301+
302+
#### Recursion
303+
304+
有的表达式不是normal形式,但是无法被求值为normal形式,而是一直递归,这是`diverge`
305+
306+
`fixed-point combinator`实现递归函数$fix = \lambda f.(\lambda x.f(\lambda y. x\ x\ y))(\lambda x.f(\lambda y.x\ x\ y));$
307+
308+
#### Representation
309+
310+
Church数表示了原始数吗?Church数和真实的数没有可以被观测到的差异。
311+
312+
### Formalities

0 commit comments

Comments
 (0)