主题缩减和健全性
1 主题缩减定理
主题缩减定理是Java类型系统的重要组成部分,它确保了Java程序在运行时不会出现类型错误。根据主题缩减定理,任何非基础良类型的Java项要么重写为另一个良类型项,其类型可以扩展到原始项的类型,要么重写为一个异常。此外,状态与环境保持一致。
1.1 主题缩减定理的具体内容
定理指出,对于一个符合环境Γ的状态σ,一个Java程序p具有Γ se p 33,一个非基础Javar项t具有数组属性,对于p和σ,以及一个类型T具有Γ, σ
r t: T,存在σ′,Γ′, t′, T′使得:
- 〈t, σ〉;p〈t′, σ′〉,以及Γ′, σ′`r t′: T′,并且t′具有数组属性,对于p和σ′,以及:
- T′=E-Thrn,E一个异常,σ′符合Γ, Γ′= Γ或
- Γ` T′ ≤wdn T,Γ′符合Γ, σ′符合Γ′
此外,如果t是一个非l-基础变量,那么〈t, σ〉;p〈t′, σ′〉和t′不是基础。同样,如果t是一个非l-基础变量且不是数组访问,那么T= T′。
1.2 定理的意义
主题缩减定理不仅保证了重写保留类型,还保证了对于任何结构良好、非基础项都存在重写步骤。这意味着对于静态类型正确的表达式,永远不会出现对象无法执行消息的情况(如Smalltalk中的“对象不理解消息”)。虽然它不排除通常的运行时错误(如索引越界或错误地给数组组件赋值),但它确实保证这些错误情况将引发异常,而不是被忽视并破坏运行时环境。