0 QTRS
↳1 Overlay + Local Confluence (⇔)
↳2 QTRS
↳3 DependencyPairsProof (⇔)
↳4 QDP
↳5 DependencyGraphProof (⇔)
↳6 AND
↳7 QDP
↳8 UsableRulesProof (⇔)
↳9 QDP
↳10 QReductionProof (⇔)
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 TRUE
↳14 QDP
↳15 QDPOrderProof (⇔)
↳16 QDP
↳17 DependencyGraphProof (⇔)
↳18 TRUE
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))))
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))))
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))
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)
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))))
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))
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))))
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))
REV1(x, ++(y, z)) → REV1(y, z)
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))
REV1(x, ++(y, z)) → REV1(y, z)
From the DPs we obtained the following set of size-change graphs:
REV(++(x, y)) → REV2(x, y)
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)
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))))
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
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)
POL(++(x1, x2)) = 1 + x2
POL(REV(x1)) = x1
POL(REV2(x1, x2)) = 1 + x2
POL(nil) = 0
POL(rev(x1)) = x1
POL(rev1(x1, x2)) = 0
POL(rev2(x1, x2)) = x2
rev2(x, nil) → nil
rev2(x, ++(y, z)) → rev(++(x, rev(rev2(y, z))))
rev(nil) → nil
rev(++(x, y)) → ++(rev1(x, y), rev2(x, y))
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))))
rev(nil)
rev(++(x0, x1))
rev1(x0, nil)
rev1(x0, ++(x1, x2))
rev2(x0, nil)
rev2(x0, ++(x1, x2))