YES Problem: minus(X,s(Y)) -> pred(minus(X,Y)) minus(X,0()) -> X pred(s(X)) -> X le(s(X),s(Y)) -> le(X,Y) le(s(X),0()) -> false() le(0(),Y) -> true() gcd(0(),Y) -> 0() gcd(s(X),0()) -> s(X) gcd(s(X),s(Y)) -> if(le(Y,X),s(X),s(Y)) if(true(),s(X),s(Y)) -> gcd(minus(X,Y),s(Y)) if(false(),s(X),s(Y)) -> gcd(minus(Y,X),s(X)) Proof: DP Processor: DPs: minus#(X,s(Y)) -> minus#(X,Y) minus#(X,s(Y)) -> pred#(minus(X,Y)) le#(s(X),s(Y)) -> le#(X,Y) gcd#(s(X),s(Y)) -> le#(Y,X) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) if#(true(),s(X),s(Y)) -> minus#(X,Y) if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),s(Y)) if#(false(),s(X),s(Y)) -> minus#(Y,X) if#(false(),s(X),s(Y)) -> gcd#(minus(Y,X),s(X)) TRS: minus(X,s(Y)) -> pred(minus(X,Y)) minus(X,0()) -> X pred(s(X)) -> X le(s(X),s(Y)) -> le(X,Y) le(s(X),0()) -> false() le(0(),Y) -> true() gcd(0(),Y) -> 0() gcd(s(X),0()) -> s(X) gcd(s(X),s(Y)) -> if(le(Y,X),s(X),s(Y)) if(true(),s(X),s(Y)) -> gcd(minus(X,Y),s(Y)) if(false(),s(X),s(Y)) -> gcd(minus(Y,X),s(X)) Usable Rule Processor: DPs: minus#(X,s(Y)) -> minus#(X,Y) minus#(X,s(Y)) -> pred#(minus(X,Y)) le#(s(X),s(Y)) -> le#(X,Y) gcd#(s(X),s(Y)) -> le#(Y,X) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) if#(true(),s(X),s(Y)) -> minus#(X,Y) if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),s(Y)) if#(false(),s(X),s(Y)) -> minus#(Y,X) if#(false(),s(X),s(Y)) -> gcd#(minus(Y,X),s(X)) TRS: minus(X,s(Y)) -> pred(minus(X,Y)) minus(X,0()) -> X pred(s(X)) -> X le(s(X),s(Y)) -> le(X,Y) le(s(X),0()) -> false() le(0(),Y) -> true() Matrix Interpretation Processor: dim=1 usable rules: minus(X,s(Y)) -> pred(minus(X,Y)) minus(X,0()) -> X pred(s(X)) -> X le(s(X),s(Y)) -> le(X,Y) le(s(X),0()) -> false() le(0(),Y) -> true() interpretation: [if#](x0, x1, x2) = x0 + 2x1 + 3/2x2 + 3/2, [gcd#](x0, x1) = 3x0 + 3/2x1 + 3, [le#](x0, x1) = 1/2x1 + 2, [pred#](x0) = 0, [minus#](x0, x1) = 1/2x1 + 1, [true] = 1/2, [false] = 1/2, [le](x0, x1) = 2x1 + 3/2, [0] = 3/2, [pred](x0) = 1/2x0, [minus](x0, x1) = x0, [s](x0) = 3x0 + 1 orientation: minus#(X,s(Y)) = 3/2Y + 3/2 >= 1/2Y + 1 = minus#(X,Y) minus#(X,s(Y)) = 3/2Y + 3/2 >= 0 = pred#(minus(X,Y)) le#(s(X),s(Y)) = 3/2Y + 5/2 >= 1/2Y + 2 = le#(X,Y) gcd#(s(X),s(Y)) = 9X + 9/2Y + 15/2 >= 1/2X + 2 = le#(Y,X) gcd#(s(X),s(Y)) = 9X + 9/2Y + 15/2 >= 8X + 9/2Y + 13/2 = if#(le(Y,X),s(X),s(Y)) if#(true(),s(X),s(Y)) = 6X + 9/2Y + 11/2 >= 1/2Y + 1 = minus#(X,Y) if#(true(),s(X),s(Y)) = 6X + 9/2Y + 11/2 >= 3X + 9/2Y + 9/2 = gcd#(minus(X,Y),s(Y)) if#(false(),s(X),s(Y)) = 6X + 9/2Y + 11/2 >= 1/2X + 1 = minus#(Y,X) if#(false(),s(X),s(Y)) = 6X + 9/2Y + 11/2 >= 9/2X + 3Y + 9/2 = gcd#(minus(Y,X),s(X)) minus(X,s(Y)) = X >= 1/2X = pred(minus(X,Y)) minus(X,0()) = X >= X = X pred(s(X)) = 3/2X + 1/2 >= X = X le(s(X),s(Y)) = 6Y + 7/2 >= 2Y + 3/2 = le(X,Y) le(s(X),0()) = 9/2 >= 1/2 = false() le(0(),Y) = 2Y + 3/2 >= 1/2 = true() problem: DPs: TRS: minus(X,s(Y)) -> pred(minus(X,Y)) minus(X,0()) -> X pred(s(X)) -> X le(s(X),s(Y)) -> le(X,Y) le(s(X),0()) -> false() le(0(),Y) -> true() Qed