このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

左に型更新演算子が含まれるとき

xは変数、Kは変数を含まない型マップ、Tは任意の型(型項、型表現)だとして、証明ターゲット x<<K ⊆ T を考える。

x<<K は、暗黙に x も x<<K もオブジェクト型(明示的タグもなく、確定(非オプショナル)型)であることを含意しているので、Tがオブジェクト型でないときは証明ターゲット x<<K ⊆ T は成立しない。

したがって、http://d.hatena.ne.jp/m-hiyama-memo/19100110/1263114915 の右側分類で可能性があるのは:

  1. Tがオブジェクト型
  2. Tがオプショナル型
  3. Tが排他的ユニオン型
  4. Tがインターセクション型
  5. Tが変数

このなかで、オプショナル型、排他的ユニオン型、インターセクション型は分解還元処理を続けると、Tがオブジェクト型または変数のケースに帰着できる。Tが変数yのときは、証明ターゲットは x<<K ⊆ y で、推論は終り。

残るは、Tがオブジェクト型のとき。



話を簡単にするために、K = {α:U, β:V} とする。まず、

  1. x.α⊆T.α
  2. x.β⊆T.β

だが、これは

  1. U⊆T.α
  2. V⊆T.β

Tはオブジェクト型なので、T.α、T.βはwell-defined、UとVも決まった型だから、U⊆T.α, V⊆T.β は新しい証明ターゲットとなり、従来と同様な推論を継続(進行)できる。

γをαともβとも違う名前だとして、x.γ⊆T.γ は、T.γ がわかっても、これ以上はどうにもならない。ユニフィケーションの出力としては、α、β以外のすべてのγに対する x.γ⊆T.γ を出力する。Tに型変数が含まれるときは、T内の型が他のユニフィケーションの効果により具体化される可能性がある。最終的に残った (_.γ)∈T.γ をすべて実行時検査条件に加えるしかない。