0 Prolog
↳1 PrologToPiTRSProof (⇐)
↳2 PiTRS
↳3 DependencyPairsProof (⇔)
↳4 PiDP
↳5 DependencyGraphProof (⇔)
↳6 AND
↳7 PiDP
↳8 UsableRulesProof (⇔)
↳9 PiDP
↳10 PiDPToQDPProof (⇐)
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 TRUE
↳14 PiDP
↳15 UsableRulesProof (⇔)
↳16 PiDP
↳17 PiDPToQDPProof (⇐)
↳18 QDP
↳19 QDPSizeChangeProof (⇔)
↳20 TRUE
↳21 PiDP
↳22 UsableRulesProof (⇔)
↳23 PiDP
↳24 PiDPToQDPProof (⇐)
↳25 QDP
↳26 PrologToPiTRSProof (⇐)
↳27 PiTRS
↳28 DependencyPairsProof (⇔)
↳29 PiDP
↳30 DependencyGraphProof (⇔)
↳31 AND
↳32 PiDP
↳33 UsableRulesProof (⇔)
↳34 PiDP
↳35 PiDPToQDPProof (⇐)
↳36 QDP
↳37 QDPSizeChangeProof (⇔)
↳38 TRUE
↳39 PiDP
↳40 UsableRulesProof (⇔)
↳41 PiDP
↳42 PiDPToQDPProof (⇐)
↳43 QDP
↳44 QDPSizeChangeProof (⇔)
↳45 TRUE
↳46 PiDP
↳47 UsableRulesProof (⇔)
↳48 PiDP
↳49 PiDPToQDPProof (⇐)
↳50 QDP
↳51 MRRProof (⇔)
↳52 QDP
↳53 PisEmptyProof (⇔)
↳54 TRUE
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
PERM_IN_GA(XS, cons(Y, YS)) → SPLIT_IN_GAA(XS, YS1, cons(Y, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → U2_GAA(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → APPEND_IN_GGA(YS1, YS2, ZS)
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → U1_GGA(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_GA(XS, Y, YS, perm_in_ga(ZS, YS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
PERM_IN_GA(XS, cons(Y, YS)) → SPLIT_IN_GAA(XS, YS1, cons(Y, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → U2_GAA(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → APPEND_IN_GGA(YS1, YS2, ZS)
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → U1_GGA(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_GA(XS, Y, YS, perm_in_ga(ZS, YS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
APPEND_IN_GGA(cons(XS1), XS2) → APPEND_IN_GGA(XS1, XS2)
From the DPs we obtained the following set of size-change graphs:
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
SPLIT_IN_GAA(cons(XS)) → SPLIT_IN_GAA(XS)
From the DPs we obtained the following set of size-change graphs:
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_GA(XS, split_out_gaa(XS, YS1, cons(YS2))) → U4_GA(XS, append_in_gga(YS1, YS2))
U4_GA(XS, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS)
PERM_IN_GA(XS) → U3_GA(XS, split_in_gaa(XS))
append_in_gga(nil, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(XS1), XS2) → U1_gga(XS1, XS2, append_in_gga(XS1, XS2))
split_in_gaa(XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(XS)) → U2_gaa(XS, split_in_gaa(XS))
U1_gga(XS1, XS2, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(XS1), XS2, cons(YS))
U2_gaa(XS, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(XS), cons(YS1), YS2)
append_in_gga(x0, x1)
split_in_gaa(x0)
U1_gga(x0, x1, x2)
U2_gaa(x0, x1)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
PERM_IN_GA(XS, cons(Y, YS)) → SPLIT_IN_GAA(XS, YS1, cons(Y, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → U2_GAA(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → APPEND_IN_GGA(YS1, YS2, ZS)
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → U1_GGA(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_GA(XS, Y, YS, perm_in_ga(ZS, YS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
PERM_IN_GA(XS, cons(Y, YS)) → SPLIT_IN_GAA(XS, YS1, cons(Y, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → U2_GAA(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → APPEND_IN_GGA(YS1, YS2, ZS)
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → U1_GGA(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_GA(XS, Y, YS, perm_in_ga(ZS, YS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
APPEND_IN_GGA(cons(XS1), XS2) → APPEND_IN_GGA(XS1, XS2)
From the DPs we obtained the following set of size-change graphs:
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
SPLIT_IN_GAA(cons(XS)) → SPLIT_IN_GAA(XS)
From the DPs we obtained the following set of size-change graphs:
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_GA(split_out_gaa(YS1, cons(YS2))) → U4_GA(append_in_gga(YS1, YS2))
U4_GA(append_out_gga(ZS)) → PERM_IN_GA(ZS)
PERM_IN_GA(XS) → U3_GA(split_in_gaa(XS))
append_in_gga(nil, XS) → append_out_gga(XS)
append_in_gga(cons(XS1), XS2) → U1_gga(append_in_gga(XS1, XS2))
split_in_gaa(XS) → split_out_gaa(nil, XS)
split_in_gaa(cons(XS)) → U2_gaa(split_in_gaa(XS))
U1_gga(append_out_gga(YS)) → append_out_gga(cons(YS))
U2_gaa(split_out_gaa(YS1, YS2)) → split_out_gaa(cons(YS1), YS2)
append_in_gga(x0, x1)
split_in_gaa(x0)
U1_gga(x0)
U2_gaa(x0)
U3_GA(split_out_gaa(YS1, cons(YS2))) → U4_GA(append_in_gga(YS1, YS2))
U4_GA(append_out_gga(ZS)) → PERM_IN_GA(ZS)
PERM_IN_GA(XS) → U3_GA(split_in_gaa(XS))
append_in_gga(nil, XS) → append_out_gga(XS)
split_in_gaa(XS) → split_out_gaa(nil, XS)
POL(PERM_IN_GA(x1)) = 2 + x1
POL(U1_gga(x1)) = 5 + x1
POL(U2_gaa(x1)) = 5 + x1
POL(U3_GA(x1)) = x1
POL(U4_GA(x1)) = x1
POL(append_in_gga(x1, x2)) = 4 + x1 + x2
POL(append_out_gga(x1)) = 3 + x1
POL(cons(x1)) = 5 + x1
POL(nil) = 0
POL(split_in_gaa(x1)) = 1 + x1
POL(split_out_gaa(x1, x2)) = x1 + x2
append_in_gga(cons(XS1), XS2) → U1_gga(append_in_gga(XS1, XS2))
split_in_gaa(cons(XS)) → U2_gaa(split_in_gaa(XS))
U1_gga(append_out_gga(YS)) → append_out_gga(cons(YS))
U2_gaa(split_out_gaa(YS1, YS2)) → split_out_gaa(cons(YS1), YS2)
append_in_gga(x0, x1)
split_in_gaa(x0)
U1_gga(x0)
U2_gaa(x0)