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 PiDPToQDPProof (⇐)
↳16 QDP
↳17 QDPSizeChangeProof (⇔)
↳18 TRUE
↳19 PrologToPiTRSProof (⇐)
↳20 PiTRS
↳21 DependencyPairsProof (⇔)
↳22 PiDP
↳23 DependencyGraphProof (⇔)
↳24 AND
↳25 PiDP
↳26 UsableRulesProof (⇔)
↳27 PiDP
↳28 PiDPToQDPProof (⇐)
↳29 QDP
↳30 QDPSizeChangeProof (⇔)
↳31 TRUE
↳32 PiDP
↳33 PiDPToQDPProof (⇐)
↳34 QDP
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → U1_GA(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → IN_ORDER_IN_GA(Left, Ls)
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_GA(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right, Rs)
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_GA(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → APP_IN_GGA(Ls, .(X, Rs), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U4_GGA(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → U1_GA(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → IN_ORDER_IN_GA(Left, Ls)
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_GA(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right, Rs)
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_GA(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → APP_IN_GGA(Ls, .(X, Rs), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U4_GGA(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
APP_IN_GGA(.(X, Xs), Ys) → APP_IN_GGA(Xs, Ys)
From the DPs we obtained the following set of size-change graphs:
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right, Rs)
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → U1_GA(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → IN_ORDER_IN_GA(Left, Ls)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
U1_GA(X, Right, in_order_out_ga(Ls)) → IN_ORDER_IN_GA(Right)
IN_ORDER_IN_GA(tree(X, Left, Right)) → U1_GA(X, Right, in_order_in_ga(Left))
IN_ORDER_IN_GA(tree(X, Left, Right)) → IN_ORDER_IN_GA(Left)
in_order_in_ga(void) → in_order_out_ga([])
in_order_in_ga(tree(X, Left, Right)) → U1_ga(X, Right, in_order_in_ga(Left))
U1_ga(X, Right, in_order_out_ga(Ls)) → U2_ga(X, Ls, in_order_in_ga(Right))
U2_ga(X, Ls, in_order_out_ga(Rs)) → U3_ga(app_in_gga(Ls, .(X, Rs)))
app_in_gga([], X) → app_out_gga(X)
app_in_gga(.(X, Xs), Ys) → U4_gga(X, app_in_gga(Xs, Ys))
U4_gga(X, app_out_gga(Zs)) → app_out_gga(.(X, Zs))
U3_ga(app_out_gga(Xs)) → in_order_out_ga(Xs)
in_order_in_ga(x0)
U1_ga(x0, x1, x2)
U2_ga(x0, x1, x2)
app_in_gga(x0, x1)
U4_gga(x0, x1)
U3_ga(x0)
From the DPs we obtained the following set of size-change graphs:
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → U1_GA(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → IN_ORDER_IN_GA(Left, Ls)
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_GA(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right, Rs)
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_GA(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → APP_IN_GGA(Ls, .(X, Rs), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U4_GGA(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → U1_GA(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → IN_ORDER_IN_GA(Left, Ls)
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_GA(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right, Rs)
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_GA(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
U2_GA(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → APP_IN_GGA(Ls, .(X, Rs), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U4_GGA(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
APP_IN_GGA(.(X, Xs), Ys) → APP_IN_GGA(Xs, Ys)
From the DPs we obtained the following set of size-change graphs:
U1_GA(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right, Rs)
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → U1_GA(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
IN_ORDER_IN_GA(tree(X, Left, Right), Xs) → IN_ORDER_IN_GA(Left, Ls)
in_order_in_ga(void, []) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right), Xs) → U1_ga(X, Left, Right, Xs, in_order_in_ga(Left, Ls))
U1_ga(X, Left, Right, Xs, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Xs, Ls, in_order_in_ga(Right, Rs))
U2_ga(X, Left, Right, Xs, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, Xs, app_in_gga(Ls, .(X, Rs), Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, Xs, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
U1_GA(X, Left, Right, in_order_out_ga(Left, Ls)) → IN_ORDER_IN_GA(Right)
IN_ORDER_IN_GA(tree(X, Left, Right)) → U1_GA(X, Left, Right, in_order_in_ga(Left))
IN_ORDER_IN_GA(tree(X, Left, Right)) → IN_ORDER_IN_GA(Left)
in_order_in_ga(void) → in_order_out_ga(void, [])
in_order_in_ga(tree(X, Left, Right)) → U1_ga(X, Left, Right, in_order_in_ga(Left))
U1_ga(X, Left, Right, in_order_out_ga(Left, Ls)) → U2_ga(X, Left, Right, Ls, in_order_in_ga(Right))
U2_ga(X, Left, Right, Ls, in_order_out_ga(Right, Rs)) → U3_ga(X, Left, Right, app_in_gga(Ls, .(X, Rs)))
app_in_gga([], X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys) → U4_gga(X, Xs, Ys, app_in_gga(Xs, Ys))
U4_gga(X, Xs, Ys, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, Left, Right, app_out_gga(Ls, .(X, Rs), Xs)) → in_order_out_ga(tree(X, Left, Right), Xs)
in_order_in_ga(x0)
U1_ga(x0, x1, x2, x3)
U2_ga(x0, x1, x2, x3, x4)
app_in_gga(x0, x1)
U4_gga(x0, x1, x2, x3)
U3_ga(x0, x1, x2, x3)