Runtime Complexity TRS:
The TRS R consists of the following rules:

fact(X) → if(zero(X), n__s(n__0), n__prod(X, n__fact(n__p(X))))
prod(0, X) → 0
prod(s(X), Y) → add(Y, prod(X, Y))
if(true, X, Y) → activate(X)
if(false, X, Y) → activate(Y)
zero(0) → true
zero(s(X)) → false
p(s(X)) → X
s(X) → n__s(X)
0n__0
prod(X1, X2) → n__prod(X1, X2)
fact(X) → n__fact(X)
p(X) → n__p(X)
activate(n__s(X)) → s(activate(X))
activate(n__0) → 0
activate(n__prod(X1, X2)) → prod(activate(X1), activate(X2))
activate(n__fact(X)) → fact(activate(X))
activate(n__p(X)) → p(activate(X))
activate(X) → X

Rewrite Strategy: INNERMOST

Renamed function symbols to avoid clashes with predefined symbol.

Runtime Complexity TRS:
The TRS R consists of the following rules:

fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Rewrite Strategy: INNERMOST

Infered types.

Rules:
fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Types:
fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
if' :: true':false' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
zero' :: n__0':n__s':n__p':n__fact':n__prod' → true':false'
n__s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__0' :: n__0':n__s':n__p':n__fact':n__prod'
n__prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
add' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
0' :: n__0':n__s':n__p':n__fact':n__prod'
s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
true' :: true':false'
activate' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
false' :: true':false'
p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
_hole_n__0':n__s':n__p':n__fact':n__prod'1 :: n__0':n__s':n__p':n__fact':n__prod'
_hole_true':false'2 :: true':false'
_gen_n__0':n__s':n__p':n__fact':n__prod'3 :: Nat → n__0':n__s':n__p':n__fact':n__prod'

Heuristically decided to analyse the following defined symbols:

They will be analysed ascendingly in the following order:
fact' = activate'
prod' < activate'

Rules:
fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Types:
fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
if' :: true':false' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
zero' :: n__0':n__s':n__p':n__fact':n__prod' → true':false'
n__s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__0' :: n__0':n__s':n__p':n__fact':n__prod'
n__prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
add' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
0' :: n__0':n__s':n__p':n__fact':n__prod'
s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
true' :: true':false'
activate' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
false' :: true':false'
p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
_hole_n__0':n__s':n__p':n__fact':n__prod'1 :: n__0':n__s':n__p':n__fact':n__prod'
_hole_true':false'2 :: true':false'
_gen_n__0':n__s':n__p':n__fact':n__prod'3 :: Nat → n__0':n__s':n__p':n__fact':n__prod'

Generator Equations:
_gen_n__0':n__s':n__p':n__fact':n__prod'3(0) ⇔ n__0'
_gen_n__0':n__s':n__p':n__fact':n__prod'3(+(x, 1)) ⇔ n__s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(x))

The following defined symbols remain to be analysed:

They will be analysed ascendingly in the following order:
fact' = activate'
prod' < activate'

Could not prove a rewrite lemma for the defined symbol add'.

Rules:
fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Types:
fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
if' :: true':false' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
zero' :: n__0':n__s':n__p':n__fact':n__prod' → true':false'
n__s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__0' :: n__0':n__s':n__p':n__fact':n__prod'
n__prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
add' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
0' :: n__0':n__s':n__p':n__fact':n__prod'
s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
true' :: true':false'
activate' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
false' :: true':false'
p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
_hole_n__0':n__s':n__p':n__fact':n__prod'1 :: n__0':n__s':n__p':n__fact':n__prod'
_hole_true':false'2 :: true':false'
_gen_n__0':n__s':n__p':n__fact':n__prod'3 :: Nat → n__0':n__s':n__p':n__fact':n__prod'

Generator Equations:
_gen_n__0':n__s':n__p':n__fact':n__prod'3(0) ⇔ n__0'
_gen_n__0':n__s':n__p':n__fact':n__prod'3(+(x, 1)) ⇔ n__s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(x))

The following defined symbols remain to be analysed:
prod', fact', activate'

They will be analysed ascendingly in the following order:
fact' = activate'
prod' < activate'

Could not prove a rewrite lemma for the defined symbol prod'.

Rules:
fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Types:
fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
if' :: true':false' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
zero' :: n__0':n__s':n__p':n__fact':n__prod' → true':false'
n__s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__0' :: n__0':n__s':n__p':n__fact':n__prod'
n__prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
add' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
0' :: n__0':n__s':n__p':n__fact':n__prod'
s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
true' :: true':false'
activate' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
false' :: true':false'
p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
_hole_n__0':n__s':n__p':n__fact':n__prod'1 :: n__0':n__s':n__p':n__fact':n__prod'
_hole_true':false'2 :: true':false'
_gen_n__0':n__s':n__p':n__fact':n__prod'3 :: Nat → n__0':n__s':n__p':n__fact':n__prod'

Generator Equations:
_gen_n__0':n__s':n__p':n__fact':n__prod'3(0) ⇔ n__0'
_gen_n__0':n__s':n__p':n__fact':n__prod'3(+(x, 1)) ⇔ n__s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(x))

The following defined symbols remain to be analysed:
activate', fact'

They will be analysed ascendingly in the following order:
fact' = activate'

Proved the following rewrite lemma:
activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53)) → _gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53), rt ∈ Ω(1 + n53)

Induction Base:
activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(0)) →RΩ(1)
_gen_n__0':n__s':n__p':n__fact':n__prod'3(0)

Induction Step:
activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(+(_\$n54, 1))) →RΩ(1)
s'(activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_\$n54))) →IH
s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_\$n54)) →RΩ(1)
n__s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_\$n54))

We have rt ∈ Ω(n) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).

Rules:
fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Types:
fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
if' :: true':false' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
zero' :: n__0':n__s':n__p':n__fact':n__prod' → true':false'
n__s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__0' :: n__0':n__s':n__p':n__fact':n__prod'
n__prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
add' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
0' :: n__0':n__s':n__p':n__fact':n__prod'
s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
true' :: true':false'
activate' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
false' :: true':false'
p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
_hole_n__0':n__s':n__p':n__fact':n__prod'1 :: n__0':n__s':n__p':n__fact':n__prod'
_hole_true':false'2 :: true':false'
_gen_n__0':n__s':n__p':n__fact':n__prod'3 :: Nat → n__0':n__s':n__p':n__fact':n__prod'

Lemmas:
activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53)) → _gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53), rt ∈ Ω(1 + n53)

Generator Equations:
_gen_n__0':n__s':n__p':n__fact':n__prod'3(0) ⇔ n__0'
_gen_n__0':n__s':n__p':n__fact':n__prod'3(+(x, 1)) ⇔ n__s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(x))

The following defined symbols remain to be analysed:
fact'

They will be analysed ascendingly in the following order:
fact' = activate'

Could not prove a rewrite lemma for the defined symbol fact'.

Rules:
fact'(X) → if'(zero'(X), n__s'(n__0'), n__prod'(X, n__fact'(n__p'(X))))
prod'(0', X) → 0'
prod'(s'(X), Y) → add'(Y, prod'(X, Y))
if'(true', X, Y) → activate'(X)
if'(false', X, Y) → activate'(Y)
zero'(0') → true'
zero'(s'(X)) → false'
p'(s'(X)) → X
s'(X) → n__s'(X)
0'n__0'
prod'(X1, X2) → n__prod'(X1, X2)
fact'(X) → n__fact'(X)
p'(X) → n__p'(X)
activate'(n__s'(X)) → s'(activate'(X))
activate'(n__0') → 0'
activate'(n__prod'(X1, X2)) → prod'(activate'(X1), activate'(X2))
activate'(n__fact'(X)) → fact'(activate'(X))
activate'(n__p'(X)) → p'(activate'(X))
activate'(X) → X

Types:
fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
if' :: true':false' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
zero' :: n__0':n__s':n__p':n__fact':n__prod' → true':false'
n__s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__0' :: n__0':n__s':n__p':n__fact':n__prod'
n__prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__fact' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
n__p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
add' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
0' :: n__0':n__s':n__p':n__fact':n__prod'
s' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
prod' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
true' :: true':false'
activate' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
false' :: true':false'
p' :: n__0':n__s':n__p':n__fact':n__prod' → n__0':n__s':n__p':n__fact':n__prod'
_hole_n__0':n__s':n__p':n__fact':n__prod'1 :: n__0':n__s':n__p':n__fact':n__prod'
_hole_true':false'2 :: true':false'
_gen_n__0':n__s':n__p':n__fact':n__prod'3 :: Nat → n__0':n__s':n__p':n__fact':n__prod'

Lemmas:
activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53)) → _gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53), rt ∈ Ω(1 + n53)

Generator Equations:
_gen_n__0':n__s':n__p':n__fact':n__prod'3(0) ⇔ n__0'
_gen_n__0':n__s':n__p':n__fact':n__prod'3(+(x, 1)) ⇔ n__s'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(x))

No more defined symbols left to analyse.

The lowerbound Ω(n) was proven with the following lemma:
activate'(_gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53)) → _gen_n__0':n__s':n__p':n__fact':n__prod'3(_n53), rt ∈ Ω(1 + n53)