YES
0 QTRS
↳1 QTRSRRRProof (⇔, 0 ms)
↳2 QTRS
↳3 QTRSRRRProof (⇔, 0 ms)
↳4 QTRS
↳5 QTRSRRRProof (⇔, 0 ms)
↳6 QTRS
↳7 RisEmptyProof (⇔, 0 ms)
↳8 YES
rev(nil) → nil
rev(rev(x)) → x
rev(++(x, y)) → ++(rev(y), rev(x))
++(nil, y) → y
++(x, nil) → x
++(.(x, y), z) → .(x, ++(y, z))
++(x, ++(y, z)) → ++(++(x, y), z)
make(x) → .(x, nil)
With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly:
POL(++(x1, x2)) = 2 + x1 + x2
POL(.(x1, x2)) = x1 + x2
POL(make(x1)) = 1 + 2·x1
POL(nil) = 0
POL(rev(x1)) = 1 + 2·x1
rev(nil) → nil
rev(rev(x)) → x
rev(++(x, y)) → ++(rev(y), rev(x))
++(nil, y) → y
++(x, nil) → x
make(x) → .(x, nil)
++(.(x, y), z) → .(x, ++(y, z))
++(x, ++(y, z)) → ++(++(x, y), z)
With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly:
POL(++(x1, x2)) = 1 + x1 + 2·x2
POL(.(x1, x2)) = x1 + x2
++(x, ++(y, z)) → ++(++(x, y), z)
++(.(x, y), z) → .(x, ++(y, z))
++2 > .2
._2=0
++_2=0
++(.(x, y), z) → .(x, ++(y, z))