0 Prolog
↳1 PrologToPiTRSProof (⇐)
↳2 PiTRS
↳3 DependencyPairsProof (⇔)
↳4 PiDP
↳5 DependencyGraphProof (⇔)
↳6 PiDP
↳7 UsableRulesProof (⇔)
↳8 PiDP
↳9 PiDPToQDPProof (⇐)
↳10 QDP
↳11 MRRProof (⇔)
↳12 QDP
↳13 DependencyGraphProof (⇔)
↳14 TRUE
↳15 PrologToPiTRSProof (⇐)
↳16 PiTRS
↳17 DependencyPairsProof (⇔)
↳18 PiDP
↳19 DependencyGraphProof (⇔)
↳20 PiDP
↳21 UsableRulesProof (⇔)
↳22 PiDP
↳23 PiDPToQDPProof (⇐)
↳24 QDP
↳25 MRRProof (⇔)
↳26 QDP
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GA(X, Y) → U1_GA(X, Y, log2_in_ggga(X, 0, s(0), Y))
LOG2_IN_GA(X, Y) → LOG2_IN_GGGA(X, 0, s(0), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → U2_GGGA(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → U4_GGGA(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(X, Half, Y, Y) → U5_GGGA(X, Half, Y, small_in_g(X))
LOG2_IN_GGGA(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGA(X, Half, Y, small_out_g(X)) → U6_GGGA(X, Half, Y, small_in_g(Half))
U5_GGGA(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GA(X, Y) → U1_GA(X, Y, log2_in_ggga(X, 0, s(0), Y))
LOG2_IN_GA(X, Y) → LOG2_IN_GGGA(X, 0, s(0), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → U2_GGGA(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → U4_GGGA(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(X, Half, Y, Y) → U5_GGGA(X, Half, Y, small_in_g(X))
LOG2_IN_GGGA(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGA(X, Half, Y, small_out_g(X)) → U6_GGGA(X, Half, Y, small_in_g(Half))
U5_GGGA(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
LOG2_IN_GGGA(X, s(s(Half)), Acc) → U3_GGGA(Half, Acc, small_in_g(X))
U3_GGGA(Half, Acc, small_out_g) → LOG2_IN_GGGA(Half, s(0), s(Acc))
LOG2_IN_GGGA(s(s(X)), Half, Acc) → LOG2_IN_GGGA(X, s(Half), Acc)
small_in_g(0) → small_out_g
small_in_g(s(0)) → small_out_g
small_in_g(x0)
LOG2_IN_GGGA(s(s(X)), Half, Acc) → LOG2_IN_GGGA(X, s(Half), Acc)
small_in_g(s(0)) → small_out_g
POL(0) = 0
POL(LOG2_IN_GGGA(x1, x2, x3)) = x1 + x2 + x3
POL(U3_GGGA(x1, x2, x3)) = 2 + x1 + x2 + x3
POL(s(x1)) = 1 + x1
POL(small_in_g(x1)) = x1
POL(small_out_g) = 0
LOG2_IN_GGGA(X, s(s(Half)), Acc) → U3_GGGA(Half, Acc, small_in_g(X))
U3_GGGA(Half, Acc, small_out_g) → LOG2_IN_GGGA(Half, s(0), s(Acc))
small_in_g(0) → small_out_g
small_in_g(x0)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GA(X, Y) → U1_GA(X, Y, log2_in_ggga(X, 0, s(0), Y))
LOG2_IN_GA(X, Y) → LOG2_IN_GGGA(X, 0, s(0), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → U2_GGGA(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → U4_GGGA(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(X, Half, Y, Y) → U5_GGGA(X, Half, Y, small_in_g(X))
LOG2_IN_GGGA(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGA(X, Half, Y, small_out_g(X)) → U6_GGGA(X, Half, Y, small_in_g(Half))
U5_GGGA(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GA(X, Y) → U1_GA(X, Y, log2_in_ggga(X, 0, s(0), Y))
LOG2_IN_GA(X, Y) → LOG2_IN_GGGA(X, 0, s(0), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → U2_GGGA(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → SMALL_IN_G(X)
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → U4_GGGA(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(X, Half, Y, Y) → U5_GGGA(X, Half, Y, small_in_g(X))
LOG2_IN_GGGA(X, Half, Y, Y) → SMALL_IN_G(X)
U5_GGGA(X, Half, Y, small_out_g(X)) → U6_GGGA(X, Half, Y, small_in_g(Half))
U5_GGGA(X, Half, Y, small_out_g(X)) → SMALL_IN_G(Half)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
log2_in_ga(X, Y) → U1_ga(X, Y, log2_in_ggga(X, 0, s(0), Y))
log2_in_ggga(s(s(X)), Half, Acc, Y) → U2_ggga(X, Half, Acc, Y, log2_in_ggga(X, s(Half), Acc, Y))
log2_in_ggga(X, s(s(Half)), Acc, Y) → U3_ggga(X, Half, Acc, Y, small_in_g(X))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
U3_ggga(X, Half, Acc, Y, small_out_g(X)) → U4_ggga(X, Half, Acc, Y, log2_in_ggga(Half, s(0), s(Acc), Y))
log2_in_ggga(X, Half, Y, Y) → U5_ggga(X, Half, Y, small_in_g(X))
U5_ggga(X, Half, Y, small_out_g(X)) → U6_ggga(X, Half, Y, small_in_g(Half))
U6_ggga(X, Half, Y, small_out_g(Half)) → log2_out_ggga(X, Half, Y, Y)
U4_ggga(X, Half, Acc, Y, log2_out_ggga(Half, s(0), s(Acc), Y)) → log2_out_ggga(X, s(s(Half)), Acc, Y)
U2_ggga(X, Half, Acc, Y, log2_out_ggga(X, s(Half), Acc, Y)) → log2_out_ggga(s(s(X)), Half, Acc, Y)
U1_ga(X, Y, log2_out_ggga(X, 0, s(0), Y)) → log2_out_ga(X, Y)
LOG2_IN_GGGA(X, s(s(Half)), Acc, Y) → U3_GGGA(X, Half, Acc, Y, small_in_g(X))
U3_GGGA(X, Half, Acc, Y, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc), Y)
LOG2_IN_GGGA(s(s(X)), Half, Acc, Y) → LOG2_IN_GGGA(X, s(Half), Acc, Y)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
LOG2_IN_GGGA(X, s(s(Half)), Acc) → U3_GGGA(X, Half, Acc, small_in_g(X))
U3_GGGA(X, Half, Acc, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc))
LOG2_IN_GGGA(s(s(X)), Half, Acc) → LOG2_IN_GGGA(X, s(Half), Acc)
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
small_in_g(x0)
LOG2_IN_GGGA(X, s(s(Half)), Acc) → U3_GGGA(X, Half, Acc, small_in_g(X))
LOG2_IN_GGGA(s(s(X)), Half, Acc) → LOG2_IN_GGGA(X, s(Half), Acc)
POL(0) = 0
POL(LOG2_IN_GGGA(x1, x2, x3)) = 2·x1 + 2·x2 + x3
POL(U3_GGGA(x1, x2, x3, x4)) = 1 + x1 + 2·x2 + x3 + x4
POL(s(x1)) = 1 + x1
POL(small_in_g(x1)) = 2 + x1
POL(small_out_g(x1)) = 2 + x1
U3_GGGA(X, Half, Acc, small_out_g(X)) → LOG2_IN_GGGA(Half, s(0), s(Acc))
small_in_g(0) → small_out_g(0)
small_in_g(s(0)) → small_out_g(s(0))
small_in_g(x0)