MAYBE Problem: eq(0(),0()) -> true() eq(0(),s(x)) -> false() eq(s(x),0()) -> false() eq(s(x),s(y)) -> eq(x,y) or(true(),y) -> true() or(false(),y) -> y union(empty(),h) -> h union(edge(x,y,i),h) -> edge(x,y,union(i,h)) isEmpty(empty()) -> true() isEmpty(edge(x,y,i)) -> false() from(edge(x,y,i)) -> x to(edge(x,y,i)) -> y rest(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) Proof: DP Processor: DPs: eq#(s(x),s(y)) -> eq#(x,y) union#(edge(x,y,i),h) -> union#(i,h) reach#(x,y,i,h) -> to#(i) reach#(x,y,i,h) -> eq#(y,to(i)) reach#(x,y,i,h) -> from#(i) reach#(x,y,i,h) -> eq#(x,from(i)) reach#(x,y,i,h) -> isEmpty#(i) reach#(x,y,i,h) -> eq#(x,y) reach#(x,y,i,h) -> if1#(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1#(false(),b1,b2,b3,x,y,i,h) -> if2#(b1,b2,b3,x,y,i,h) if2#(false(),b2,b3,x,y,i,h) -> if3#(b2,b3,x,y,i,h) if3#(false(),b3,x,y,i,h) -> to#(i) if3#(false(),b3,x,y,i,h) -> from#(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)) if3#(true(),b3,x,y,i,h) -> if4#(b3,x,y,i,h) if4#(false(),x,y,i,h) -> union#(rest(i),h) if4#(false(),x,y,i,h) -> to#(i) if4#(false(),x,y,i,h) -> reach#(to(i),y,union(rest(i),h),empty()) 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) -> or#(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) TDG Processor: DPs: eq#(s(x),s(y)) -> eq#(x,y) union#(edge(x,y,i),h) -> union#(i,h) reach#(x,y,i,h) -> to#(i) reach#(x,y,i,h) -> eq#(y,to(i)) reach#(x,y,i,h) -> from#(i) reach#(x,y,i,h) -> eq#(x,from(i)) reach#(x,y,i,h) -> isEmpty#(i) reach#(x,y,i,h) -> eq#(x,y) reach#(x,y,i,h) -> if1#(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1#(false(),b1,b2,b3,x,y,i,h) -> if2#(b1,b2,b3,x,y,i,h) if2#(false(),b2,b3,x,y,i,h) -> if3#(b2,b3,x,y,i,h) if3#(false(),b3,x,y,i,h) -> to#(i) if3#(false(),b3,x,y,i,h) -> from#(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)) if3#(true(),b3,x,y,i,h) -> if4#(b3,x,y,i,h) if4#(false(),x,y,i,h) -> union#(rest(i),h) if4#(false(),x,y,i,h) -> to#(i) if4#(false(),x,y,i,h) -> reach#(to(i),y,union(rest(i),h),empty()) 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) -> or#(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) graph: 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) 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) -> isEmpty#(i) 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) -> 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) -> to#(i) 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) -> eq#(x,y) 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#(x,from(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) -> eq#(y,to(i)) 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) -> union#(rest(i),h) -> union#(edge(x,y,i),h) -> union#(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) -> eq#(x,y) 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#(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) -> 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#(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) -> to#(i) if3#(true(),b3,x,y,i,h) -> if4#(b3,x,y,i,h) -> if4#(false(),x,y,i,h) -> or#(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) 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) -> rest#(i) 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()) 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) -> union#(rest(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) 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) -> from#(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) 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) 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) reach#(x,y,i,h) -> eq#(y,to(i)) -> eq#(s(x),s(y)) -> eq#(x,y) reach#(x,y,i,h) -> eq#(x,from(i)) -> eq#(s(x),s(y)) -> eq#(x,y) reach#(x,y,i,h) -> eq#(x,y) -> eq#(s(x),s(y)) -> eq#(x,y) union#(edge(x,y,i),h) -> union#(i,h) -> union#(edge(x,y,i),h) -> union#(i,h) eq#(s(x),s(y)) -> eq#(x,y) -> eq#(s(x),s(y)) -> eq#(x,y) Restore Modifier: DPs: eq#(s(x),s(y)) -> eq#(x,y) union#(edge(x,y,i),h) -> union#(i,h) reach#(x,y,i,h) -> to#(i) reach#(x,y,i,h) -> eq#(y,to(i)) reach#(x,y,i,h) -> from#(i) reach#(x,y,i,h) -> eq#(x,from(i)) reach#(x,y,i,h) -> isEmpty#(i) reach#(x,y,i,h) -> eq#(x,y) reach#(x,y,i,h) -> if1#(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1#(false(),b1,b2,b3,x,y,i,h) -> if2#(b1,b2,b3,x,y,i,h) if2#(false(),b2,b3,x,y,i,h) -> if3#(b2,b3,x,y,i,h) if3#(false(),b3,x,y,i,h) -> to#(i) if3#(false(),b3,x,y,i,h) -> from#(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)) if3#(true(),b3,x,y,i,h) -> if4#(b3,x,y,i,h) if4#(false(),x,y,i,h) -> union#(rest(i),h) if4#(false(),x,y,i,h) -> to#(i) if4#(false(),x,y,i,h) -> reach#(to(i),y,union(rest(i),h),empty()) 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) -> or#(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) SCC Processor: #sccs: 3 #rules: 9 #arcs: 40/484 DPs: 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) if2#(false(),b2,b3,x,y,i,h) -> if3#(b2,b3,x,y,i,h) if3#(false(),b3,x,y,i,h) -> reach#(x,y,rest(i),edge(from(i),to(i),h)) if3#(true(),b3,x,y,i,h) -> if4#(b3,x,y,i,h) if4#(false(),x,y,i,h) -> reach#(x,y,rest(i),h) 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) Open DPs: union#(edge(x,y,i),h) -> union#(i,h) 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) Matrix Interpretation Processor: dimension: 1 interpretation: [union#](x0, x1) = x0 + 1, [if4](x0, x1, x2, x3, x4) = 0, [if3](x0, x1, x2, x3, x4, x5) = 0, [if2](x0, x1, x2, x3, x4, x5, x6) = 0, [if1](x0, x1, x2, x3, x4, x5, x6, x7) = 0, [reach](x0, x1, x2, x3) = 0, [rest](x0) = x0, [to](x0) = x0, [from](x0) = x0 + 1, [isEmpty](x0) = 0, [edge](x0, x1, x2) = x0 + x1 + x2 + 1, [union](x0, x1) = x0 + x1, [empty] = 0, [or](x0, x1) = x1, [false] = 0, [s](x0) = 0, [true] = 0, [eq](x0, x1) = 0, [0] = 0 orientation: union#(edge(x,y,i),h) = i + x + y + 2 >= i + 1 = union#(i,h) eq(0(),0()) = 0 >= 0 = true() eq(0(),s(x)) = 0 >= 0 = false() eq(s(x),0()) = 0 >= 0 = false() eq(s(x),s(y)) = 0 >= 0 = eq(x,y) or(true(),y) = y >= 0 = true() or(false(),y) = y >= y = y union(empty(),h) = h >= h = h union(edge(x,y,i),h) = h + i + x + y + 1 >= h + i + x + y + 1 = edge(x,y,union(i,h)) isEmpty(empty()) = 0 >= 0 = true() isEmpty(edge(x,y,i)) = 0 >= 0 = false() from(edge(x,y,i)) = i + x + y + 2 >= x = x to(edge(x,y,i)) = i + x + y + 1 >= y = y rest(edge(x,y,i)) = i + x + y + 1 >= i = i rest(empty()) = 0 >= 0 = empty() reach(x,y,i,h) = 0 >= 0 = if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) = 0 >= 0 = true() if1(false(),b1,b2,b3,x,y,i,h) = 0 >= 0 = if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) = 0 >= 0 = false() if2(false(),b2,b3,x,y,i,h) = 0 >= 0 = if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) = 0 >= 0 = reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) = 0 >= 0 = if4(b3,x,y,i,h) if4(true(),x,y,i,h) = 0 >= 0 = true() if4(false(),x,y,i,h) = 0 >= 0 = or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) problem: DPs: 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) Qed DPs: eq#(s(x),s(y)) -> eq#(x,y) 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) Matrix Interpretation Processor: dimension: 1 interpretation: [eq#](x0, x1) = x1 + 1, [if4](x0, x1, x2, x3, x4) = 0, [if3](x0, x1, x2, x3, x4, x5) = 0, [if2](x0, x1, x2, x3, x4, x5, x6) = 0, [if1](x0, x1, x2, x3, x4, x5, x6, x7) = 0, [reach](x0, x1, x2, x3) = 0, [rest](x0) = x0, [to](x0) = x0, [from](x0) = x0, [isEmpty](x0) = 0, [edge](x0, x1, x2) = x0 + x1 + x2, [union](x0, x1) = x0 + x1, [empty] = 0, [or](x0, x1) = x1, [false] = 0, [s](x0) = x0 + 1, [true] = 0, [eq](x0, x1) = 0, [0] = 0 orientation: eq#(s(x),s(y)) = y + 2 >= y + 1 = eq#(x,y) eq(0(),0()) = 0 >= 0 = true() eq(0(),s(x)) = 0 >= 0 = false() eq(s(x),0()) = 0 >= 0 = false() eq(s(x),s(y)) = 0 >= 0 = eq(x,y) or(true(),y) = y >= 0 = true() or(false(),y) = y >= y = y union(empty(),h) = h >= h = h union(edge(x,y,i),h) = h + i + x + y >= h + i + x + y = edge(x,y,union(i,h)) isEmpty(empty()) = 0 >= 0 = true() isEmpty(edge(x,y,i)) = 0 >= 0 = false() from(edge(x,y,i)) = i + x + y >= x = x to(edge(x,y,i)) = i + x + y >= y = y rest(edge(x,y,i)) = i + x + y >= i = i rest(empty()) = 0 >= 0 = empty() reach(x,y,i,h) = 0 >= 0 = if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) = 0 >= 0 = true() if1(false(),b1,b2,b3,x,y,i,h) = 0 >= 0 = if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) = 0 >= 0 = false() if2(false(),b2,b3,x,y,i,h) = 0 >= 0 = if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) = 0 >= 0 = reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) = 0 >= 0 = if4(b3,x,y,i,h) if4(true(),x,y,i,h) = 0 >= 0 = true() if4(false(),x,y,i,h) = 0 >= 0 = or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) problem: DPs: 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(edge(x,y,i)) -> i rest(empty()) -> empty() reach(x,y,i,h) -> if1(eq(x,y),isEmpty(i),eq(x,from(i)),eq(y,to(i)),x,y,i,h) if1(true(),b1,b2,b3,x,y,i,h) -> true() if1(false(),b1,b2,b3,x,y,i,h) -> if2(b1,b2,b3,x,y,i,h) if2(true(),b2,b3,x,y,i,h) -> false() if2(false(),b2,b3,x,y,i,h) -> if3(b2,b3,x,y,i,h) if3(false(),b3,x,y,i,h) -> reach(x,y,rest(i),edge(from(i),to(i),h)) if3(true(),b3,x,y,i,h) -> if4(b3,x,y,i,h) if4(true(),x,y,i,h) -> true() if4(false(),x,y,i,h) -> or(reach(x,y,rest(i),h),reach(to(i),y,union(rest(i),h),empty())) Qed