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) Open