Кіріспе
Теңдеулерді шешудің алгоритмдік процесі Логика және компьютерлік ғылымда, әсіресе автоматтандырылған қорытуда, біріктіру – символдық өрнектер арасындағы теңдеулерді шешудің алгоритмдік процесі, олардың әрқайсысы сол жақ = оң жақ түрінде болады. Мысалы, x, y, z айнымалыларын пайдаланып, f интерпретацияланбаған функция ретінде қарастырсақ, { f(1, y) = f(x, 2) } жинағы синтаксистік бірінші реттік біріктіру мәселесі болып табылады, оның жалғыз шешімі { x ↦ 1, y ↦ 2 } алмастыруы. Айырмашылықтар айнымалылардың қандай мәндерді қабылдауы және қандай өрнектер тең деп есептелуіне байланысты. Бірінші реттік синтаксистік біріктіруде айнымалылар бірінші реттік терминдер арасында өзгереді және теңдестік синтаксистік болып табылады. Біріктірудің бұл түрі бірегей "ең жақсы" жауапқа ие және логикалық бағдарламалауда және бағдарламалау тілінің типтік жүйелерін іске асыруда, әсіресе Хиндли-Милнер негізіндегі типтік тұжырымдама алгоритмдерінде қолданылады. Жоғары реттік біріктіруде, мүмкін жоғары реттік үлгі біріктірумен шектелуі мүмкін, терминдер лямбда өрнектерін қамтуы мүмкін, ал теңдестік бета-редукцияға дейін қарастырылады. Бұл түрі дәлелдеуге көмектесетін құралдарда және жоғары реттік логикалық бағдарламалауда қолданылады, мысалы, Isabelle, Twelf және lambdaProlog. Соңында, семантикалық біріктіру немесе E біріктіруде теңдік алдыңғы білімге байланысты және айнымалылар әртүрлі салаларда өзгереді. Бұл түрі SMT шешушілерде, терминдерді қайта жазу алгоритмдерінде және криптографиялық протоколдарды талдауда қолданылады.
In logic and computer science, specifically automated reasoning, unification is an algorithmic process of solving equations between symbolic expressions, each of the form Left hand side = Right hand side. For example, using x,y,z as variables, and taking f to be an uninterpreted function, the singleton equation set { f(1,y) = f(x,2) } is a syntactic first order unification problem that has the substitution { x ↦ 1, y ↦ 2 } as its only solution. Conventions differ on what values variables may assume and which expressions are considered equivalent. In first order syntactic unification, variables range over first order terms and equivalence is syntactic. This version of unification has a unique "best" answer and is used in logic programming and programming language type system implementation, especially in Hindley–Milner based type inference algorithms. In higher order unification, possibly restricted to higher order pattern unification, terms may include lambda expressions, and equivalence is up to beta reduction. This version is used in proof assistants and higher order logic programming, for example Isabelle, Twelf, and lambdaProlog. Finally, in semantic unification or E unification, equality is subject to background knowledge and variables range over a variety of domains. This version is used in SMT solvers, term rewriting algorithms, and cryptographic protocol analysis.
Ресми анықтама
Біріктіру мәселесі – li, ri терминдер немесе өрнектер жиынтығындағы теңдеулердің шекті жиынтығы, оны шешу қажет. Теңдеулер жиынтығында немесе біріктіру мәселесінде қандай өрнектер мен терминдерге рұқсат етіледі, және қандай өрнектер тең деп есептеледі, соған байланысты біріктірудің бірнеше түрі ажыратылады. Егер өрнекте жоғары реттік айнымалыларға, яғни функцияларды көрсететін айнымалыларға рұқсат берілсе, бұл процесс жоғары реттік біріктіру деп аталады, әйтпесе бірінші реттік біріктіру деп аталады. Егер әр теңдеудің екі жағын нақты тең ету үшін шешім қажет болса, бұл процесс синтаксистік немесе еркін біріктіру деп аталады, әйтпесе семантикалық немесе теңдеулік біріктіру, немесе E-біріктіру, немесе теория бойынша біріктіру деп аталады. Егер әр теңдеудің оң жағы жабық болса (еркін айнымалылар болмаса), онда бұл мәселе (үлгіні) сәйкестендіру деп аталады. Әр теңдеудің сол жағы (айнымалылары бар) үлгі деп аталады.
Ерітінді жиынтығы
Алмастыру σ – E біріктіру мәселесінің шешімі, егер liσ ≡ riσ болса. Мұндай алмастыру E-нің біріктірушісі деп те аталады. Мысалы, егер ⊕ ассоциативті болса, { x ⊕ a ≐ a ⊕ x } біріктіру мәселесінің {x ↦ a}, {x ↦ a ⊕ a}, {x ↦ a ⊕ a ⊕ a} және т.б. шешімдері бар, ал { x ⊕ a ≐ a } мәселесінің шешімі жоқ. Берілген біріктіру мәселесі E үшін, егер әрбір шешім алмастыру S жиынтығындағы кейбір алмастыру арқылы қосалмалы болса, онда біріктірушілердің S жиынтығы толық деп аталады. Толық алмастыру жиынтығы әрқашан бар (мысалы, барлық шешімдердің жиынтығы), бірақ кейбір жүйелерде (мысалы, шектеусіз жоғары реттік біріктіру) кез келген шешімнің бар-жоғын анықтау мәселесі (яғни толық алмастыру жиынтығы бос емес) шешілмейтін. S жиынтығы минималды деп аталады, егер оның ешбір мүшесі басқа мүшесін қоспаса. Жүйеге байланысты, толық және минималды алмастыру жиынтығында нөл, бір, шекті көп немесе шексіз көп мүшелер болуы мүмкін, немесе артық мүшелердің шексіз тізбегі болғандықтан мүлдем болмауы мүмкін. Осылайша, әдетте біріктіру алгоритмдері толық жиынның шекті жуықтауын есептейді, ол минималды болуы мүмкін немесе болмауы мүмкін, бірақ көптеген алгоритмдер мүмкін болған кезде артық біріктірушілерден аулақ болады. Шешілмейтіндігін хабарлайтын немесе өзі толық және минималды алмастыру жиынтығын құрайтын бір ғана біріктірушіні есептейтін алгоритм ұсынды, оны ең жалпы біріктіруші деп атайды.
For example, if ⊕ is associative, the unification problem { x ⊕ a ≐ a ⊕ x } has the solutions {x ↦ a}, {x ↦ a ⊕ a}, {x ↦ a ⊕ a ⊕ a}, etc., while the problem { x ⊕ a ≐ a } has no solution. For a given unification problem E, a set S of unifiers is called complete if each solution substitution is subsumed by some substitution in S. A complete substitution set always exists (e. g. the set of all solutions), but in some frameworks (such as unrestricted higher order unification) the problem of determining whether any solution exists (i. e., whether the complete substitution set is nonempty) is undecidable. The set S is called minimal if none of its members subsumes another one. Depending on the framework, a complete and minimal substitution set may have zero, one, finitely many, or infinitely many members, or may not exist at all due to an infinite chain of redundant members. Thus, in general, unification algorithms compute a finite approximation of the complete set, which may or may not be minimal, although most algorithms avoid redundant unifiers when possible. gave an algorithm that reports unsolvability or computes a single unifier that by itself forms a complete and minimal substitution set, called the most general unifier.
Тексерілу
Айнымалы x-ті x-тің қатаң субтермін ретінде қамтитын f( , x, ) түріндегі терминмен біріктіруге талпыну x үшін шешім ретінде шексіз терминге алып келеді, себебі x өзінің ішінде субтермін ретінде кездеседі. Жоғарыда анықталған (шекті) бірінші реттік терминдер жиынында x ≐ f( , x, ) теңдеуінің шешімі жоқ; демек, жою ережесі тек қана x ∈ vars(t) болмаған жағдайда ғана қолданылуы мүмкін. Бұл қосымша тексеру, яғни «кездесу тексеруі» алгоритмнің жұмысын баяулатады, сондықтан ол Prolog жүйелерінің көпшілігінде алынып тасталады. Теориялық тұрғыдан алғанда, тексеруді жою шексіз ағаштардағы теңдеулерді шешумен тең, қараңыз төмендегі # Шексіз терминдерді біріктіру.
Бірінші реттік терминдерді синтаксистік біріктірудің мысалдары
Prolog синтаксистік конвенциясында үлкен әріппен басталатын символ – айнымалы атауы; кіші әріппен басталатын символ – функция символы; үтір логикалық «және» операторы ретінде қолданылады. Математикалық нотация үшін x, y, z айнымалылар ретінде, f, g функция символдары ретінде, ал a, b тұрақтылар ретінде қолданылады. Prolog нотациясы Математикалық нотациясы Біріктіру алмастыруы Түсіндірмесі a = a { a = a } {} Сәтті орындалады. (тавтология) a = b { a = b } ⊥ a және b сәйкес келмейді X = X { x = x } {} Сәтті орындалады. (тавтология) a = X { a = x } { x ↦ a } x тұрақты a-мен біріктіріледі X = Y { x = y } { x ↦ y } x және y псевдонимдес f(a,X) = f(a,b) { f(a,x) = f(a,b) } { x ↦ b } Функция және тұрақты символдар сәйкес келеді, x тұрақты b-мен біріктіріледі f(a) = g(a) { f(a) = g(a) } ⊥ f және g сәйкес келмейді f(X) = f(Y) { f(x) = f(y) } { x ↦ y } x және y псевдонимдес f(X) = g(Y) { f(x) = g(y) } ⊥ f және g сәйкес келмейді f(X) = f(Y,Z) { f(x) = f(y,z) } ⊥ Сәтсіз аяқталады. f функция символдарының аргументтерінің саны әртүрлі f(g(X)) = f(Y) { f(g(x)) = f(y) } { y ↦ g(x) } y g(x) термінімен біріктіріледі f(g(X),X) = f(Y,a) { f(g(x),x) = f(y,a) } { x ↦ a, y ↦ g(a) } x тұрақты a-мен, ал y g(a) термінімен біріктіріледі X = f(X) { x = f(x) } ⊥ қайтарады Бірінші реттік логикада және көптеген заманауи Prolog жүйелерінде (оқкуренция тексеруімен қамтамасыз етіледі). Дәстүрлі Prolog және Prolog II жүйелерінде сәтті орындалады, x-ті шексіз терминмен біріктіреді x=f(f(f(f(…)))). X = Y, Y = a { x = y, y = a } { x ↦ a, y ↦ a } Екі айнымалы да тұрақты a-мен біріктіріледі a = Y, X = Y { a = y, x = y } { x ↦ a, y ↦ a } Жоғарыда айтылғандай (теңдеулер жиынының реті маңызды емес) X = a, b = X { x = a, b = x } ⊥ Сәтсіз аяқталады. a және b сәйкес келмейді, сондықтан x екеуімен де біріктірілмейді. n өлшемді синтаксистік бірінші реттік біріктіру мәселесінің ең жалпы біріктірушісі 2^n өлшемде болуы мүмкін. Мысалы, (((a*z)*y)*x)*w \doteq w*(x*(y*(z*a))) мәселесінің ең жалпы біріктірушісі \{ z ↦ a, y ↦ a*a, x ↦ (a*a)*(a*a), w ↦ ((a*a)*(a*a))*((a*a)*(a*a)) \} , қараңыз сурет. Мұндай жарылыстан туындаған экспоненциалдық уақыт күрделілігін болдырмау үшін, озық біріктіру алгоритмдері ағаштардың орнына бағытталған ациклдік графтарда (DAG) жұмыс істейді.
The most general unifier of a syntactic first order unification problem of size n may have a size of 2^(n). For example, the problem (((a*z)*y)*x)*w \doteq w*(x*(y*(z*a))) has the most general unifier \{ z \mapsto a, y \mapsto a*a, x \mapsto (a*a)*(a*a), w \mapsto ((a*a)*(a*a))*((a*a)*(a*a)) \} , cf. picture. In order to avoid exponential time complexity caused by such blow up, advanced unification algorithms work on directed acyclic graphs (dags) rather than trees.
Қолданба: Құрылымдық құрылымды біріктіру
Біріктіру есептеу лингвистикасының түрлі зерттеу салаларында пайдаланылған.
Рет бойынша сұрыпталған біріктіру
Реттеулік сұрыпталған логика әрбір терминге сұрыптаманы немесе типті тағайындауға және s1 сұрыптамасын s2 басқа сұрыптаманың кіші сұрыптамасы деп жариялауға мүмкіндік береді, бұл әдетте s1 ⊆ s2 деп жазылады. Мысалы, биологиялық тіршілік иелері туралы ой-пікір жүргізу кезінде, "ит" сұрыптамасын "жануар" сұрыптамасының кіші сұрыптамасы деп жариялау пайдалы. Егер s түріндегі термин қажет болса, оның орнына s түрінің кез келген кіші сұрыптамасы қолданылуы мүмкін. Мысалы, егер функция декларациясы "ана: жануар → жануар" және тұрақты декларация "lassie: ит" болса, онда "ана(lassie)" термині толығымен дұрыс және "жануар" типіне ие. Иттің анасы да ит екенін көрсету үшін, "ана: ит → ит" деген қосымша декларация жасалуы мүмкін; бұл функцияны жүктеу деп аталады, ол бағдарламалау тілдеріндегі жүктеуге ұқсас. Уолтер реттелген логикадағы терминдер үшін біріктіру алгоритмін ұсынды, онда кез келген екі жарияланған s1 және s2 сұрыптамалары үшін олардың қиылысы s1 ∩ s2 де жариялануы керек: егер x1 және x2 сәйкесінше s1 және s2 түріндегі айнымалылар болса, онда x1 ≐ x2 теңдеуінің шешімі {x1 = x, x2 = x} болады, мұндағы x: s1 ∩ s2. Бұл алгоритмді сөйлемге негізделген автоматтандырылған теореманы дәлелдеу жүйесіне енгізгеннен кейін, ол оны реттелген логикаға аудару арқылы эталондық мәселені шеше алды, осылайша оның күрделілігін бірнеше есеге төмендетті, себебі көптеген бірлік предикаттар типтерге айналды. Смолка параметрлік полиморфизмге мүмкіндік беру үшін реттелген логиканы кеңейтті. Оның аясында кіші сұрыптамалар декларациялары күрделі типтік өрнектерге таратылады. Бағдарламалау мысалы ретінде, "list(X)" параметрілік сұрыптамасы жариялануы мүмкін (X – C++ үлгісіндегідей типтік параметр), ал "int ⊆ float" кіші сұрыптамалар декларациясынан "list(int) ⊆ list(float)" қатынасы автоматты түрде шығарылады, яғни бүтін сандардың кез келген тізімі – жүзбек нүсқалы сандардың тізімі де болып табылады. Шмидт-Шаус термин декларацияларын енгізу үшін реттелген логиканы кеңейтті. Мысалы, егер "even ⊆ int" және "odd ⊆ int" кіші сұрыптамалар декларациялары болса, онда "∀ i : int. (i + i) : even" сияқты термин декларациясы бүтін сандарды қосудың қасиетін жариялауға мүмкіндік береді, оны қарапайым жүктеу арқылы көрсету мүмкін емес.