В логике и информатике , в частности в автоматизированном рассуждении , унификация — это алгоритмический процесс решения уравнений между символическими выражениями , каждое из которых имеет вид Левая сторона = Правая сторона . Например, используя x , y , z в качестве переменных и принимая f в качестве неинтерпретируемой функции , набор уравнений синглтона { f (1, y ) = f ( x ,2) } является синтаксической проблемой унификации первого порядка, единственным решением которой является подстановка { x ↦ 1, y ↦ 2 }.
Соглашения различаются в отношении того, какие значения могут принимать переменные и какие выражения считаются эквивалентными. В синтаксической унификации первого порядка переменные ранжируются по терминам первого порядка , а эквивалентность является синтаксической. Эта версия унификации имеет уникальный «лучший» ответ и используется в логическом программировании и реализации системы типов языка программирования , особенно в алгоритмах вывода типов на основе Хиндли–Милнера . В унификации более высокого порядка, возможно, ограниченной унификацией шаблонов более высокого порядка , термины могут включать лямбда-выражения, а эквивалентность с точностью до бета-редукции. Эта версия используется в помощниках по доказательству и логическом программировании более высокого порядка, например 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 ↦ ( любое значение) }.
Подстановка — это отображение переменных в термины; обозначение относится к подстановке, отображающей каждую переменную в термин , для , и каждую другую переменную в себя; должны быть попарно различны. Применение этой подстановки к термину записывается в постфиксной нотации как ; это означает (одновременную) замену каждого вхождения каждой переменной в термине на . Результат применения подстановки к термину называется экземпляром этого термина . В качестве примера первого порядка применение подстановки { x ↦ h ( a , y ), z ↦ b } к термину
Если термин имеет экземпляр, эквивалентный термину , то есть, если для некоторой подстановки , то называется более общим , чем , и называется более специальным , чем или включенным в . Например, является более общим, чем если ⊕ коммутативен , так как тогда .
Если ≡ — буквальная (синтаксическая) идентичность терминов, термин может быть как более общим, так и более специальным, чем другой, только если оба термина отличаются только именами переменных, а не синтаксической структурой; такие термины называются вариантами или переименованиями друг друга. Например, является вариантом , так как и Однако не является вариантом , так как никакая подстановка не может преобразовать последний термин в первый. Поэтому последний термин, по сути, более специальный, чем первый.
Для произвольного , термин может быть как более общим, так и более специальным, чем структурно отличающийся термин. Например, если ⊕ является идемпотентом , то есть, если всегда , то термин является более общим, чем , [примечание 2] и наоборот, [примечание 3] хотя и имеют разную структуру.
Подстановка более специфична , чем или включается в подстановку, если включается в для каждого термина . Мы также говорим, что является более общим, чем . Более формально, возьмем непустой бесконечный набор вспомогательных переменных, такой, что ни одно уравнение в задаче объединения не содержит переменных из . Тогда подстановка включается в другую подстановку, если существует подстановка такая, что для всех терминов , . [2] Например , включается в , используя , но не включается в , так как не является экземпляром . [3]
Подстановка σ является решением задачи унификации E , если l i σ ≡ r i σ для . Такая подстановка также называется унификатором E . Например, если ⊕ ассоциативна , задача унификации { x ⊕ a ≐ a ⊕ x } имеет решения { x ↦ a }, { x ↦ a ⊕ a }, { x ↦ a ⊕ a ⊕ a } и т. д., тогда как задача { x ⊕ a ≐ a } не имеет решения.
Для заданной задачи унификации E множество унификаторов S называется полным , если каждая подстановка решения включается в некоторую подстановку в S. Полный набор подстановок всегда существует (например, набор всех решений), но в некоторых рамках (например, неограниченная унификация высшего порядка) проблема определения того, существует ли какое-либо решение (т. е. является ли полный набор подстановок непустым), неразрешима.
Множество S называется минимальным , если ни один из его членов не включает другой. В зависимости от структуры полный и минимальный набор подстановок может иметь ноль, один, конечное число или бесконечное число членов или может вообще не существовать из-за бесконечной цепочки избыточных членов. [4] Таким образом, в общем случае алгоритмы унификации вычисляют конечное приближение полного набора, который может быть минимальным или не быть, хотя большинство алгоритмов избегают избыточных унификаторов, когда это возможно. [2] Для синтаксической унификации первого порядка Мартелли и Монтанари [5] дали алгоритм, который сообщает о неразрешимости или вычисляет один унификатор, который сам по себе образует полный и минимальный набор подстановок, называемый наиболее общим унификатором .
Синтаксическая унификация термов первого порядка является наиболее широко используемой структурой унификации. Она основана на том, что T является множеством термов первого порядка (над некоторым заданным множеством V переменных, C констант и F n символов n -арных функций), а ≡ является синтаксическим равенством . В этой структуре каждая разрешимая проблема унификации { l 1 ≐ r 1 , ..., l n ≐ r n } имеет полное и, очевидно, минимальное, одноэлементное множество решений { σ } . Его элемент σ называется наиболее общим унификатором ( mgu ) проблемы. Термины в левой и правой части каждого потенциального уравнения становятся синтаксически равными, когда применяется mgu, т. е. l 1 σ = r 1 σ ∧ ... ∧ l n σ = r n σ . Любой унификатор проблемы включается [примечание 4] в mgu σ . MGU уникален с точностью до вариантов: если S 1 и S 2 являются как полными, так и минимальными множествами решений одной и той же задачи синтаксической унификации, то S 1 = { σ 1 } и S 2 = { σ 2 } для некоторых подстановок σ 1 и σ 2 , а xσ 1 является вариантом xσ 2 для каждой переменной x, встречающейся в задаче.
Например, задача объединения { 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 различаются. Его множество несогласия — это набор подтерминов , начинающихся с p , формально: { t | p : }. [7]
Алгоритм: [8]
Given a set T of terms to be unified
Let initially be the identity substitutiondo forever
if
is a singleton setthen
return
fi
let D be the disagreement set of
let s, t be the two lexicographically least terms in D
if
s is not a variableor
s occurs in tthen
return
"NONUNIFIABLE"
fi
done
Жак Эрбран обсудил основные концепции унификации и набросал алгоритм в 1930 году. [9] [10] [11] Однако большинство авторов приписывают первый алгоритм унификации Джону Алану Робинсону (см. вставку). [12] [13] [примечание 5] Алгоритм Робинсона имел наихудшее экспоненциальное поведение как во времени, так и в пространстве. [11] [15] Многочисленные авторы предложили более эффективные алгоритмы унификации. [16] Алгоритмы с худшим поведением линейного времени были обнаружены независимо Мартелли и Монтанари (1976) и Патерсоном и Вегманом (1976) [примечание 6] Баадер и Снайдер (2001) используют похожую технику, что и Патерсон-Вегман, поэтому являются линейными, [17] но, как и большинство алгоритмов унификации линейного времени, они медленнее версии Робинсона на входах небольшого размера из-за накладных расходов на предварительную обработку входов и постобработку выходных данных, таких как построение представления DAG . де Шампо (2022) также имеет линейную сложность по размеру входных данных, но может конкурировать с алгоритмом Робинсона на входах небольшого размера. Ускорение достигается за счет использования объектно-ориентированного представления исчисления предикатов, которое избегает необходимости предварительной и постобработки, вместо этого возлагая ответственность за создание подстановки и обработку псевдонимов на переменные объекты. де Шампо утверждает, что возможность добавления функциональности к исчислению предикатов, представленному в виде программных объектов, предоставляет возможности для оптимизации и других логических операций. [15]
Следующий алгоритм обычно представлен и происходит от Martelli & Montanari (1982). [примечание 7] Учитывая конечный набор потенциальных уравнений, алгоритм применяет правила для преобразования его в эквивалентный набор уравнений вида { x 1 ≐ u 1 , ..., x m ≐ u m }, где x 1 , ..., x m являются различными переменными, а u 1 , ..., u m являются членами, не содержащими ни одного из x i . Набор этой формы можно читать как подстановку. Если решения нет, алгоритм завершается с ⊥; другие авторы используют «Ω» или « fail » в этом случае. Операция замены всех вхождений переменной x в задаче G на член t обозначается G { x ↦ t }. Для простоты константные символы рассматриваются как символы функций, имеющие нулевые аргументы.
Попытка объединить переменную x с термином, содержащим x как строгий подтерм x ≐ f (..., x , ...), приведет к бесконечному термину как решению для x , поскольку x будет встречаться как подтерм самого себя. В наборе (конечных) терминов первого порядка, как определено выше, уравнение x ≐ f (..., x , ...) не имеет решения; следовательно, правило исключения может быть применено только если x ∉ vars ( t ). Поскольку эта дополнительная проверка, называемая happen check , замедляет алгоритм, она опускается, например, в большинстве систем Prolog. С теоретической точки зрения, опускание проверки равносильно решению уравнений над бесконечными деревьями, см. #Unification of infinite terms ниже.
Для доказательства завершения алгоритма рассмотрим тройку , где n var — число переменных, которые встречаются в наборе уравнений более одного раза, n lhs — число символов функций и констант в левых частях потенциальных уравнений, а n eqn — число уравнений. Когда применяется правило exclude , n var уменьшается, так как x исключается из G и сохраняется только в { x ≐ t }. Применение любого другого правила никогда не может снова увеличить n var . Когда применяется правило decompose , conflict или swap , n lhs уменьшается, так как по крайней мере самая внешняя f левой части исчезает. Применение любого из оставшихся правил delete или check не может увеличить n lhs , но уменьшает n eqn . Следовательно, любое применение правила уменьшает тройку относительно лексикографического порядка , что возможно только конечное число раз.
Конор Макбрайд замечает [18] , что «выражая структуру, которую использует унификация» на языке с зависимой типизацией, таком как Epigram , алгоритм унификации Робинсона можно сделать рекурсивным по числу переменных , и в этом случае отдельное доказательство завершения становится ненужным.
В синтаксическом соглашении Пролога символ, начинающийся с заглавной буквы, является именем переменной; символ, начинающийся со строчной буквы, является символом функции; запятая используется как логический оператор and . Для математической нотации x, y, z используются как переменные, f, g как символы функций, a, b как константы.
Самый общий унификатор синтаксической проблемы унификации первого порядка размера n может иметь размер 2 n . Например, проблема имеет самый общий унификатор , см. рисунок. Чтобы избежать экспоненциальной временной сложности, вызванной таким раздутием, продвинутые алгоритмы унификации работают с направленными ациклическими графами (dags), а не с деревьями. [19]
Концепция унификации является одной из основных идей логического программирования . В частности, унификация является базовым строительным блоком резолюции , правила вывода для определения выполнимости формулы. В Прологе символ равенства =
подразумевает синтаксическую унификацию первого порядка. Он представляет собой механизм связывания содержимого переменных и может рассматриваться как своего рода одноразовое присваивание.
В Прологе:
+
, -
, *
, /
, не оцениваются =
. Так, например, 1+2 = 3
невыполнимо, поскольку они синтаксически различны. Использование ограничений целочисленной арифметики #=
вводит форму E-унификации, для которой эти операции интерпретируются и оцениваются. [20]Алгоритмы вывода типов обычно основаны на унификации, в частности выводе типов Хиндли-Милнера , который используется функциональными языками Haskell и ML . Например, при попытке вывести тип выражения Haskell True : ['x']
компилятор будет использовать тип a -> [a] -> [a]
функции построения списка (:)
, тип Bool
первого аргумента True
и тип [Char]
второго аргумента ['x']
. Переменная полиморфного типа a
будет унифицирована с Bool
, а второй аргумент [a]
будет унифицирован с [Char]
. a
не может быть Bool
и Char
одновременно, поэтому это выражение некорректно типизировано.
Как и для Пролога, можно задать алгоритм вывода типа:
Унификация использовалась в различных областях исследований компьютерной лингвистики. [21] [22]
Логика сортировки по порядку позволяет назначить сорт или тип каждому термину и объявить сорт s 1 подсортдругого сорта s 2 , обычно записываемого как s 1 ⊆ s 2 . Например, при рассуждениях о биологических существах полезно объявить сорт dog подсортом сорта animal . Везде, где требуется термин некоторого сорта s , вместо него может быть указан термин любого подсорт s . Например, если предположить объявление функции mother : animal → animal и объявление константы lassie : dog , то термин mother ( lassie ) является совершенно допустимым и имеет сорт animal . Чтобы предоставить информацию о том, что мать собаки является собакой, в свою очередь, может быть выдано другое объявление mother : dog → dog ; это называется перегрузкой функций , аналогично перегрузке в языках программирования .
Вальтер предложил алгоритм объединения для терминов в логике с упорядоченной сортировкой, требующий для любых двух объявленных сортов 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] После включения этого алгоритма в автоматизированную доказательную машину теорем на основе предложений он смог решить контрольную задачу, переведя ее в логику с упорядоченной сортировкой, тем самым снизив ее на порядок, поскольку многие унарные предикаты превратились в сорта.
Смолка обобщил логику сортировки по порядку, чтобы разрешить параметрический полиморфизм . [24] В его фреймворке объявления подсортировки распространяются на выражения сложного типа. В качестве примера программирования можно объявить список параметрической сортировки ( X ) (где X является параметром типа, как в шаблоне C++ ), и из объявления подсортировки int ⊆ float автоматически выводится список отношений ( int ) ⊆ list ( float ), что означает, что каждый список целых чисел также является списком чисел с плавающей точкой.
Шмидт-Шаус обобщил упорядоченно-отсортированную логику, чтобы разрешить объявления термов. [25] Например, если предположить, что объявления подсортировки even ⊆ int и odd ⊆ int , то объявление термова типа ∀ i : int . ( i + i ) : even позволяет объявить свойство сложения целых чисел, которое не может быть выражено обычной перегрузкой.
Предыстория бесконечных деревьев:
Алгоритм объединения, Пролог II:
Приложения:
E-унификация — это проблема поиска решений для заданного набора уравнений с учетом некоторых фоновых знаний об уравнениях E. Последний задается как набор универсальных равенств . Для некоторых конкретных наборов E были разработаны алгоритмы решения уравнений (также известные как алгоритмы E-унификации ); для других было доказано, что таких алгоритмов не может существовать.
Например, если a и b — различные константы, уравнение не имеет решения относительно чисто синтаксического объединения , где ничего не известно об операторе . Однако, если известно, что коммутативен , то подстановка { x ↦ b , y ↦ a } решает приведенное выше уравнение, поскольку
Базовые знания E могли бы сформулировать коммутативность с помощью универсального равенства « для всех u , v ».
Говорят, что унификация разрешима для теории, если для нее разработан алгоритм унификации, который завершается для любой входной проблемы. Говорят, что унификация полуразрешима для теории, если для нее разработан алгоритм унификации, который завершается для любой разрешимой входной проблемы, но может продолжать вечно искать решения неразрешимой входной проблемы.
Унификация разрешима для следующих теорий:
Унификация полуразрешима для следующих теорий:
Если для E имеется сходящаяся система переписывания членов R , то для перечисления всех решений заданных уравнений можно использовать алгоритм односторонней парамодуляции [38] .
Начиная с G как задачи объединения, которую нужно решить, и S как замены тождества, правила применяются недетерминированно до тех пор, пока пустое множество не появится как фактическое G , в этом случае фактическое S является унифицирующей заменой. В зависимости от порядка применения правил парамодуляции, выбора фактического уравнения из G и выбора правил R в mutate возможны различные пути вычислений. Только некоторые из них приводят к решению, в то время как другие заканчиваются на 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 демонстрирует конкатенацию списков a . b . nil и c . d . nil , используя правило перезаписи 2,2 и 1. Эквациональная теория E, соответствующая R, является конгруэнтным замыканием R , оба из которых рассматриваются как бинарные отношения на терминах. Например, app ( a . b . nil , c . d . nil ) ≡ a . b . c . d . nil ≡ app ( a . b . c . d . nil , nil ). Алгоритм парамодуляции перечисляет решения уравнений относительно E при подаче примера R .
Ниже показан успешный пример пути вычисления для задачи унификации { 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)", приводит к замене S = { y ↦ a . a . nil , x ↦ nil }; здесь она не показана. Никакой другой путь не приводит к успеху.
Если R — это сходящаяся система переписывания членов для E , то альтернативный предыдущему разделу подход состоит в последовательном применении « шагов сужения »; это в конечном итоге перечислит все решения данного уравнения. Шаг сужения (см. рисунок) состоит в
Формально, если l → r является переименованной копией правила перезаписи из R , не имеющей общих переменных с термином s , а подтерм s | p не является переменной и унифицируем с l посредством mgu σ , то 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 .
Лемма об сужении [39] гарантирует, что всякий раз, когда экземпляр термина s может быть переписан в термин t с помощью конвергентной системы переписывания терминов, то s и t могут быть сужены и переписаны в термины s ′ и t ′ , соответственно, так что t ′ является экземпляром s ′ .
Формально: всякий раз, когда sσ t выполняется для некоторой подстановки σ, то существуют члены s ′ , t ′ такие, что s с ′ и т t ′ и s ′ τ = t ′ для некоторой подстановки τ.
Во многих приложениях требуется рассматривать унификацию типизированных лямбда-термов вместо термов первого порядка. Такая унификация часто называется унификацией высшего порядка . Унификация высшего порядка неразрешима , [40] [41] [42] , и такие проблемы унификации не имеют самых общих унификаторов. Например, проблема унификации { f ( a , b , a ) ≐ d ( b , a , c )}, где единственной переменной является f , имеет решения { f ↦ λ x.λ y.λ z . d ( y , x , 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 ) }. Хорошо изученной ветвью унификации высшего порядка является проблема унификации просто типизированных лямбда-терминов по модулю равенства, определяемого преобразованиями αβη. Жерар Юэ дал полуразрешимый алгоритм (пред)унификации [43] , который позволяет проводить систематический поиск пространства унификаторов (обобщая алгоритм унификации Мартелли-Монтанари [5] с правилами для термов, содержащих переменные высшего порядка), который, по-видимому, достаточно хорошо работает на практике. Юэ [44] и Жиль Довек [45] написали статьи, посвященные обзору этой темы.
Несколько подмножеств унификации высшего порядка ведут себя хорошо, в том смысле, что они разрешимы и имеют наиболее общий унификатор для разрешимых проблем. Одним из таких подмножеств являются ранее описанные члены первого порядка. Унификация шаблонов высшего порядка , предложенная Дейлом Миллером [46] , является другим таким подмножеством. Языки программирования логики высшего порядка λProlog и Twelf перешли от полной унификации высшего порядка к реализации только фрагмента шаблона; на удивление унификации шаблонов достаточно почти для всех программ, если каждая проблема унификации, не являющаяся шаблоном, откладывается до тех пор, пока последующая подстановка не поместит унификацию во фрагмент шаблона. Надмножество унификации шаблонов, называемое унификацией функций как конструкторов, также ведет себя хорошо. [47] Доказатель теоремы Zipperposition имеет алгоритм, интегрирующий эти хорошо ведущие себя подмножества в полный алгоритм унификации высшего порядка. [2]
В вычислительной лингвистике одна из самых влиятельных теорий эллиптических конструкций заключается в том, что эллипсы представлены свободными переменными, значения которых затем определяются с помощью унификации высшего порядка. Например, семантическое представление «Джон любит Мэри, а Питер тоже» — это like( j , m ) ∧ R( p ) , а значение R (семантическое представление эллипса) определяется уравнением like( j , m ) = R( j ) . Процесс решения таких уравнений называется унификацией высшего порядка. [48]
Уэйн Снайдер дал обобщение как унификации высшего порядка, так и E-унификации, то есть алгоритм унификации лямбда-термов по модулю эквациональной теории. [49]
{{cite book}}
: CS1 maint: multiple names: authors list (link)