単一化
unification
ちゃんと書くならタイトルは「型推論の一階の単一化」とかになると思うmrsekut.icon
2つの項が同一または同等であるかどうかを判定する
同一を示すものを統語論的単一化
同等を示すものを意味論的単一化
と呼ぶ
「同等であるかどうか」は換言すれば「適当な具体型を代入したときに一致することがあるかどうか」
John Alan Robinson
型推論の文脈では
2つの型を引数にとって、それらが等しいかどうかを判定する
code:hs
unify :: Constraint -> Constraint -> TI Bool
unyfyVarは何をしているのか
片方が型変数で、片方が具体型の場合に実行する
https://qiita.com/h_sakurai/items/f16502e6f867b5e90b86
例
table:例
入力1 入力2 結果
CVar 1 CInt True
CInt CBool False
CVar 1 CVar 2 True
CLambda (CVar 1) (CVar 2) CLambda (CVar 2) (CVar 3) True
CVar 1 CLambda (CVar 2) (CVar 1) occurs checkによりFalse
関連
エルブランの定理
Pattern Matching
変数が片方にしか存在しない単一化と見ることができる
単一化問題
単一化子
semi-unification
参考
7-6. Unification
/mrsekut-book-4781912850/177
https://ja.wikipedia.org/wiki/ユニフィケーション
https://www.math.nagoya-u.ac.jp/~garrigue/papers/unification/proofsummit.pdf