正規化
Rigorは比較と報告の前に型を正規化します。正規化は診断、キャッシュ、エクスポートされたシグネチャが安定するように決定論的でなければなりません(MUST)。
この文書は正規化規則の権威ある一覧です。これらを裏付ける束はvalue-lattice.mdにあります。ここで参照される演算子(~T、T - U、T?)はtype-operators.mdで定義されています。Dynamic[T]の代数はspecial-types.mdにあります。
- ネストされたユニオン(union、合併型とも)と積をフラット化する。
- 重複するユニオンと積のオペランドを除去する。
- ユニオンから
botを削除する(T | bot = T)。 - 積から
topを削除する(T & top = T)。 T?を内部的にT | nilに展開する。- ドメインが既知の場合、有限集合の差と補完を正規化する。
- 否定的事実は正のドメインに対するスコープ事実として保持する;除外された値だけから正のドメインを導入しない。
- 大きなドメインに対して保持された否定的事実にバジェットを設定し、バジェットが超過したときに表示を広げる(inference-budgets.md参照)。
- RBS消去まで(rbs-erasure.md参照)ハッシュシェイプ(shape)の開放性と読み取り専用マーカーを保持する。
- より明確な場合は表示のために
true | falseをboolに折り畳む。 - リテラルの精度が大きくなりすぎるか高コストになるまで保持する;その後は名前的ベースに広げる。
untypedをtopに正規化するのではなく、動的由来のラッパーを明示的に保持する。- 動的由来のユニオン、積、差は静的ファセットを変換してラッパーを保持することで正規化する。
特別な結果の同一性
Section titled “特別な結果の同一性”void | botは結果サマリーでvoidに折り畳まれます。なぜならbotパスは通常値を提供しないからです。完全なvoid対bot規則についてはspecial-types.mdを参照してください。
正規化は決定論的でなければなりません(MUST)。同等の入力は、設定されたバジェットと権威あるシグネチャの変更を除き、実行間および解析器インスタンス間で同一の出力を生成しなければなりません(MUST)。この決定論性が診断、キャッシュ、エクスポートされたシグネチャを編集とCIの実行にわたって比較可能にします。
表示との相互作用
Section titled “表示との相互作用”正規化はエンジン内部の正規化です。差、補完、動的由来型の診断表示契約(contract)はtype-operators.mdとdiagnostic-policy.mdにあります。表示規則は正規化された型をより読みやすく描画する場合がありますが(例: true | falseの代わりにboolを表示)、基礎となる型の同一性を変更してはなりません(MUST NOT)。
© 2026 TypedDuck. Licensed under CC BY-SA 4.0.