MAYBE Problem: +(x,0()) -> x +(x,s(y)) -> s(+(x,y)) *(x,0()) -> 0() *(x,s(y)) -> +(*(x,y),x) ge(x,0()) -> true() ge(0(),s(y)) -> false() ge(s(x),s(y)) -> ge(x,y) -(x,0()) -> x -(s(x),s(y)) -> -(x,y) fact(x) -> iffact(x,ge(x,s(s(0())))) iffact(x,true()) -> *(x,fact(-(x,s(0())))) iffact(x,false()) -> s(0()) Proof: DP Processor: DPs: +#(x,s(y)) -> +#(x,y) *#(x,s(y)) -> *#(x,y) *#(x,s(y)) -> +#(*(x,y),x) ge#(s(x),s(y)) -> ge#(x,y) -#(s(x),s(y)) -> -#(x,y) fact#(x) -> ge#(x,s(s(0()))) fact#(x) -> iffact#(x,ge(x,s(s(0())))) iffact#(x,true()) -> -#(x,s(0())) iffact#(x,true()) -> fact#(-(x,s(0()))) iffact#(x,true()) -> *#(x,fact(-(x,s(0())))) TRS: +(x,0()) -> x +(x,s(y)) -> s(+(x,y)) *(x,0()) -> 0() *(x,s(y)) -> +(*(x,y),x) ge(x,0()) -> true() ge(0(),s(y)) -> false() ge(s(x),s(y)) -> ge(x,y) -(x,0()) -> x -(s(x),s(y)) -> -(x,y) fact(x) -> iffact(x,ge(x,s(s(0())))) iffact(x,true()) -> *(x,fact(-(x,s(0())))) iffact(x,false()) -> s(0()) Open