0 Prolog
↳1 PrologToPiTRSProof (⇐)
↳2 PiTRS
↳3 DependencyPairsProof (⇔)
↳4 PiDP
↳5 DependencyGraphProof (⇔)
↳6 PiDP
↳7 UsableRulesProof (⇔)
↳8 PiDP
↳9 PiDPToQDPProof (⇐)
↳10 QDP
↳11 QDPOrderProof (⇔)
↳12 QDP
↳13 DependencyGraphProof (⇔)
↳14 QDP
↳15 UsableRulesProof (⇔)
↳16 QDP
↳17 QReductionProof (⇔)
↳18 QDP
↳19 MRRProof (⇔)
↳20 QDP
↳21 PisEmptyProof (⇔)
↳22 TRUE
↳23 PrologToPiTRSProof (⇐)
↳24 PiTRS
↳25 DependencyPairsProof (⇔)
↳26 PiDP
↳27 DependencyGraphProof (⇔)
↳28 PiDP
↳29 UsableRulesProof (⇔)
↳30 PiDP
↳31 PiDPToQDPProof (⇐)
↳32 QDP
↳33 QDPOrderProof (⇔)
↳34 QDP
↳35 DependencyGraphProof (⇔)
↳36 QDP
↳37 UsableRulesProof (⇔)
↳38 QDP
↳39 QReductionProof (⇔)
↳40 QDP
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GA(X, XS, YS, flat_in_ga(ZS, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GA(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GA(X, XS, YS, flat_in_ga(ZS, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GA(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_in_ga(tree(X, niltree, XS)))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(XS2)
right_in_ga(x0)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
U1_GA(X, right_out_ga(ZS)) → FLAT_IN_GA(ZS)
POL(FLAT_IN_GA(x1)) = x1
POL(U1_GA(x1, x2)) = x2
POL(niltree) = 0
POL(right_in_ga(x1)) = x1
POL(right_out_ga(x1)) = 1 + x1
POL(tree(x1, x2, x3)) = 1 + x2 + x3
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(XS2)
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, right_in_ga(tree(X, niltree, XS)))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(XS2)
right_in_ga(x0)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(XS2)
right_in_ga(x0)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(x0)
right_in_ga(x0)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
POL(FLAT_IN_GA(x1)) = 2·x1
POL(tree(x1, x2, x3)) = 2 + 2·x1 + 2·x2 + x3
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GA(X, XS, YS, flat_in_ga(ZS, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GA(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → RIGHT_IN_GA(tree(X, niltree, XS), ZS)
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_GA(X, XS, YS, flat_in_ga(ZS, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_GA(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
flat_in_ga(niltree, nil) → flat_out_ga(niltree, nil)
flat_in_ga(tree(X, niltree, XS), cons(X, YS)) → U1_ga(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_ga(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → U2_ga(X, XS, YS, flat_in_ga(ZS, YS))
flat_in_ga(tree(X, tree(Y, YS1, YS2), XS), ZS) → U3_ga(X, Y, YS1, YS2, XS, ZS, flat_in_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS))
U3_ga(X, Y, YS1, YS2, XS, ZS, flat_out_ga(tree(Y, YS1, tree(X, YS2, XS)), ZS)) → flat_out_ga(tree(X, tree(Y, YS1, YS2), XS), ZS)
U2_ga(X, XS, YS, flat_out_ga(ZS, YS)) → flat_out_ga(tree(X, niltree, XS), cons(X, YS))
U1_GA(X, XS, YS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS, YS)
FLAT_IN_GA(tree(X, niltree, XS), cons(X, YS)) → U1_GA(X, XS, YS, right_in_ga(tree(X, niltree, XS), ZS))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS), ZS) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)), ZS)
right_in_ga(tree(X, XS1, XS2), XS2) → right_out_ga(tree(X, XS1, XS2), XS2)
U1_GA(X, XS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS)
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, XS, right_in_ga(tree(X, niltree, XS)))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(tree(X, XS1, XS2), XS2)
right_in_ga(x0)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
U1_GA(X, XS, right_out_ga(tree(X, niltree, XS), ZS)) → FLAT_IN_GA(ZS)
POL(FLAT_IN_GA(x1)) = x1
POL(U1_GA(x1, x2, x3)) = x3
POL(niltree) = 0
POL(right_in_ga(x1)) = x1
POL(right_out_ga(x1, x2)) = 1 + x2
POL(tree(x1, x2, x3)) = 1 + x2 + x3
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(tree(X, XS1, XS2), XS2)
FLAT_IN_GA(tree(X, niltree, XS)) → U1_GA(X, XS, right_in_ga(tree(X, niltree, XS)))
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(tree(X, XS1, XS2), XS2)
right_in_ga(x0)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(tree(X, XS1, XS2)) → right_out_ga(tree(X, XS1, XS2), XS2)
right_in_ga(x0)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))
right_in_ga(x0)
right_in_ga(x0)
FLAT_IN_GA(tree(X, tree(Y, YS1, YS2), XS)) → FLAT_IN_GA(tree(Y, YS1, tree(X, YS2, XS)))