Term Rewriting System R:
[x, y, h, i, u, v]
app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))

Termination of R to be shown.



   R
Dependency Pair Analysis



R contains the following Dependency Pairs:

APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(eq, app(s, x)), app(s, y)) -> APP(eq, x)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(app(edge, x), y), app(app(union, i), h))
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(union, i)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(ifreach1, app(app(eq, x), u))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(eq, x)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach2, app(app(eq, y), v)), x)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(ifreach2, app(app(eq, y), v))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(eq, y)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(reach, x)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(or, app(app(app(app(reach, x), y), i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(reach, x)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(reach, v)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(union, i)

Furthermore, R contains one SCC.


   R
DPs
       →DP Problem 1
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach2, app(app(eq, y), v)), x)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(app(edge, x), y), app(app(union, i), h))
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(app(edge, x), y), app(app(union, i), h))
two new Dependency Pairs are created:

APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Narrowing Transformation


Dependency Pairs:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach2, app(app(eq, y), v)), x)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach2, app(app(eq, y), v)), x)
four new Dependency Pairs are created:

APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 3
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 4
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 5
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(edge, u), v), h)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 6
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, x), y), i)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 7
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, x), y)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 8
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, v), y), app(app(union, i), h)), empty)
two new Dependency Pairs are created:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 9
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(reach, v), y), app(app(union, i), h))
two new Dependency Pairs are created:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 10
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(reach, v), y)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 11
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(union, app(app(app(edge, x), y), empty)), h'') -> APP(app(app(edge, x), y), h'')
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 12
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
two new Dependency Pairs are created:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 13
Narrowing Transformation


Dependency Pairs:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, true), x)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 14
Narrowing Transformation


Dependency Pairs:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), 0), app(app(app(edge, u), app(s, x'')), i)), h) -> APP(app(ifreach2, false), x)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 15
Narrowing Transformation


Dependency Pairs:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), 0), i)), h) -> APP(app(ifreach2, false), x)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 16
Narrowing Transformation


Dependency Pairs:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), app(s, x'')), app(app(app(edge, u), app(s, y'')), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
four new Dependency Pairs are created:

APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, true), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 17
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(reach, v), y), h'')
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 18
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h'')))
two new Dependency Pairs are created:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 19
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), h'''))
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 20
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, true), x)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 21
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), app(s, 0)), app(app(app(edge, u), app(s, app(s, x'''))), i)), h) -> APP(app(ifreach2, false), x)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 22
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, 0)), i)), h) -> APP(app(ifreach2, false), x)
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 23
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), empty))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), h'''))
no new Dependency Pairs are created.
The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 24
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
two new Dependency Pairs are created:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), empty)))), h'''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), h'''')))
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), i''))))), h'''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), app(app(union, i''), h'''')))))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 25
Narrowing Transformation


Dependency Pairs:

APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), i''))))), h'''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), app(app(union, i''), h'''')))))
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), empty)))), h'''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), h'''')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, x'''))), app(app(app(edge, u), app(s, app(s, y'))), i)), h) -> APP(app(ifreach2, app(app(eq, x'''), y')), x)
four new Dependency Pairs are created:

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, 0))), app(app(app(edge, u), app(s, app(s, 0))), i)), h) -> APP(app(ifreach2, true), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, 0))), app(app(app(edge, u), app(s, app(s, app(s, x'')))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, app(s, x'')))), app(app(app(edge, u), app(s, app(s, 0))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, app(s, x'')))), app(app(app(edge, u), app(s, app(s, app(s, y'')))), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 26
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach1, true), x), app(s, app(s, app(s, x'')))), app(app(app(edge, u), app(s, app(s, app(s, y'')))), i)), h) -> APP(app(ifreach2, app(app(eq, x''), y'')), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, app(s, x'')))), app(app(app(edge, u), app(s, app(s, 0))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, 0))), app(app(app(edge, u), app(s, app(s, app(s, x'')))), i)), h) -> APP(app(ifreach2, false), x)
APP(app(app(app(app(ifreach1, true), x), app(s, app(s, 0))), app(app(app(edge, u), app(s, app(s, 0))), i)), h) -> APP(app(ifreach2, true), x)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), empty)))), h'''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), h'''')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), i''))), h'') -> APP(app(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(union, i''), h''))), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), empty)), h'') -> APP(app(app(app(reach, v), y), h''), empty)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(union, i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), h)
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))
APP(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, y), v)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach2, app(app(eq, y), v)), x), y)
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(eq, x), u)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(ifreach1, app(app(eq, x), u)), x)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(ifreach1, app(app(eq, x), u)), x), y)
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i))
APP(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> APP(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
APP(app(union, app(app(app(edge, x), y), i)), h) -> APP(app(union, i), h)
APP(app(eq, app(s, x)), app(s, y)) -> APP(app(eq, x), y)
APP(app(union, app(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), i''))))), h'''') -> APP(app(app(edge, x), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), app(app(union, i''), h'''')))))


Rules:


app(app(eq, 0), 0) -> true
app(app(eq, 0), app(s, x)) -> false
app(app(eq, app(s, x)), 0) -> false
app(app(eq, app(s, x)), app(s, y)) -> app(app(eq, x), y)
app(app(or, true), y) -> true
app(app(or, false), y) -> y
app(app(union, empty), h) -> h
app(app(union, app(app(app(edge, x), y), i)), h) -> app(app(app(edge, x), y), app(app(union, i), h))
app(app(app(app(reach, x), y), empty), h) -> false
app(app(app(app(reach, x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach1, app(app(eq, x), u)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, true), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(app(ifreach2, app(app(eq, y), v)), x), y), app(app(app(edge, u), v), i)), h)
app(app(app(app(app(ifreach1, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(app(app(reach, x), y), i), app(app(app(edge, u), v), h))
app(app(app(app(app(ifreach2, true), x), y), app(app(app(edge, u), v), i)), h) -> true
app(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), i)), h) -> app(app(or, app(app(app(app(reach, x), y), i), h)), app(app(app(app(reach, v), y), app(app(union, i), h)), empty))





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), i')))), h''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(union, i'), h'''))))
two new Dependency Pairs are created:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), empty)))), h'''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), h'''')))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), i''))))), h'''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), app(app(union, i''), h'''')))))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 27
Narrowing Transformation


Dependency Pairs:

APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), i''))))), h'''') -> APP(app(app(reach, v), y), app(app(app(edge, x''), y''), app(app(app(edge, x'''), y'''), app(app(app(edge, x'0), y'0), app(app(union, i''), h'''')))))
APP(app(app(app(app(ifreach2, false), x), y), app(app(app(edge, u), v), app(app(app(edge