MAYBE Problem: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Proof: DP Processor: DPs: minus#(s(x),y) -> gt#(s(x),y) minus#(s(x),y) -> if#(gt(s(x),y),x,y) if#(true(),x,y) -> minus#(x,y) gcd#(x,y) -> ge#(x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) if1#(true(),x,y) -> gt#(y,0()) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) if1#(false(),x,y) -> gt#(x,0()) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) if2#(true(),x,y) -> minus#(x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) if3#(true(),x,y) -> minus#(y,x) if3#(true(),x,y) -> gcd#(x,minus(y,x)) gt#(s(x),s(y)) -> gt#(x,y) ge#(s(x),s(y)) -> ge#(x,y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) TDG Processor: DPs: minus#(s(x),y) -> gt#(s(x),y) minus#(s(x),y) -> if#(gt(s(x),y),x,y) if#(true(),x,y) -> minus#(x,y) gcd#(x,y) -> ge#(x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) if1#(true(),x,y) -> gt#(y,0()) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) if1#(false(),x,y) -> gt#(x,0()) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) if2#(true(),x,y) -> minus#(x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) if3#(true(),x,y) -> minus#(y,x) if3#(true(),x,y) -> gcd#(x,minus(y,x)) gt#(s(x),s(y)) -> gt#(x,y) ge#(s(x),s(y)) -> ge#(x,y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) graph: if3#(true(),x,y) -> gcd#(x,minus(y,x)) -> gcd#(x,y) -> if1#(ge(x,y),x,y) if3#(true(),x,y) -> gcd#(x,minus(y,x)) -> gcd#(x,y) -> ge#(x,y) if3#(true(),x,y) -> minus#(y,x) -> minus#(s(x),y) -> if#(gt(s(x),y),x,y) if3#(true(),x,y) -> minus#(y,x) -> minus#(s(x),y) -> gt#(s(x),y) if2#(true(),x,y) -> gcd#(minus(x,y),y) -> gcd#(x,y) -> if1#(ge(x,y),x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) -> gcd#(x,y) -> ge#(x,y) if2#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> if#(gt(s(x),y),x,y) if2#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> gt#(s(x),y) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) -> if3#(true(),x,y) -> gcd#(x,minus(y,x)) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) -> if3#(true(),x,y) -> minus#(y,x) if1#(false(),x,y) -> gt#(x,0()) -> gt#(s(x),s(y)) -> gt#(x,y) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) -> if2#(true(),x,y) -> gcd#(minus(x,y),y) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) -> if2#(true(),x,y) -> minus#(x,y) if1#(true(),x,y) -> gt#(y,0()) -> gt#(s(x),s(y)) -> gt#(x,y) ge#(s(x),s(y)) -> ge#(x,y) -> ge#(s(x),s(y)) -> ge#(x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(false(),x,y) -> if3#(gt(x,0()),x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(false(),x,y) -> gt#(x,0()) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(true(),x,y) -> if2#(gt(y,0()),x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(true(),x,y) -> gt#(y,0()) gcd#(x,y) -> ge#(x,y) -> ge#(s(x),s(y)) -> ge#(x,y) if#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> if#(gt(s(x),y),x,y) if#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> gt#(s(x),y) gt#(s(x),s(y)) -> gt#(x,y) -> gt#(s(x),s(y)) -> gt#(x,y) minus#(s(x),y) -> if#(gt(s(x),y),x,y) -> if#(true(),x,y) -> minus#(x,y) minus#(s(x),y) -> gt#(s(x),y) -> gt#(s(x),s(y)) -> gt#(x,y) EDG Processor: DPs: minus#(s(x),y) -> gt#(s(x),y) minus#(s(x),y) -> if#(gt(s(x),y),x,y) if#(true(),x,y) -> minus#(x,y) gcd#(x,y) -> ge#(x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) if1#(true(),x,y) -> gt#(y,0()) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) if1#(false(),x,y) -> gt#(x,0()) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) if2#(true(),x,y) -> minus#(x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) if3#(true(),x,y) -> minus#(y,x) if3#(true(),x,y) -> gcd#(x,minus(y,x)) gt#(s(x),s(y)) -> gt#(x,y) ge#(s(x),s(y)) -> ge#(x,y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) graph: if3#(true(),x,y) -> gcd#(x,minus(y,x)) -> gcd#(x,y) -> ge#(x,y) if3#(true(),x,y) -> gcd#(x,minus(y,x)) -> gcd#(x,y) -> if1#(ge(x,y),x,y) if3#(true(),x,y) -> minus#(y,x) -> minus#(s(x),y) -> gt#(s(x),y) if3#(true(),x,y) -> minus#(y,x) -> minus#(s(x),y) -> if#(gt(s(x),y),x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) -> gcd#(x,y) -> ge#(x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) -> gcd#(x,y) -> if1#(ge(x,y),x,y) if2#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> gt#(s(x),y) if2#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> if#(gt(s(x),y),x,y) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) -> if3#(true(),x,y) -> minus#(y,x) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) -> if3#(true(),x,y) -> gcd#(x,minus(y,x)) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) -> if2#(true(),x,y) -> minus#(x,y) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) -> if2#(true(),x,y) -> gcd#(minus(x,y),y) ge#(s(x),s(y)) -> ge#(x,y) -> ge#(s(x),s(y)) -> ge#(x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(true(),x,y) -> gt#(y,0()) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(true(),x,y) -> if2#(gt(y,0()),x,y) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(false(),x,y) -> gt#(x,0()) gcd#(x,y) -> if1#(ge(x,y),x,y) -> if1#(false(),x,y) -> if3#(gt(x,0()),x,y) gcd#(x,y) -> ge#(x,y) -> ge#(s(x),s(y)) -> ge#(x,y) if#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> gt#(s(x),y) if#(true(),x,y) -> minus#(x,y) -> minus#(s(x),y) -> if#(gt(s(x),y),x,y) gt#(s(x),s(y)) -> gt#(x,y) -> gt#(s(x),s(y)) -> gt#(x,y) minus#(s(x),y) -> if#(gt(s(x),y),x,y) -> if#(true(),x,y) -> minus#(x,y) minus#(s(x),y) -> gt#(s(x),y) -> gt#(s(x),s(y)) -> gt#(x,y) SCC Processor: #sccs: 4 #rules: 9 #arcs: 23/225 DPs: if3#(true(),x,y) -> gcd#(x,minus(y,x)) gcd#(x,y) -> if1#(ge(x,y),x,y) if1#(false(),x,y) -> if3#(gt(x,0()),x,y) if1#(true(),x,y) -> if2#(gt(y,0()),x,y) if2#(true(),x,y) -> gcd#(minus(x,y),y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Open DPs: ge#(s(x),s(y)) -> ge#(x,y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Matrix Interpretation Processor: dim=1 interpretation: [ge#](x0, x1) = 2x0 + 2x1 + 3/2, [if3](x0, x1, x2) = 1/2x0 + 2x1 + x2, [if2](x0, x1, x2) = 1/2x0 + 2x1 + x2, [if1](x0, x1, x2) = 1/2x0 + 2x1 + x2, [ge](x0, x1) = 2, [gcd](x0, x1) = 2x0 + x1 + 1, [0] = 0, [false] = 2, [true] = 2, [if](x0, x1, x2) = x1 + 1, [gt](x0, x1) = 2, [minus](x0, x1) = x0, [s](x0) = x0 + 1 orientation: ge#(s(x),s(y)) = 2x + 2y + 11/2 >= 2x + 2y + 3/2 = ge#(x,y) minus(s(x),y) = x + 1 >= x + 1 = if(gt(s(x),y),x,y) if(true(),x,y) = x + 1 >= x + 1 = s(minus(x,y)) if(false(),x,y) = x + 1 >= 0 = 0() gcd(x,y) = 2x + y + 1 >= 2x + y + 1 = if1(ge(x,y),x,y) if1(true(),x,y) = 2x + y + 1 >= 2x + y + 1 = if2(gt(y,0()),x,y) if1(false(),x,y) = 2x + y + 1 >= 2x + y + 1 = if3(gt(x,0()),x,y) if2(true(),x,y) = 2x + y + 1 >= 2x + y + 1 = gcd(minus(x,y),y) if2(false(),x,y) = 2x + y + 1 >= x = x if3(true(),x,y) = 2x + y + 1 >= 2x + y + 1 = gcd(x,minus(y,x)) if3(false(),x,y) = 2x + y + 1 >= y = y gt(0(),y) = 2 >= 2 = false() gt(s(x),0()) = 2 >= 2 = true() gt(s(x),s(y)) = 2 >= 2 = gt(x,y) ge(x,0()) = 2 >= 2 = true() ge(0(),s(x)) = 2 >= 2 = false() ge(s(x),s(y)) = 2 >= 2 = ge(x,y) problem: DPs: TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Qed DPs: minus#(s(x),y) -> if#(gt(s(x),y),x,y) if#(true(),x,y) -> minus#(x,y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Matrix Interpretation Processor: dim=1 interpretation: [if#](x0, x1, x2) = 1/2x0 + 7/2x1 + 7/2, [minus#](x0, x1) = 2x0 + 3, [if3](x0, x1, x2) = x1 + x2, [if2](x0, x1, x2) = x1 + x2, [if1](x0, x1, x2) = x1 + x2, [ge](x0, x1) = 2x0 + 1, [gcd](x0, x1) = x0 + x1, [0] = 0, [false] = 0, [true] = 0, [if](x0, x1, x2) = 2x1 + 2, [gt](x0, x1) = 1/2x0, [minus](x0, x1) = x0, [s](x0) = 2x0 + 2 orientation: minus#(s(x),y) = 4x + 7 >= 4x + 4 = if#(gt(s(x),y),x,y) if#(true(),x,y) = 7/2x + 7/2 >= 2x + 3 = minus#(x,y) minus(s(x),y) = 2x + 2 >= 2x + 2 = if(gt(s(x),y),x,y) if(true(),x,y) = 2x + 2 >= 2x + 2 = s(minus(x,y)) if(false(),x,y) = 2x + 2 >= 0 = 0() gcd(x,y) = x + y >= x + y = if1(ge(x,y),x,y) if1(true(),x,y) = x + y >= x + y = if2(gt(y,0()),x,y) if1(false(),x,y) = x + y >= x + y = if3(gt(x,0()),x,y) if2(true(),x,y) = x + y >= x + y = gcd(minus(x,y),y) if2(false(),x,y) = x + y >= x = x if3(true(),x,y) = x + y >= x + y = gcd(x,minus(y,x)) if3(false(),x,y) = x + y >= y = y gt(0(),y) = 0 >= 0 = false() gt(s(x),0()) = x + 1 >= 0 = true() gt(s(x),s(y)) = x + 1 >= 1/2x = gt(x,y) ge(x,0()) = 2x + 1 >= 0 = true() ge(0(),s(x)) = 1 >= 0 = false() ge(s(x),s(y)) = 4x + 5 >= 2x + 1 = ge(x,y) problem: DPs: TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Qed DPs: gt#(s(x),s(y)) -> gt#(x,y) TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Matrix Interpretation Processor: dim=1 interpretation: [gt#](x0, x1) = 4x0 + 6x1 + 5, [if3](x0, x1, x2) = 4x1 + 2x2, [if2](x0, x1, x2) = 4x1 + 2x2, [if1](x0, x1, x2) = 4x1 + 2x2, [ge](x0, x1) = 5x0, [gcd](x0, x1) = 4x0 + 2x1, [0] = 1, [false] = 0, [true] = 0, [if](x0, x1, x2) = 2x1 + 1, [gt](x0, x1) = 4x0 + 4x1 + 1, [minus](x0, x1) = x0, [s](x0) = 2x0 + 1 orientation: gt#(s(x),s(y)) = 8x + 12y + 15 >= 4x + 6y + 5 = gt#(x,y) minus(s(x),y) = 2x + 1 >= 2x + 1 = if(gt(s(x),y),x,y) if(true(),x,y) = 2x + 1 >= 2x + 1 = s(minus(x,y)) if(false(),x,y) = 2x + 1 >= 1 = 0() gcd(x,y) = 4x + 2y >= 4x + 2y = if1(ge(x,y),x,y) if1(true(),x,y) = 4x + 2y >= 4x + 2y = if2(gt(y,0()),x,y) if1(false(),x,y) = 4x + 2y >= 4x + 2y = if3(gt(x,0()),x,y) if2(true(),x,y) = 4x + 2y >= 4x + 2y = gcd(minus(x,y),y) if2(false(),x,y) = 4x + 2y >= x = x if3(true(),x,y) = 4x + 2y >= 4x + 2y = gcd(x,minus(y,x)) if3(false(),x,y) = 4x + 2y >= y = y gt(0(),y) = 4y + 5 >= 0 = false() gt(s(x),0()) = 8x + 9 >= 0 = true() gt(s(x),s(y)) = 8x + 8y + 9 >= 4x + 4y + 1 = gt(x,y) ge(x,0()) = 5x >= 0 = true() ge(0(),s(x)) = 5 >= 0 = false() ge(s(x),s(y)) = 10x + 5 >= 5x = ge(x,y) problem: DPs: TRS: minus(s(x),y) -> if(gt(s(x),y),x,y) if(true(),x,y) -> s(minus(x,y)) if(false(),x,y) -> 0() gcd(x,y) -> if1(ge(x,y),x,y) if1(true(),x,y) -> if2(gt(y,0()),x,y) if1(false(),x,y) -> if3(gt(x,0()),x,y) if2(true(),x,y) -> gcd(minus(x,y),y) if2(false(),x,y) -> x if3(true(),x,y) -> gcd(x,minus(y,x)) if3(false(),x,y) -> y gt(0(),y) -> false() gt(s(x),0()) -> true() gt(s(x),s(y)) -> gt(x,y) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) Qed