Sjednocení (počítačová věda) - Unification (computer science)

V logice a informatice je sjednocení algoritmický proces řešení rovnic mezi symbolickými výrazy .

V závislosti na tom, které výrazy (také nazývané termíny ) se mohou vyskytovat v sadě rovnic (také nazývané problém sjednocení ) a které výrazy jsou považovány za stejné, se rozlišuje několik rámců sjednocení. Pokud jsou ve výrazu povoleny proměnné vyššího řádu, tj. Proměnné představující funkce , tento proces se nazývá unifikace vyššího řádu , jinak unifikace prvního řádu . Pokud je požadováno řešení, aby se obě strany každé rovnice staly doslova rovnocennými, nazývá se tento proces syntaktickým nebo volným sjednocením , jinak sémantickým nebo rovníkovým sjednocením nebo E-unifikací nebo unifikační teorií modulo .

Řešení problému sjednocení je označován jako substituce , to znamená, je mapování přiřazení symbolickou hodnotu pro každou proměnnou výrazů je problém je. Alifikační algoritmus by měl pro daný problém vypočítat úplnou a minimální sadu substitucí, tj. Sadu pokrývající všechna jeho řešení a neobsahující žádné nadbytečné členy. V závislosti na rámci může mít úplná a minimální substituční sada nejvýše jednoho, maximálně konečného počtu členů nebo možná nekonečně mnoho členů, nebo nemusí vůbec existovat. V některých rámcích je obecně nemožné rozhodnout, zda nějaké řešení existuje. Pro syntaktické sjednocení prvního řádu poskytli Martelli a Montanari algoritmus, který hlásí neřešitelnost nebo vypočítá úplnou a minimální sadu substitucí singletonů, která obsahuje takzvaný nejobecnější unifikátor .

Například pomocí x , y , z jako proměnných je sada singletonových rovnic { cons ( x , cons ( x , nil )) = cons (2, y )} syntaktickým problémem sjednocení prvního řádu, který má substituci { x ↦ 2, ycons (2, nil )} jako jediné řešení. Syntaktický problém sjednocení prvního řádu { y = cons (2, y )} nemá řešení přes množinu konečných výrazů ; má však jediné řešení { ycons (2, cons (2, cons (2, ...)))} přes množinu nekonečných stromů . Sémantický problém sjednocení prvního řádu { ax = xa } má každou substituci tvaru { xa ⋅ ... ⋅ a } jako řešení v poloskupině , tj. Pokud (⋅) je považován za asociativní ; stejný problém, nahlížený v abelianské skupině , kde (⋅) je také považován za komutativní , má jako řešení jakoukoli substituci. Singletonová sada { a = y ( x )} je syntaktický problém sjednocení druhého řádu, protože y je funkční proměnná. Jedním z řešení je { xa , y ↦ ( funkce identity )}; další je { y ↦ ( konstantní funkce mapující každou hodnotu na a ), x(libovolná hodnota) }.

Algoritmus sjednocení byl poprvé objeven Jacquesem Herbrandem , zatímco první formální vyšetřování lze přičíst Johnu Alanovi Robinsonovi , který použil syntaktickou unifikaci prvního řádu jako základní stavební kámen svého postupu řešení logiky prvního řádu, což je velký krok vpřed v technologie automatizovaného uvažování , protože eliminovala jeden zdroj kombinatorické exploze: hledání instance výrazů. V dnešní době je automatické uvažování stále hlavní aplikační oblastí unifikace. V logickém programování a implementaci systému typu programovací jazyk se používá syntaktické sjednocení prvního řádu , zejména v odvozovacích algoritmech typu založených na Hindley-Milnerovi . Sémantické sjednocení se používá v řešeních SMT , algoritmech pro přepisování termínů a analýze kryptografického protokolu . U důkazních asistentů, například Isabelle a Twelf , se používá sjednocení vyššího řádu a v některých implementacích programovacích jazyků, jako je lambdaProlog , se používají omezené formy sjednocení vyššího řádu (sjednocení vzorů vyššího řádu ) , protože vzory vyššího řádu jsou expresivní , přesto jejich přidružený postup sjednocení zachovává teoretické vlastnosti blíže unifikaci prvního řádu.

Společné formální definice

Předpoklady

Formálně přístup sjednocení předpokládá

  • Nekonečná množina z proměnných . Pro sjednocení vyššího řádu je vhodné vybrat disjunktní ze sady proměnných vázaných na lambda termín .
  • Sada z hlediska taková, že . Pro sjednocení prvního řádu a sjednocení vyššího řádu je obvykle sada termínů prvního řádu (termíny postavené z variabilních a funkčních symbolů) a lambda termínů (termíny obsahující některé proměnné vyššího řádu).
  • Mapování proměnnými : , přiřazení každého výrazu sadu z volných proměnných vyskytujících se v .
  • Relace ekvivalence na , uvádějící, které termíny jsou považovány za rovnocenné. Pro sjednocení vyššího řádu, obvykle pokud a jsou ekvivalentní alfa . U E-unifikace prvního řádu odráží znalosti na pozadí o určitých funkčních symbolech; pokud je například považován za komutativní, pokud je výsledkem záměny argumentů u některých (možná všech) výskytů. Neexistuje -li vůbec žádná znalost pozadí, pak pouze doslovně nebo syntakticky jsou identické termíny považovány za rovnocenné; V tomto případě ≡ se nazývá volné teorii (protože se jedná o volný objekt ) je prázdná teorie (protože množina Ekvacionální vět , nebo znalosti pozadí, prázdný) je teorie uninterpreted funkce (z důvodu sjednocení se provádí na neinterpretované termíny ) nebo teorii konstruktorů (protože všechny funkční symboly pouze vytvářejí datové termíny, místo aby s nimi operovaly).

Termín prvního řádu

Vzhledem k tomu, soubor proměnných symbolů, sada konstantních symbolů a sestav z n -ary funkčních symbolů, také nazývaných operátora symbolů pro každý přirozené číslo , je množina (netříděný prvního řádu), pokud jde se rekurzivně definována jako nejmenší souprava s následující vlastnosti:

  • každý variabilní symbol je termín: ,
  • každý konstantní symbol je termín: ,
  • z každých n termínů a každého symbolu n -ary funkce lze sestavit větší termín .

Například pokud je variabilní symbol, je konstantní symbol a je symbolem binární funkce, pak (a tedy) podle prvního, druhého a třetího pravidla budování termínu. Druhý termín je obvykle napsán jako , s použitím infixového zápisu a běžnějšího symbolu operátora + pro pohodlí.

Termín vyššího řádu

Střídání

Substituce je mapování z proměnných, které je z hlediska; zápis se týká substituce mapující každou proměnnou na výraz , pro a každou další proměnnou na sebe. Použití této náhrady na výraz je zapsáno v postfixové notaci jako ; to znamená, že se (současně) nahradit každý výskyt každé proměnné v termínu od . Výsledek aplikace substituce na termín se nazývá instance tohoto výrazu . Jako příklad prvního řádu, použití substituce { xh ( a , y ), zb } na výraz

výnosy  

Zobecnění, specializace

Pokud má výraz instanci ekvivalentní výrazu , to znamená, že je -li pro nějakou substituci , pak se nazývá obecnější než a je nazýván zvláštnějším než nebo zahrnut do . Od té doby je například obecnější, než když je ⊕ komutativní .

Je -li ≡ doslovná (syntaktická) identita výrazů, může být výraz obecnější i zvláštnější než jiný pouze tehdy, pokud se oba termíny liší pouze názvy proměnných, nikoli syntaktickou strukturou; tyto termíny se nazývají varianty nebo vzájemná přejmenování . Například je varianta , protože

a

.

Není to však varianta , protože žádná substituce nemůže transformovat druhý termín na bývalý. Druhý termín je tedy mnohem zvláštnější než ten předchozí.

Pro libovolný termín může být obecnější i zvláštnější než strukturálně odlišný výraz. Pokud je například ⊕ idempotentní , tj. Pokud vždy , pak je výraz obecnější než a naopak, i když a mají odlišnou strukturu.

Substituce je speciálnější než substituce , nebo je zahrnuta , pokud je substituce specifičtější než pro každý výraz . Také říkáme, že je to obecnější než . Například je zvláštnější než , ale není, protože není zvláštnější než .

Problém sjednocení, sada řešení

Problém sjednocení je konečná množina { l 1r 1 , ..., l nr n } potenciálních rovnic, kde l i , r iT . Substituce σ je řešením tohoto problému, pokud l i σ ≡ r i σ pro . Taková náhrada se také nazývá sjednotitel problému sjednocení. Pokud je například ⊕ asociativní , má problém sjednocení { xaax } řešení { xa }, { xaa }, { xaaa } atd., zatímco problém { xaa } nemá řešení.

Pro daný problém sjednocení se množina S sjednocovačů nazývá úplná, pokud je každá substituce řešení subsumována nějakou substitucí σ ∈ S ; množina S se nazývá minimální, pokud žádný z jejích členů nezahrnuje jiného.

Syntaktické sjednocení podmínek prvního řádu

Image
Schematický trojúhelníkový diagram syntakticky sjednocujících členů t 1 a t 2 substitucí σ

Syntaktická unifikace termínů prvního řádu je nejpoužívanější unifikační rámec. Je založen na T je množina prvního řádu, pokud jde (kvůli nějaké dané nastavené V proměnných, C konstant a F n o n -ary funkční symboly) a na ≡ že syntaktické rovnosti . V tomto rámci má každý řešitelný problém sjednocení { l 1r 1 , ..., l nr n } úplnou a zjevně minimální sadu singletonových řešení { σ } . Jeho člen σ se nazývá nejobecnějším sjednotitelem ( mgu ) problému. Termíny na levé a pravé straně každé potenciální rovnice se syntakticky rovnají, když se použije mgu, tj. L 1 σ = r 1 σ ∧ ... ∧ l n σ = r n σ . Jakýkoli unifikátor problému je zahrnut v mgu σ . Mgu je jedinečný až do variant: pokud jsou S 1 a S 2 úplné a minimální sady řešení stejného syntaktického unifikačního problému, pak S 1 = { σ 1 } a S 2 = { σ 2 } pro některé substituce σ 1 a σ 2 , a 1 je varianta 2 pro každou proměnnou x vyskytující se v problému.

Například, problém sjednocení { xz , yf ( x )} má unifikátorem { xz , yf ( z )}, protože

X { xz , yf ( z )} = z = z { xz , yf ( z )} , a
y { xz , yf ( z )} = f ( z ) = f ( x ) { xz , yf ( z )} .

Toto je také nejobecnější unifikátor. Dalšími unifikátory pro stejný problém jsou např. { Xf ( x 1 ), yf ( f ( x 1 )), zf ( x 1 )}, { xf ( f ( x 1 )), yf ( f ( f ( x 1 ))), zf ( f ( x 1 ))} atd.; podobných nekonečných prostředků je nekonečně mnoho.

Jako další příklad, problém g ( x , x ) ≐ f ( y ) nemá řešení, pokud jde o ≡ doslovnou identitu, protože jakákoli substituce aplikovaná na levou a pravou stranu udrží nejvzdálenější g a f , a termíny s různými krajními funkčními symboly jsou syntakticky odlišné.

Algoritmus sjednocení

Robinsonův unifikační algoritmus z roku 1965

Symboly jsou uspořádány tak, že proměnné předcházejí funkčním symbolům. Podmínky jsou seřazeny podle zvětšení délky psaní; stejně dlouhé termíny jsou objednány lexikograficky . Pro množinu T výrazů je cesta nesouhlasu p lexikograficky nejmenší cestou, kde se liší dva členské členy T. Jeho množinou nesouhlasů je množina subtermů začínajících na p , formálně: { t | p  : }.

Algoritmus:

Vzhledem k tomu, že bude sjednocena množina T pojmů, pojďme nejprve být substitucí identity

dělat navždy, pokud je singleton set pak vrátit fi

nechť D je množina nesouhlasů let s , t jsou dva lexikograficky nejmenší termíny v D

pokud s není proměnná nebo se vyskytne s v t, pak vraťte „NEUNIFIKABILNÍ“ fi hotovo

První algoritmus daný Robinsonem (1965) byl poměrně neefektivní; srov. krabice. Následující rychlejší algoritmus pochází z Martelli, Montanari (1982). Tento článek také uvádí předchozí pokusy najít účinný syntaktický unifikační algoritmus a uvádí, že algoritmy lineárního času byly objeveny nezávisle Martelli, Montanari (1976) a Paterson, Wegman (1978).

Vzhledem k omezené množině potenciálních rovnic algoritmus použije pravidla k jeho transformaci na ekvivalentní sadu rovnic tvaru { x 1u 1 , ..., x mu m } kde x 1 , ..., x m jsou odlišné proměnné a u 1 , ..., u m jsou termíny neobsahující žádné z x i . Soubor tohoto formuláře lze číst jako náhradu. Pokud neexistuje řešení, algoritmus končí ⊥; jiní autoři v takovém případě používají „Ω“, „{}“ nebo „ fail “. Operace nahrazení všech výskytů proměnné x v problému G termínem t se označuje G { xt }. Pro jednoduchost jsou konstantní symboly považovány za funkční symboly s nulovými argumenty.

    vymazat
    rozložit
jestli nebo     konflikt
    vyměnit
kdyby a     odstranit
-li     šek

Probíhá kontrola

Pokus sjednotit proměnnou x termínem obsahujícím x jako přísný podzáklad xf (..., x , ...) by vedl k nekonečnému pojmu jako řešení pro x , protože x by se vyskytovalo jako podzáklad sebe sama . V množině (konečných) termínů prvního řádu, jak jsou definovány výše, rovnice xf (..., x , ...) nemá řešení; proto je odstranit pravidlo může být použita pouze tehdy, když xVars ( t ). Protože tato dodatečná kontrola, nazývaná kontrola výskytu , zpomaluje algoritmus, je ve většině systémů Prolog vynechána. Z teoretického hlediska, vynechání kontrolních částek k řešení rovnic nad nekonečnými stromy, viz níže .

Doklad o ukončení

Pro důkaz ukončení algoritmu zvažte trojici, kde n var je počet proměnných, které se vyskytují více než jednou v sadě rovnic, n lhs je počet funkčních symbolů a konstant na levé straně potenciálních rovnic, a n eqn je počet rovnic. Když je aplikováno vyloučení pravidel , n var klesá, protože x je eliminováno z G a ponecháno pouze v { xt }. Použití jakéhokoli jiného pravidla již nikdy nemůže zvýšit n var . Když se použije rozklad , konflikt nebo swap pravidla , n lhs se sníží, protože zmizí alespoň vnější f levé strany . Použitím některého ze zbývajících pravidel mazání nebo kontrola nelze zvýšit n lhs , ale snížit n eqn . Jakákoli aplikace pravidel tedy snižuje trojnásobek vzhledem k lexikografickému řádu , což je možné jen konečný počet opakování.

Conor McBride poznamenává, že „vyjádřením struktury, kterou unifikace využívá“ v závisle napsaném jazyce, jako je Epigram , lze Robinsonův algoritmus provést rekurzivně podle počtu proměnných , přičemž v takovém případě je samostatný důkaz ukončení zbytečný.

Příklady syntaktického sjednocení termínů prvního řádu

V syntaktické konvenci Prolog je symbol začínající velkými písmeny název proměnné; symbol, který začíná malým písmenem, je funkční symbol; čárka se používá jako logický a operátor. Pro matematický zápis se jako proměnné používají x, y, z , f, g jako funkční symboly a a, b jako konstanty.

Zápis prologu Matematický zápis Sjednocující substituce Vysvětlení
a = a { a = a } {} Uspěje. ( tautologie )
a = b { a = b } a a b se neshodují
X = X { x = x } {} Uspěje. ( tautologie )
a = X { a = x } { xa } x je sjednoceno s konstantou a
X = Y { x = y } { xy } x a y jsou aliasy
f(a,X) = f(a,b) { f ( a , x ) = f ( a , b )} { xb } funkce a konstantní symboly se shodují, x je sjednoceno s konstantou b
f(a) = g(a) { f ( a ) = g ( a )} f a g se neshodují
f(X) = f(Y) { f ( x ) = f ( y )} { xy } x a y jsou aliasy
f(X) = g(Y) { f ( x ) = g ( y )} f a g se neshodují
f(X) = f(Y,Z) { f ( x ) = f ( y , z )} Selže. K f funkční symboly mají různé aritu
f(g(X)) = f(Y) { f ( g ( x )) = f ( y )} { yg ( x )} Sjednocuje y s výrazem
f(g(X),X) = f(Y,a) { f ( g ( x ), x ) = f ( y , a )} { xa , yg ( a )} Sjednocuje x s konstantou a , y s termínem
X = f(X) { x = f ( x )} mělo by být ⊥ Vrátí ⊥ v logice prvního řádu a mnoha moderních dialogy Prolog (vynucené kontrolou výskytu ).

Úspěch v tradičním Prologu a v Prologu II, sjednocení x s nekonečným termínem x=f(f(f(f(...)))).

X = Y, Y = a { x = y , y = a } { xa , ya } Oba x a y jsou sjednoceny s konstantou a
a = Y, X = Y { a = y , x = y } { xa , ya } Jak je uvedeno výše (na pořadí rovnic v množině nezáleží)
X = a, b = X { x = a , b = x } Selže. a a b se neshodují, takže x nelze sjednotit s oběma
Image
Dva termíny s exponenciálně větším stromem pro jejich nejméně běžnou instanci. Jeho dag reprezentace (úplně vpravo, oranžová část) má stále lineární velikost.

Nejobecnější unifikátor syntaktického problému sjednocení prvního řádu velikosti n může mít velikost 2 n . Problém má například nejobecnější unifikátor , srov. obrázek. Aby se předešlo exponenciální časové složitosti způsobené takovou explozí , pokročilé unifikační algoritmy pracují spíše na řízených acyklických grafech (dags) než na stromech.

Aplikace: unifikace v logickém programování

Koncept sjednocení je jednou z hlavních myšlenek logického programování , nejlépe známou z jazyka Prolog . Představuje mechanismus vazby obsahu proměnných a lze jej považovat za jakési jednorázové přiřazení. V Prologu je tato operace označena symbolem rovnosti =, ale provádí se také při vytváření instancí proměnných (viz níže). To je také používáno v jiných jazycích pomocí symbolu rovnosti =, ale také ve spojení s mnoha operací včetně +, -, *, /. Algoritmy odvozování typů jsou obvykle založeny na unifikaci.

V Prologu:

  1. Proměnná , která je uninstantiated-tedy žádné předchozí unifikace byly provedeny na to, mohou být sjednoceny s atomem, termín, nebo jiného uninstantiated proměnné, tak účinně stává jeho alias. V mnoha moderních prologských dialektech a logice prvního řádu nelze proměnnou sjednotit s termínem, který ji obsahuje; toto je takzvaná kontrola výskytu .
  2. Dva atomy lze sjednotit pouze tehdy, jsou -li identické.
  3. Podobně, termín může být sjednoceny s jiným termínem, pokud horní funkční symboly a aritami termínů jsou identické a v případě, že parametry mohou být sjednoceny současně. Všimněte si, že se jedná o rekurzivní chování.

Použití: odvození typu

Sjednocení se používá při odvozování typu, například ve funkčním programovacím jazyce Haskell . Na jedné straně programátor nemusí poskytovat informace o typu pro každou funkci, na druhé straně slouží k detekci překlepů. Výraz Haskell True : ['x', 'y', 'z']není zadán správně. Funkce konstrukce seznamu (:)je typu a -> [a] -> [a]a pro první argument musí být Trueproměnná polymorfního typu asjednocena s Truetypem ', Bool. Druhý argument,, ['x', 'y', 'z']je typu [Char], ale anemůže být obojí Boola Charsoučasně.

Stejně jako pro Prolog lze zadat algoritmus pro odvozování typů:

  1. Libovolná typová proměnná se sjednotí s jakýmkoli výrazovým typem a bude vytvořena pro tento výraz. Specifická teorie může toto pravidlo omezit kontrolou výskytu.
  2. Dvě typové konstanty se sjednotí, pouze pokud jsou stejného typu.
  3. Konstrukce dvou typů se sjednocují pouze v případě, že se jedná o aplikace stejného typu konstruktoru a všechny jejich typy komponent se rekurzivně sjednocují.

Vzhledem ke své deklarativní povaze je pořadí v pořadí sjednocení (obvykle) nedůležité.

Všimněte si, že v terminologii logiky prvního řádu je atom základním tvrzením a je sjednocen podobně jako prologský termín.

Sjednocení seřazené podle objednávek

Objednávek řazeny logiky dovolí jednoho přiřadit druh nebo typ , aby každý termín, a prohlásit jakýsi s 1 subsort o jiný druh s 2 , obyčejně psán jak s 1 s 2 . Například když uvažujeme o biologických stvořeních, je užitečné prohlásittřídicího psa za podřazený druh nějakého zvířecího druhu. Všude tam, kde termín jakýsi s je zapotřebí, což je termín z jakéhokoliv subsort ze sa mohou být dodány místo. Například za předpokladu deklarace funkce matka : zvíře zvíře a konstantní deklarace lassie : pes je termín matka ( lassie ) dokonale platný a má třídicí zvíře . Aby bylo možné dodat informaci, že matka psa je pes, může být vydánodalší prohlášení matka : pes pes ; tomu se říká přetížení funkcí , podobné přetížení v programovacích jazycích .

Walther poskytl unifikační algoritmus pro termíny v logice seřazené podle pořadí, který požaduje, aby byly deklarovány také libovolné dva deklarované druhy s 1 , s 2, přičemž jejich průsečík s 1s 2 : pokud x 1 a x 2 je proměnná druhu s 1 a s 2 , rovnice x 1x 2 má řešení { x 1 = x , x 2 = x }, kde x : s 1s 2 . Poté, co tento algoritmus začlenil do klauzule automatizovaného ověřovače teorém, mohl vyřešit problém benchmarku jeho překladem do logiky seřazené podle řádů, čímž jej uvaril o řád, protože mnoho unárních predikátů se změnilo v druhy.

Smolka zobecnil logiku seřazenou podle pořadí, aby umožnil parametrický polymorfismus . V jeho rámci jsou deklarace podtřídy šířeny do výrazů komplexního typu. Jako příklad programování může být deklarován parametrický třídicí seznam ( X ) (přičemž X je parametr typu jako v šabloně C ++ ) a z deklarace podtřídy intfloat se seznam relací ( int ) ⊆ list ( float ) automaticky odvozeno, což znamená, že každý seznam celých čísel je také seznamem plováků.

Schmidt-Schauß zobecnila logiku seřazenou podle pořadí, aby umožňovala deklarace termínů. Například za předpokladu deklarací podtřídy sudýchint a lichýchint , termínové deklarace jako ∀ i  : int . ( i + i ): dokonce umožňuje deklarovat vlastnost sčítání celých čísel, která nemohla být vyjádřena běžným přetížením.

Sjednocení nekonečných pojmů

Pozadí na nekonečných stromech:

  • B. Courcelle (1983). „Základní vlastnosti nekonečných stromů“ (PDF) . Teoret. Výpočet. Sci . 25 (2): 95–169. doi : 10,1016/0304-3975 (83) 90059-2 . Archivováno z originálu (PDF) dne 2014-04-21 . Citováno 2013-06-28 .
  • Michael J. Maher (červenec 1988). „Kompletní axiomatizace algeber konečných, racionálních a nekonečných stromů“. Proč. IEEE 3. ročník Symp. o logice v informatice, Edinburgh . s. 348–357.
  • Joxan Jaffar; Peter J. Stuckey (1986). „Sémantika programování logiky nekonečného stromu“ . Teoretická počítačová věda . 46 : 141–158. doi : 10,1016/0304-3975 (86) 90027-7 .

Algoritmus sjednocení, Prolog II:

  • A. Colmerauer (1982). KL Clark; S.-A. Tarnlund (eds.). Prolog a nekonečné stromy . Akademický tisk.
  • Alain Colmerauer (1984). „Rovnice a nerovnice na konečných a nekonečných stromech“. V ICOT (ed.). Proč. Int. Konf. na počítačových systémech páté generace . s. 85–99.

Aplikace:

E-sjednocení

E-sjednocení je problém najít řešení pro daný soubor rovnic , s přihlédnutím k nějaké Ekvacionální pozadí znalostí E . Ten je uveden jako soubor univerzálních rovností . Pro některé konkrétní sady E byly navrženy algoritmy pro řešení rovnic (aka E-unifikační algoritmy ); u ostatních bylo prokázáno, že žádné takové algoritmy nemohou existovat.

Pokud například a a b jsou odlišné konstanty, rovnice nemá řešení s ohledem na čistě syntaktické sjednocení , kde o operátorovi není nic známo . Pokud je však známo, že je komutativní , pak substituce { xb , ya } řeší výše uvedenou rovnici, protože

{ xb , ya }
= o substituční aplikací
= komutativitou
= { xb , ya } (konverzací) substituční aplikace

Základní znalosti E by mohly uvádět komutativitu univerzální rovnosti „ pro všechny u , v “.

Jednotlivé sady znalostí E

Použité konvence pojmenování
u , v , w : = A Asociativita
u , v : = C Komutativita
u , v , w : = D l Levá distribučnost přes
u , v , w : = D r Správná distribučnost přes
u : = u Idempotence z
u : = u N l Levý neutrální prvek n vzhledem k
u : = u     N r     Pravý neutrální prvek n vzhledem k

Říká se, že sjednocení je pro teorii rozhodnutelné , pokud pro něj byl navržen unifikační algoritmus, který končí pro jakýkoli vstupní problém. Říká se, že sjednocení je pro teorii polorozhodnutelné , pokud pro něj byl navržen unifikační algoritmus, který končí pro jakýkoli řešitelný vstupní problém, ale může pokračovat v hledání řešení neřešitelného vstupního problému navždy.

Sjednocení je možné rozhodnout pro následující teorie:

Sjednocení je částečně rozhodnutelné pro následující teorie:

Jednostranná paramodulace

Pokud je konvergentní termín přepisování systém R k dispozici pro E je jednostranný paramodulace algoritmus může být použit pro výčet všech řešení daných rovnic.

Jednostranná paramodulační pravidla
G ∪ { f ( s 1 , ..., s n ) ≐ f ( t 1 , ..., t n )} ; S G ∪ { s 1t 1 , ..., s nt n } ; S     rozložit
G ∪ { xt } ; S G { xt } ; S { xt } ∪ { xt } pokud se proměnná x nevyskytuje v t     odstranit
G ∪ { f ( s 1 , ..., s n ) ≐ t } ; S G ∪ { s 1 ≐ u 1 , ..., s n ≐ u n , rt } ; S     jestliže f ( u 1 , ..., u n ) → r je pravidlo z R     mutovat
G ∪ { f ( s 1 , ..., s n ) ≐ y } ; S G ∪ { s 1y 1 , ..., s ny n , yf ( y 1 , ..., y n )} ; S pokud y 1 , ..., y n jsou nové proměnné     napodobit

Počínaje G jako problémem sjednocení, který má být vyřešen, a S jako substitucí identity, pravidla se aplikují nedeterministicky, dokud se prázdná množina nezobrazí jako skutečné G , v takovém případě je skutečné S sjednocující substitucí. V závislosti na pořadí se aplikují pravidla paramodulace, na volbě skutečného rovnice z G , a na volbě R ' s pravidly mutovat , různé výpočty cesty jsou možné. Pouze některé vedou k řešení, zatímco jiné končí na G ≠ {}, kde již žádné další pravidlo neplatí (např. G = { f (...) ≐ g (...)}).

Příklad výrazu přepisovací systém R.
1 aplikace ( nula , z ) z
2     aplikace ( x . y , z ) x . aplikace ( y , z )

Například se používá systém přepisování termínů R definující připojený operátor seznamů sestavených z nevýhody a nuly ; kde cons ( x , y ) je zapsáno v infixovém zápisu jako x . y pro stručnost; např. aplikace ( a . b . nulová , c . d . nulová ) → a . aplikace ( b . nula , c . d . nula ) → a . b . aplikace ( nula , c . d . nula ) → a . b . c . d . nil ukazuje zřetězení seznamů a . b . nula a c . d . nil , využívající přepisovací pravidlo 2,2 a 1. Ekvacionální teorie E , což odpovídá R je uzávěr shoda z R , a to jak zobrazeno jako binární vztahů na podmínkách. Například, aplikace ( . B . Nulová , c . D . Nula ) ≡ . b . c . d . nilapp ( a . b . c . d . nil , nil ). Algoritmus paramodulace výčet řešení rovnic v souvislosti s touto E při krmena příkladu R .

Úspěšný příklad cesty výpočtu pro problém sjednocení { app ( x , app ( y , x )) ≐ a . a . nil } je uveden níže. Aby se předešlo střetům názvů proměnných, jsou pravidla přepisování konzistentně přejmenována před jejich použitím mutací pravidel ; v 2 , v 3 , ... jsou pro tento účel počítačově generované názvy proměnných. V každém řádku je zvolená rovnice z G zvýrazněna červeně. Při každém použití pravidla mutace je v závorkách uvedeno zvolené pravidlo přepisu ( 1 nebo 2 ). Z posledního řádku sjednocující substituce S = { ynil , xa . nil } lze získat. Ve skutečnosti app ( x , app ( y , x )) { ynulové , xa . nula } = app ( a . nula , app ( nil , a . nil )) ≡ app ( a . nil , a . nil ) ≡ a . aplikace ( nula , a . nula ) ≡ a . a . nil řeší daný problém. Druhá úspěšná cesta výpočtu, kterou lze získat výběrem „mutovat (1), mutovat (2), mutovat (2), mutovat (1)“, vede k substituci S = { ya . a . nula , xnula }; zde se nezobrazuje. Žádná jiná cesta nevede k úspěchu.

Příklad výpočtu unifikátoru
Použité pravidlo G S
{ aplikace ( x , app ( y , x )) ≐ a . a . nula } {}
mutovat (2) { xv 2 . v 3 , aplikace ( y , x ) ≐ v 4 , v 2 . aplikace ( v 3 , v 4 ) ≐ a . a . nula } {}
rozložit { xv 2 . v 3 , aplikace ( y , x ) ≐ v 4 , v 2a , aplikace ( v 3 , v 4 ) ≐ a . nula } {}
odstranit { App ( y , v 2 . V 3 ) ≐ v 4 , v 2 , aplikace ( v 3 , v 4 ) ≐ . nula } { xv 2 . v 3 }
odstranit { aplikace ( y , a . v 3 ) ≐ v 4 , aplikace ( v 3 , v 4 ) ≐ a . nula } { xa . v 3 }
mutovat (1) { ynil , a . v 3v 5 , v 5v 4 , aplikace ( v 3 , v 4 ) ≐ a . nula } { xa . v 3 }
odstranit { ynula , a . v 3v 4 , aplikace ( v 3 , v 4 ) ≐ a . nula } { xa . v 3 }
odstranit { a . v 3v 4 , aplikace ( v 3 , v 4 ) ≐ a . nula } { ynula , xa . v 3 }
mutovat (1) { a . v 3v 4 , v 3nula , v 4v 6 , v 6a . nula } { ynula , xa . v 3 }
odstranit { a . v 3v 4 , v 3nula , v 4a . nula } { ynula , xa . v 3 }
odstranit { a . nulav 4 , v 4a . nula } { ynula , xa . nula }
odstranit { a . nulaa . nula } { ynula , xa . nula }
rozložit { aa , nilnil } { ynula , xa . nula }
rozložit { nilnil } { ynula , xa . nula }
rozložit     ⇒     {} { ynula , xa . nula }

Zúžení

Image
Trojúhelníkový diagram kroku zúžení st v poloze p v termu s , se sjednocující substitucí σ (spodní řada), pomocí přepisovacího pravidla lr (horní řada)

Jestliže R je konvergentní systém přepisování termínů pro E , alternativa přístupu k předchozí části spočívá v postupném uplatňování „ zužujících se kroků “; toto nakonec vyjmenuje všechna řešení dané rovnice. Krok zúžení (viz obrázek) spočívá v

  • výběrem neměnného podčastu aktuálního výrazu,
  • syntakticky jej sjednotit levou stranou pravidla z R a
  • nahrazení pravé strany instance pravidla na instancovaný výraz.

Formálně, pokud lr je přejmenovaná kopie přepisovacího pravidla z R , která nemá žádné společné proměnné s výrazem s , a subterm s | p není variabilní a je unifikovatelné s l přes MGU σ , potom je možno zúžen na termín t = [ ] p , tedy k termínu s subterm v p nahrazeny podle . Situace, kterou lze s zúžit na t, se běžně označuje jako st . Intuitivně sekvence zúžení kroky t 1t 2 ↝ ... ↝ t n si lze představit jako sekvence přepsání kroků t 1t 2 → ... → t n , avšak s počáteční dobu t 1 bytost dále a dále instancován, podle potřeby, aby každé z použitých pravidel bylo použitelné.

Výše uvedený příklad výpočtu paramodulace odpovídá následující zužující se sekvenci („↓“ zde označuje instanci):

aplikace ( X , aplikace ( y , X ))
xv 2 . v 3
aplikace ( v 2 . v 3 , aplikace ( y , v 2 . v 3 )) v 2 . aplikace ( v 3 , aplikace ( y , v 2 . v 3 ))
Ynil
v 2 . aplikace ( v 3 , aplikace ( nula , v 2 . v 3 )) v 2 . aplikace ( v 3 , v 2 . v 3 )
v 3nulová
v 2 . aplikace ( nula , v 2 . nula ) v 2 . v 2 . nula

Poslední termín, v 2 . v 2 . nula může být syntakticky sjednocena s původním pravým termínem a . a . nula .

V zúžení lemma zajišťuje, že vždy, když instance termín y může být přepsána na termínovaný t o konvergentní termín přepisování systému, pak to a t může být zúžen a přepsané na termínovaný s ' a t ' , v daném pořadí, tak, že t ' je příkladem s ' .

Formálně: kdykoli t platí pro nějakou substituci σ, pak existují termíny s , t takové, že s s ' a t t ' a s ' τ = t ' pro nějakou substituci τ.

Sjednocení vyššího řádu

Mnoho aplikací vyžaduje, aby jeden zvážil sjednocení zadaných lambda termínů místo termínů prvního řádu. Takové sjednocení se často nazývá sjednocení vyššího řádu . Dobře studovaná větev sjednocení vyššího řádu je problém sjednocení jednoduše napsaných lambda termínů modulovajících rovnost určenou αβη převody. Takové problémy s unifikací nemají většinu obecných unifikátorů. Zatímco unifikace vyššího řádu je nerozhodnutelná , Gérard Huet poskytl semi-rozhodnutelný (pre-) unifikační algoritmus, který umožňuje systematické hledání prostoru unifikátorů (zobecnění unifikačního algoritmu Martelli-Montanari s pravidly pro termíny obsahující proměnné vyššího řádu) zdá se, že v praxi funguje dostatečně dobře. Huet a Gilles Dowek napsali články zaměřené na toto téma.

Dale Miller popsal to, čemu se nyní říká sjednocení vzorů vyššího řádu . Tato podmnožina sjednocení vyššího řádu je rozhodnutelná a řešitelné problémy sjednocení mají většinu obecných sjednocovačů. Mnoho počítačových systémů, které obsahují sjednocení vyššího řádu, jako jsou logické programovací jazyky vyššího řádu λProlog a Twelf , často implementují pouze fragment vzoru a nikoli úplné sjednocení vyššího řádu.

Ve výpočetní lingvistice je jednou z nejvlivnějších teorií elipsy to, že elipsy jsou reprezentovány volnými proměnnými, jejichž hodnoty jsou poté určeny pomocí Sjednocení vyššího řádu (HOU). Například sémantická reprezentace „Jon má rád Mary a Peter také“ je jako ( j , m ) ∧ R ( p ) a hodnota R (sémantická reprezentace elipsy) je určena rovnicí jako ( j , m ) = R ( j ) . Proces řešení takovýchto rovnic se nazývá Sjednocení vyššího řádu.

Například problém sjednocení { f ( a , b , a ) ≐ d ( b , a , c )}, kde jedinou proměnnou je f , má řešení { f ↦ λ xyz . d ( y , x , c )}, { f ↦ λ xyz . d ( y , z , c )}, { f ↦ λ xyz . d ( y , a , c )}, { f ↦ λ xyz . d ( b , x , c )}, { f ↦ λ xyz . d ( b , z , c )} a { f ↦ λ xyz . d ( b , a , c )}.

Wayne Snyder zobecnil jak unifikaci vyššího řádu, tak E-unifikaci, tj. Algoritmus pro sjednocení lambda termínů modulo rovníkové teorie.

Viz také

Poznámky

Reference

Další čtení