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