In theoretical computer science, in particular in term rewriting, a path ordering is a well-founded strict total order (>) on the set of all terms such that
where (.>) is a user-given total precedence order on the set of all function symbols.
Intuitively, a term f(...) is bigger than any term g(...) built from terms si smaller than f(...) using a lower-precedence root symbol g. In particular, by structural induction, a term f(...) is bigger than any term containing only symbols smaller than f.
A path ordering is often used as reduction ordering in term rewriting, in particular in the Knuth–Bendix completion algorithm. As an example, a term rewriting system for "multiplying out" mathematical expressions could contain a rule x*(y+z) → (x*y) + (x*z). In order to prove termination, a reduction ordering (>) must be found with respect to which the term x*(y+z) is greater than the term (x*y)+(x*z). This is not trivial, since the former term contains both fewer function symbols and fewer variables than the latter. However, setting the precedence (*) .> (+), a path ordering can be used, since both x*(y+z) > x*y and x*(y+z) > x*z is easy to achieve.
There may also be systems for certain general recursive functions, for example a system for the Ackermann function may contain the rule A(a+, b+) → A(a, A(a+, b)),[1] where b+ denotes the successor of b.
Given two terms s and t, with a root symbol f and g, respectively, to decide their relation their root symbols are compared first.
The latter variations include:
Dershowitz, Okada (1988) list more variants, and relate them to Ackermann's system of ordinal notations. In particular, an upper bound given on the order types of recursive path orderings with n function symbols is φ(n,0), using Veblen's function for large countable ordinals.[7]
The multiset path ordering (>) can be defined as follows:[9]
s = f(s1,...,sm) > t = g(t1,...,tn) | if | ||||||||
f | .> | g | and | s | > | tj | for each | j∈{1,...,n}, | or |
si | ≥ | t | for some | i∈{1,...,m}, | or | ||||
f | = | g | and | { s1,...,sm } >> { t1,...,tn } |
where
More generally, an order functional is a function O mapping an ordering to another one, and satisfying the following properties:[11]
The multiset extension, mapping (>) above to (>>) above is one example of an order functional: (>>)=O(>). Another order functional is the lexicographic extension, leading to the lexicographic path ordering.
Original source: https://en.wikipedia.org/wiki/Path ordering (term rewriting).
Read more |