尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

16 - Metatheory of subtyping

16 - Metatheory of subtyping
📅 发布时间:2026/6/18 0:12:29

Subtyping 提到的规则并不适合实现,原因在于 T-SUB 和 S-Trans 规则推导中的项 \(t\) 没有任何约束的元变量(没有对形状作出限制)。

image

这意味着对于任意一个项 \(t\),无法确定在什么时机使用什么规则做类型推导。

image

S-Trans 的另一个问题是,\(U\) 的搜索空间近乎无穷大。解决所有这些问题的方法是:用两种新的关系,算法子类型关系 algorithmic subtyping 和算法类型关系 algorithmic typing,来替换普通的子类型和类型关系。然后证明这种替换是正确的。

类型检查器 type checker 会调用子类型检查器 subtype checker 判断 \((S, T)\) 是否满足 \(\mapsto S <: T\),即 \(S\) 和 \(T\) 是否满足算法子类型关系。算法子类型关系中省略了 S-Trans 和 S-Refl 规则。

关于 record 的 width,depth 和 permutation 规则被合并成一个规则 S-RCD:

image

image

引理:证明 S-RCD 和原先的三个规则是等价的

image

引理:证明 S-REFL 和 S-TRANS 在只包含函数类型和 record 类型的子类型系统中是不必要的

image

证明 1 :

对 S 的类型进行归纳:

  • Top:通过 S-Top 自然成立

  • 函数类型:通过 S-ARROW 规则对 \(T_1\) 和 \(T_2\) 做归纳

  • record:通过 S-RCD 自然成立

证明 2:

对推导过程进行归纳,考虑最后一条被应用的规则:

  • 不是 S-TRANS:对剩余的规则继续归纳

  • 是 S-TRANS:那么存在 \(S <: U\) 和 \(U <: T\) 两个子推导,同时讨论这两个子推导的最后一条规则:

  • 任意一个规则 + S-Top 或者 S-Top + 任意一个规则可以直接替换成 S-Top

  • S-Arrow + S-Arrow:参考 https://roife.github.io/posts/tapl-16/

image

其余的情况类似。

image
image

算法子类型规则和原先的子类型规则是等价的。

image

通过上面的算法子类型规则,可以构造出一个子类型检查算法:

image

这个算法是可判定的。

image

前面一半可以从“算法子类型规则和原先的子类型规则是等价的”验证;至于后面一半,可以从算法中观察到,函数的参数规模在逐渐减小,因此不可能存在无限调用序列。

上面的工作消除了 S-REFL 和 S-TRANS,类型关系中 T-SUB 的处理也很麻烦,也需要以同样的方式把类型关系变成语法驱动的。和消除 S-TRANS 的思路类似,在消除 S-TRANS 规则的时候,我们把 S-TRANS 在推导树的位置往上提升,直到基类型 base types。T-SUB 的位置可以在推导树上下推,比如:

  • T-SUB + T-ABS:

image

image

  • T-SUB + T-APP:

T-SUB 出现在左部子推导:

image

根据上面的算法子类型关系,\(S_{11} \rightarrow S_{12} <: T_{11} \rightarrow T_{12}\) 的上一条推导规则不会是 S-REFL 或者 S_TRANS,只能是 S-ARROW:

image

改写得到:

image

T-SUB 出现在右部子推导:

image

image

  • T-SUB + T-SUB:

image

可以把任意的类型推导重写为:T-SUB 出现在 T-APP 的右子推导的末尾,或者在整个推导的末尾。如果简单删除整个推导末尾的 T-SUB 并不会有什么影响,反而使得项 \(t\) 得到了一个最小的类型,这样就只剩下 T-APP 处的 T-SUB 了,那么可以用一个新的函数应用的项上的类型规则取代 T-SUB:

image

image

同样地,算法类型关系是 sound 和 complete 的。

对于具有多个结果分支的表达式需要有一些额外的机制,比如对于算术表达式 if:

image

因为要求这个 if 表达式具有一致的类型,因为要求两个分支的最小公共超类型,即 \(\{x: Bool\}\),这称为两个类型的 join:

image

image

image

引入 Bot 类型需要对算法类型关系做一点扩展:

image

image

相关新闻

  • 国产项目管理工具崛起:Gitee如何以本土优势赋能企业研发效能
  • 项目调度管理系统(源码+文档+讲解+演示)
  • OB-Oracle百亿级数据存储方案

最新新闻

  • 052、回流焊与波峰焊基础
  • 终极免费等距图表工具:FossFLOW完全指南与一键部署方案
  • 2026江浙沪线下零基础AI培训避坑指南:从转行到高薪就业的理性选择 - 品牌报告
  • 2026 武汉卫生间漏水维修避坑指南,正规防水维修公司口碑 top5 公司推荐 - 防水资讯
  • 如何用Video Speed Controller浏览器扩展彻底改变你的视频观看效率
  • 2026 海口卫生间漏水维修避坑指南,正规防水维修公司口碑 top5 公司推荐 - 防水资讯

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号