R
↳Dependency Pair Analysis
REV(++(x, y)) -> REV1(x, y)
REV(++(x, y)) -> REV2(x, y)
REV1(x, ++(y, z)) -> REV1(y, z)
REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z))))
REV2(x, ++(y, z)) -> REV(rev2(y, z))
REV2(x, ++(y, z)) -> REV2(y, z)
R
↳DPs
→DP Problem 1
↳Usable Rules (Innermost)
→DP Problem 2
↳Nar
REV1(x, ++(y, z)) -> REV1(y, z)
rev(nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
rev1(x, nil) -> x
rev1(x, ++(y, z)) -> rev1(y, z)
rev2(x, nil) -> nil
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
innermost
R
↳DPs
→DP Problem 1
↳UsableRules
→DP Problem 3
↳Size-Change Principle
→DP Problem 2
↳Nar
REV1(x, ++(y, z)) -> REV1(y, z)
none
innermost
|
|
trivial
++(x1, x2) -> ++(x1, x2)
R
↳DPs
→DP Problem 1
↳UsableRules
→DP Problem 2
↳Narrowing Transformation
REV2(x, ++(y, z)) -> REV2(y, z)
REV2(x, ++(y, z)) -> REV(rev2(y, z))
REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z))))
REV(++(x, y)) -> REV2(x, y)
rev(nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
rev1(x, nil) -> x
rev1(x, ++(y, z)) -> rev1(y, z)
rev2(x, nil) -> nil
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
innermost
two new Dependency Pairs are created:
REV2(x, ++(y, z)) -> REV(rev2(y, z))
REV2(x, ++(y', nil)) -> REV(nil)
REV2(x, ++(y0, ++(y'', z''))) -> REV(rev(++(y0, rev(rev2(y'', z'')))))
R
↳DPs
→DP Problem 1
↳UsableRules
→DP Problem 2
↳Nar
→DP Problem 4
↳Negative Polynomial Order
REV2(x, ++(y0, ++(y'', z''))) -> REV(rev(++(y0, rev(rev2(y'', z'')))))
REV(++(x, y)) -> REV2(x, y)
REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z))))
REV2(x, ++(y, z)) -> REV2(y, z)
rev(nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
rev1(x, nil) -> x
rev1(x, ++(y, z)) -> rev1(y, z)
rev2(x, nil) -> nil
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
innermost
REV2(x, ++(y0, ++(y'', z''))) -> REV(rev(++(y0, rev(rev2(y'', z'')))))
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
rev(nil) -> nil
rev2(x, nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
POL( REV2(x1, x2) ) = max{0, x2 - 1}
POL( ++(x1, x2) ) = x2 + 1
POL( REV(x1) ) = max{0, x1 - 1}
POL( rev(x1) ) = x1
POL( rev2(x1, x2) ) = x2
POL( nil ) = 0
R
↳DPs
→DP Problem 1
↳UsableRules
→DP Problem 2
↳Nar
→DP Problem 4
↳Neg POLO
...
→DP Problem 5
↳Negative Polynomial Order
REV(++(x, y)) -> REV2(x, y)
REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z))))
REV2(x, ++(y, z)) -> REV2(y, z)
rev(nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
rev1(x, nil) -> x
rev1(x, ++(y, z)) -> rev1(y, z)
rev2(x, nil) -> nil
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
innermost
REV(++(x, y)) -> REV2(x, y)
REV2(x, ++(y, z)) -> REV2(y, z)
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
rev(nil) -> nil
rev2(x, nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
POL( REV(x1) ) = x1
POL( ++(x1, x2) ) = x2 + 1
POL( REV2(x1, x2) ) = x2
POL( rev(x1) ) = x1
POL( rev2(x1, x2) ) = x2
POL( nil ) = 0
R
↳DPs
→DP Problem 1
↳UsableRules
→DP Problem 2
↳Nar
→DP Problem 4
↳Neg POLO
...
→DP Problem 6
↳Dependency Graph
REV2(x, ++(y, z)) -> REV(++(x, rev(rev2(y, z))))
rev(nil) -> nil
rev(++(x, y)) -> ++(rev1(x, y), rev2(x, y))
rev1(x, nil) -> x
rev1(x, ++(y, z)) -> rev1(y, z)
rev2(x, nil) -> nil
rev2(x, ++(y, z)) -> rev(++(x, rev(rev2(y, z))))
innermost