Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Unification (computer science)
(section)
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'' } |}
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)