統一とサブタイプのあるサイクルの回避

コンテキスト

I realize that subtyping often doesn’t admit principle types,
and that inference in the presence of subtypes is undecidable. I’m
working in a コンテキスト where typechecking should simply fail there is
not a single most general solution, and where annotations can be

タイプチェック中に、統一を使用して推論する必要のあるタイプのタイプがあり、タイプ変数\$ alpha、 beta
\$などである可能性があるタイプシステムがあるとします。

If, at some point, the constraint \$alpha <: T_1 to T_2\$,
where \$to\$ is the usual function type constructor, then we can
decompose this into \$alpha = alpha_1 to alpha_2\$, with \$T_1
<: alpha_1\$ and \$alpha_2 <: T_2\$.

The Problem

The problem arises if you have constraints \$alpha_2 <:
beta_1 to beta_2\$, \$beta_2 <: alpha_1 to alpha_2\$.

In such a case, we get: \$alpha_2 = alpha_{21} to alpha_{22},
beta_1 <: alpha_{21}, alpha_{22} <: beta_2 \$ from the
first constraint, and \$beta_2 = beta_{21} to beta_{22},
alpha_2 <: beta_{21}, beta_{22} <: alpha_2\$ from our
second problem.

If we substitute from our equalities, we then get (among other
constraints), \$alpha_{22} <: beta_{21} to beta_{22}\$ and
\$beta_{22} <: alpha_{21} to alpha_{22}\$, which is identical
to the form of our original problem. Clearly if we continue solving
this way, we will never terminate.

When going to write a proof of termination, the problem is that
substitution decreases the number of unsolved variables but
increases the structural-size of the problems, and solving
subtyping decreases the structural size of the problems, but
increases the number of unsolved variables, so they don’t work in a
well-founded ordering.

My Solution Attempt

With my definition of subtyping, if \$alpha_2 <: beta_1 to
beta_2\$, \$beta_2 <: alpha_1 to alpha_2\$ has no solution.
The problem seems to be the “cycle”, so if we do a sort of occurs
check and fail when cycles are detected (or turn them into equality
cycles, which will fail except for \$alpha <: beta wedge beta
<: alpha\$).

I’m not exactly certain how to formalize a cycle like this, and
how such a check would give me something that I can use in a proof
of termination.

My Question

My work is about the specifics of a particular subtyping system,
but the problem here seems very general, so I’m wondering if this
is a known problem, if there are known solutions to it, and if
there is research that either formalizes or disproves my intuition

What kind of cycles in subtyping constraints do I need to
eliminate to avoid this infinite looping? Or is this a deeper
problem with no solution?

ベストアンサー

subseteq alpha \$という形式になります。ここで、\$ alpha
\$は統一変数です。そうであれば、ある種のアイデアは発生チェック規則の一種に従うことでしょう。サイクルを排除するためにできることの1つは、システムに解決策があることを不変的に維持することです。構築するのが最も簡単な解決策（ただし、ある意味では一般的ではない）は、\$
alpha subseteq A \$の形式のすべての制約に対して\$ alpha：= A \$を設定し、\$ alpha：=
\$ A subseteq alpha \$という形式のすべての制約に対してtop \$です（そして、いくつかの制約の左/右に\$
alpha
\$が現れるなら、おそらくいくつかの作業があります）。この解を有効にするには、すべての統一変数を​​同時にインスタンス化して、その定義にサイクルを誘導すべきではありません。これを行うには、統一変数の依存グラフを作成します。ここで、\$
alpha \$は各制約\$ alpha subseteq A \$の\$ A
\$の統一変数に依存します。次に、取得したグラフにサイクルが含まれていないことを確認する必要があります。