Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Niidae Wiki
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Unification (computer science)
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
===One-sided paramodulation=== If there is a [[convergent term rewriting system]] ''R'' available for ''E'', the ''one-sided paramodulation'' algorithm<ref>N. Dershowitz and G. Sivakumar, ''Solving Goals in Equational Languages'', Proc. 1st Int. Workshop on Conditional Term Rewriting Systems, Springer LNCS vol.308, pp. 45β55, 1988</ref> can be used to enumerate all solutions of given equations. {| style="border: 1px solid darkgray;" |+ One-sided paramodulation rules |- border="0" | align="right" | ''G'' βͺ { ''f''(''s''<sub>1</sub>,...,''s''<sub>''n''</sub>) β ''f''(''t''<sub>1</sub>,...,''t''<sub>''n''</sub>) } | ; ''S'' | β | align="right" | ''G'' βͺ { ''s''<sub>1</sub> β ''t''<sub>1</sub>, ..., ''s''<sub>''n''</sub> β ''t''<sub>''n''</sub> } | ''; ''S'' | | ''decompose'' |- | align="right" | ''G'' βͺ { ''x'' β ''t'' } | ; ''S'' | β | align="right" | ''G'' { ''x'' β¦ ''t'' } |; ''S''{''x''β¦''t''} βͺ {''x''β¦''t''} | align="right" | if the variable ''x'' doesn't occur in ''t'' | ''eliminate'' |- | align="right" | ''G'' βͺ { ''f''(''s''<sub>1</sub>,...,''s''<sub>''n''</sub>) β ''t'' } | ; ''S'' | β | align="right" | ''G'' βͺ { ''s''<sub>1</sub> β u<sub>1</sub>, ..., ''s''<sub>''n''</sub> β u<sub>''n''</sub>, ''r'' β ''t'' } | ; ''S'' | align="right" | if ''f''(''u''<sub>1</sub>,...,''u''<sub>''n''</sub>) β ''r'' is a rule from ''R'' | ''mutate'' |- | align="right" | ''G'' βͺ { ''f''(''s''<sub>1</sub>,...,''s''<sub>''n''</sub>) β ''y'' } | ; ''S'' |β | align="right" | ''G'' βͺ { ''s''<sub>1</sub> β ''y''<sub>1</sub>, ..., ''s''<sub>''n''</sub> β ''y''<sub>''n''</sub>, ''y'' β ''f''(''y''<sub>1</sub>,...,''y''<sub>''n''</sub>) } | ; ''S'' | align="right" | if ''y''<sub>1</sub>,...,''y''<sub>''n''</sub> are new variables | ''imitate'' |} Starting with ''G'' being the unification problem to be solved and ''S'' being the identity substitution, rules are applied nondeterministically until the empty set appears as the actual ''G'', in which case the actual ''S'' is a unifying substitution. Depending on the order the paramodulation rules are applied, on the choice of the actual equation from ''G'', and on the choice of ''R''{{'}}s rules in ''mutate'', different computations paths are possible. Only some lead to a solution, while others end at a ''G'' β {} where no further rule is applicable (e.g. ''G'' = { ''f''(...) β ''g''(...) }). {| style="border: 1px solid darkgray;" |+ Example term rewrite system ''R'' |- border="0" | '''1''' | ''app''(''nil'',''z'') | β ''z'' |- |'''2''' | ''app''(''x''.''y'',''z'') | β ''x''.''app''(''y'',''z'') |} For an example, a term rewrite system ''R'' is used defining the ''append'' operator of lists built from ''cons'' and ''nil''; where ''cons''(''x'',''y'') is written in infix notation as ''x''.''y'' for brevity; e.g. ''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'' demonstrates the concatenation of the lists ''a''.''b''.''nil'' and ''c''.''d''.''nil'', employing the rewrite rule 2,2, and 1. The equational theory ''E'' corresponding to ''R'' is the [[congruence closure]] of ''R'', both viewed as binary relations on terms. For example, ''app''(''a''.''b''.''nil'',''c''.''d''.''nil'') β‘ ''a''.''b''.''c''.''d''.''nil'' β‘ ''app''(''a''.''b''.''c''.''d''.''nil'',''nil''). The paramodulation algorithm enumerates solutions to equations with respect to that ''E'' when fed with the example ''R''. A successful example computation path for the unification problem { ''app''(''x'',''app''(''y'',''x'')) β ''a''.''a''.''nil'' } is shown below. To avoid variable name clashes, rewrite rules are consistently renamed each time before their use by rule ''mutate''; ''v''<sub>2</sub>, ''v''<sub>3</sub>, ... are computer-generated variable names for this purpose. In each line, the chosen equation from ''G'' is highlighted in red. Each time the ''mutate'' rule is applied, the chosen rewrite rule (''1'' or ''2'') is indicated in parentheses. From the last line, the unifying substitution ''S'' = { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''nil'' } can be obtained. In fact, ''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'' solves the given problem. A second successful computation path, obtainable by choosing "mutate(1), mutate(2), mutate(2), mutate(1)" leads to the substitution ''S'' = { ''y'' β¦ ''a''.''a''.''nil'', ''x'' β¦ ''nil'' }; it is not shown here. No other path leads to a success. {| class="wikitable" |+ Example unifier computation |- ! Used rule !! !! ''G'' !! ''S'' |- | || | { {{color|red|''app''(''x'',''app''(''y'',''x'')) β ''a''.''a''.''nil''}} } | {} |- | mutate(2) || β | { ''x'' β ''v''<sub>2</sub>.''v''<sub>3</sub>, ''app''(''y'',''x'') β ''v''<sub>4</sub>, {{color|red|''v''<sub>2</sub>.''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''a''.''nil''}} } | {} |- | decompose || β | { {{color|red|''x'' β ''v''<sub>2</sub>.''v''<sub>3</sub>}}, ''app''(''y'',''x'') β ''v''<sub>4</sub>, ''v''<sub>2</sub> β ''a'', ''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''nil'' } | {} |- | eliminate || β | { ''app''(''y'',''v''<sub>2</sub>.''v''<sub>3</sub>) β ''v''<sub>4</sub>, {{color|red|''v''<sub>2</sub> β ''a''}}, ''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''nil'' } | { ''x'' β¦ ''v''<sub>2</sub>.''v''<sub>3</sub> } |- | eliminate || β | { {{color|red|''app''(''y'',''a''.''v''<sub>3</sub>) β ''v''<sub>4</sub>}}, ''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''nil'' } | { ''x'' β¦ ''a''.''v''<sub>3</sub> } |- | mutate(1) || β | { ''y'' β ''nil'', ''a''.''v''<sub>3</sub> β ''v''<sub>5</sub>, {{color|red|''v''<sub>5</sub> β ''v''<sub>4</sub>}}, ''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''nil'' } | { ''x'' β¦ ''a''.''v''<sub>3</sub> } |- | eliminate || β | { {{color|red|''y'' β ''nil''}}, ''a''.''v''<sub>3</sub> β ''v''<sub>4</sub>, ''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''nil'' } | { ''x'' β¦ ''a''.''v''<sub>3</sub> } |- | eliminate || β | { ''a''.''v''<sub>3</sub> β ''v''<sub>4</sub>, {{color|red|''app''(''v''<sub>3</sub>,''v''<sub>4</sub>) β ''a''.''nil''}} } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''v''<sub>3</sub> } |- | mutate(1) || β | { ''a''.''v''<sub>3</sub> β ''v''<sub>4</sub>, ''v''<sub>3</sub> β ''nil'', {{color|red|''v''<sub>4</sub> β ''v''<sub>6</sub>}}, ''v''<sub>6</sub> β ''a''.''nil'' } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''v''<sub>3</sub> } |- | eliminate || β | { ''a''.''v''<sub>3</sub> β ''v''<sub>4</sub>, {{color|red|''v''<sub>3</sub> β ''nil''}}, ''v''<sub>4</sub> β ''a''.''nil'' } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''v''<sub>3</sub> } |- | eliminate || β | { ''a''.''nil'' β ''v''<sub>4</sub>, {{color|red|''v''<sub>4</sub> β ''a''.''nil''}} } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''nil'' } |- | eliminate || β | { {{color|red|''a''.''nil'' β ''a''.''nil''}} } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''nil'' } |- | decompose || β | { {{color|red|''a'' β ''a''}}, ''nil'' β ''nil'' } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''nil'' } |- | decompose || β | { {{color|red|''nil'' β ''nil''}} } | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''nil'' } |- | decompose || β | {} | { ''y'' β¦ ''nil'', ''x'' β¦ ''a''.''nil'' } |}
Summary:
Please note that all contributions to Niidae Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Encyclopedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
Unification (computer science)
(section)
Add topic