JOIN(X):基于约束的Join - 演算类型推断及相关分析
环境片段解释与逻辑准则
环境片段的解释是整体性的,而非逐点解释。L·Mρ将环境片段映射到单类型元组集合。多态环境片段A把每个名称ui映射到类型方案σi,这些类型方案相互独立,体现为对A的解释是它们解释的笛卡尔积。而∀¯α[C].B是主体为元组的类型方案,按定义5.5解释为其实例集合(生成的上锥)。
在同一数学空间解释∀¯α[C]↠B和∀¯α[C].B,可给出它们重合的逻辑准则:
定义5.7:C ⊩∀¯α[C].B ≤∀¯α[C]↠B成立,当且仅当在每个满足ρ ⊢C的赋值ρ下,L∀¯α[C].BMρ ⊇L∀¯α[C]↠BMρ成立。该准则独立于约束逻辑X,有助于以通用方式证明JOIN(X)的正确性。
在应用泛化准则时,规则Def要求C ⊩∀¯α[C].B ≤∀¯α[C]↠B是正确的。但程序执行时每次只化简定义的一个子句,所以分别确保每个子句中消息类型一致即可。我们将准则应用于每个子句Ji ▷Pi,通过将B限制到其定义名称集合得到B|dn(Ji)。
类型安全性的半语法证明
为JOIN(X)给出类型安全性证明,表明其相对于B(T)是安全的。即每个判断C, Γ ⊢J描述了所有形如ρ(Γ ⊢J )(其中ρ ⊢C)的B(T)判断集合,赋予JOIN(X)判断逻辑意义,得到简洁自然的证明。整体方法仍是半语法的,因为B(T)本身已通过语法方式证明正确。
定义5.8:当定义时(参见定义5.5),JσKρ是多类型,即S的元素。表示函数J·Kρ逐点扩展到类型环境。若Γ是S环境,则JΓKρ是S环境。
定理5.9(安全性):设ρ(u : α),
超级会员免费看
订阅专栏 解锁全文
636

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



