核心概念
本研究では、集合論的型(union、intersection、negation型)を持つ型システムにおける行多相性(row polymorphism)を定義し、研究する。レコード型にはrow変数を埋め込み、型の解釈を値の集合とみなし、部分集合関係として部分型関係を定義する。フィールド拡張、選択、削除の操作を持つ関数計算を定義し、その操作言語の型システムを提案し、その健全性を証明する。また、型付けと部分型関係の決定アルゴリズムを提供する。
摘要
本研究の目的は、集合論的型(union、intersection、negation型)を持つ型システムにおける行多相性(row polymorphism)を研究することである。
まず、レコード型に行変数を埋め込んだ型の構文を定義し、型の解釈を値の集合とみなし、部分集合関係として部分型関係を定義する。
次に、フィールド拡張、選択、削除の操作を持つ関数計算言語を定義し、その型システムを提案する。型システムの健全性を証明し、型付けと部分型関係の決定アルゴリズムを提供する。
型システムの特徴は以下の通り:
- レコード型にrow変数を埋め込むことで、レコードの追加/削除に対応できる
- 集合論的型(union、intersection、negation型)を用いることで、動的言語のプログラミングパターンを精密に表現できる
- 部分型関係の決定アルゴリズムを提供することで、型推論を実現できる
本研究は、動的言語に静的型システムを導入する取り組みの一環であり、特にElixir言語への漸進的型システムの導入を目指している。
統計資料
レコード型 {domain: list(term()),...} は、domain フィールドが list(term())型であり、その他のフィールドを表す...を含む。
レコード型 {domain: list(atom() or a), f} は、domain フィールドが list(atom() or a)型であり、その他のフィールドをf が表す。
レコード型 {:domain => not(list(term())), g} は、domain フィールドが存在しないか list(term())型ではない場合に、domain フィールドが list(atom())型となり、その他のフィールドをg が表す。