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)) KBO Processor: argument filtering: pi(s) = [0] pi(minus) = 0 pi(pred) = 0 pi(0) = [] pi(le) = 0 pi(false) = [] pi(true) = [] pi(gcd) = [0,1] pi(if) = [1,2] pi(gcd#) = [0,1] pi(if#) = [1,2] weight function: w0 = 1 w(true) = w(false) = w(le) = w(0) = w(pred) = w(minus) = w(s) = 1 w(if#) = w(gcd#) = w(if) = w(gcd) = 0 precedence: gcd# ~ gcd ~ 0 > if# ~ if ~ true ~ false ~ le ~ pred ~ minus ~ s 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: 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)) KBO Processor: argument filtering: pi(s) = [0] pi(minus) = [0] pi(pred) = 0 pi(0) = [] pi(le) = [] pi(false) = [] pi(true) = [] pi(gcd) = [0,1] pi(if) = [1,2] pi(minus#) = 1 weight function: w0 = 1 w(if) = w(gcd) = w(true) = w(false) = w(le) = w(0) = w(pred) = w( s) = 1 w(minus#) = w(minus) = 0 precedence: minus# ~ le ~ 0 ~ pred ~ minus ~ s > gcd > if ~ true ~ false 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)) KBO Processor: argument filtering: pi(s) = [0] pi(minus) = [0] pi(pred) = 0 pi(0) = [] pi(le) = [1] pi(false) = [] pi(true) = [] pi(gcd) = [0,1] pi(if) = [1,2] pi(le#) = 0 weight function: w0 = 1 w(le#) = w(true) = w(false) = w(le) = w(0) = w(pred) = w(s) = 1 w(if) = w(gcd) = w(minus) = 0 precedence: gcd ~ true ~ le ~ pred ~ minus > le# ~ if ~ false ~ 0 ~ s 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