MAYBE Problem: lcm(x,y) -> lcmIter(x,y,0(),times(x,y)) lcmIter(x,y,z,u) -> if(or(ge(0(),x),ge(z,u)),x,y,z,u) if(true(),x,y,z,u) -> z if(false(),x,y,z,u) -> if2(divisible(z,y),x,y,z,u) if2(true(),x,y,z,u) -> z if2(false(),x,y,z,u) -> lcmIter(x,y,plus(x,z),u) plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) times(x,y) -> ifTimes(ge(0(),x),x,y) ifTimes(true(),x,y) -> 0() ifTimes(false(),x,y) -> plus(y,times(y,p(x))) p(s(x)) -> x p(0()) -> s(s(0())) ge(x,0()) -> true() ge(0(),s(y)) -> false() ge(s(x),s(y)) -> ge(x,y) or(true(),y) -> true() or(false(),y) -> y divisible(0(),s(y)) -> true() divisible(s(x),s(y)) -> div(s(x),s(y),s(y)) div(x,y,0()) -> divisible(x,y) div(0(),y,s(z)) -> false() div(s(x),y,s(z)) -> div(x,y,z) a() -> b() a() -> c() Proof: DP Processor: DPs: lcm#(x,y) -> times#(x,y) lcm#(x,y) -> lcmIter#(x,y,0(),times(x,y)) lcmIter#(x,y,z,u) -> ge#(z,u) lcmIter#(x,y,z,u) -> ge#(0(),x) lcmIter#(x,y,z,u) -> or#(ge(0(),x),ge(z,u)) lcmIter#(x,y,z,u) -> if#(or(ge(0(),x),ge(z,u)),x,y,z,u) if#(false(),x,y,z,u) -> divisible#(z,y) if#(false(),x,y,z,u) -> if2#(divisible(z,y),x,y,z,u) if2#(false(),x,y,z,u) -> plus#(x,z) if2#(false(),x,y,z,u) -> lcmIter#(x,y,plus(x,z),u) plus#(s(x),y) -> plus#(x,y) times#(x,y) -> ge#(0(),x) times#(x,y) -> ifTimes#(ge(0(),x),x,y) ifTimes#(false(),x,y) -> p#(x) ifTimes#(false(),x,y) -> times#(y,p(x)) ifTimes#(false(),x,y) -> plus#(y,times(y,p(x))) ge#(s(x),s(y)) -> ge#(x,y) divisible#(s(x),s(y)) -> div#(s(x),s(y),s(y)) div#(x,y,0()) -> divisible#(x,y) div#(s(x),y,s(z)) -> div#(x,y,z) TRS: lcm(x,y) -> lcmIter(x,y,0(),times(x,y)) lcmIter(x,y,z,u) -> if(or(ge(0(),x),ge(z,u)),x,y,z,u) if(true(),x,y,z,u) -> z if(false(),x,y,z,u) -> if2(divisible(z,y),x,y,z,u) if2(true(),x,y,z,u) -> z if2(false(),x,y,z,u) -> lcmIter(x,y,plus(x,z),u) plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) times(x,y) -> ifTimes(ge(0(),x),x,y) ifTimes(true(),x,y) -> 0() ifTimes(false(),x,y) -> plus(y,times(y,p(x))) p(s(x)) -> x p(0()) -> s(s(0())) ge(x,0()) -> true() ge(0(),s(y)) -> false() ge(s(x),s(y)) -> ge(x,y) or(true(),y) -> true() or(false(),y) -> y divisible(0(),s(y)) -> true() divisible(s(x),s(y)) -> div(s(x),s(y),s(y)) div(x,y,0()) -> divisible(x,y) div(0(),y,s(z)) -> false() div(s(x),y,s(z)) -> div(x,y,z) a() -> b() a() -> c() Usable Rule Processor: DPs: lcm#(x,y) -> times#(x,y) lcm#(x,y) -> lcmIter#(x,y,0(),times(x,y)) lcmIter#(x,y,z,u) -> ge#(z,u) lcmIter#(x,y,z,u) -> ge#(0(),x) lcmIter#(x,y,z,u) -> or#(ge(0(),x),ge(z,u)) lcmIter#(x,y,z,u) -> if#(or(ge(0(),x),ge(z,u)),x,y,z,u) if#(false(),x,y,z,u) -> divisible#(z,y) if#(false(),x,y,z,u) -> if2#(divisible(z,y),x,y,z,u) if2#(false(),x,y,z,u) -> plus#(x,z) if2#(false(),x,y,z,u) -> lcmIter#(x,y,plus(x,z),u) plus#(s(x),y) -> plus#(x,y) times#(x,y) -> ge#(0(),x) times#(x,y) -> ifTimes#(ge(0(),x),x,y) ifTimes#(false(),x,y) -> p#(x) ifTimes#(false(),x,y) -> times#(y,p(x)) ifTimes#(false(),x,y) -> plus#(y,times(y,p(x))) ge#(s(x),s(y)) -> ge#(x,y) divisible#(s(x),s(y)) -> div#(s(x),s(y),s(y)) div#(x,y,0()) -> divisible#(x,y) div#(s(x),y,s(z)) -> div#(x,y,z) TRS: times(x,y) -> ifTimes(ge(0(),x),x,y) ifTimes(true(),x,y) -> 0() ifTimes(false(),x,y) -> plus(y,times(y,p(x))) ge(x,0()) -> true() ge(0(),s(y)) -> false() plus(0(),y) -> y plus(s(x),y) -> s(plus(x,y)) p(s(x)) -> x p(0()) -> s(s(0())) ge(s(x),s(y)) -> ge(x,y) or(true(),y) -> true() or(false(),y) -> y divisible(0(),s(y)) -> true() divisible(s(x),s(y)) -> div(s(x),s(y),s(y)) div(s(x),y,s(z)) -> div(x,y,z) div(x,y,0()) -> divisible(x,y) div(0(),y,s(z)) -> false() Open