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 PrologToPiTRSProof (⇐)
↳22 PiTRS
↳23 DependencyPairsProof (⇔)
↳24 PiDP
↳25 DependencyGraphProof (⇔)
↳26 AND
↳27 PiDP
↳28 UsableRulesProof (⇔)
↳29 PiDP
↳30 PiDPToQDPProof (⇔)
↳31 QDP
↳32 QDPSizeChangeProof (⇔)
↳33 TRUE
↳34 PiDP
↳35 UsableRulesProof (⇔)
↳36 PiDP
↳37 PiDPToQDPProof (⇔)
↳38 QDP
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
SUBSET_IN_GG(.(X, Xs), Ys) → MEMBER_IN_GG(X, Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → U1_GG(X, Y, Xs, member_in_gg(X, Xs))
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → U3_GG(X, Xs, Ys, subset_in_gg(Xs, Ys))
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
SUBSET_IN_GG(.(X, Xs), Ys) → MEMBER_IN_GG(X, Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → U1_GG(X, Y, Xs, member_in_gg(X, Xs))
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → U3_GG(X, Xs, Ys, subset_in_gg(Xs, Ys))
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
From the DPs we obtained the following set of size-change graphs:
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_GG(Xs, Ys, member_out_gg) → SUBSET_IN_GG(Xs, Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg
U1_gg(member_out_gg) → member_out_gg
member_in_gg(x0, x1)
U1_gg(x0)
From the DPs we obtained the following set of size-change graphs:
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
SUBSET_IN_GG(.(X, Xs), Ys) → MEMBER_IN_GG(X, Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → U1_GG(X, Y, Xs, member_in_gg(X, Xs))
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → U3_GG(X, Xs, Ys, subset_in_gg(Xs, Ys))
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
SUBSET_IN_GG(.(X, Xs), Ys) → MEMBER_IN_GG(X, Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → U1_GG(X, Y, Xs, member_in_gg(X, Xs))
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → U3_GG(X, Xs, Ys, subset_in_gg(Xs, Ys))
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
MEMBER_IN_GG(X, .(Y, Xs)) → MEMBER_IN_GG(X, Xs)
From the DPs we obtained the following set of size-change graphs:
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
subset_in_gg(.(X, Xs), Ys) → U2_gg(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_gg(X, Xs, Ys, member_out_gg(X, Ys)) → U3_gg(X, Xs, Ys, subset_in_gg(Xs, Ys))
subset_in_gg([], Ys) → subset_out_gg([], Ys)
U3_gg(X, Xs, Ys, subset_out_gg(Xs, Ys)) → subset_out_gg(.(X, Xs), Ys)
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
U2_GG(X, Xs, Ys, member_out_gg(X, Ys)) → SUBSET_IN_GG(Xs, Ys)
SUBSET_IN_GG(.(X, Xs), Ys) → U2_GG(X, Xs, Ys, member_in_gg(X, Ys))
member_in_gg(X, .(Y, Xs)) → U1_gg(X, Y, Xs, member_in_gg(X, Xs))
member_in_gg(X, .(X, Xs)) → member_out_gg(X, .(X, Xs))
U1_gg(X, Y, Xs, member_out_gg(X, Xs)) → member_out_gg(X, .(Y, Xs))
member_in_gg(x0, x1)
U1_gg(x0, x1, x2, x3)