MAYBE
TRS:
 {                        eq(0(), 0()) -> true(),
                         eq(0(), s(x)) -> false(),
                         eq(s(x), 0()) -> false(),
                        eq(s(x), s(y)) -> eq(x, y),
                         or(true(), y) -> true(),
                        or(false(), y) -> y,
                     union(empty(), h) -> h,
               union(edge(x, y, i), h) -> edge(x, y, union(i, h)),
                      isEmpty(empty()) -> true(),
                isEmpty(edge(x, y, i)) -> false(),
                   from(edge(x, y, i)) -> x,
                     to(edge(x, y, i)) -> y,
                         rest(empty()) -> empty(),
                   rest(edge(x, y, i)) -> i,
   if1(true(), b1, b2, b3, x, y, i, h) -> true(),
  if1(false(), b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h),
                     reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
       if2(true(), b2, b3, x, y, i, h) -> false(),
      if2(false(), b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h),
           if3(true(), b3, x, y, i, h) -> if4(b3, x, y, i, h),
          if3(false(), b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)),
               if4(true(), x, y, i, h) -> true(),
              if4(false(), x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty()))}
 DP:
  Strict:
   {                      eq#(s(x), s(y)) -> eq#(x, y),
                 union#(edge(x, y, i), h) -> union#(i, h),
    if1#(false(), b1, b2, b3, x, y, i, h) -> if2#(b1, b2, b3, x, y, i, h),
                       reach#(x, y, i, h) -> eq#(x, y),
                       reach#(x, y, i, h) -> eq#(x, from(i)),
                       reach#(x, y, i, h) -> eq#(y, to(i)),
                       reach#(x, y, i, h) -> isEmpty#(i),
                       reach#(x, y, i, h) -> from#(i),
                       reach#(x, y, i, h) -> to#(i),
                       reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
        if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h),
             if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h),
            if3#(false(), b3, x, y, i, h) -> from#(i),
            if3#(false(), b3, x, y, i, h) -> to#(i),
            if3#(false(), b3, x, y, i, h) -> rest#(i),
            if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)),
                if4#(false(), x, y, i, h) -> or#(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty())),
                if4#(false(), x, y, i, h) -> union#(rest(i), h),
                if4#(false(), x, y, i, h) -> to#(i),
                if4#(false(), x, y, i, h) -> rest#(i),
                if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h),
                if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty())}
  Weak:
  {                        eq(0(), 0()) -> true(),
                          eq(0(), s(x)) -> false(),
                          eq(s(x), 0()) -> false(),
                         eq(s(x), s(y)) -> eq(x, y),
                          or(true(), y) -> true(),
                         or(false(), y) -> y,
                      union(empty(), h) -> h,
                union(edge(x, y, i), h) -> edge(x, y, union(i, h)),
                       isEmpty(empty()) -> true(),
                 isEmpty(edge(x, y, i)) -> false(),
                    from(edge(x, y, i)) -> x,
                      to(edge(x, y, i)) -> y,
                          rest(empty()) -> empty(),
                    rest(edge(x, y, i)) -> i,
    if1(true(), b1, b2, b3, x, y, i, h) -> true(),
   if1(false(), b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h),
                      reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
        if2(true(), b2, b3, x, y, i, h) -> false(),
       if2(false(), b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h),
            if3(true(), b3, x, y, i, h) -> if4(b3, x, y, i, h),
           if3(false(), b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)),
                if4(true(), x, y, i, h) -> true(),
               if4(false(), x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty()))}
  EDG:
   {(if4#(false(), x, y, i, h) -> union#(rest(i), h), union#(edge(x, y, i), h) -> union#(i, h))
    (reach#(x, y, i, h) -> eq#(y, to(i)), eq#(s(x), s(y)) -> eq#(x, y))
    (if1#(false(), b1, b2, b3, x, y, i, h) -> if2#(b1, b2, b3, x, y, i, h), if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h))
    (if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h), if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)))
    (if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h), if3#(false(), b3, x, y, i, h) -> rest#(i))
    (if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h), if3#(false(), b3, x, y, i, h) -> to#(i))
    (if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h), if3#(false(), b3, x, y, i, h) -> from#(i))
    (if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h), if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> to#(i))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> from#(i))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> isEmpty#(i))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> eq#(y, to(i)))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> eq#(x, from(i)))
    (if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)), reach#(x, y, i, h) -> eq#(x, y))
    (reach#(x, y, i, h) -> eq#(x, y), eq#(s(x), s(y)) -> eq#(x, y))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> to#(i))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> from#(i))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> isEmpty#(i))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> eq#(y, to(i)))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> eq#(x, from(i)))
    (if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h), reach#(x, y, i, h) -> eq#(x, y))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> eq#(x, y))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> eq#(x, from(i)))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> eq#(y, to(i)))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> isEmpty#(i))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> from#(i))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> to#(i))
    (if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()), reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h))
    (eq#(s(x), s(y)) -> eq#(x, y), eq#(s(x), s(y)) -> eq#(x, y))
    (if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h), if4#(false(), x, y, i, h) -> or#(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty())))
    (if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h), if4#(false(), x, y, i, h) -> union#(rest(i), h))
    (if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h), if4#(false(), x, y, i, h) -> to#(i))
    (if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h), if4#(false(), x, y, i, h) -> rest#(i))
    (if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h), if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h))
    (if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h), if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty()))
    (reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h), if1#(false(), b1, b2, b3, x, y, i, h) -> if2#(b1, b2, b3, x, y, i, h))
    (union#(edge(x, y, i), h) -> union#(i, h), union#(edge(x, y, i), h) -> union#(i, h))
    (reach#(x, y, i, h) -> eq#(x, from(i)), eq#(s(x), s(y)) -> eq#(x, y))}
   SCCS:
    Scc:
     {if1#(false(), b1, b2, b3, x, y, i, h) -> if2#(b1, b2, b3, x, y, i, h),
                         reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
          if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h),
               if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h),
              if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)),
                  if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h),
                  if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty())}
    Scc:
     {union#(edge(x, y, i), h) -> union#(i, h)}
    Scc:
     {eq#(s(x), s(y)) -> eq#(x, y)}
    SCC:
     Strict:
      {if1#(false(), b1, b2, b3, x, y, i, h) -> if2#(b1, b2, b3, x, y, i, h),
                          reach#(x, y, i, h) -> if1#(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
           if2#(false(), b2, b3, x, y, i, h) -> if3#(b2, b3, x, y, i, h),
                if3#(true(), b3, x, y, i, h) -> if4#(b3, x, y, i, h),
               if3#(false(), b3, x, y, i, h) -> reach#(x, y, rest(i), edge(from(i), to(i), h)),
                   if4#(false(), x, y, i, h) -> reach#(x, y, rest(i), h),
                   if4#(false(), x, y, i, h) -> reach#(to(i), y, union(rest(i), h), empty())}
     Weak:
     {                        eq(0(), 0()) -> true(),
                             eq(0(), s(x)) -> false(),
                             eq(s(x), 0()) -> false(),
                            eq(s(x), s(y)) -> eq(x, y),
                             or(true(), y) -> true(),
                            or(false(), y) -> y,
                         union(empty(), h) -> h,
                   union(edge(x, y, i), h) -> edge(x, y, union(i, h)),
                          isEmpty(empty()) -> true(),
                    isEmpty(edge(x, y, i)) -> false(),
                       from(edge(x, y, i)) -> x,
                         to(edge(x, y, i)) -> y,
                             rest(empty()) -> empty(),
                       rest(edge(x, y, i)) -> i,
       if1(true(), b1, b2, b3, x, y, i, h) -> true(),
      if1(false(), b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h),
                         reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
           if2(true(), b2, b3, x, y, i, h) -> false(),
          if2(false(), b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h),
               if3(true(), b3, x, y, i, h) -> if4(b3, x, y, i, h),
              if3(false(), b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)),
                   if4(true(), x, y, i, h) -> true(),
                  if4(false(), x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty()))}
     Fail
    SCC:
     Strict:
      {union#(edge(x, y, i), h) -> union#(i, h)}
     Weak:
     {                        eq(0(), 0()) -> true(),
                             eq(0(), s(x)) -> false(),
                             eq(s(x), 0()) -> false(),
                            eq(s(x), s(y)) -> eq(x, y),
                             or(true(), y) -> true(),
                            or(false(), y) -> y,
                         union(empty(), h) -> h,
                   union(edge(x, y, i), h) -> edge(x, y, union(i, h)),
                          isEmpty(empty()) -> true(),
                    isEmpty(edge(x, y, i)) -> false(),
                       from(edge(x, y, i)) -> x,
                         to(edge(x, y, i)) -> y,
                             rest(empty()) -> empty(),
                       rest(edge(x, y, i)) -> i,
       if1(true(), b1, b2, b3, x, y, i, h) -> true(),
      if1(false(), b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h),
                         reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
           if2(true(), b2, b3, x, y, i, h) -> false(),
          if2(false(), b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h),
               if3(true(), b3, x, y, i, h) -> if4(b3, x, y, i, h),
              if3(false(), b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)),
                   if4(true(), x, y, i, h) -> true(),
                  if4(false(), x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty()))}
     SPSC:
      Simple Projection:
       pi(union#) = 0
      Strict:
       {}
      Qed
    SCC:
     Strict:
      {eq#(s(x), s(y)) -> eq#(x, y)}
     Weak:
     {                        eq(0(), 0()) -> true(),
                             eq(0(), s(x)) -> false(),
                             eq(s(x), 0()) -> false(),
                            eq(s(x), s(y)) -> eq(x, y),
                             or(true(), y) -> true(),
                            or(false(), y) -> y,
                         union(empty(), h) -> h,
                   union(edge(x, y, i), h) -> edge(x, y, union(i, h)),
                          isEmpty(empty()) -> true(),
                    isEmpty(edge(x, y, i)) -> false(),
                       from(edge(x, y, i)) -> x,
                         to(edge(x, y, i)) -> y,
                             rest(empty()) -> empty(),
                       rest(edge(x, y, i)) -> i,
       if1(true(), b1, b2, b3, x, y, i, h) -> true(),
      if1(false(), b1, b2, b3, x, y, i, h) -> if2(b1, b2, b3, x, y, i, h),
                         reach(x, y, i, h) -> if1(eq(x, y), isEmpty(i), eq(x, from(i)), eq(y, to(i)), x, y, i, h),
           if2(true(), b2, b3, x, y, i, h) -> false(),
          if2(false(), b2, b3, x, y, i, h) -> if3(b2, b3, x, y, i, h),
               if3(true(), b3, x, y, i, h) -> if4(b3, x, y, i, h),
              if3(false(), b3, x, y, i, h) -> reach(x, y, rest(i), edge(from(i), to(i), h)),
                   if4(true(), x, y, i, h) -> true(),
                  if4(false(), x, y, i, h) -> or(reach(x, y, rest(i), h), reach(to(i), y, union(rest(i), h), empty()))}
     SPSC:
      Simple Projection:
       pi(eq#) = 0
      Strict:
       {}
      Qed