0 Prolog
↳1 PrologToPiTRSProof (⇐)
↳2 PiTRS
↳3 DependencyPairsProof (⇔)
↳4 PiDP
↳5 DependencyGraphProof (⇔)
↳6 PiDP
↳7 PiDPToQDPProof (⇔)
↳8 QDP
↳9 QDPOrderProof (⇔)
↳10 QDP
↳11 PrologToPiTRSProof (⇐)
↳12 PiTRS
↳13 DependencyPairsProof (⇔)
↳14 PiDP
↳15 DependencyGraphProof (⇔)
↳16 PiDP
↳17 PiDPToQDPProof (⇐)
↳18 QDP
↳19 QDPOrderProof (⇔)
↳20 QDP
↳21 QDPOrderProof (⇔)
↳22 QDP
↳23 DependencyGraphProof (⇔)
↳24 QDP
↳25 UsableRulesProof (⇔)
↳26 QDP
↳27 QReductionProof (⇔)
↳28 QDP
↳29 UsableRulesReductionPairsProof (⇔)
↳30 QDP
↳31 PisEmptyProof (⇔)
↳32 TRUE
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → U3_G(Xs, p_in_g(Xs))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_G(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → U3_G(Xs, p_in_g(Xs))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_G(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
p_in_g(x0)
U3_g(x0, x1)
U1_g(x0, x1, x2, x3)
U2_g(x0, x1, x2, x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
POL(0) = 1
POL(P_IN_G(x1)) = x1
POL(U1_G(x1, x2, x3, x4)) = x2 + x3
POL(U1_g(x1, x2, x3, x4)) = x1 + x2 + x3
POL(U2_g(x1, x2, x3, x4)) = x1
POL(U3_g(x1, x2)) = x2
POL(cons(x1, x2)) = x1 + x2
POL(nil) = 0
POL(p_in_g(x1)) = x1
POL(p_out_g(x1)) = 0
POL(s(x1)) = x1
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
p_in_g(x0)
U3_g(x0, x1)
U1_g(x0, x1, x2, x3)
U2_g(x0, x1, x2, x3)
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → U3_G(Xs, p_in_g(Xs))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_G(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → U3_G(Xs, p_in_g(Xs))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_G(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
U1_G(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
p_in_g(cons(X, nil)) → p_out_g(cons(X, nil))
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(X, Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(Xs, p_in_g(Xs))
U3_g(Xs, p_out_g(Xs)) → p_out_g(cons(0, Xs))
U1_g(X, Y, Xs, p_out_g(cons(X, cons(Y, Xs)))) → U2_g(X, Y, Xs, p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(X, Y, Xs, p_out_g(cons(s(s(s(s(Y)))), Xs))) → p_out_g(cons(s(s(X)), cons(Y, Xs)))
U1_G(Y, Xs, p_out_g) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
p_in_g(cons(X, nil)) → p_out_g
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(p_in_g(Xs))
U3_g(p_out_g) → p_out_g
U1_g(Y, Xs, p_out_g) → U2_g(p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(p_out_g) → p_out_g
p_in_g(x0)
U3_g(x0)
U1_g(x0, x1, x2)
U2_g(x0)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
P_IN_G(cons(0, Xs)) → P_IN_G(Xs)
POL(0) = 1
POL(P_IN_G(x1)) = x1
POL(U1_G(x1, x2, x3)) = x1 + x2
POL(U1_g(x1, x2, x3)) = 0
POL(U2_g(x1)) = 0
POL(U3_g(x1)) = 0
POL(cons(x1, x2)) = x1 + x2
POL(nil) = 0
POL(p_in_g(x1)) = 0
POL(p_out_g) = 0
POL(s(x1)) = x1
U1_G(Y, Xs, p_out_g) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
p_in_g(cons(X, nil)) → p_out_g
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(p_in_g(Xs))
U3_g(p_out_g) → p_out_g
U1_g(Y, Xs, p_out_g) → U2_g(p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(p_out_g) → p_out_g
p_in_g(x0)
U3_g(x0)
U1_g(x0, x1, x2)
U2_g(x0)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → U1_G(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
POL(0) = 0
POL(P_IN_G(x1)) = x1
POL(U1_G(x1, x2, x3)) = 1 + x2
POL(U1_g(x1, x2, x3)) = 0
POL(U2_g(x1)) = 0
POL(U3_g(x1)) = 0
POL(cons(x1, x2)) = 1 + x2
POL(nil) = 0
POL(p_in_g(x1)) = 0
POL(p_out_g) = 0
POL(s(x1)) = 0
U1_G(Y, Xs, p_out_g) → P_IN_G(cons(s(s(s(s(Y)))), Xs))
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
p_in_g(cons(X, nil)) → p_out_g
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(p_in_g(Xs))
U3_g(p_out_g) → p_out_g
U1_g(Y, Xs, p_out_g) → U2_g(p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(p_out_g) → p_out_g
p_in_g(x0)
U3_g(x0)
U1_g(x0, x1, x2)
U2_g(x0)
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
p_in_g(cons(X, nil)) → p_out_g
p_in_g(cons(s(s(X)), cons(Y, Xs))) → U1_g(Y, Xs, p_in_g(cons(X, cons(Y, Xs))))
p_in_g(cons(0, Xs)) → U3_g(p_in_g(Xs))
U3_g(p_out_g) → p_out_g
U1_g(Y, Xs, p_out_g) → U2_g(p_in_g(cons(s(s(s(s(Y)))), Xs)))
U2_g(p_out_g) → p_out_g
p_in_g(x0)
U3_g(x0)
U1_g(x0, x1, x2)
U2_g(x0)
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
p_in_g(x0)
U3_g(x0)
U1_g(x0, x1, x2)
U2_g(x0)
p_in_g(x0)
U3_g(x0)
U1_g(x0, x1, x2)
U2_g(x0)
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
No rules are removed from R.
P_IN_G(cons(s(s(X)), cons(Y, Xs))) → P_IN_G(cons(X, cons(Y, Xs)))
POL(P_IN_G(x1)) = 2·x1
POL(cons(x1, x2)) = 2·x1 + x2
POL(s(x1)) = 2·x1