类型系统理论(一)

文章讨论了一种类型系统,其中定义了bool和booln类型以及它们的运算。类型判断用e:t表示,且引入了变量和环境的概念。在变量存在的情况下,定义了代换规则以保持类型正确性,并强调了类型检查的不变性,即使在环境扩展或变量重排序后。文章还提到了操作语义在验证类型系统中的重要性。
摘要由CSDN通过智能技术生成

在我前面一篇文章中

true有一个类型叫做bool,
false有一个类型叫做bool
n有一个类型叫做N
true和n是e

Types t ::= bool | N
Terms e ::= true | false | n | e <= e | e + e | e ^ e

  • 如何表示值有一个type呢?
  • 就使用e:t来表示吧, 例如true : bool, 读作某一个值有一个类型
  • 所以:是一个关系运算符号
  • 我们如何定义值与类型间的关系呢?
    n:N => Num true:Bool => True
    左边的叫做条件:premises,
    右边的叫做结论: conclusion
    可以由这些东西推导出操作

当引入变量后一切又会变得不同

  • Example: let x = 5 in (x + x) <= 10, 左边是值

  • 但是我们如何推断出x:?

  • to handle with, the type judegemnet must konw what the x are

  • so we change the typing judegement to be Γ⊢e:T, 表示在当前的环境中寻找一个变量

  • 环境的引入Contents F ::= . | Γ,x:τ, 这个点可能表示这个上下文是空的, 如果不为空也就是右边那个。
    于是现在我们就可以写出下面这样的表达式:

  • we have: a type system, associating elements from one grammar(the terms) with elements form
    anther grammar (the types)

  • but does it really?

  • To prove, we must show type safety

substitution
because we have introduce the veriables into our language, 所以我们需要引入新的符号来表示变量的规则。
[e/x]true = true
[e/x]false = false
[e/x]n = n
[e/x](e1 + e2) = [e/x]e1 + [e/x]e2
[e/x](e1 ≤ e2) = [e/x]e1 ≤ [e/x]e2
[e/x](e1 ∧ e2) = [e/x]e1 ∧ [e/x]e2
[e/x]z = e when z = x
z when z = x
[e/x](let z = e1 in e2) = let z = [e/x]e1 in [e/x]e2 (∗)
(∗)α-rename表示z没有出现在e!

下面是几条公约

  1. If a term typechecks in a context, then it will still typecheck in a bigger context
    这句话是说一个变量在一个环境中具有某个类型, 现在我们扩展了这个类型, 使这个上下文具有了另外一个类型, 比如原来的上下文中只有a, 现在有了b, 那么a的类型还是和原来一样。也就是扩展但是不会破坏
  2. If a term typechecks in a context, then it will still typecheck aǒter reordering the variables in the context.
    已经检查出一个类型了, 但是现在我们调准了这个变量的位置, 这个变量的类型是不应该改变的。
    比如原来环境的顺序是Γ, a:Int, b:Int, 现在是Γ, b:Int, a:Int, 那么a的类型还是Int
  3. (Substitution) If Γ ⊢ e : τ and Γ, x : τ ⊢ e ′ : τ ′ then Γ ⊢ [e/x]e ′ : τ ′ . Subsituting a type-correct term for a variable will preserve type correctness。
    将一个类型正确的表达式替换到另外一个变量中依然会保证类型的正确性。
    下面是这几种证明

operational semantics: 更重要的是一个过程比如and的结果

  • we have a language and type system
  • we have a proof of substitu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值