0 QTRS
↳1 Overlay + Local Confluence (⇔)
↳2 QTRS
↳3 DependencyPairsProof (⇔)
↳4 QDP
↳5 DependencyGraphProof (⇔)
↳6 AND
↳7 QDP
↳8 UsableRulesProof (⇔)
↳9 QDP
↳10 QReductionProof (⇔)
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 TRUE
↳14 QDP
↳15 UsableRulesProof (⇔)
↳16 QDP
↳17 QReductionProof (⇔)
↳18 QDP
↳19 QDPSizeChangeProof (⇔)
↳20 TRUE
↳21 QDP
↳22 UsableRulesProof (⇔)
↳23 QDP
↳24 QReductionProof (⇔)
↳25 QDP
↳26 Narrowing (⇔)
↳27 QDP
↳28 DependencyGraphProof (⇔)
↳29 QDP
↳30 Narrowing (⇔)
↳31 QDP
↳32 Rewriting (⇔)
↳33 QDP
↳34 Instantiation (⇔)
↳35 QDP
↳36 Instantiation (⇔)
↳37 QDP
↳38 Instantiation (⇔)
↳39 QDP
↳40 Instantiation (⇔)
↳41 QDP
↳42 Instantiation (⇔)
↳43 QDP
↳44 Instantiation (⇔)
↳45 QDP
↳46 DependencyGraphProof (⇔)
↳47 AND
↳48 QDP
↳49 ForwardInstantiation (⇔)
↳50 QDP
↳51 Narrowing (⇔)
↳52 QDP
↳53 DependencyGraphProof (⇔)
↳54 QDP
↳55 UsableRulesProof (⇔)
↳56 QDP
↳57 QReductionProof (⇔)
↳58 QDP
↳59 Rewriting (⇔)
↳60 QDP
↳61 Rewriting (⇔)
↳62 QDP
↳63 Narrowing (⇔)
↳64 QDP
↳65 DependencyGraphProof (⇔)
↳66 QDP
↳67 Rewriting (⇔)
↳68 QDP
↳69 UsableRulesProof (⇔)
↳70 QDP
↳71 QReductionProof (⇔)
↳72 QDP
↳73 Rewriting (⇔)
↳74 QDP
↳75 UsableRulesProof (⇔)
↳76 QDP
↳77 QReductionProof (⇔)
↳78 QDP
↳79 Narrowing (⇔)
↳80 QDP
↳81 DependencyGraphProof (⇔)
↳82 QDP
↳83 UsableRulesProof (⇔)
↳84 QDP
↳85 QReductionProof (⇔)
↳86 QDP
↳87 Narrowing (⇔)
↳88 QDP
↳89 Instantiation (⇔)
↳90 QDP
↳91 Instantiation (⇔)
↳92 QDP
↳93 Instantiation (⇔)
↳94 QDP
↳95 ForwardInstantiation (⇔)
↳96 QDP
↳97 ForwardInstantiation (⇔)
↳98 QDP
↳99 ForwardInstantiation (⇔)
↳100 QDP
↳101 ForwardInstantiation (⇔)
↳102 QDP
↳103 ForwardInstantiation (⇔)
↳104 QDP
↳105 QDPOrderProof (⇔)
↳106 QDP
↳107 DependencyGraphProof (⇔)
↳108 QDP
↳109 QDPOrderProof (⇔)
↳110 QDP
↳111 UsableRulesProof (⇔)
↳112 QDP
↳113 QReductionProof (⇔)
↳114 QDP
↳115 QDPSizeChangeProof (⇔)
↳116 TRUE
↳117 QDP
↳118 ForwardInstantiation (⇔)
↳119 QDP
↳120 Narrowing (⇔)
↳121 QDP
↳122 DependencyGraphProof (⇔)
↳123 QDP
↳124 Rewriting (⇔)
↳125 QDP
↳126 Rewriting (⇔)
↳127 QDP
↳128 Narrowing (⇔)
↳129 QDP
↳130 DependencyGraphProof (⇔)
↳131 QDP
↳132 Rewriting (⇔)
↳133 QDP
↳134 Rewriting (⇔)
↳135 QDP
↳136 Narrowing (⇔)
↳137 QDP
↳138 DependencyGraphProof (⇔)
↳139 QDP
↳140 Instantiation (⇔)
↳141 QDP
↳142 Instantiation (⇔)
↳143 QDP
↳144 Instantiation (⇔)
↳145 QDP
↳146 ForwardInstantiation (⇔)
↳147 QDP
↳148 Narrowing (⇔)
↳149 QDP
↳150 DependencyGraphProof (⇔)
↳151 QDP
↳152 UsableRulesProof (⇔)
↳153 QDP
↳154 QReductionProof (⇔)
↳155 QDP
↳156 Rewriting (⇔)
↳157 QDP
↳158 Rewriting (⇔)
↳159 QDP
↳160 Narrowing (⇔)
↳161 QDP
↳162 Narrowing (⇔)
↳163 QDP
↳164 DependencyGraphProof (⇔)
↳165 QDP
↳166 Rewriting (⇔)
↳167 QDP
↳168 UsableRulesProof (⇔)
↳169 QDP
↳170 QReductionProof (⇔)
↳171 QDP
↳172 Rewriting (⇔)
↳173 QDP
↳174 UsableRulesProof (⇔)
↳175 QDP
↳176 QReductionProof (⇔)
↳177 QDP
↳178 Narrowing (⇔)
↳179 QDP
↳180 DependencyGraphProof (⇔)
↳181 QDP
↳182 UsableRulesProof (⇔)
↳183 QDP
↳184 QReductionProof (⇔)
↳185 QDP
↳186 Narrowing (⇔)
↳187 QDP
↳188 Instantiation (⇔)
↳189 QDP
↳190 Instantiation (⇔)
↳191 QDP
↳192 Instantiation (⇔)
↳193 QDP
↳194 ForwardInstantiation (⇔)
↳195 QDP
↳196 ForwardInstantiation (⇔)
↳197 QDP
↳198 ForwardInstantiation (⇔)
↳199 QDP
↳200 Narrowing (⇔)
↳201 QDP
↳202 Instantiation (⇔)
↳203 QDP
↳204 Instantiation (⇔)
↳205 QDP
↳206 Instantiation (⇔)
↳207 QDP
↳208 Instantiation (⇔)
↳209 QDP
↳210 Instantiation (⇔)
↳211 QDP
↳212 Instantiation (⇔)
↳213 QDP
↳214 ForwardInstantiation (⇔)
↳215 QDP
↳216 ForwardInstantiation (⇔)
↳217 QDP
↳218 ForwardInstantiation (⇔)
↳219 QDP
↳220 ForwardInstantiation (⇔)
↳221 QDP
↳222 ForwardInstantiation (⇔)
↳223 QDP
↳224 ForwardInstantiation (⇔)
↳225 QDP
↳226 ForwardInstantiation (⇔)
↳227 QDP
↳228 ForwardInstantiation (⇔)
↳229 QDP
↳230 QDPOrderProof (⇔)
↳231 QDP
↳232 DependencyGraphProof (⇔)
↳233 QDP
↳234 QDPOrderProof (⇔)
↳235 QDP
↳236 DependencyGraphProof (⇔)
↳237 QDP
↳238 QDPOrderProof (⇔)
↳239 QDP
↳240 DependencyGraphProof (⇔)
↳241 AND
↳242 QDP
↳243 UsableRulesProof (⇔)
↳244 QDP
↳245 QReductionProof (⇔)
↳246 QDP
↳247 QDPSizeChangeProof (⇔)
↳248 TRUE
↳249 QDP
↳250 QDPOrderProof (⇔)
↳251 QDP
↳252 DependencyGraphProof (⇔)
↳253 QDP
↳254 UsableRulesProof (⇔)
↳255 QDP
↳256 QReductionProof (⇔)
↳257 QDP
↳258 QDPSizeChangeProof (⇔)
↳259 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))
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
reach(x, y, i, h) → if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
if1(true, b1, b2, b3, x, y, i, h) → true
if1(false, b1, b2, b3, x, y, i, h) → if2(b1, b2, b3, x, y, i, h)
if2(true, b2, b3, x, y, i, h) → false
if2(false, b2, b3, x, y, i, h) → if3(b2, b3, x, y, i, h)
if3(false, b3, x, y, i, h) → reach(x, y, rest(i), edge(from(i), to(i), h))
if3(true, b3, x, y, i, h) → if4(b3, x, y, i, h)
if4(true, x, y, i, h) → true
if4(false, x, y, i, h) → or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
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))
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
reach(x, y, i, h) → if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
if1(true, b1, b2, b3, x, y, i, h) → true
if1(false, b1, b2, b3, x, y, i, h) → if2(b1, b2, b3, x, y, i, h)
if2(true, b2, b3, x, y, i, h) → false
if2(false, b2, b3, x, y, i, h) → if3(b2, b3, x, y, i, h)
if3(false, b3, x, y, i, h) → reach(x, y, rest(i), edge(from(i), to(i), h))
if3(true, b3, x, y, i, h) → if4(b3, x, y, i, h)
if4(true, x, y, i, h) → true
if4(false, x, y, i, h) → or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
EQ(s(x), s(y)) → EQ(x, y)
UNION(edge(x, y, i), h) → UNION(i, h)
REACH(x, y, i, h) → IF1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
REACH(x, y, i, h) → EQ(x, y)
REACH(x, y, i, h) → ISEMPTY(i)
REACH(x, y, i, h) → EQ(x, from(i))
REACH(x, y, i, h) → FROM(i)
REACH(x, y, i, h) → EQ(y, to(i))
REACH(x, y, i, h) → TO(i)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
IF3(false, b3, x, y, i, h) → REST(i)
IF3(false, b3, x, y, i, h) → FROM(i)
IF3(false, b3, x, y, i, h) → TO(i)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → OR(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, x, y, i, h) → REST(i)
IF4(false, x, y, i, h) → REACH(to(i), y, union(rest(i), h), empty)
IF4(false, x, y, i, h) → TO(i)
IF4(false, x, y, i, h) → UNION(rest(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))
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
reach(x, y, i, h) → if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
if1(true, b1, b2, b3, x, y, i, h) → true
if1(false, b1, b2, b3, x, y, i, h) → if2(b1, b2, b3, x, y, i, h)
if2(true, b2, b3, x, y, i, h) → false
if2(false, b2, b3, x, y, i, h) → if3(b2, b3, x, y, i, h)
if3(false, b3, x, y, i, h) → reach(x, y, rest(i), edge(from(i), to(i), h))
if3(true, b3, x, y, i, h) → if4(b3, x, y, i, h)
if4(true, x, y, i, h) → true
if4(false, x, y, i, h) → or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
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))
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
reach(x, y, i, h) → if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
if1(true, b1, b2, b3, x, y, i, h) → true
if1(false, b1, b2, b3, x, y, i, h) → if2(b1, b2, b3, x, y, i, h)
if2(true, b2, b3, x, y, i, h) → false
if2(false, b2, b3, x, y, i, h) → if3(b2, b3, x, y, i, h)
if3(false, b3, x, y, i, h) → reach(x, y, rest(i), edge(from(i), to(i), h))
if3(true, b3, x, y, i, h) → if4(b3, x, y, i, h)
if4(true, x, y, i, h) → true
if4(false, x, y, i, h) → or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
UNION(edge(x, y, i), h) → UNION(i, h)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
UNION(edge(x, y, i), h) → UNION(i, h)
From the DPs we obtained the following set of size-change graphs:
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))
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
reach(x, y, i, h) → if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
if1(true, b1, b2, b3, x, y, i, h) → true
if1(false, b1, b2, b3, x, y, i, h) → if2(b1, b2, b3, x, y, i, h)
if2(true, b2, b3, x, y, i, h) → false
if2(false, b2, b3, x, y, i, h) → if3(b2, b3, x, y, i, h)
if3(false, b3, x, y, i, h) → reach(x, y, rest(i), edge(from(i), to(i), h))
if3(true, b3, x, y, i, h) → if4(b3, x, y, i, h)
if4(true, x, y, i, h) → true
if4(false, x, y, i, h) → or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
EQ(s(x), s(y)) → EQ(x, y)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
EQ(s(x), s(y)) → EQ(x, y)
From the DPs we obtained the following set of size-change graphs:
REACH(x, y, i, h) → IF1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, x, y, i, h) → REACH(to(i), y, union(rest(i), h), empty)
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))
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
reach(x, y, i, h) → if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
if1(true, b1, b2, b3, x, y, i, h) → true
if1(false, b1, b2, b3, x, y, i, h) → if2(b1, b2, b3, x, y, i, h)
if2(true, b2, b3, x, y, i, h) → false
if2(false, b2, b3, x, y, i, h) → if3(b2, b3, x, y, i, h)
if3(false, b3, x, y, i, h) → reach(x, y, rest(i), edge(from(i), to(i), h))
if3(true, b3, x, y, i, h) → if4(b3, x, y, i, h)
if4(true, x, y, i, h) → true
if4(false, x, y, i, h) → or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
REACH(x, y, i, h) → IF1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, x, y, i, h) → REACH(to(i), y, union(rest(i), h), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
or(true, x0)
or(false, x0)
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
or(true, x0)
or(false, x0)
reach(x0, x1, x2, x3)
if1(true, x0, x1, x2, x3, x4, x5, x6)
if1(false, x0, x1, x2, x3, x4, x5, x6)
if2(true, x0, x1, x2, x3, x4, x5)
if2(false, x0, x1, x2, x3, x4, x5)
if3(false, x0, x1, x2, x3, x4)
if3(true, x0, x1, x2, x3, x4)
if4(true, x0, x1, x2, x3)
if4(false, x0, x1, x2, x3)
REACH(x, y, i, h) → IF1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, x, y, i, h) → REACH(to(i), y, union(rest(i), h), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(0, 0, y2, y3) → IF1(true, isEmpty(y2), eq(0, from(y2)), eq(0, to(y2)), 0, 0, y2, y3)
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, x, y, i, h) → REACH(to(i), y, union(rest(i), h), empty)
REACH(0, 0, y2, y3) → IF1(true, isEmpty(y2), eq(0, from(y2)), eq(0, to(y2)), 0, 0, y2, y3)
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, x, y, i, h) → REACH(to(i), y, union(rest(i), h), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(rest(edge(x0, x1, x2)), y3), empty)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(rest(edge(x0, x1, x2)), y3), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
IF1(false, b1, b2, b3, x, y, i, h) → IF2(b1, b2, b3, x, y, i, h)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, b2, b3, x, y, i, h) → IF3(b2, b3, x, y, i, h)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, b3, x, y, i, h) → REACH(x, y, rest(i), edge(from(i), to(i), h))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF3(true, b3, x, y, i, h) → IF4(b3, x, y, i, h)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF4(false, x, y, i, h) → REACH(x, y, rest(i), h)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF4(false, y0, y1, edge(x0, x1, x2), y3) → REACH(x1, y1, union(x2, y3), empty)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, y_0, y_2, y_4, s(z0), 0, z1, z2) → IF2(y_0, y_2, y_4, s(z0), 0, z1, z2)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
REACH(s(x0), 0, y2, y3) → IF1(false, isEmpty(y2), eq(s(x0), from(y2)), eq(0, to(y2)), s(x0), 0, y2, y3)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(s(y0), 0, empty, y2) → IF1(false, true, eq(s(y0), from(empty)), eq(0, to(empty)), s(y0), 0, empty, y2)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), from(edge(x0, x1, x2))), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
REACH(s(y0), 0, empty, y2) → IF1(false, true, eq(s(y0), from(empty)), eq(0, to(empty)), s(y0), 0, empty, y2)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), from(edge(x0, x1, x2))), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), from(edge(x0, x1, x2))), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), from(edge(x0, x1, x2))), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), from(edge(x0, x1, x2))), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, to(edge(x0, x1, x2))), s(y0), 0, edge(x0, x1, x2), y2)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF3(false, z1, s(z2), 0, z3, z4) → REACH(s(z2), 0, rest(z3), edge(from(z3), to(z3), z4))
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y3))
IF3(false, y0, s(y1), 0, empty, y3) → REACH(s(y1), 0, empty, edge(from(empty), to(empty), y3))
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y3))
IF3(false, y0, s(y1), 0, empty, y3) → REACH(s(y1), 0, empty, edge(from(empty), to(empty), y3))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y3))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, to(edge(x0, x1, x2)), y3))
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, to(edge(x0, x1, x2)), y3))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
to(edge(x, y, i)) → y
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, to(edge(x0, x1, x2)), y3))
to(edge(x, y, i)) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
from(edge(x0, x1, x2))
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, to(edge(x0, x1, x2)), y3))
to(edge(x, y, i)) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
to(edge(x, y, i)) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
to(edge(x0, x1, x2))
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, z2, z3) → REACH(s(z1), 0, rest(z2), z3)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, empty, y2) → REACH(s(y0), 0, empty, y2)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, empty, y2) → REACH(s(y0), 0, empty, y2)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
rest(edge(x, y, i)) → i
rest(empty) → empty
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
rest(edge(x0, x1, x2))
rest(empty)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
IF4(false, s(z1), 0, edge(x2, x3, x4), z3) → REACH(x3, 0, union(x4, z3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, s(x3), 0, x4, x5) → IF2(false, x1, x2, s(x3), 0, x4, x5)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF2(false, z1, z2, s(z3), 0, z4, z5) → IF3(z1, z2, s(z3), 0, z4, z5)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, z0, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF3(z0, z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(true, z1, s(z2), 0, z3, z4) → IF4(z1, s(z2), 0, z3, z4)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, z0, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF3(z0, z1, s(z2), 0, edge(z3, z4, z5), z6)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF4(z1, s(z2), 0, edge(z3, z4, z5), z6)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF3(false, y0, s(y1), 0, edge(x0, x1, x2), y3) → REACH(s(y1), 0, x2, edge(x0, x1, y3))
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, z0, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF3(z0, z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(true, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF4(z1, s(z2), 0, edge(z3, z4, z5), z6)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(y0), 0, edge(x0, x1, x2), y2) → REACH(s(y0), 0, x2, y2)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, z0, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF3(z0, z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(true, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF4(z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(y0), 0, edge(y1, y2, empty), x0) → REACH(y2, 0, x0, empty)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, z0, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF3(z0, z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(true, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF4(z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, s(x0), 0, edge(x1, s(y_0), empty), edge(y_1, y_2, y_3)) → REACH(s(y_0), 0, edge(y_1, y_2, y_3), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, z0, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF3(z0, z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(true, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF4(z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF4(false, s(x0), 0, edge(x1, s(y_0), empty), edge(y_1, y_2, y_3)) → REACH(s(y_0), 0, edge(y_1, y_2, y_3), empty)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF3(true, z1, s(z2), 0, edge(z3, z4, z5), z6) → IF4(z1, s(z2), 0, edge(z3, z4, z5), z6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF4(false, s(x0), 0, edge(x1, s(y_0), empty), edge(y_1, y_2, y_3)) → REACH(s(y_0), 0, edge(y_1, y_2, y_3), empty)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
IF3(true, false, s(x1), 0, edge(x2, s(y_2), empty), edge(y_3, y_4, y_5)) → IF4(false, s(x1), 0, edge(x2, s(y_2), empty), edge(y_3, y_4, y_5))
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF4(false, s(x0), 0, edge(x1, s(y_0), empty), edge(y_1, y_2, y_3)) → REACH(s(y_0), 0, edge(y_1, y_2, y_3), empty)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
IF3(true, false, s(x1), 0, edge(x2, s(y_2), empty), edge(y_3, y_4, y_5)) → IF4(false, s(x1), 0, edge(x2, s(y_2), empty), edge(y_3, y_4, y_5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF4(false, s(x0), 0, edge(x1, s(y_0), empty), edge(y_1, y_2, y_3)) → REACH(s(y_0), 0, edge(y_1, y_2, y_3), empty)
POL(0) = 0
POL(IF1(x1, x2, x3, x4, x5, x6, x7, x8)) = x7 + x8
POL(IF2(x1, x2, x3, x4, x5, x6, x7)) = x6 + x7
POL(IF3(x1, x2, x3, x4, x5, x6)) = x5 + x6
POL(IF4(x1, x2, x3, x4, x5)) = x4 + x5
POL(REACH(x1, x2, x3, x4)) = x3 + x4
POL(edge(x1, x2, x3)) = x2 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 0
POL(false) = 0
POL(s(x1)) = 1
POL(true) = 0
POL(union(x1, x2)) = x1 + x2
union(edge(x, y, i), h) → edge(x, y, union(i, h))
union(empty, h) → h
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
IF3(true, false, s(x1), 0, edge(x2, s(y_2), empty), edge(y_3, y_4, y_5)) → IF4(false, s(x1), 0, edge(x2, s(y_2), empty), edge(y_3, y_4, y_5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF4(false, s(y0), 0, edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, 0, edge(x0, x1, union(x2, x3)), empty)
POL(0) = 1
POL(IF1(x1, x2, x3, x4, x5, x6, x7, x8)) = x3 + x7 + x8
POL(IF2(x1, x2, x3, x4, x5, x6, x7)) = x2 + x6 + x7
POL(IF3(x1, x2, x3, x4, x5, x6)) = x4 + x5 + x6
POL(IF4(x1, x2, x3, x4, x5)) = 1 + x4 + x5
POL(REACH(x1, x2, x3, x4)) = x1 + x3 + x4
POL(edge(x1, x2, x3)) = x2 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 1
POL(false) = 1
POL(s(x1)) = 1
POL(true) = 1
POL(union(x1, x2)) = x1 + x2
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(s(x), 0) → false
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, s(x)) → false
union(empty, h) → h
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, s(z0), 0, edge(z1, z2, z3), z4)
IF2(false, true, x1, s(x2), 0, edge(x3, x4, x5), x6) → IF3(true, x1, s(x2), 0, edge(x3, x4, x5), x6)
IF3(true, false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5) → IF4(false, s(x1), 0, edge(x2, x3, edge(y_3, y_4, y_5)), x5)
REACH(s(y0), 0, edge(x0, x1, x2), y2) → IF1(false, false, eq(s(y0), x0), eq(0, x1), s(y0), 0, edge(x0, x1, x2), y2)
IF4(false, s(x0), 0, edge(x1, x2, edge(y_1, y_2, y_3)), x4) → REACH(s(x0), 0, edge(y_1, y_2, y_3), x4)
IF2(false, false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF3(false, x1, s(x2), 0, edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(false, x0, s(x1), 0, edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(s(x1), 0, edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
From the DPs we obtained the following set of size-change graphs:
IF1(false, y_0, y_2, y_4, 0, s(z0), z1, z2) → IF2(y_0, y_2, y_4, 0, s(z0), z1, z2)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
REACH(0, s(x0), y2, y3) → IF1(false, isEmpty(y2), eq(0, from(y2)), eq(s(x0), to(y2)), 0, s(x0), y2, y3)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(0, s(y0), empty, y2) → IF1(false, true, eq(0, from(empty)), eq(s(y0), to(empty)), 0, s(y0), empty, y2)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, from(edge(x0, x1, x2))), eq(s(y0), to(edge(x0, x1, x2))), 0, s(y0), edge(x0, x1, x2), y2)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
REACH(0, s(y0), empty, y2) → IF1(false, true, eq(0, from(empty)), eq(s(y0), to(empty)), 0, s(y0), empty, y2)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, from(edge(x0, x1, x2))), eq(s(y0), to(edge(x0, x1, x2))), 0, s(y0), edge(x0, x1, x2), y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, from(edge(x0, x1, x2))), eq(s(y0), to(edge(x0, x1, x2))), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), to(edge(x0, x1, x2))), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), to(edge(x0, x1, x2))), 0, s(y0), edge(x0, x1, x2), y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, z1, 0, s(z2), z3, z4) → REACH(0, s(z2), rest(z3), edge(from(z3), to(z3), z4))
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y3))
IF3(false, y0, 0, s(y1), empty, y3) → REACH(0, s(y1), empty, edge(from(empty), to(empty), y3))
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y3))
IF3(false, y0, 0, s(y1), empty, y3) → REACH(0, s(y1), empty, edge(from(empty), to(empty), y3))
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y3))
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, to(edge(x0, x1, x2)), y3))
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, to(edge(x0, x1, x2)), y3))
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), z2, z3) → REACH(0, s(z1), rest(z2), z3)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), empty, y2) → REACH(0, s(y0), empty, y2)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), empty, y2) → REACH(0, s(y0), empty, y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, x1, x2, 0, s(x3), x4, x5) → IF2(false, x1, x2, 0, s(x3), x4, x5)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF2(false, z1, z2, 0, s(z3), z4, z5) → IF3(z1, z2, 0, s(z3), z4, z5)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(true, z1, 0, s(z2), z3, z4) → IF4(z1, 0, s(z2), z3, z4)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF1(false, y_1, y_3, y_5, s(z0), s(z1), z2, z3) → IF2(y_1, y_3, y_5, s(z0), s(z1), z2, z3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(x0), s(x1), y2, y3) → IF1(eq(x0, x1), isEmpty(y2), eq(s(x0), from(y2)), eq(s(x1), to(y2)), s(x0), s(x1), y2, y3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(s(y0), s(y1), empty, y3) → IF1(eq(y0, y1), true, eq(s(y0), from(empty)), eq(s(y1), to(empty)), s(y0), s(y1), empty, y3)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), from(edge(x0, x1, x2))), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
REACH(s(y0), s(y1), empty, y3) → IF1(eq(y0, y1), true, eq(s(y0), from(empty)), eq(s(y1), to(empty)), s(y0), s(y1), empty, y3)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), from(edge(x0, x1, x2))), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), from(edge(x0, x1, x2))), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
to(edge(x, y, i)) → y
rest(edge(x, y, i)) → i
rest(empty) → empty
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
from(edge(x, y, i)) → x
eq(0, 0) → true
eq(0, s(x)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
isEmpty(empty) → true
isEmpty(edge(x, y, i)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), from(edge(x0, x1, x2))), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
isEmpty(empty)
isEmpty(edge(x0, x1, x2))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), from(edge(x0, x1, x2))), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), to(edge(x0, x1, x2))), s(y0), s(y1), edge(x0, x1, x2), y3)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(z1), edge(x2, x3, x4), z3) → REACH(x3, s(z1), union(x4, z3), empty)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(false, z1, s(z2), s(z3), z4, z5) → REACH(s(z2), s(z3), rest(z4), edge(from(z4), to(z4), z5))
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y4))
IF3(false, y0, s(y1), s(y2), empty, y4) → REACH(s(y1), s(y2), empty, edge(from(empty), to(empty), y4))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y4))
IF3(false, y0, s(y1), s(y2), empty, y4) → REACH(s(y1), s(y2), empty, edge(from(empty), to(empty), y4))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(from(edge(x0, x1, x2)), to(edge(x0, x1, x2)), y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, to(edge(x0, x1, x2)), y4))
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, to(edge(x0, x1, x2)), y4))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
from(edge(x, y, i)) → x
to(edge(x, y, i)) → y
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, to(edge(x0, x1, x2)), y4))
to(edge(x, y, i)) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
from(edge(x0, x1, x2))
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
from(edge(x0, x1, x2))
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, to(edge(x0, x1, x2)), y4))
to(edge(x, y, i)) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
to(edge(x, y, i)) → y
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
to(edge(x0, x1, x2))
rest(edge(x0, x1, x2))
rest(empty)
to(edge(x0, x1, x2))
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), z3, z4) → REACH(s(z1), s(z2), rest(z3), z4)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF4(false, s(y0), s(y1), empty, y3) → REACH(s(y0), s(y1), empty, y3)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF4(false, s(y0), s(y1), empty, y3) → REACH(s(y0), s(y1), empty, y3)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, union(i, h))
rest(edge(x, y, i)) → i
rest(empty) → empty
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
rest(edge(x0, x1, x2))
rest(empty)
rest(edge(x0, x1, x2))
rest(empty)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(z1), s(z2), edge(x2, x3, x4), z4) → REACH(x3, s(z2), union(x4, z4), empty)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, x1, x2, s(x3), s(x4), x5, x6) → IF2(false, x1, x2, s(x3), s(x4), x5, x6)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF2(false, z1, z2, s(z3), s(z4), z5, z6) → IF3(z1, z2, s(z3), s(z4), z5, z6)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF3(true, z1, s(z2), s(z3), z4, z5) → IF4(z1, s(z2), s(z3), z4, z5)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, z0, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF3(z0, z1, 0, s(z2), edge(z3, z4, z5), z6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(true, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, y0, 0, s(y1), edge(x0, x1, x2), y3) → REACH(0, s(y1), x2, edge(x0, x1, y3))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(true, x1, 0, s(x2), edge(x3, x4, x5), x6)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF1(false, false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4) → IF2(false, y_0, y_1, 0, s(z0), edge(z1, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(true, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF1(false, false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(x0, x1, x2), y2) → IF1(false, false, eq(0, x0), eq(s(y0), x1), 0, s(y0), edge(x0, x1, x2), y2)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(true, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF1(false, false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(true, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF1(false, false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, true, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(true, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z1, 0, s(z2), edge(z3, z4, z5), z6) → IF4(z1, 0, s(z2), edge(z3, z4, z5), z6)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(y0), edge(x0, x1, x2), y2) → REACH(0, s(y0), x2, y2)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(y0), edge(y1, y2, empty), x0) → REACH(y2, s(y0), x0, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, 0, s(y0), edge(y1, y2, edge(x0, x1, x2)), x3) → REACH(y2, s(y0), edge(x0, x1, union(x2, x3)), empty)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(x0, x1, x2), y3) → REACH(s(y0), s(y1), x2, y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF3(false, y0, s(y1), s(y2), edge(x0, x1, x2), y4) → REACH(s(y1), s(y2), x2, edge(x0, x1, y4))
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, empty), x0) → REACH(y3, s(y1), x0, empty)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF3(z0, z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF3(true, z1, s(z2), s(z3), edge(z4, z5, z6), z7) → IF4(z1, s(z2), s(z3), edge(z4, z5, z6), z7)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5))
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF4(z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, z3), z4) → REACH(0, s(z1), z3, z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5))
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, empty), z4) → REACH(z2, s(z1), z4, empty)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5))
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF4(false, 0, s(x0), edge(0, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x0), edge(y_2, y_3, y_4), empty)
IF4(false, 0, s(x0), edge(0, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x0), edge(0, y_1, y_2), empty)
IF4(false, 0, s(x0), edge(0, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5))
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF4(false, 0, s(x0), edge(0, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x0), edge(y_2, y_3, y_4), empty)
IF4(false, 0, s(x0), edge(0, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x0), edge(0, y_1, y_2), empty)
IF4(false, 0, s(x0), edge(0, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x1), edge(0, y_1, y_2), empty)
IF4(false, s(x0), s(x1), edge(x2, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x1), edge(s(y_1), y_2, y_3), empty)
IF4(false, 0, s(x0), edge(0, 0, empty), edge(0, y_1, y_2)) → REACH(0, s(x0), edge(0, y_1, y_2), empty)
IF4(false, 0, s(x0), edge(0, 0, empty), edge(s(y_1), y_2, y_3)) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), empty)
POL(0) = 1
POL(IF1(x1, x2, x3, x4, x5, x6, x7, x8)) = x7 + x8
POL(IF2(x1, x2, x3, x4, x5, x6, x7)) = x6 + x7
POL(IF3(x1, x2, x3, x4, x5, x6)) = x5 + x6
POL(IF4(x1, x2, x3, x4, x5)) = x4 + x5
POL(REACH(x1, x2, x3, x4)) = x3 + x4
POL(edge(x1, x2, x3)) = x2 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 0
POL(false) = 0
POL(s(x1)) = 0
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(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(0, y_3, y_4))
IF3(true, false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5)) → IF4(false, s(x1), s(x2), edge(x3, 0, empty), edge(s(y_3), y_4, y_5))
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF4(false, 0, s(x0), edge(0, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x0), edge(y_2, y_3, y_4), empty)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF4(false, 0, s(x0), edge(0, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x0), edge(y_2, y_3, y_4), empty)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF4(false, 0, s(x0), edge(0, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x0), edge(y_2, y_3, y_4), empty)
IF4(false, s(x0), s(x1), edge(x2, s(y_0), empty), edge(y_2, y_3, y_4)) → REACH(s(y_0), s(x1), edge(y_2, y_3, y_4), empty)
POL(0) = 0
POL(IF1(x1, x2, x3, x4, x5, x6, x7, x8)) = x7 + x8
POL(IF2(x1, x2, x3, x4, x5, x6, x7)) = x6 + x7
POL(IF3(x1, x2, x3, x4, x5, x6)) = x5 + x6
POL(IF4(x1, x2, x3, x4, x5)) = x4 + x5
POL(REACH(x1, x2, x3, x4)) = x3 + x4
POL(edge(x1, x2, x3)) = x2 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 0
POL(false) = 0
POL(s(x1)) = 1
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))
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF3(true, false, 0, s(x1), edge(0, x2, empty), x4) → IF4(false, 0, s(x1), edge(0, x2, empty), x4)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
IF3(true, false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6)) → IF4(false, s(x1), s(x2), edge(x3, s(y_3), empty), edge(y_4, y_5, y_6))
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF4(false, s(y0), s(y1), edge(y2, y3, edge(x0, x1, x2)), x3) → REACH(y3, s(y1), edge(x0, x1, union(x2, x3)), empty)
POL(0) = 0
POL(IF1(x1, x2, x3, x4, x5, x6, x7, x8)) = x5 + x7 + x8
POL(IF2(x1, x2, x3, x4, x5, x6, x7)) = x4 + x6 + x7
POL(IF3(x1, x2, x3, x4, x5, x6)) = x3 + x5 + x6
POL(IF4(x1, x2, x3, x4, x5)) = x2 + x4 + x5
POL(REACH(x1, x2, x3, x4)) = x1 + x3 + x4
POL(edge(x1, x2, x3)) = x2 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 0
POL(false) = 0
POL(s(x1)) = 1
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))
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
union(empty, x0)
union(edge(x0, x1, x2), x3)
IF3(true, false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6) → IF4(false, s(x1), s(x2), edge(x3, x4, edge(y_4, y_5, y_6)), x6)
IF4(false, s(x0), s(x1), edge(x2, x3, edge(y_2, y_3, y_4)), x5) → REACH(s(x0), s(x1), edge(y_2, y_3, y_4), x5)
REACH(s(y0), s(y1), edge(x0, x1, x2), y3) → IF1(eq(y0, y1), false, eq(s(y0), x0), eq(s(y1), x1), s(y0), s(y1), edge(x0, x1, x2), y3)
IF1(false, false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5) → IF2(false, y_1, y_2, s(z0), s(z1), edge(z2, z3, z4), z5)
IF2(false, true, x1, s(x2), s(x3), edge(x4, x5, x6), x7) → IF3(true, x1, s(x2), s(x3), edge(x4, x5, x6), x7)
IF2(false, false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7) → IF3(false, x1, s(x2), s(x3), edge(x4, x5, edge(y_5, y_6, y_7)), x7)
IF3(false, x0, s(x1), s(x2), edge(x3, x4, edge(y_2, y_3, y_4)), x6) → REACH(s(x1), s(x2), edge(y_2, y_3, y_4), edge(x3, x4, x6))
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)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
From the DPs we obtained the following set of size-change graphs:
REACH(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
IF4(false, 0, s(z1), edge(0, z2, edge(x3, x4, x5)), z4) → REACH(z2, s(z1), edge(x3, x4, union(x5, z4)), empty)
IF4(false, 0, s(x0), edge(0, x1, edge(0, y_1, y_2)), x3) → REACH(0, s(x0), edge(0, y_1, y_2), x3)
IF4(false, 0, s(x0), edge(0, x1, edge(s(y_1), y_2, y_3)), x3) → REACH(0, s(x0), edge(s(y_1), y_2, y_3), x3)
POL(0) = 1
POL(IF1(x1, x2, x3, x4, x5, x6, x7, x8)) = x7 + x8
POL(IF2(x1, x2, x3, x4, x5, x6, x7)) = x6 + x7
POL(IF3(x1, x2, x3, x4, x5, x6)) = x5 + x6
POL(IF4(x1, x2, x3, x4, x5)) = x4 + x5
POL(REACH(x1, x2, x3, x4)) = x3 + x4
POL(edge(x1, x2, x3)) = x1 + x3
POL(empty) = 0
POL(eq(x1, x2)) = 0
POL(false) = 0
POL(s(x1)) = 0
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(0, s(y0), edge(0, y2, y3), y4) → IF1(false, false, true, eq(s(y0), y2), 0, s(y0), edge(0, y2, y3), y4)
IF1(false, false, true, y_0, 0, s(z0), edge(0, z1, z2), z3) → IF2(false, true, y_0, 0, s(z0), edge(0, z1, z2), z3)
IF2(false, true, z0, 0, s(z1), edge(0, z2, z3), z4) → IF3(true, z0, 0, s(z1), edge(0, z2, z3), z4)
IF3(true, false, 0, s(x1), edge(0, x2, x3), x4) → IF4(false, 0, s(x1), edge(0, x2, x3), x4)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
IF3(true, false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4) → IF4(false, 0, s(x1), edge(0, x2, edge(y_2, y_3, y_4)), x4)
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
union(empty, h) → h
union(edge(x, y, i), h) → edge(x, y, 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)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
union(empty, x0)
union(edge(x0, x1, x2), x3)
union(empty, x0)
union(edge(x0, x1, x2), x3)
REACH(0, s(y0), edge(s(x0), y2, y3), y4) → IF1(false, false, false, eq(s(y0), y2), 0, s(y0), edge(s(x0), y2, y3), y4)
IF1(false, false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF2(false, false, x1, 0, s(x2), edge(x3, x4, x5), x6) → IF3(false, x1, 0, s(x2), edge(x3, x4, x5), x6)
IF3(false, x0, 0, s(x1), edge(x2, x3, edge(y_1, y_2, y_3)), x5) → REACH(0, s(x1), edge(y_1, y_2, y_3), edge(x2, x3, x5))
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0) → true
eq(0, s(x)) → false
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
From the DPs we obtained the following set of size-change graphs: