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)) TDG 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)) graph: if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),s(Y)) -> 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)) -> gcd#(s(X),s(Y)) -> le#(Y,X) if#(true(),s(X),s(Y)) -> minus#(X,Y) -> minus#(X,s(Y)) -> pred#(minus(X,Y)) if#(true(),s(X),s(Y)) -> minus#(X,Y) -> minus#(X,s(Y)) -> minus#(X,Y) if#(false(),s(X),s(Y)) -> gcd#(minus(Y,X),s(X)) -> gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) if#(false(),s(X),s(Y)) -> gcd#(minus(Y,X),s(X)) -> gcd#(s(X),s(Y)) -> le#(Y,X) if#(false(),s(X),s(Y)) -> minus#(Y,X) -> minus#(X,s(Y)) -> pred#(minus(X,Y)) if#(false(),s(X),s(Y)) -> minus#(Y,X) -> minus#(X,s(Y)) -> minus#(X,Y) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) -> if#(false(),s(X),s(Y)) -> gcd#(minus(Y,X),s(X)) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) -> if#(false(),s(X),s(Y)) -> minus#(Y,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)) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) -> if#(true(),s(X),s(Y)) -> minus#(X,Y) gcd#(s(X),s(Y)) -> le#(Y,X) -> le#(s(X),s(Y)) -> le#(X,Y) le#(s(X),s(Y)) -> le#(X,Y) -> le#(s(X),s(Y)) -> le#(X,Y) minus#(X,s(Y)) -> minus#(X,Y) -> minus#(X,s(Y)) -> pred#(minus(X,Y)) minus#(X,s(Y)) -> minus#(X,Y) -> minus#(X,s(Y)) -> minus#(X,Y) SCC Processor: #sccs: 3 #rules: 5 #arcs: 16/81 DPs: if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),s(Y)) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) 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)) Arctic Interpretation Processor: dimension: 1 interpretation: [if#](x0, x1, x2) = x0 + 1x1 + x2, [gcd#](x0, x1) = 1x0 + x1, [if](x0, x1, x2) = x0 + 1x1 + x2 + 4, [gcd](x0, x1) = 1x0 + x1 + 4, [true] = 0, [false] = 0, [le](x0, x1) = x0 + 2x1, [0] = 3, [pred](x0) = x0, [minus](x0, x1) = x0 + 1x1, [s](x0) = 2x0 orientation: if#(true(),s(X),s(Y)) = 3X + 2Y + 0 >= 1X + 2Y = gcd#(minus(X,Y),s(Y)) gcd#(s(X),s(Y)) = 3X + 2Y >= 3X + 2Y = if#(le(Y,X),s(X),s(Y)) if#(false(),s(X),s(Y)) = 3X + 2Y + 0 >= 2X + 1Y = gcd#(minus(Y,X),s(X)) minus(X,s(Y)) = X + 3Y >= X + 1Y = pred(minus(X,Y)) minus(X,0()) = X + 4 >= X = X pred(s(X)) = 2X >= X = X le(s(X),s(Y)) = 2X + 4Y >= X + 2Y = le(X,Y) le(s(X),0()) = 2X + 5 >= 0 = false() le(0(),Y) = 2Y + 3 >= 0 = true() gcd(0(),Y) = Y + 4 >= 3 = 0() gcd(s(X),0()) = 3X + 4 >= 2X = s(X) gcd(s(X),s(Y)) = 3X + 2Y + 4 >= 3X + 2Y + 4 = if(le(Y,X),s(X),s(Y)) if(true(),s(X),s(Y)) = 3X + 2Y + 4 >= 1X + 2Y + 4 = gcd(minus(X,Y),s(Y)) if(false(),s(X),s(Y)) = 3X + 2Y + 4 >= 2X + 1Y + 4 = gcd(minus(Y,X),s(X)) problem: DPs: if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),s(Y)) gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) 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)) Arctic Interpretation Processor: dimension: 1 interpretation: [if#](x0, x1, x2) = x0 + x1 + 0, [gcd#](x0, x1) = x0 + 0, [if](x0, x1, x2) = x0 + x1 + x2 + 0, [gcd](x0, x1) = 1x0 + x1 + 0, [true] = 0, [false] = 0, [le](x0, x1) = x1 + 0, [0] = 2, [pred](x0) = x0 + 0, [minus](x0, x1) = x0 + 0, [s](x0) = 1x0 + 1 orientation: if#(true(),s(X),s(Y)) = 1X + 1 >= X + 0 = gcd#(minus(X,Y),s(Y)) gcd#(s(X),s(Y)) = 1X + 1 >= 1X + 1 = if#(le(Y,X),s(X),s(Y)) minus(X,s(Y)) = X + 0 >= X + 0 = pred(minus(X,Y)) minus(X,0()) = X + 0 >= X = X pred(s(X)) = 1X + 1 >= X = X le(s(X),s(Y)) = 1Y + 1 >= Y + 0 = le(X,Y) le(s(X),0()) = 2 >= 0 = false() le(0(),Y) = Y + 0 >= 0 = true() gcd(0(),Y) = Y + 3 >= 2 = 0() gcd(s(X),0()) = 2X + 2 >= 1X + 1 = s(X) gcd(s(X),s(Y)) = 2X + 1Y + 2 >= 1X + 1Y + 1 = if(le(Y,X),s(X),s(Y)) if(true(),s(X),s(Y)) = 1X + 1Y + 1 >= 1X + 1Y + 1 = gcd(minus(X,Y),s(Y)) if(false(),s(X),s(Y)) = 1X + 1Y + 1 >= 1X + 1Y + 1 = gcd(minus(Y,X),s(X)) problem: DPs: gcd#(s(X),s(Y)) -> if#(le(Y,X),s(X),s(Y)) 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)) SCC Processor: #sccs: 0 #rules: 0 #arcs: 4/1 DPs: minus#(X,s(Y)) -> minus#(X,Y) 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)) Subterm Criterion Processor: simple projection: pi(minus#) = 1 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() 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)) Qed DPs: le#(s(X),s(Y)) -> le#(X,Y) 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)) Subterm Criterion Processor: simple projection: pi(le#) = 1 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() 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)) Qed