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)) Usable Rule Processor: 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() Arctic Interpretation Processor: dimension: 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 + 1x1 + x2 + 0, [gcd#](x0, x1) = 1x0 + x1 + 2, [true] = 2, [false] = 7, [le](x0, x1) = x0 + 2x1 + 0, [0] = 5, [pred](x0) = x0 + 0, [minus](x0, x1) = x0 + 1, [s](x0) = 2x0 orientation: if#(true(),s(X),s(Y)) = 3X + 2Y + 2 >= 1X + 2Y + 2 = gcd#(minus(X,Y),s(Y)) gcd#(s(X),s(Y)) = 3X + 2Y + 2 >= 3X + 2Y + 0 = if#(le(Y,X),s(X),s(Y)) if#(false(),s(X),s(Y)) = 3X + 2Y + 7 >= 2X + 1Y + 2 = gcd#(minus(Y,X),s(X)) minus(X,s(Y)) = X + 1 >= X + 1 = pred(minus(X,Y)) minus(X,0()) = X + 1 >= X = X pred(s(X)) = 2X + 0 >= X = X le(s(X),s(Y)) = 2X + 4Y + 0 >= X + 2Y + 0 = le(X,Y) le(s(X),0()) = 2X + 7 >= 7 = false() le(0(),Y) = 2Y + 5 >= 2 = true() 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() Restore Modifier: 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)) Usable Rule Processor: 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() Arctic Interpretation Processor: dimension: 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 + 3x1 + 0, [gcd#](x0, x1) = 4x0 + 0, [true] = 1, [false] = 1, [le](x0, x1) = 4x1 + 1, [0] = 0, [pred](x0) = x0 + 0, [minus](x0, x1) = 1x0 + 0, [s](x0) = 2x0 + 1 orientation: if#(true(),s(X),s(Y)) = 5X + 4 >= 5X + 4 = gcd#(minus(X,Y),s(Y)) gcd#(s(X),s(Y)) = 6X + 5 >= 5X + 4 = if#(le(Y,X),s(X),s(Y)) minus(X,s(Y)) = 1X + 0 >= 1X + 0 = pred(minus(X,Y)) minus(X,0()) = 1X + 0 >= X = X pred(s(X)) = 2X + 1 >= X = X le(s(X),s(Y)) = 6Y + 5 >= 4Y + 1 = le(X,Y) le(s(X),0()) = 4 >= 1 = false() le(0(),Y) = 4Y + 1 >= 1 = true() problem: DPs: if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),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() Restore Modifier: DPs: if#(true(),s(X),s(Y)) -> gcd#(minus(X,Y),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