【TAPL学习笔记 5】Typed Arithmetic Expressions


本章我们使用静态类型来增广第三章的简单语言。

8.1 Types

首先回忆下算术表达式的语法:
在这里插入图片描述
我们在第三章看到对一个term求值要么得到value:
在这里插入图片描述
要么在某个阶段进入stuck,例如pred false。

stuck的terms对应无意义或者错误的程序。我们想要不去真正的求值来判别term的结果将永远不会陷入stuck。所以我们需要区分两类term,一类的求值结果将是数值;一类将是布尔值。我们引入两个类型,Nat和Bool,来区分term。元变量S,T,U将被作为类型使用。

但是,我们对于terms类型的区分将是保守的,只能利用静态信息。

8.2 Typing Relation

在这里插入图片描述
我们称一个term t是typable(或well typed)的,如果存在某个T使得t : T.
在这里插入图片描述
这种逆向命题有时称为对于typing relation的生成命题,因为给定一个有效的typing描述,它展示了这个陈述的证明如何被生成,直接导致了一个递归算法来计算terms的类型。

在3.5节我们引入了求值推导的概念;相似地,一个typing 推导也是typing rules实例的树。
在这里插入图片描述
在这里插入图片描述
在简单的类型系统中,每个term都只有一个单个的类型,并且只有一棵推导树;但是在第15章我们引入子类型后,这两个性质都将放松:意味着一个term可能有多个类型,并且可能有不同的推导树。

8.3 Safety = Progress + preservation

类型系统最基础的性质是safety(也称为soundness):well-typed terms不会出错。这里的出错就是我们定义的stuck state。我们通过两步来证明这个性质,即progress和preservation。
在这里插入图片描述
对于progress的证明来说,为了方便起见,我们记录Bool以及Nat类型的canonical forms的可能形状。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值