MAYBE

Problem:
 fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
 add(0(),X) -> X
 add(s(X),Y) -> s(add(X,Y))
 prod(0(),X) -> 0()
 prod(s(X),Y) -> add(Y,prod(X,Y))
 if(true(),X,Y) -> X
 if(false(),X,Y) -> Y
 zero(0()) -> true()
 zero(s(X)) -> false()
 p(s(X)) -> X

Proof:
 DP Processor:
  DPs:
   fact#(X) -> p#(X)
   fact#(X) -> fact#(p(X))
   fact#(X) -> prod#(X,fact(p(X)))
   fact#(X) -> zero#(X)
   fact#(X) -> if#(zero(X),s(0()),prod(X,fact(p(X))))
   add#(s(X),Y) -> add#(X,Y)
   prod#(s(X),Y) -> prod#(X,Y)
   prod#(s(X),Y) -> add#(Y,prod(X,Y))
  TRS:
   fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
   add(0(),X) -> X
   add(s(X),Y) -> s(add(X,Y))
   prod(0(),X) -> 0()
   prod(s(X),Y) -> add(Y,prod(X,Y))
   if(true(),X,Y) -> X
   if(false(),X,Y) -> Y
   zero(0()) -> true()
   zero(s(X)) -> false()
   p(s(X)) -> X
  CDG Processor:
   DPs:
    fact#(X) -> p#(X)
    fact#(X) -> fact#(p(X))
    fact#(X) -> prod#(X,fact(p(X)))
    fact#(X) -> zero#(X)
    fact#(X) -> if#(zero(X),s(0()),prod(X,fact(p(X))))
    add#(s(X),Y) -> add#(X,Y)
    prod#(s(X),Y) -> prod#(X,Y)
    prod#(s(X),Y) -> add#(Y,prod(X,Y))
   TRS:
    fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
    add(0(),X) -> X
    add(s(X),Y) -> s(add(X,Y))
    prod(0(),X) -> 0()
    prod(s(X),Y) -> add(Y,prod(X,Y))
    if(true(),X,Y) -> X
    if(false(),X,Y) -> Y
    zero(0()) -> true()
    zero(s(X)) -> false()
    p(s(X)) -> X
   graph:
    add#(s(X),Y) -> add#(X,Y) -> add#(s(X),Y) -> add#(X,Y)
    prod#(s(X),Y) -> add#(Y,prod(X,Y)) -> add#(s(X),Y) -> add#(X,Y)
    prod#(s(X),Y) -> prod#(X,Y) -> prod#(s(X),Y) -> prod#(X,Y)
    prod#(s(X),Y) -> prod#(X,Y) ->
    prod#(s(X),Y) -> add#(Y,prod(X,Y))
    fact#(X) -> prod#(X,fact(p(X))) -> prod#(s(X),Y) -> prod#(X,Y)
    fact#(X) -> prod#(X,fact(p(X))) -> prod#(s(X),Y) -> add#(Y,prod(X,Y))
    fact#(X) -> fact#(p(X)) -> fact#(X) -> p#(X)
    fact#(X) -> fact#(p(X)) -> fact#(X) -> fact#(p(X))
    fact#(X) -> fact#(p(X)) -> fact#(X) -> prod#(X,fact(p(X)))
    fact#(X) -> fact#(p(X)) -> fact#(X) -> zero#(X)
    fact#(X) -> fact#(p(X)) -> fact#(X) -> if#(zero(X),s(0()),prod(X,fact(p(X))))
   Restore Modifier:
    DPs:
     fact#(X) -> p#(X)
     fact#(X) -> fact#(p(X))
     fact#(X) -> prod#(X,fact(p(X)))
     fact#(X) -> zero#(X)
     fact#(X) -> if#(zero(X),s(0()),prod(X,fact(p(X))))
     add#(s(X),Y) -> add#(X,Y)
     prod#(s(X),Y) -> prod#(X,Y)
     prod#(s(X),Y) -> add#(Y,prod(X,Y))
    TRS:
     fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
     add(0(),X) -> X
     add(s(X),Y) -> s(add(X,Y))
     prod(0(),X) -> 0()
     prod(s(X),Y) -> add(Y,prod(X,Y))
     if(true(),X,Y) -> X
     if(false(),X,Y) -> Y
     zero(0()) -> true()
     zero(s(X)) -> false()
     p(s(X)) -> X
    SCC Processor:
     #sccs: 3
     #rules: 3
     #arcs: 11/64
     DPs:
      fact#(X) -> fact#(p(X))
     TRS:
      fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
      add(0(),X) -> X
      add(s(X),Y) -> s(add(X,Y))
      prod(0(),X) -> 0()
      prod(s(X),Y) -> add(Y,prod(X,Y))
      if(true(),X,Y) -> X
      if(false(),X,Y) -> Y
      zero(0()) -> true()
      zero(s(X)) -> false()
      p(s(X)) -> X
     Open
     
     DPs:
      prod#(s(X),Y) -> prod#(X,Y)
     TRS:
      fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
      add(0(),X) -> X
      add(s(X),Y) -> s(add(X,Y))
      prod(0(),X) -> 0()
      prod(s(X),Y) -> add(Y,prod(X,Y))
      if(true(),X,Y) -> X
      if(false(),X,Y) -> Y
      zero(0()) -> true()
      zero(s(X)) -> false()
      p(s(X)) -> X
     Open
     
     DPs:
      add#(s(X),Y) -> add#(X,Y)
     TRS:
      fact(X) -> if(zero(X),s(0()),prod(X,fact(p(X))))
      add(0(),X) -> X
      add(s(X),Y) -> s(add(X,Y))
      prod(0(),X) -> 0()
      prod(s(X),Y) -> add(Y,prod(X,Y))
      if(true(),X,Y) -> X
      if(false(),X,Y) -> Y
      zero(0()) -> true()
      zero(s(X)) -> false()
      p(s(X)) -> X
     Open