安全与移动性名义演算类型系统详解
1. 类型系统基础概念与示例
1.1 类型推导示例
在类型推导的过程中,我们会遇到一些有趣的情况。例如:
- (G, n:G[Shh] ⊢n : G[Shh])
- (G, n:G[Shh] ⊢⟨n⟩: G[Shh])
- (G ⊢(νn:G[Shh])⟨n⟩: G[Shh])
然而,(⊢(νG)(νn:G[Shh])⟨n⟩: G[Shh]) 却无法推导,原因是 (G ∈fn(G[Shh]))。
类似地,项 ((νm:W)m[(νG)(νn:G[Shh])⟨n⟩]) 也不能进行类型推导,因为它包含了前面无法类型化的项。不过,通过将 ((νG)) 跨越环境边界进行挤出操作,得到的项 ((νm:W)(νG)m[(νn:G[Shh])⟨n⟩]) 看起来似乎可以进行类型推导。但实际上,考虑 (m) 的类型,它必须是 (H[T ]) 的形式,其中 (H) 是某个组,(T) 是 (m) 内部交换消息的类型,这里 (T) 为 (G[Shh]),即 ((νm:H[G[Shh]])(νG)m[(νn:G[Shh])⟨n⟩]),由于第一个 (G) 超出了作用域,所以该项无法类型化。
这个例子表明,((νG)) 向环境内部的侵入(向内浮动)不会破坏良好的类型推导,因为 ((νG)) 不能进入 ((νm:W)) 限制的作用域,而该限制创建了一个环境 (m),其中交换的消息具有以 (G) 命名的类型。不过,项 ((νG)(νm:H[G[Shh]])m[(νn:G[Shh])⟨n⟩]) 是可以类型化的,但此时 ((νG)) 不能再进行侵入操作。
超级会员免费看
订阅专栏 解锁全文
1491

被折叠的 条评论
为什么被折叠?



