YES
0 QTRS
↳1 QTRSRRRProof (⇔, 66 ms)
↳2 QTRS
↳3 Overlay + Local Confluence (⇔, 21 ms)
↳4 QTRS
↳5 DependencyPairsProof (⇔, 0 ms)
↳6 QDP
↳7 DependencyGraphProof (⇔, 0 ms)
↳8 AND
↳9 QDP
↳10 UsableRulesProof (⇔, 0 ms)
↳11 QDP
↳12 QReductionProof (⇔, 0 ms)
↳13 QDP
↳14 QDPSizeChangeProof (⇔, 0 ms)
↳15 YES
↳16 QDP
↳17 UsableRulesProof (⇔, 0 ms)
↳18 QDP
↳19 QReductionProof (⇔, 0 ms)
↳20 QDP
↳21 QDPOrderProof (⇔, 20 ms)
↳22 QDP
↳23 QDPOrderProof (⇔, 17 ms)
↳24 QDP
↳25 PisEmptyProof (⇔, 0 ms)
↳26 YES
↳27 QDP
↳28 UsableRulesProof (⇔, 0 ms)
↳29 QDP
↳30 QReductionProof (⇔, 0 ms)
↳31 QDP
↳32 QDPSizeChangeProof (⇔, 0 ms)
↳33 YES
begin(end(x)) → rewrite(end(x))
begin(a(x)) → rotate(cut(Ca(guess(x))))
begin(b(x)) → rotate(cut(Cb(guess(x))))
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
guess(a(x)) → moveleft(Ba(wait(x)))
guess(b(x)) → moveleft(Bb(wait(x)))
guess(end(x)) → finish(end(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
goright(wait(end(x))) → finish(end(x))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
cut(finish(x)) → finish2(x)
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
rotate(finish2(x)) → rewrite(x)
rewrite(a(x)) → begin(b(b(x)))
rewrite(b(b(b(x)))) → begin(a(x))
With this ordering the following rules can be removed by the rule removal processor [LPAR04] because they are oriented strictly:
POL(Aa(x1)) = 30 + x1
POL(Ab(x1)) = 12 + x1
POL(Ba(x1)) = 30 + x1
POL(Bb(x1)) = 12 + x1
POL(Ca(x1)) = 30 + x1
POL(Cb(x1)) = 12 + x1
POL(Da(x1)) = 30 + x1
POL(Db(x1)) = 12 + x1
POL(a(x1)) = 30 + x1
POL(b(x1)) = 12 + x1
POL(begin(x1)) = 5 + x1
POL(cut(x1)) = 2 + x1
POL(end(x1)) = x1
POL(finish(x1)) = x1
POL(finish2(x1)) = 1 + x1
POL(goright(x1)) = x1
POL(guess(x1)) = 2 + x1
POL(moveleft(x1)) = x1
POL(rewrite(x1)) = x1
POL(rotate(x1)) = x1
POL(wait(x1)) = 1 + x1
begin(end(x)) → rewrite(end(x))
begin(a(x)) → rotate(cut(Ca(guess(x))))
begin(b(x)) → rotate(cut(Cb(guess(x))))
guess(a(x)) → moveleft(Ba(wait(x)))
guess(b(x)) → moveleft(Bb(wait(x)))
guess(end(x)) → finish(end(x))
goright(wait(end(x))) → finish(end(x))
cut(finish(x)) → finish2(x)
rotate(finish2(x)) → rewrite(x)
rewrite(a(x)) → begin(b(b(x)))
rewrite(b(b(b(x)))) → begin(a(x))
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
GUESS(a(x)) → CA(guess(x))
GUESS(a(x)) → GUESS(x)
GUESS(b(x)) → CB(guess(x))
GUESS(b(x)) → GUESS(x)
CUT(moveleft(Ba(x))) → DA(cut(goright(x)))
CUT(moveleft(Ba(x))) → CUT(goright(x))
CUT(moveleft(Ba(x))) → GORIGHT(x)
CUT(moveleft(Bb(x))) → DB(cut(goright(x)))
CUT(moveleft(Bb(x))) → CUT(goright(x))
CUT(moveleft(Bb(x))) → GORIGHT(x)
GORIGHT(Aa(x)) → CA(goright(x))
GORIGHT(Aa(x)) → GORIGHT(x)
GORIGHT(Ab(x)) → CB(goright(x))
GORIGHT(Ab(x)) → GORIGHT(x)
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
GORIGHT(Ab(x)) → GORIGHT(x)
GORIGHT(Aa(x)) → GORIGHT(x)
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
GORIGHT(Ab(x)) → GORIGHT(x)
GORIGHT(Aa(x)) → GORIGHT(x)
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
GORIGHT(Ab(x)) → GORIGHT(x)
GORIGHT(Aa(x)) → GORIGHT(x)
From the DPs we obtained the following set of size-change graphs:
CUT(moveleft(Bb(x))) → CUT(goright(x))
CUT(moveleft(Ba(x))) → CUT(goright(x))
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
CUT(moveleft(Bb(x))) → CUT(goright(x))
CUT(moveleft(Ba(x))) → CUT(goright(x))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
Cb(finish(x)) → finish(b(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Ca(finish(x)) → finish(a(x))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
guess(a(x0))
guess(b(x0))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
Da(finish2(x0))
Db(finish2(x0))
CUT(moveleft(Bb(x))) → CUT(goright(x))
CUT(moveleft(Ba(x))) → CUT(goright(x))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
Cb(finish(x)) → finish(b(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Ca(finish(x)) → finish(a(x))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
CUT(moveleft(Bb(x))) → CUT(goright(x))
POL(Aa(x1)) = 1 + x1
POL(Ab(x1)) = 1 + x1
POL(Ba(x1)) = x1
POL(Bb(x1)) = 1 + x1
POL(CUT(x1)) = x1
POL(Ca(x1)) = 1 + x1
POL(Cb(x1)) = 1 + x1
POL(a(x1)) = 1 + x1
POL(b(x1)) = 1 + x1
POL(finish(x1)) = 1 + x1
POL(goright(x1)) = x1
POL(moveleft(x1)) = x1
POL(wait(x1)) = x1
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
Cb(finish(x)) → finish(b(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Ca(finish(x)) → finish(a(x))
CUT(moveleft(Ba(x))) → CUT(goright(x))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
Cb(finish(x)) → finish(b(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Ca(finish(x)) → finish(a(x))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
CUT(moveleft(Ba(x))) → CUT(goright(x))
POL(Aa(x1)) = x1
POL(Ab(x1)) = 1 + x1
POL(Ba(x1)) = 1 + x1
POL(Bb(x1)) = 0
POL(CUT(x1)) = x1
POL(Ca(x1)) = x1
POL(Cb(x1)) = 1 + x1
POL(a(x1)) = 1 + x1
POL(b(x1)) = x1
POL(finish(x1)) = 1
POL(goright(x1)) = x1
POL(moveleft(x1)) = x1
POL(wait(x1)) = x1
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
Cb(finish(x)) → finish(b(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Ca(finish(x)) → finish(a(x))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
Cb(finish(x)) → finish(b(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Ca(finish(x)) → finish(a(x))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
GUESS(b(x)) → GUESS(x)
GUESS(a(x)) → GUESS(x)
guess(a(x)) → Ca(guess(x))
guess(b(x)) → Cb(guess(x))
Ca(moveleft(Ba(x))) → moveleft(Ba(Aa(x)))
Cb(moveleft(Ba(x))) → moveleft(Ba(Ab(x)))
Ca(moveleft(Bb(x))) → moveleft(Bb(Aa(x)))
Cb(moveleft(Bb(x))) → moveleft(Bb(Ab(x)))
cut(moveleft(Ba(x))) → Da(cut(goright(x)))
cut(moveleft(Bb(x))) → Db(cut(goright(x)))
goright(Aa(x)) → Ca(goright(x))
goright(Ab(x)) → Cb(goright(x))
goright(wait(a(x))) → moveleft(Ba(wait(x)))
goright(wait(b(x))) → moveleft(Bb(wait(x)))
Ca(finish(x)) → finish(a(x))
Cb(finish(x)) → finish(b(x))
Da(finish2(x)) → finish2(a(x))
Db(finish2(x)) → finish2(b(x))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
GUESS(b(x)) → GUESS(x)
GUESS(a(x)) → GUESS(x)
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
guess(a(x0))
guess(b(x0))
Ca(moveleft(Ba(x0)))
Cb(moveleft(Ba(x0)))
Ca(moveleft(Bb(x0)))
Cb(moveleft(Bb(x0)))
cut(moveleft(Ba(x0)))
cut(moveleft(Bb(x0)))
goright(Aa(x0))
goright(Ab(x0))
goright(wait(a(x0)))
goright(wait(b(x0)))
Ca(finish(x0))
Cb(finish(x0))
Da(finish2(x0))
Db(finish2(x0))
GUESS(b(x)) → GUESS(x)
GUESS(a(x)) → GUESS(x)
From the DPs we obtained the following set of size-change graphs: