0 Prolog
↳1 PrologToPiTRSProof (⇐)
↳2 PiTRS
↳3 DependencyPairsProof (⇔)
↳4 PiDP
↳5 DependencyGraphProof (⇔)
↳6 PiDP
↳7 UsableRulesProof (⇔)
↳8 PiDP
↳9 PiDPToQDPProof (⇔)
↳10 QDP
↳11 QDPSizeChangeProof (⇔)
↳12 TRUE
↳13 PrologToPiTRSProof (⇐)
↳14 PiTRS
↳15 DependencyPairsProof (⇔)
↳16 PiDP
↳17 DependencyGraphProof (⇔)
↳18 PiDP
↳19 UsableRulesProof (⇔)
↳20 PiDP
↳21 PiDPToQDPProof (⇔)
↳22 QDP
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
PALINDROME_IN_G(Xs) → U1_G(Xs, reverse_in_gg(Xs, Xs))
PALINDROME_IN_G(Xs) → REVERSE_IN_GG(Xs, Xs)
REVERSE_IN_GG(X1s, X2s) → U2_GG(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
REVERSE_IN_GG(X1s, X2s) → REVERSE_IN_GGG(X1s, [], X2s)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → U3_GGG(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
PALINDROME_IN_G(Xs) → U1_G(Xs, reverse_in_gg(Xs, Xs))
PALINDROME_IN_G(Xs) → REVERSE_IN_GG(Xs, Xs)
REVERSE_IN_GG(X1s, X2s) → U2_GG(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
REVERSE_IN_GG(X1s, X2s) → REVERSE_IN_GGG(X1s, [], X2s)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → U3_GGG(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
From the DPs we obtained the following set of size-change graphs:
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
PALINDROME_IN_G(Xs) → U1_G(Xs, reverse_in_gg(Xs, Xs))
PALINDROME_IN_G(Xs) → REVERSE_IN_GG(Xs, Xs)
REVERSE_IN_GG(X1s, X2s) → U2_GG(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
REVERSE_IN_GG(X1s, X2s) → REVERSE_IN_GGG(X1s, [], X2s)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → U3_GGG(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
PALINDROME_IN_G(Xs) → U1_G(Xs, reverse_in_gg(Xs, Xs))
PALINDROME_IN_G(Xs) → REVERSE_IN_GG(Xs, Xs)
REVERSE_IN_GG(X1s, X2s) → U2_GG(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
REVERSE_IN_GG(X1s, X2s) → REVERSE_IN_GGG(X1s, [], X2s)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → U3_GGG(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
palindrome_in_g(Xs) → U1_g(Xs, reverse_in_gg(Xs, Xs))
reverse_in_gg(X1s, X2s) → U2_gg(X1s, X2s, reverse_in_ggg(X1s, [], X2s))
reverse_in_ggg([], Xs, Xs) → reverse_out_ggg([], Xs, Xs)
reverse_in_ggg(.(X, X1s), X2s, Ys) → U3_ggg(X, X1s, X2s, Ys, reverse_in_ggg(X1s, .(X, X2s), Ys))
U3_ggg(X, X1s, X2s, Ys, reverse_out_ggg(X1s, .(X, X2s), Ys)) → reverse_out_ggg(.(X, X1s), X2s, Ys)
U2_gg(X1s, X2s, reverse_out_ggg(X1s, [], X2s)) → reverse_out_gg(X1s, X2s)
U1_g(Xs, reverse_out_gg(Xs, Xs)) → palindrome_out_g(Xs)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)
REVERSE_IN_GGG(.(X, X1s), X2s, Ys) → REVERSE_IN_GGG(X1s, .(X, X2s), Ys)