論理学やコンピュータサイエンス、特に自動推論において、単一化とは、左辺=右辺の形式をとる記号表現間の等式を解くアルゴリズム的プロセスである。例えば、x、y、zを変数とし、fを未解釈関数とすると、単一要素の等式集合{ f (1, y ) = f ( x , 2)}は、{ x ↦ 1, y ↦ 2}という置換を唯一の解とする構文的な一階述語論理の単一化問題である。
変数が取り得る値や、等価とみなされる式については、慣例が異なります。一階構文的統一では、変数は一階項の範囲を取り、等価性は構文的です。このバージョンの統一には唯一の「最適」な解があり、論理プログラミングやプログラミング言語の型システムの実装、特にHindley–Milnerに基づく型推論アルゴリズムで使用されます。高階統一(高階パターン統一に限定される場合もあります)では、項にラムダ式が含まれる場合があり、等価性はベータ還元までです。このバージョンは、証明支援システムや高階論理プログラミング(Isabelle、Twelf、lambdaPrologなど)で使用されます。最後に、意味的統一またはE-統一では、等価性は背景知識に依存し、変数はさまざまなドメインの範囲を取ります。このバージョンは、SMTソルバー、項書き換えアルゴリズム、暗号プロトコル解析で使用されます。
統一問題とは、解くべき方程式の有限集合E ={ l 1 ≐ r 1 , ..., l n ≐ r n }であり、 l i、r i は集合に含まれる。式または表現の。方程式セットまたは統一問題でどの表現または項が出現することが許され、どの表現が等しいとみなされるかに応じて、いくつかの統一の枠組みが区別されます。高階変数、つまり関数を表す変数が式で許される場合、そのプロセスは高階統一と呼ばれ、そうでない場合は一階統一と呼ばれます。各方程式の両辺を文字通り等しくする解が必要な場合、そのプロセスは構文的または自由統一と呼ばれ、そうでない場合は意味的または等式的統一、またはE統一、または理論による統一と呼ばれます。
各方程式の右辺が閉じている(自由変数がない)場合、その問題は(パターン)マッチングと呼ばれます。各方程式の左辺(変数を含む)はパターンと呼ばれます。[ 1 ]
形式的には、統一アプローチは
用語と理論の集合が解の集合にどのように影響するかの例として、構文的な一階述語論理の統一問題 { y = cons (2, y ) } は、有限項の集合上では解を持ちません。しかし、無限木項の集合上では、単一の解 { y ↦ cons (2, cons (2, cons (2,...))) }を持ちます。同様に、意味論的な一階述語論理の統一問題 { a ⋅ x = x ⋅ a } は、半群、つまり (⋅) が結合法則を満たすとみなされる場合、{ x ↦ a ⋅...⋅ a }の形式の各置換を解として持ちます。しかし、同じ問題をアーベル群で見た場合、つまり (⋅) が可換法則を満たすとみなされる場合、あらゆる置換が解として持ちます。
高階単一化の例として、単一要素集合 { a = y ( x ) } は、 y が関数変数であるため、構文上の二次単一化問題です。一つの解決策は { x ↦ a , y ↦ (恒等関数) } であり、もう一つの解決策は { y ↦ (各値をaにマッピングする定数関数), x ↦ (任意の値) } です。
置換とは写像のことである変数から項へ。表記法各変数の置換マッピングを指しますその用語に、 のために、そして他のすべての変数はそれ自身に。ペアごとに異なる必要があります。その置換を項に適用すると後置記法では次のように書かれます。;それは、各変数のすべての出現箇所を(同時に)置き換えることを意味します。用語においてによる。 結果置換を適用する期間にそれはその用語のインスタンスと呼ばれます1次例として、項に置換{ x ↦ h ( a , y ), z ↦ b }を適用すると、
用語用語と同等のインスタンスを持つつまり、何らかの代替のために、 それからより一般的に呼ばれる、 そしてより特別なもの、または包含されるものと呼ばれる。。 例えば、より一般的⊕が可換であれば、。
≡ が項の文字通りの(構文上の)同一性である場合、項が別の項よりも一般的かつ特殊であると言えるのは、両方の項が構文構造ではなく変数名のみが異なる場合に限られます。このような項は、互いのバリアントまたは名前の変更と呼ばれます。たとえば、 は 、 以来 そして しかし、は、 なぜなら、いかなる置換によっても後者の項を前者の項に変換することはできないからである。したがって、後者の項は前者の項よりも本質的に特別なものである。
任意の用語は、構造的に異なる用語よりも一般的かつ特殊である場合があります。たとえば、⊕ が冪等である場合、つまり常にすると、その用語はより一般的[注2 ]およびその逆も同様であるが、[注3 ]ただしそして構造が異なる。
代替品置換よりも特別である、または置換に包含されるもしに包含される各用語についてまた、次のように言います。より一般的より厳密には、空でない無限集合を考えます。補助変数の方程式が統一問題には以下の変数が含まれる.次に置換別の置換によって包含される代役がいる場合すべての項に対して、[ 2 ] 例えばに包含される使用、 しかし に包含されない、 としては、 [ 3 ]
置換σは、l i σ ≡ r i σの場合、統一問題Eの解である。このような置換は、Eの統一子とも呼ばれます。たとえば、⊕ が結合法則を満たす場合、統一問題 { x ⊕ a ≐ a ⊕ x } には { x ↦ a }、{ x ↦ a ⊕ a }、{ x ↦ a ⊕ a ⊕ a } などの解がありますが、問題 { x ⊕ a ≐ a } には解がありません。
与えられた統一問題Eに対して、統一子の集合Sは、各解の置換がS内の何らかの置換によって包含される場合に完全であると呼ばれる。完全な置換集合は常に存在する(例えば、すべての解の集合)が、一部のフレームワーク(例えば、無制限の高階統一)では、解が存在するかどうか(つまり、完全な置換集合が空でないかどうか)を決定する問題は決定不能である。
集合Sは、そのどの要素も他の要素を包含しない場合に最小であると呼ばれます。フレームワークによっては、完全かつ最小の置換集合は、0 個、1 個、有限個、または無限個の要素を持つ場合があり、冗長な要素の無限連鎖のためにまったく存在しない場合もあります。 [ 4 ]したがって、一般に、統合アルゴリズムは、完全な集合の有限近似を計算します。これは最小である場合もそうでない場合もありますが、ほとんどのアルゴリズムは可能な限り冗長な統合子を回避します。[ 2 ] 1 階構文統合については、Martelli と Montanari [ 5 ]は、解決不可能性を報告するか、それ自体で完全かつ最小の置換集合を形成する単一の統合子を計算するアルゴリズムを提供しました。これは最も一般的な統合子と呼ばれます。

1 階項の構文的統一は、最も広く使用されている統一フレームワークです。これは、Tが(ある与えられた変数の集合V、定数の集合C 、およびn項関数記号の集合F n上の) 1階項の集合であり、≡ が構文的等価性であることに基づいています。このフレームワークでは、各解ける統一問題{ l 1 ≐ r 1 , ..., l n ≐ r n }には、完全かつ明らかに最小の単一解集合{ σ }があります。その要素σは、問題の最も一般的な統一子( mgu )と呼ばれます。各潜在方程式の左辺と右辺の項は、mgu を適用すると構文的に等しくなります。つまり、l 1 σ = r 1 σ ∧ ... ∧ l n σ = r n σとなります。問題の任意の統一子は、mgu σによって包含されます[注 4 ]。 mgu は、変種を除いて一意です。S 1 と S 2 が両方とも同じ構文的統一問題の完全かつ最小の解集合である場合、S 1 = { σ 1 }およびS 2 = { σ 2 }は、いくつかの置換σ 1およびσ 2に対して成り立ち、xσ 1は問題に現れる各変数xに対してxσ 2の変種となります。
例えば、単一化問題 { x ≐ z , y ≐ f ( x ) } には単一化子 { x ↦ z , y ↦ f ( z ) } が存在する。
これは最も一般的な統一子でもあります。同じ問題に対する他の統一子としては、例えば { x ↦ f ( x 1 ), y ↦ f ( f ( x 1 ) ), z ↦ f ( x 1 ) }、{ x ↦ f ( f ( x 1 )), y ↦ f ( f ( f ( x 1 ))), z ↦ f ( f ( x 1 )) } などがあり、同様の統一子は無限に存在します。
別の例として、問題g ( x , x ) ≐ f ( y ) は、≡ がリテラル同一性であるという点では解がありません。なぜなら、左辺と右辺に適用された置換はそれぞれ最外側のgとfを保持し、最外側の関数記号が異なる項は構文的に異なるからです。
記号は、変数が関数記号より前に来るように順序付けられます。項は、記述の長さが増加する順に並べられ、同じ長さの項は辞書順に並べられます。[ 6 ]項の集合Tに対して、その不一致パスpは、 Tの 2 つの要素項が異なる、辞書順に最小のパスです。その不一致集合は、 pから始まる部分項の集合であり、形式的には{ t | p : t ∈ T } です。[ 7 ]
アルゴリズム: [ 8 ]
統一する用語の集合Tが与えられた場合σを最初は恒等置換と する 永遠に T σが単一要素集合である場合、 σを返す。D をT σの不一致集合とする。s 、t をDの辞書順で最小の 2 つの項とする。sが変数でない場合、またはsがtに含まれる場合、 「NONUNIFIABLE」を返す 。 終わり
ジャック・エルブランは1930年に統一の基本概念について議論し、アルゴリズムの概要を示した。[ 9 ] [ 10 ] [ 11 ]しかし、ほとんどの著者は最初の統一アルゴリズムをジョン・アラン・ロビンソンに帰している(囲み記事参照)。[ 12 ] [ 13 ] [注5 ]ロビンソンのアルゴリズムは、時間と空間の両方で最悪の場合指数関数的な挙動を示した。[ 11 ] [ 15 ]多くの著者がより効率的な統一アルゴリズムを提案している。[ 16 ]最悪の場合線形時間の動作をするアルゴリズムは、Martelli & Montanari (1976)とPaterson & Wegman (1976)によって独立に発見されました[注 6 ] Baader & Snyder (2001)は Paterson-Wegman と同様の手法を使用しているため線形ですが、[ 17 ]ほとんどの線形時間統合アルゴリズムと同様に、 DAG表現の構築などの入力の前処理と出力の後処理のオーバーヘッドのため、入力サイズが小さい場合は Robinson バージョンよりも遅くなります。de Champeaux (2022)も入力サイズに対して線形複雑度ですが、入力サイズが小さい場合は Robinson アルゴリズムと同等の性能を発揮します。高速化は、前処理と後処理を不要にする述語計算のオブジェクト指向表現を使用することで実現され、代わりに変数オブジェクトが置換の作成とエイリアシングの処理を担当します。ド・シャンポーは、プログラムオブジェクトとして表現された述語論理に機能を追加できる能力は、他の論理演算を最適化する機会も提供すると主張している。[ 15 ]
以下のアルゴリズムはよく知られており、Martelli & Montanari (1982)に由来する。[注7 ]有限集合が与えられた場合 of potential equations, the algorithm applies rules to transform it to an equivalent set of equations of the form { x1 ≐ u1, ..., xm ≐ um } where x1, ..., xm are distinct variables and u1, ..., um are terms containing none of the xi. A set of this form can be read as a substitution. If there is no solution the algorithm terminates with ⊥; other authors use "Ω", or "fail" in that case. The operation of substituting all occurrences of variable x in problem G with term t is denoted G {x ↦ t}. For simplicity, constant symbols are regarded as function symbols having zero arguments.
An attempt to unify a variable x with a term containing x as a strict subterm x ≐ f(..., x, ...) would lead to an infinite term as solution for x, since x would occur as a subterm of itself. In the set of (finite) first-order terms as defined above, the equation x ≐ f(..., x, ...) has no solution; hence the eliminate rule may only be applied if x ∉ vars(t). Since that additional check, called occurs check, slows down the algorithm, it is omitted e.g. in most Prolog systems. From a theoretical point of view, omitting the check amounts to solving equations over infinite trees, see #Unification of infinite terms below.
For the proof of termination of the algorithm consider a triple where nvar is the number of variables that occur more than once in the equation set, nlhs is the number of function symbols and constants on the left hand sides of potential equations, and neqn is the number of equations. When rule eliminate is applied, nvar decreases, since x is eliminated from G and kept only in { x ≐ t }. Applying any other rule can never increase nvar again. When rule decompose, conflict, or swap is applied, nlhs decreases, since at least the left hand side's outermost f disappears. Applying any of the remaining rules delete or check can't increase nlhs, but decreases neqn. Hence, any rule application decreases the triple with respect to the lexicographical order, which is possible only a finite number of times.
Conor McBride observes[18] that "by expressing the structure which unification exploits" in a dependently typed language such as Epigram, Robinson's unification algorithm can be made recursive on the number of variables, in which case a separate termination proof becomes unnecessary.
In the Prolog syntactical convention a symbol starting with an upper case letter is a variable name; a symbol that starts with a lowercase letter is a function symbol; the comma is used as the logical and operator. For mathematical notation, x,y,z are used as variables, f,g as function symbols, and a,b as constants.

サイズnの構文的一階述語論理の単一化問題の最も一般的な単一化子は、2 nのサイズを持つ可能性がある。例えば、問題最も一般的な統一子を持つ図を参照。このような爆発による指数関数的な時間計算量を回避するために、高度な統合アルゴリズムは木ではなく有向非巡回グラフ(DAG)上で動作する。 [ 19 ]
単一化の概念は、論理プログラミングの根幹をなす考え方の一つです。具体的には、単一化は、論理式の充足可能性を判定するための推論規則である解決の基本的な構成要素です。Prologでは、等号は=一階述語論理の単一化を意味します。これは変数の内容を束縛するメカニズムを表し、一種の一回限りの代入と見なすことができます。
プロローグ:
+、、、、を含むほとんどの演算は、によって評価されません。したがって、たとえば、は構文的に異なるため、充足できません。整数算術制約の使用により、-これらの演算が解釈および評価される形式のE-単一化が導入されます。[ 20 ]*/=1+2 = 3#=型推論アルゴリズムは通常、単一化に基づいており、特に関数型言語であるHaskellやMLで使用されるHindley-Milner型推論が用いられます。たとえば、Haskell 式 の型を推論しようとすると、コンパイラはリスト構築関数 の型、最初の引数 の型、および2 番目の引数 の型を使用します。多相型変数は と単一化され、2 番目の引数は と単一化されます。は と の両方を同時に持つことはできないため、この式は正しく型付けされていません。True : ['x']a -> [a] -> [a](:)BoolTrue[Char]['x']aBool[a][Char]aBoolChar
Prologの場合と同様に、型推論のためのアルゴリズムを以下のように示すことができる。
順序付き論理では、各項にソート(型)を割り当て、ソートs 1を別のソートs 2のサブソートとして宣言することができます。これは一般的にs 1 ⊆ s 2と表記されます。たとえば、生物について推論する場合、ソートdog をソートanimalのサブソートとして宣言すると便利です。あるソートsの項が必要な場合は、代わりにsの任意のサブソートの項を指定できます。たとえば、関数宣言mother : animal → animalと定数宣言lassie : dog があると仮定すると、項 mother ( lassie ) は完全に有効で、ソートはanimalです。犬の母親が犬であるという情報を提供するために、別の宣言mother : dog → dogを発行することができます。これは、プログラミング言語のオーバーロードと同様に、関数オーバーロードと呼ばれます。
ウォルターは、順序ソート論理の項の統一アルゴリズムを与え、宣言された任意の 2 つのソートs 1、s 2に対して、それらの共通部分s 1 ∩ s 2も宣言する必要があるとしました。x 1とx 2 がそれぞれソートs 1とs 2の変数である場合、方程式x 1 ≐ x 2の解は { x 1 = x、x 2 = x } であり、ここでx : s 1 ∩ s 2です。 [ 23 ] このアルゴリズムを節ベースの自動定理証明器に組み込んだ後、彼はベンチマーク問題を順序ソート論理に変換することで解決することができ、それによって多くの単項述語がソートに変換されるため、問題の規模を 1 桁縮小することができました。
Smolka は、パラメトリック多相性を可能にするために、順序ソート論理を一般化しました。 [ 24 ] 彼のフレームワークでは、サブソート宣言は複雑な型式に伝播されます。プログラミングの例として、パラメトリックソートリスト( X ) を宣言できます ( XはC++ テンプレートのように型パラメータです)。サブソート宣言int ⊆ floatから、関係list ( int ) ⊆ list ( float ) が自動的に推論され、整数の各リストは float のリストでもあることを意味します。
Schmidt-Schaußは、項宣言を可能にするために、順序ソート論理を一般化した。 [ 25 ] 例として、サブソート宣言even ⊆ intおよびodd ⊆ intを仮定すると、∀ i : int . ( i + i ) : evenのような項宣言により、通常のオーバーロードでは表現できなかった整数加算の特性を宣言することができる。
無限木に関する背景情報:
統一アルゴリズム、Prolog II:
アプリケーション:
E-統一とは、与えられた方程式の集合の解を、方程式に関する背景知識Eを考慮に入れて見つける問題である。Eは普遍的な等式の集合として与えられる。特定の集合Eについては、方程式を解くアルゴリズム(E-統一アルゴリズムとも呼ばれる)が考案されているが、他の集合については、そのようなアルゴリズムは存在しないことが証明されている。
例えば、aとbが異なる定数である場合、方程式は演算子について何もわかっていない純粋に構文的な統一に関しては、解決策はありません。ただし、は可換であることがわかっているので、置換{ x ↦ b、y ↦ a }は上記の方程式を解きます。
背景知識Eは、 の可換性を示すことができる。普遍的な平等によってすべてのu、vに対して。
ある理論の統一が決定可能であるとは、その理論に対して、あらゆる入力問題に対して終了する統一アルゴリズムが考案されている場合をいう。ある理論の統一が半決定可能であるとは、その理論に対して、あらゆる解決可能な入力問題に対して終了する統一アルゴリズムが考案されているが、解決不可能な入力問題の解を永遠に探し続ける可能性がある場合をいう。
以下の理論については、統一性が決定可能である。
以下の理論については、統一性は半決定可能である。
Eに対して収束項書き換えシステムRが利用可能な場合、片側パラモジュレーションアルゴリズム[ 37 ] を使用して、与えられた方程式のすべての解を列挙することができます。
Gを解決すべき統一問題、Sを恒等置換として、規則は非決定論的に適用され、空集合が実際のG として現れるまで続きます。この場合、実際のSは統一置換となります。パラモジュレーション規則の適用順序、Gからの実際の方程式の選択、およびmutateにおけるRの規則の選択に応じて、さまざまな計算経路が可能です。一部の経路のみが解につながり、他の経路はG ≠ {} で終了し、それ以上の規則は適用できません (例: G = { f (...) ≐ g (...) })。
例えば、項書き換えシステムRでは、 consとnilから構築されたリストの追加演算子を定義します。ここで、cons ( x , y ) は、簡潔にするために中置記法でx . yと書きます。例えば、 app ( a . b . nil , c . d . nil ) → a . app ( b . nil , c . d . nil ) → a . b . app ( nil , c . d . nil ) → a . b . c . d . nil は、書き換え規則 2,2, および 1 を使用してリストa . b . nilとc . d . nilを連結することを示しています。Rに対応する等式理論E は、 Rの合同閉包であり、どちらも項の二項関係として見なされます。例えば、app ( a . b . nil , c . d . nil ) ≡ a . b . c . d . nil ≡ app ( a . b . c . d . nil , nil ) となります。パラモジュレーションアルゴリズムは、例Rを入力として、そのEに関する方程式の解を列挙します。
統一問題 { app ( x , app ( y , x )) ≐ a . a . nil } の計算パスの成功例を以下に示します。変数名の衝突を避けるため、書き換えルールは、ルールmutateによって使用される前に毎回一貫して名前が変更されます。v 2 、v 3、... はこの目的のためにコンピュータによって生成された変数名です。各行で、Gから選択された方程式が赤で強調表示されています。mutate ルールが適用されるたびに、選択された書き換えルール ( 1または2 ) が括弧内に示されます。最後の行から、統一置換S = { y ↦ nil、x ↦ a . nil } が得られます。実際には、 app ( x、app ( y、x )) { y ↦ nil、x ↦ a . nil } = app ( a . nil , app ( nil , a . nil )) ≡ app ( a . nil , a . nil ) ≡ a . app ( nil , a . nil ) ≡ a . a . nilは、与えられた問題を解決します。 「mutate(1), mutate(2), mutate(2), mutate(1)」を選択することで得られる、2 つ目の成功する計算パスは、置換S = { y ↦ a . a . nil , x ↦ nil } につながりますが、ここでは示されていません。他のパスでは成功しません。

R がEの収束項書き換えシステムである場合、前のセクションに代わるアプローチは「狭窄ステップ」を連続的に適用することであり、これにより最終的に与えられた方程式のすべての解が列挙されます。狭窄ステップ (図を参照) は、
形式的には、l → r がRからの書き換え規則の名前を変更したコピーであり、項sと共通の変数がなく、部分項s | p が変数ではなく、mgu σを介してlと統一できる場合、s は項t = sσ [ rσ ] p、つまり項sσに狭めることができ、 pの部分項はrσに置き換えられます。sをtに狭めることができる状況は、一般的にs ↝ tと表記されます。直感的には、一連の狭めステップt 1 ↝ t 2 ↝ ... ↝ t n は、一連の書き換えステップt 1 → t 2 → ... → t nと考えることができますが、使用される各規則を適用可能にするために必要な場合、最初の項t 1がさらにインスタンス化されます。
上記のパラモジュレーション計算例は、以下の狭窄シーケンスに対応します(「↓」はここでのインスタンス化を示します)。
最後の項v 2 . v 2 . nil は、元の右辺の項a . a . nilと構文的に統一できます。
狭窄補題[ 38 ]は、項sのインスタンスが収束項書き換えシステムによって項tに書き換えられる場合、 sとtはそれぞれ項s ′とt ′に狭窄および書き換えられ、t ′はs ′のインスタンスとなることを保証する。
形式的には、ある置換 σ に対してsσ → ∗ tが成り立つ場合、ある置換 τ に対してs ↝ ∗ s ′およびt → ∗ t ′およびs ′ τ = t ′となる項s ′、t ′が存在する。

多くのアプリケーションでは、一階項の代わりに型付きラムダ項の統一を考慮する必要があります。このような統一は、しばしば高階統一と呼ばれます。高階統一は決定不能であり、[ 39 ] [ 40 ] [ 41 ]、このような統一問題には、最も一般的な統一子がありません。たとえば、唯一の変数がfである統一問題 { f ( a , b , a ) ≐ d ( b , a , c ) } には、{ f ↦ λ x .λ y .λ z . d ( y , x , c ) }、{ f ↦ λ x .λ y .λ z . d ( y , z , c ) }、{ f ↦ λ x .λ y .λ z . d ( y , z , c ) }、{ f ↦ λ x .λ y .λ z . d ( y , a , c ) }, { f ↦ λ x .λ y .λ z . d ( b , x , c ) }, { f ↦ λ x .λ y .λ z . d ( b , z , c ) } および { f ↦ λ x .λ y .λ z . d ( b , a , c ) }。高階ユニフィケーションのよく研究されている分野は、αβη 変換によって決定される等号を法とする単純型ラムダ項のユニフィケーションの問題です。Gérard Huet は、ユニフィケーションの空間を体系的に探索できる半決定可能な(事前) ユニフィケーション アルゴリズム[ 42 ]を与えました(Martelli-Montanari [ 5 ]のユニフィケーション アルゴリズムを、高階変数を含む項のルールで一般化したもの)。これは実際に十分にうまく機能するようです。ユエ[ 43 ]とジル・ドゥウェック[ 44 ]このテーマに関する調査記事を執筆した。
高階単一化のいくつかのサブセットは、決定可能であり、解決可能な問題に対して最も一般的な単一化子を持つという意味で、良好な振る舞いをします。そのようなサブセットの 1 つは、前述の一次項です。Dale Miller による高階パターン単一化[ 45 ]もそのようなサブセットの 1 つはです。高階論理プログラミング言語λPrologとTwelf は、完全な高階単一化からパターン断片のみを実装するように変更しました。驚くべきことに、パターン単一化は、各非パターン単一化問題を、後続の置換によって単一化がパターン断片に配置されるまで保留すれば、ほとんどすべてのプログラムに対して十分です。関数をコンストラクタとして単一化すると呼ばれるパターン単一化のスーパーセットも良好な振る舞いをします。[ 46 ] Zipperposition 定理証明器には、これらの良好な振る舞いのサブセットを完全な高階単一化アルゴリズムに統合するアルゴリズムがあります。[ 2 ]
計算言語学において、省略形構成の最も影響力のある理論の1つは、省略形は自由変数で表され、その値は高階統一を用いて決定されるというものである。例えば、「ジョンはメアリーが好きで、ピーターも好き」の意味表現は like( j , m ) ∧ R( p )であり、R の値 (省略形の意味表現) は、like( j , m ) = R( j ) という式で決定される。このような式を解くプロセスは、高階統一と呼ばれる。[ 47 ]
ウェイン・スナイダーは、高階統一とE統一の両方の一般化、すなわち等式理論を法とするラムダ項を統一するアルゴリズムを示した。[ 48 ]
{{cite book}}: CS1 maint: 複数の名前: 著者リスト (リンク)