0 Prolog
↳1 CutEliminatorProof (⇐)
↳2 Prolog
↳3 UndefinedPredicateHandlerProof (⇐)
↳4 Prolog
↳5 PrologToPiTRSProof (⇐)
↳6 PiTRS
↳7 DependencyPairsProof (⇔)
↳8 PiDP
↳9 DependencyGraphProof (⇔)
↳10 PiDP
↳11 UsableRulesProof (⇔)
↳12 PiDP
↳13 PiDPToQDPProof (⇐)
↳14 QDP
↳15 QDPSizeChangeProof (⇔)
↳16 TRUE
↳17 PrologToPiTRSProof (⇐)
↳18 PiTRS
↳19 DependencyPairsProof (⇔)
↳20 PiDP
↳21 DependencyGraphProof (⇔)
↳22 PiDP
↳23 UsableRulesProof (⇔)
↳24 PiDP
↳25 PiDPToQDPProof (⇐)
↳26 QDP
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, [], A) → U1_GGA(A, true_in_)
SHUFFLE_IN_GGA(A, [], A) → TRUE_IN_
SHUFFLE_IN_GGA([], B, B) → U2_GGA(B, true_in_)
SHUFFLE_IN_GGA([], B, B) → TRUE_IN_
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → U3_GGA(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → U4_GGA(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, [], A) → U1_GGA(A, true_in_)
SHUFFLE_IN_GGA(A, [], A) → TRUE_IN_
SHUFFLE_IN_GGA([], B, B) → U2_GGA(B, true_in_)
SHUFFLE_IN_GGA([], B, B) → TRUE_IN_
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → U3_GGA(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → U4_GGA(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
SHUFFLE_IN_GGA(A, .(B, RestB)) → SHUFFLE_IN_GGA(A, RestB)
SHUFFLE_IN_GGA(.(A, RestA), B) → SHUFFLE_IN_GGA(RestA, B)
From the DPs we obtained the following set of size-change graphs:
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, [], A) → U1_GGA(A, true_in_)
SHUFFLE_IN_GGA(A, [], A) → TRUE_IN_
SHUFFLE_IN_GGA([], B, B) → U2_GGA(B, true_in_)
SHUFFLE_IN_GGA([], B, B) → TRUE_IN_
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → U3_GGA(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → U4_GGA(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, [], A) → U1_GGA(A, true_in_)
SHUFFLE_IN_GGA(A, [], A) → TRUE_IN_
SHUFFLE_IN_GGA([], B, B) → U2_GGA(B, true_in_)
SHUFFLE_IN_GGA([], B, B) → TRUE_IN_
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → U3_GGA(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → U4_GGA(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
shuffle_in_gga(A, [], A) → U1_gga(A, true_in_)
true_in_ → true_out_
U1_gga(A, true_out_) → shuffle_out_gga(A, [], A)
shuffle_in_gga([], B, B) → U2_gga(B, true_in_)
U2_gga(B, true_out_) → shuffle_out_gga([], B, B)
shuffle_in_gga(.(A, RestA), B, .(A, Shuffled)) → U3_gga(A, RestA, B, Shuffled, shuffle_in_gga(RestA, B, Shuffled))
shuffle_in_gga(A, .(B, RestB), .(B, Shuffled)) → U4_gga(A, B, RestB, Shuffled, shuffle_in_gga(A, RestB, Shuffled))
U4_gga(A, B, RestB, Shuffled, shuffle_out_gga(A, RestB, Shuffled)) → shuffle_out_gga(A, .(B, RestB), .(B, Shuffled))
U3_gga(A, RestA, B, Shuffled, shuffle_out_gga(RestA, B, Shuffled)) → shuffle_out_gga(.(A, RestA), B, .(A, Shuffled))
SHUFFLE_IN_GGA(A, .(B, RestB), .(B, Shuffled)) → SHUFFLE_IN_GGA(A, RestB, Shuffled)
SHUFFLE_IN_GGA(.(A, RestA), B, .(A, Shuffled)) → SHUFFLE_IN_GGA(RestA, B, Shuffled)
SHUFFLE_IN_GGA(A, .(B, RestB)) → SHUFFLE_IN_GGA(A, RestB)
SHUFFLE_IN_GGA(.(A, RestA), B) → SHUFFLE_IN_GGA(RestA, B)