MAYBE Problem: plus(0(),x) -> x plus(s(x),y) -> s(plus(x,y)) times(0(),y) -> 0() times(s(x),y) -> plus(y,times(x,y)) exp(x,0()) -> s(0()) exp(x,s(y)) -> times(x,exp(x,y)) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) tower(x,y) -> towerIter(0(),x,y,s(0())) towerIter(c,x,y,z) -> help(ge(c,x),c,x,y,z) help(true(),c,x,y,z) -> z help(false(),c,x,y,z) -> towerIter(s(c),x,y,exp(y,z)) Proof: DP Processor: DPs: plus#(s(x),y) -> plus#(x,y) times#(s(x),y) -> times#(x,y) times#(s(x),y) -> plus#(y,times(x,y)) exp#(x,s(y)) -> exp#(x,y) exp#(x,s(y)) -> times#(x,exp(x,y)) ge#(s(x),s(y)) -> ge#(x,y) tower#(x,y) -> towerIter#(0(),x,y,s(0())) towerIter#(c,x,y,z) -> ge#(c,x) towerIter#(c,x,y,z) -> help#(ge(c,x),c,x,y,z) help#(false(),c,x,y,z) -> exp#(y,z) help#(false(),c,x,y,z) -> towerIter#(s(c),x,y,exp(y,z)) TRS: plus(0(),x) -> x plus(s(x),y) -> s(plus(x,y)) times(0(),y) -> 0() times(s(x),y) -> plus(y,times(x,y)) exp(x,0()) -> s(0()) exp(x,s(y)) -> times(x,exp(x,y)) ge(x,0()) -> true() ge(0(),s(x)) -> false() ge(s(x),s(y)) -> ge(x,y) tower(x,y) -> towerIter(0(),x,y,s(0())) towerIter(c,x,y,z) -> help(ge(c,x),c,x,y,z) help(true(),c,x,y,z) -> z help(false(),c,x,y,z) -> towerIter(s(c),x,y,exp(y,z)) Open