0 QTRS
↳1 DependencyPairsProof (⇔)
↳2 QDP
↳3 DependencyGraphProof (⇔)
↳4 AND
↳5 QDP
↳6 QDPOrderProof (⇔)
↳7 QDP
↳8 PisEmptyProof (⇔)
↳9 TRUE
↳10 QDP
↳11 QDPOrderProof (⇔)
↳12 QDP
↳13 PisEmptyProof (⇔)
↳14 TRUE
↳15 QDP
↳16 QDPOrderProof (⇔)
↳17 QDP
↳18 QDPOrderProof (⇔)
↳19 QDP
↳20 PisEmptyProof (⇔)
↳21 TRUE
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
EQ(s(x), s(y)) → EQ(x, y)
UNION(edge(x, y, i), h) → UNION(i, h)
REACH(x, y, edge(u, v, i), h) → IF_REACH_1(eq(x, u), x, y, edge(u, v, i), h)
REACH(x, y, edge(u, v, i), h) → EQ(x, u)
IF_REACH_1(true, x, y, edge(u, v, i), h) → IF_REACH_2(eq(y, v), x, y, edge(u, v, i), h)
IF_REACH_1(true, x, y, edge(u, v, i), h) → EQ(y, v)
IF_REACH_2(false, x, y, edge(u, v, i), h) → OR(reach(x, y, i, h), reach(v, y, union(i, h), empty))
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(x, y, i, h)
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(v, y, union(i, h), empty)
IF_REACH_2(false, x, y, edge(u, v, i), h) → UNION(i, h)
IF_REACH_1(false, x, y, edge(u, v, i), h) → REACH(x, y, i, edge(u, v, h))
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
UNION(edge(x, y, i), h) → UNION(i, h)
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
UNION(edge(x, y, i), h) → UNION(i, h)
POL(UNION(x1, x2)) = 1
POL(edge(x1, x2, x3)) = 1 + x3
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
EQ(s(x), s(y)) → EQ(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
EQ(s(x), s(y)) → EQ(x, y)
POL(EQ(x1, x2)) = 1
POL(s(x1)) = 1 + x1
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
REACH(x, y, edge(u, v, i), h) → IF_REACH_1(eq(x, u), x, y, edge(u, v, i), h)
IF_REACH_1(true, x, y, edge(u, v, i), h) → IF_REACH_2(eq(y, v), x, y, edge(u, v, i), h)
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(x, y, i, h)
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(v, y, union(i, h), empty)
IF_REACH_1(false, x, y, edge(u, v, i), h) → REACH(x, y, i, edge(u, v, h))
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(v, y, union(i, h), empty)
POL(0) = 0
POL(IF_REACH_1(x1, x2, x3, x4, x5)) = x3 + x4 + x5
POL(IF_REACH_2(x1, x2, x3, x4, x5)) = x3 + x4 + x5
POL(REACH(x1, x2, x3, x4)) = x2 + x3 + x4
POL(edge(x1, x2, x3)) = 1 + x2 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 1 + x1
POL(false) = 0
POL(s(x1)) = x1
POL(true) = 0
POL(union(x1, x2)) = x1 + x2
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
REACH(x, y, edge(u, v, i), h) → IF_REACH_1(eq(x, u), x, y, edge(u, v, i), h)
IF_REACH_1(true, x, y, edge(u, v, i), h) → IF_REACH_2(eq(y, v), x, y, edge(u, v, i), h)
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(x, y, i, h)
IF_REACH_1(false, x, y, edge(u, v, i), h) → REACH(x, y, i, edge(u, v, h))
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
REACH(x, y, edge(u, v, i), h) → IF_REACH_1(eq(x, u), x, y, edge(u, v, i), h)
IF_REACH_1(true, x, y, edge(u, v, i), h) → IF_REACH_2(eq(y, v), x, y, edge(u, v, i), h)
IF_REACH_2(false, x, y, edge(u, v, i), h) → REACH(x, y, i, h)
IF_REACH_1(false, x, y, edge(u, v, i), h) → REACH(x, y, i, edge(u, v, h))
POL(0) = 0
POL(IF_REACH_1(x1, x2, x3, x4, x5)) = 1 + x1 + x3 + x4
POL(IF_REACH_2(x1, x2, x3, x4, x5)) = x3
POL(REACH(x1, x2, x3, x4)) = x2 + x3 + x4
POL(edge(x1, x2, x3)) = 1 + x1 + x2 + x3
POL(eq(x1, x2)) = 1 + x1 + x2
POL(false) = 1
POL(s(x1)) = x1
POL(true) = 0
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
or(true, y) → true
or(false, y) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
reach(x, y, empty, h) → false
reach(x, y, edge(u, v, i), h) → if_reach_1(eq(x, u), x, y, edge(u, v, i), h)
if_reach_1(true, x, y, edge(u, v, i), h) → if_reach_2(eq(y, v), x, y, edge(u, v, i), h)
if_reach_2(true, x, y, edge(u, v, i), h) → true
if_reach_2(false, x, y, edge(u, v, i), h) → or(reach(x, y, i, h), reach(v, y, union(i, h), empty))
if_reach_1(false, x, y, edge(u, v, i), h) → reach(x, y, i, edge(u, v, h))