TIMEOUT

The TRS could not be proven terminating. The proof attempt took 60043 ms.

The following DP Processors were used


Problem 1 was processed with processor DependencyGraph (48624ms).
 | – Problem 2 was processed with processor SubtermCriterion (2ms).
 | – Problem 3 was processed with processor SubtermCriterion (2ms).
 | – Problem 4 was processed with processor SubtermCriterion (3ms).
 | – Problem 5 was processed with processor SubtermCriterion (2ms).
 | – Problem 6 was processed with processor DependencyGraph (5991ms).
 |    | – Problem 27 remains open; application of the following processors failed [].
 | – Problem 7 was processed with processor SubtermCriterion (2ms).
 | – Problem 8 was processed with processor SubtermCriterion (2ms).
 | – Problem 9 was processed with processor SubtermCriterion (3ms).
 | – Problem 10 was processed with processor SubtermCriterion (3ms).
 | – Problem 11 was processed with processor SubtermCriterion (47ms).
 |    | – Problem 25 remains open; application of the following processors failed [DependencyGraph (4ms)].
 | – Problem 12 was processed with processor SubtermCriterion (2ms).
 | – Problem 13 was processed with processor SubtermCriterion (3ms).
 | – Problem 14 was processed with processor SubtermCriterion (3ms).
 | – Problem 15 was processed with processor SubtermCriterion (3ms).
 | – Problem 16 was processed with processor SubtermCriterion (3ms).
 | – Problem 17 remains open; application of the following processors failed [SubtermCriterion (1ms), DependencyGraph (10ms)].
 | – Problem 18 was processed with processor SubtermCriterion (4ms).
 | – Problem 19 was processed with processor SubtermCriterion (3ms).
 | – Problem 20 was processed with processor SubtermCriterion (6ms).
 | – Problem 21 was processed with processor SubtermCriterion (2ms).
 |    | – Problem 26 remains open; application of the following processors failed [].
 | – Problem 22 was processed with processor SubtermCriterion (4ms).
 | – Problem 23 was processed with processor SubtermCriterion (2ms).
 | – Problem 24 remains open; application of the following processors failed [SubtermCriterion (1ms), DependencyGraph (timeout)].

The following open problems remain:



Open Dependency Pair Problem 6

Dependency Pairs

active#(x(N, s(M))) → U71#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)active#(U71(X1, X2, X3)) → U71#(active(X1), X2, X3)
active#(isNat(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(U32(tt, V2)) → U33#(isNat(V2))
active#(isNat(plus(V1, V2))) → U11#(and(isNatKind(V1), isNatKind(V2)), V1, V2)active#(isNat(x(V1, V2))) → isNatKind#(V2)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V1)active#(x(N, s(M))) → isNatKind#(N)
active#(x(N, s(M))) → and#(isNat(N), isNatKind(N))active#(U51(X1, X2, X3)) → active#(X1)
active#(plus(N, s(M))) → and#(isNat(N), isNatKind(N))active#(U71(X1, X2, X3)) → active#(X1)
active#(U61(X)) → U61#(active(X))active#(x(X1, X2)) → x#(X1, active(X2))
active#(U12(tt, V2)) → U13#(isNat(V2))active#(U21(tt, V1)) → U22#(isNat(V1))
active#(U11(X1, X2, X3)) → active#(X1)active#(U41(X1, X2)) → active#(X1)
active#(plus(X1, X2)) → active#(X1)active#(plus(N, s(M))) → isNatKind#(M)
active#(U31(X1, X2, X3)) → active#(X1)active#(U51(tt, M, N)) → s#(plus(N, M))
active#(plus(X1, X2)) → active#(X2)active#(x(N, 0)) → U61#(and(isNat(N), isNatKind(N)))
active#(U33(X)) → active#(X)active#(x(N, 0)) → isNat#(N)
active#(plus(N, s(M))) → isNatKind#(N)active#(x(N, s(M))) → and#(isNat(M), isNatKind(M))
active#(U11(X1, X2, X3)) → U11#(active(X1), X2, X3)active#(x(X1, X2)) → x#(active(X1), X2)
active#(isNat(plus(V1, V2))) → isNatKind#(V1)active#(plus(N, 0)) → isNatKind#(N)
active#(U11(tt, V1, V2)) → isNat#(V1)active#(isNat(x(V1, V2))) → isNatKind#(V1)
active#(plus(N, s(M))) → U51#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)active#(isNatKind(x(V1, V2))) → isNatKind#(V1)
active#(U13(X)) → active#(X)active#(isNat(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))
active#(x(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))active#(isNatKind(s(V1))) → isNatKind#(V1)
active#(U21(X1, X2)) → U21#(active(X1), X2)active#(x(N, 0)) → isNatKind#(N)
active#(U12(X1, X2)) → active#(X1)active#(x(X1, X2)) → active#(X1)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V2)active#(plus(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))
active#(plus(X1, X2)) → plus#(X1, active(X2))active#(U21(X1, X2)) → active#(X1)
active#(x(N, s(M))) → isNat#(M)active#(U51(tt, M, N)) → plus#(N, M)
active#(U32(X1, X2)) → active#(X1)active#(U22(X)) → active#(X)
active#(U32(X1, X2)) → U32#(active(X1), X2)active#(isNat(s(V1))) → U21#(isNatKind(V1), V1)
active#(x(N, s(M))) → isNat#(N)active#(s(X)) → active#(X)
active#(x(N, 0)) → and#(isNat(N), isNatKind(N))active#(x(X1, X2)) → active#(X2)
active#(U61(X)) → active#(X)active#(and(X1, X2)) → active#(X1)
active#(U31(tt, V1, V2)) → U32#(isNat(V1), V2)active#(plus(N, s(M))) → and#(isNat(M), isNatKind(M))

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, U22, top, plus, isNatKind, mark, U71, and, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x




Open Dependency Pair Problem 11

Dependency Pairs

x#(mark(X1), X2) → x#(X1, X2)x#(ok(X1), ok(X2)) → x#(X1, X2)
x#(X1, mark(X2)) → x#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, U22, top, plus, isNatKind, mark, U71, and, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x




Open Dependency Pair Problem 17

Dependency Pairs

top#(mark(X)) → top#(proper(X))top#(ok(X)) → top#(active(X))

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, U22, top, plus, isNatKind, mark, U71, and, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x




Open Dependency Pair Problem 21

Dependency Pairs

plus#(ok(X1), ok(X2)) → plus#(X1, X2)plus#(X1, mark(X2)) → plus#(X1, X2)
plus#(mark(X1), X2) → plus#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, U22, top, plus, isNatKind, mark, U71, and, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x




Open Dependency Pair Problem 24

Dependency Pairs

active#(x(N, s(M))) → U71#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)active#(U71(X1, X2, X3)) → U71#(active(X1), X2, X3)
active#(isNat(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(U32(tt, V2)) → U33#(isNat(V2))
active#(isNat(plus(V1, V2))) → U11#(and(isNatKind(V1), isNatKind(V2)), V1, V2)active#(isNat(x(V1, V2))) → isNatKind#(V2)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V1)active#(x(N, s(M))) → and#(isNat(N), isNatKind(N))
active#(U51(X1, X2, X3)) → active#(X1)active#(plus(N, s(M))) → and#(isNat(N), isNatKind(N))
active#(U71(X1, X2, X3)) → active#(X1)active#(U61(X)) → U61#(active(X))
active#(x(X1, X2)) → x#(X1, active(X2))active#(U12(tt, V2)) → U13#(isNat(V2))
active#(U21(tt, V1)) → U22#(isNat(V1))active#(U11(X1, X2, X3)) → active#(X1)
active#(U41(X1, X2)) → active#(X1)active#(plus(X1, X2)) → active#(X1)
active#(plus(N, s(M))) → isNatKind#(M)active#(U31(X1, X2, X3)) → active#(X1)
active#(U51(tt, M, N)) → s#(plus(N, M))active#(plus(X1, X2)) → active#(X2)
active#(x(N, 0)) → U61#(and(isNat(N), isNatKind(N)))active#(U33(X)) → active#(X)
active#(x(N, 0)) → isNat#(N)active#(plus(N, s(M))) → isNatKind#(N)
active#(x(N, s(M))) → and#(isNat(M), isNatKind(M))active#(U11(X1, X2, X3)) → U11#(active(X1), X2, X3)
active#(x(X1, X2)) → x#(active(X1), X2)active#(isNat(plus(V1, V2))) → isNatKind#(V1)
active#(plus(N, 0)) → isNatKind#(N)active#(U11(tt, V1, V2)) → isNat#(V1)
active#(isNat(x(V1, V2))) → isNatKind#(V1)active#(plus(N, s(M))) → U51#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)
active#(isNatKind(x(V1, V2))) → isNatKind#(V1)active#(U13(X)) → active#(X)
active#(isNat(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(x(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))
active#(isNatKind(s(V1))) → isNatKind#(V1)active#(U21(X1, X2)) → U21#(active(X1), X2)
active#(x(N, 0)) → isNatKind#(N)active#(U12(X1, X2)) → active#(X1)
active#(x(X1, X2)) → active#(X1)active#(isNatKind(plus(V1, V2))) → isNatKind#(V2)
active#(plus(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))active#(plus(X1, X2)) → plus#(X1, active(X2))
active#(U21(X1, X2)) → active#(X1)active#(x(N, s(M))) → isNat#(M)
active#(U51(tt, M, N)) → plus#(N, M)active#(U32(X1, X2)) → active#(X1)
active#(U22(X)) → active#(X)active#(U32(X1, X2)) → U32#(active(X1), X2)
active#(isNat(s(V1))) → U21#(isNatKind(V1), V1)active#(x(N, s(M))) → isNat#(N)
active#(s(X)) → active#(X)active#(x(N, 0)) → and#(isNat(N), isNatKind(N))
active#(x(X1, X2)) → active#(X2)active#(U61(X)) → active#(X)
active#(and(X1, X2)) → active#(X1)active#(U31(tt, V1, V2)) → U32#(isNat(V1), V2)
active#(plus(N, s(M))) → and#(isNat(M), isNatKind(M))

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, U22, top, plus, isNatKind, mark, U71, and, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x


Problem 1: DependencyGraph



Dependency Pair Problem

Dependency Pairs

active#(U71(X1, X2, X3)) → U71#(active(X1), X2, X3)proper#(U41(X1, X2)) → proper#(X2)
proper#(U41(X1, X2)) → proper#(X1)proper#(U11(X1, X2, X3)) → proper#(X3)
active#(isNat(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(U32(tt, V2)) → U33#(isNat(V2))
active#(isNat(plus(V1, V2))) → U11#(and(isNatKind(V1), isNatKind(V2)), V1, V2)active#(U71(tt, M, N)) → x#(N, M)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V1)proper#(U32(X1, X2)) → proper#(X2)
active#(x(N, s(M))) → isNatKind#(N)proper#(U31(X1, X2, X3)) → proper#(X2)
proper#(isNatKind(X)) → proper#(X)proper#(U71(X1, X2, X3)) → proper#(X1)
proper#(U71(X1, X2, X3)) → U71#(proper(X1), proper(X2), proper(X3))active#(plus(N, 0)) → and#(isNat(N), isNatKind(N))
active#(isNatKind(x(V1, V2))) → isNatKind#(V2)proper#(U11(X1, X2, X3)) → proper#(X2)
active#(U12(tt, V2)) → isNat#(V2)x#(ok(X1), ok(X2)) → x#(X1, X2)
x#(X1, mark(X2)) → x#(X1, X2)top#(mark(X)) → proper#(X)
active#(plus(N, 0)) → isNat#(N)isNatKind#(ok(X)) → isNatKind#(X)
active#(U71(X1, X2, X3)) → active#(X1)active#(plus(N, s(M))) → and#(isNat(N), isNatKind(N))
U71#(mark(X1), X2, X3) → U71#(X1, X2, X3)proper#(U71(X1, X2, X3)) → proper#(X3)
isNat#(ok(X)) → isNat#(X)and#(mark(X1), X2) → and#(X1, X2)
active#(U21(tt, V1)) → isNat#(V1)active#(U12(X1, X2)) → U12#(active(X1), X2)
active#(isNat(s(V1))) → isNatKind#(V1)active#(U41(X1, X2)) → active#(X1)
proper#(U13(X)) → U13#(proper(X))proper#(U51(X1, X2, X3)) → proper#(X1)
active#(plus(N, s(M))) → isNatKind#(M)active#(U31(X1, X2, X3)) → active#(X1)
active#(U51(tt, M, N)) → s#(plus(N, M))active#(plus(X1, X2)) → active#(X2)
proper#(U22(X)) → proper#(X)U11#(ok(X1), ok(X2), ok(X3)) → U11#(X1, X2, X3)
plus#(mark(X1), X2) → plus#(X1, X2)proper#(U51(X1, X2, X3)) → proper#(X2)
proper#(isNatKind(X)) → isNatKind#(proper(X))U51#(ok(X1), ok(X2), ok(X3)) → U51#(X1, X2, X3)
active#(U33(X)) → active#(X)active#(x(N, 0)) → isNat#(N)
active#(plus(N, 0)) → U41#(and(isNat(N), isNatKind(N)), N)active#(x(N, s(M))) → and#(isNat(M), isNatKind(M))
top#(ok(X)) → active#(X)active#(x(N, s(M))) → isNatKind#(M)
active#(U71(tt, M, N)) → plus#(x(N, M), N)active#(U11(tt, V1, V2)) → isNat#(V1)
active#(isNat(x(V1, V2))) → isNatKind#(V1)x#(mark(X1), X2) → x#(X1, X2)
active#(and(X1, X2)) → and#(active(X1), X2)active#(plus(N, s(M))) → U51#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)
active#(U31(X1, X2, X3)) → U31#(active(X1), X2, X3)U13#(mark(X)) → U13#(X)
proper#(isNat(X)) → isNat#(proper(X))active#(U32(tt, V2)) → isNat#(V2)
active#(U13(X)) → active#(X)active#(U11(tt, V1, V2)) → U12#(isNat(V1), V2)
plus#(ok(X1), ok(X2)) → plus#(X1, X2)active#(U21(X1, X2)) → U21#(active(X1), X2)
U51#(mark(X1), X2, X3) → U51#(X1, X2, X3)active#(x(N, 0)) → isNatKind#(N)
proper#(isNat(X)) → proper#(X)U61#(mark(X)) → U61#(X)
active#(U12(X1, X2)) → active#(X1)active#(isNat(x(V1, V2))) → U31#(and(isNatKind(V1), isNatKind(V2)), V1, V2)
proper#(U22(X)) → U22#(proper(X))U33#(mark(X)) → U33#(X)
proper#(U31(X1, X2, X3)) → proper#(X1)active#(U31(tt, V1, V2)) → isNat#(V1)
active#(s(X)) → s#(active(X))s#(ok(X)) → s#(X)
active#(plus(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))proper#(U11(X1, X2, X3)) → proper#(X1)
active#(U51(tt, M, N)) → plus#(N, M)active#(x(N, s(M))) → isNat#(M)
active#(isNat(s(V1))) → U21#(isNatKind(V1), V1)active#(U32(X1, X2)) → U32#(active(X1), X2)
active#(U32(X1, X2)) → active#(X1)active#(U51(X1, X2, X3)) → U51#(active(X1), X2, X3)
active#(plus(N, s(M))) → isNat#(M)active#(x(N, s(M))) → isNat#(N)
proper#(s(X)) → s#(proper(X))active#(x(N, 0)) → and#(isNat(N), isNatKind(N))
active#(x(X1, X2)) → active#(X2)proper#(U21(X1, X2)) → proper#(X1)
active#(U31(tt, V1, V2)) → U32#(isNat(V1), V2)active#(plus(N, s(M))) → and#(isNat(M), isNatKind(M))
active#(x(N, s(M))) → U71#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)top#(ok(X)) → top#(active(X))
active#(isNatKind(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))U61#(ok(X)) → U61#(X)
U12#(ok(X1), ok(X2)) → U12#(X1, X2)active#(isNat(x(V1, V2))) → isNatKind#(V2)
proper#(U12(X1, X2)) → proper#(X2)proper#(and(X1, X2)) → and#(proper(X1), proper(X2))
active#(U41(X1, X2)) → U41#(active(X1), X2)proper#(and(X1, X2)) → proper#(X2)
plus#(X1, mark(X2)) → plus#(X1, X2)U22#(mark(X)) → U22#(X)
U12#(mark(X1), X2) → U12#(X1, X2)proper#(plus(X1, X2)) → proper#(X1)
active#(isNatKind(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(x(N, s(M))) → and#(isNat(N), isNatKind(N))
proper#(U32(X1, X2)) → proper#(X1)proper#(plus(X1, X2)) → plus#(proper(X1), proper(X2))
U71#(ok(X1), ok(X2), ok(X3)) → U71#(X1, X2, X3)active#(U51(X1, X2, X3)) → active#(X1)
top#(mark(X)) → top#(proper(X))U13#(ok(X)) → U13#(X)
active#(U61(X)) → U61#(active(X))U22#(ok(X)) → U22#(X)
U11#(mark(X1), X2, X3) → U11#(X1, X2, X3)active#(x(X1, X2)) → x#(X1, active(X2))
active#(U12(tt, V2)) → U13#(isNat(V2))active#(U21(tt, V1)) → U22#(isNat(V1))
active#(U11(X1, X2, X3)) → active#(X1)proper#(s(X)) → proper#(X)
active#(plus(X1, X2)) → active#(X1)U32#(ok(X1), ok(X2)) → U32#(X1, X2)
active#(U13(X)) → U13#(active(X))active#(U33(X)) → U33#(active(X))
proper#(U51(X1, X2, X3)) → U51#(proper(X1), proper(X2), proper(X3))active#(x(N, 0)) → U61#(and(isNat(N), isNatKind(N)))
proper#(U32(X1, X2)) → U32#(proper(X1), proper(X2))proper#(U12(X1, X2)) → U12#(proper(X1), proper(X2))
U33#(ok(X)) → U33#(X)active#(plus(N, s(M))) → isNat#(N)
active#(plus(N, s(M))) → isNatKind#(N)active#(U11(X1, X2, X3)) → U11#(active(X1), X2, X3)
proper#(x(X1, X2)) → proper#(X1)and#(ok(X1), ok(X2)) → and#(X1, X2)
active#(x(X1, X2)) → x#(active(X1), X2)proper#(U61(X)) → U61#(proper(X))
U31#(ok(X1), ok(X2), ok(X3)) → U31#(X1, X2, X3)proper#(and(X1, X2)) → proper#(X1)
active#(isNat(plus(V1, V2))) → isNatKind#(V2)active#(isNat(plus(V1, V2))) → isNatKind#(V1)
active#(plus(N, 0)) → isNatKind#(N)proper#(U13(X)) → proper#(X)
proper#(U21(X1, X2)) → proper#(X2)U41#(ok(X1), ok(X2)) → U41#(X1, X2)
proper#(U31(X1, X2, X3)) → U31#(proper(X1), proper(X2), proper(X3))active#(U22(X)) → U22#(active(X))
active#(isNatKind(x(V1, V2))) → isNatKind#(V1)proper#(U51(X1, X2, X3)) → proper#(X3)
U41#(mark(X1), X2) → U41#(X1, X2)proper#(plus(X1, X2)) → proper#(X2)
proper#(x(X1, X2)) → x#(proper(X1), proper(X2))active#(isNat(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))
proper#(U31(X1, X2, X3)) → proper#(X3)active#(x(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))
active#(isNatKind(s(V1))) → isNatKind#(V1)proper#(U21(X1, X2)) → U21#(proper(X1), proper(X2))
proper#(U12(X1, X2)) → proper#(X1)proper#(U61(X)) → proper#(X)
active#(x(X1, X2)) → active#(X1)active#(isNatKind(plus(V1, V2))) → isNatKind#(V2)
proper#(U33(X)) → U33#(proper(X))proper#(U41(X1, X2)) → U41#(proper(X1), proper(X2))
proper#(x(X1, X2)) → proper#(X2)proper#(U11(X1, X2, X3)) → U11#(proper(X1), proper(X2), proper(X3))
s#(mark(X)) → s#(X)active#(plus(X1, X2)) → plus#(X1, active(X2))
active#(U21(X1, X2)) → active#(X1)active#(U22(X)) → active#(X)
U21#(mark(X1), X2) → U21#(X1, X2)active#(plus(X1, X2)) → plus#(active(X1), X2)
active#(s(X)) → active#(X)U32#(mark(X1), X2) → U32#(X1, X2)
active#(U61(X)) → active#(X)proper#(U71(X1, X2, X3)) → proper#(X2)
active#(and(X1, X2)) → active#(X1)U31#(mark(X1), X2, X3) → U31#(X1, X2, X3)
U21#(ok(X1), ok(X2)) → U21#(X1, X2)proper#(U33(X)) → proper#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


The following SCCs where found

active#(U71(X1, X2, X3)) → U71#(active(X1), X2, X3)active#(x(N, s(M))) → U71#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)
active#(isNat(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(U32(tt, V2)) → U33#(isNat(V2))
active#(isNat(plus(V1, V2))) → U11#(and(isNatKind(V1), isNatKind(V2)), V1, V2)active#(isNat(x(V1, V2))) → isNatKind#(V2)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V1)active#(x(N, s(M))) → isNatKind#(N)
active#(x(N, s(M))) → and#(isNat(N), isNatKind(N))active#(U51(X1, X2, X3)) → active#(X1)
active#(U71(X1, X2, X3)) → active#(X1)active#(plus(N, s(M))) → and#(isNat(N), isNatKind(N))
active#(U61(X)) → U61#(active(X))active#(U12(tt, V2)) → U13#(isNat(V2))
active#(x(X1, X2)) → x#(X1, active(X2))active#(U21(tt, V1)) → U22#(isNat(V1))
active#(U11(X1, X2, X3)) → active#(X1)active#(U41(X1, X2)) → active#(X1)
active#(plus(N, s(M))) → isNatKind#(M)active#(plus(X1, X2)) → active#(X1)
active#(U51(tt, M, N)) → s#(plus(N, M))active#(U31(X1, X2, X3)) → active#(X1)
active#(plus(X1, X2)) → active#(X2)active#(x(N, 0)) → U61#(and(isNat(N), isNatKind(N)))
active#(U33(X)) → active#(X)active#(plus(N, s(M))) → isNatKind#(N)
active#(x(N, 0)) → isNat#(N)active#(U11(X1, X2, X3)) → U11#(active(X1), X2, X3)
active#(x(N, s(M))) → and#(isNat(M), isNatKind(M))active#(x(X1, X2)) → x#(active(X1), X2)
active#(plus(N, 0)) → isNatKind#(N)active#(isNat(plus(V1, V2))) → isNatKind#(V1)
active#(isNat(x(V1, V2))) → isNatKind#(V1)active#(U11(tt, V1, V2)) → isNat#(V1)
active#(plus(N, s(M))) → U51#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)active#(isNatKind(x(V1, V2))) → isNatKind#(V1)
active#(U13(X)) → active#(X)active#(isNat(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))
active#(x(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))active#(isNatKind(s(V1))) → isNatKind#(V1)
active#(U21(X1, X2)) → U21#(active(X1), X2)active#(x(N, 0)) → isNatKind#(N)
active#(U12(X1, X2)) → active#(X1)active#(x(X1, X2)) → active#(X1)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V2)active#(plus(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))
active#(plus(X1, X2)) → plus#(X1, active(X2))active#(U21(X1, X2)) → active#(X1)
active#(U51(tt, M, N)) → plus#(N, M)active#(x(N, s(M))) → isNat#(M)
active#(isNat(s(V1))) → U21#(isNatKind(V1), V1)active#(U32(X1, X2)) → U32#(active(X1), X2)
active#(U22(X)) → active#(X)active#(U32(X1, X2)) → active#(X1)
active#(s(X)) → active#(X)active#(x(N, s(M))) → isNat#(N)
active#(x(X1, X2)) → active#(X2)active#(x(N, 0)) → and#(isNat(N), isNatKind(N))
active#(U61(X)) → active#(X)active#(and(X1, X2)) → active#(X1)
active#(U31(tt, V1, V2)) → U32#(isNat(V1), V2)active#(plus(N, s(M))) → and#(isNat(M), isNatKind(M))

U33#(mark(X)) → U33#(X)U33#(ok(X)) → U33#(X)

isNatKind#(ok(X)) → isNatKind#(X)

U41#(ok(X1), ok(X2)) → U41#(X1, X2)U41#(mark(X1), X2) → U41#(X1, X2)

isNat#(ok(X)) → isNat#(X)

active#(U71(X1, X2, X3)) → U71#(active(X1), X2, X3)active#(x(N, s(M))) → U71#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)
active#(isNat(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(U32(tt, V2)) → U33#(isNat(V2))
active#(isNat(plus(V1, V2))) → U11#(and(isNatKind(V1), isNatKind(V2)), V1, V2)active#(isNat(x(V1, V2))) → isNatKind#(V2)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V1)active#(x(N, s(M))) → and#(isNat(N), isNatKind(N))
active#(U51(X1, X2, X3)) → active#(X1)active#(U71(X1, X2, X3)) → active#(X1)
active#(plus(N, s(M))) → and#(isNat(N), isNatKind(N))active#(U61(X)) → U61#(active(X))
active#(U12(tt, V2)) → U13#(isNat(V2))active#(x(X1, X2)) → x#(X1, active(X2))
active#(U21(tt, V1)) → U22#(isNat(V1))active#(U11(X1, X2, X3)) → active#(X1)
active#(U41(X1, X2)) → active#(X1)active#(plus(N, s(M))) → isNatKind#(M)
active#(plus(X1, X2)) → active#(X1)active#(U51(tt, M, N)) → s#(plus(N, M))
active#(U31(X1, X2, X3)) → active#(X1)active#(plus(X1, X2)) → active#(X2)
active#(x(N, 0)) → U61#(and(isNat(N), isNatKind(N)))active#(U33(X)) → active#(X)
active#(plus(N, s(M))) → isNatKind#(N)active#(x(N, 0)) → isNat#(N)
active#(U11(X1, X2, X3)) → U11#(active(X1), X2, X3)active#(x(N, s(M))) → and#(isNat(M), isNatKind(M))
active#(x(X1, X2)) → x#(active(X1), X2)active#(plus(N, 0)) → isNatKind#(N)
active#(isNat(plus(V1, V2))) → isNatKind#(V1)active#(isNat(x(V1, V2))) → isNatKind#(V1)
active#(U11(tt, V1, V2)) → isNat#(V1)active#(plus(N, s(M))) → U51#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)
active#(isNatKind(x(V1, V2))) → isNatKind#(V1)active#(U13(X)) → active#(X)
active#(isNat(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(x(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))
active#(isNatKind(s(V1))) → isNatKind#(V1)active#(U21(X1, X2)) → U21#(active(X1), X2)
active#(x(N, 0)) → isNatKind#(N)active#(U12(X1, X2)) → active#(X1)
active#(x(X1, X2)) → active#(X1)active#(isNatKind(plus(V1, V2))) → isNatKind#(V2)
active#(plus(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))active#(plus(X1, X2)) → plus#(X1, active(X2))
active#(U21(X1, X2)) → active#(X1)active#(U51(tt, M, N)) → plus#(N, M)
active#(x(N, s(M))) → isNat#(M)active#(isNat(s(V1))) → U21#(isNatKind(V1), V1)
active#(U32(X1, X2)) → U32#(active(X1), X2)active#(U22(X)) → active#(X)
active#(U32(X1, X2)) → active#(X1)active#(s(X)) → active#(X)
active#(x(N, s(M))) → isNat#(N)active#(x(X1, X2)) → active#(X2)
active#(x(N, 0)) → and#(isNat(N), isNatKind(N))active#(U61(X)) → active#(X)
active#(and(X1, X2)) → active#(X1)active#(U31(tt, V1, V2)) → U32#(isNat(V1), V2)
active#(plus(N, s(M))) → and#(isNat(M), isNatKind(M))

U11#(mark(X1), X2, X3) → U11#(X1, X2, X3)U11#(ok(X1), ok(X2), ok(X3)) → U11#(X1, X2, X3)

U61#(mark(X)) → U61#(X)U61#(ok(X)) → U61#(X)

s#(mark(X)) → s#(X)s#(ok(X)) → s#(X)

active#(U51(X1, X2, X3)) → active#(X1)active#(U33(X)) → active#(X)
active#(U12(X1, X2)) → active#(X1)active#(U71(X1, X2, X3)) → active#(X1)
active#(x(X1, X2)) → active#(X1)active#(U11(X1, X2, X3)) → active#(X1)
active#(U21(X1, X2)) → active#(X1)active#(U41(X1, X2)) → active#(X1)
active#(plus(X1, X2)) → active#(X1)active#(U22(X)) → active#(X)
active#(U32(X1, X2)) → active#(X1)active#(s(X)) → active#(X)
active#(U31(X1, X2, X3)) → active#(X1)active#(x(X1, X2)) → active#(X2)
active#(U61(X)) → active#(X)active#(U13(X)) → active#(X)
active#(plus(X1, X2)) → active#(X2)active#(and(X1, X2)) → active#(X1)

U32#(ok(X1), ok(X2)) → U32#(X1, X2)U32#(mark(X1), X2) → U32#(X1, X2)

plus#(ok(X1), ok(X2)) → plus#(X1, X2)plus#(X1, mark(X2)) → plus#(X1, X2)
plus#(mark(X1), X2) → plus#(X1, X2)

U21#(mark(X1), X2) → U21#(X1, X2)U21#(ok(X1), ok(X2)) → U21#(X1, X2)

U71#(ok(X1), ok(X2), ok(X3)) → U71#(X1, X2, X3)U71#(mark(X1), X2, X3) → U71#(X1, X2, X3)

U31#(ok(X1), ok(X2), ok(X3)) → U31#(X1, X2, X3)U31#(mark(X1), X2, X3) → U31#(X1, X2, X3)

U12#(ok(X1), ok(X2)) → U12#(X1, X2)U12#(mark(X1), X2) → U12#(X1, X2)

U13#(ok(X)) → U13#(X)U13#(mark(X)) → U13#(X)

x#(mark(X1), X2) → x#(X1, X2)x#(ok(X1), ok(X2)) → x#(X1, X2)
x#(X1, mark(X2)) → x#(X1, X2)

proper#(U51(X1, X2, X3)) → proper#(X2)proper#(U41(X1, X2)) → proper#(X2)
proper#(U41(X1, X2)) → proper#(X1)proper#(U11(X1, X2, X3)) → proper#(X3)
proper#(x(X1, X2)) → proper#(X1)proper#(U12(X1, X2)) → proper#(X2)
proper#(and(X1, X2)) → proper#(X1)proper#(U13(X)) → proper#(X)
proper#(U21(X1, X2)) → proper#(X2)proper#(U32(X1, X2)) → proper#(X2)
proper#(U31(X1, X2, X3)) → proper#(X2)proper#(isNatKind(X)) → proper#(X)
proper#(U71(X1, X2, X3)) → proper#(X1)proper#(and(X1, X2)) → proper#(X2)
proper#(U11(X1, X2, X3)) → proper#(X2)proper#(plus(X1, X2)) → proper#(X1)
proper#(U51(X1, X2, X3)) → proper#(X3)proper#(plus(X1, X2)) → proper#(X2)
proper#(U31(X1, X2, X3)) → proper#(X3)proper#(U32(X1, X2)) → proper#(X1)
proper#(U12(X1, X2)) → proper#(X1)proper#(isNat(X)) → proper#(X)
proper#(U61(X)) → proper#(X)proper#(U71(X1, X2, X3)) → proper#(X3)
proper#(U31(X1, X2, X3)) → proper#(X1)proper#(x(X1, X2)) → proper#(X2)
proper#(U11(X1, X2, X3)) → proper#(X1)proper#(s(X)) → proper#(X)
proper#(U51(X1, X2, X3)) → proper#(X1)proper#(U71(X1, X2, X3)) → proper#(X2)
proper#(U21(X1, X2)) → proper#(X1)proper#(U22(X)) → proper#(X)
proper#(U33(X)) → proper#(X)

U51#(mark(X1), X2, X3) → U51#(X1, X2, X3)U51#(ok(X1), ok(X2), ok(X3)) → U51#(X1, X2, X3)

and#(ok(X1), ok(X2)) → and#(X1, X2)and#(mark(X1), X2) → and#(X1, X2)

U22#(ok(X)) → U22#(X)U22#(mark(X)) → U22#(X)

top#(mark(X)) → top#(proper(X))top#(ok(X)) → top#(active(X))

Problem 2: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U71#(ok(X1), ok(X2), ok(X3)) → U71#(X1, X2, X3)U71#(mark(X1), X2, X3) → U71#(X1, X2, X3)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U71#(ok(X1), ok(X2), ok(X3)) → U71#(X1, X2, X3)U71#(mark(X1), X2, X3) → U71#(X1, X2, X3)

Problem 3: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U33#(mark(X)) → U33#(X)U33#(ok(X)) → U33#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U33#(mark(X)) → U33#(X)U33#(ok(X)) → U33#(X)

Problem 4: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U61#(mark(X)) → U61#(X)U61#(ok(X)) → U61#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U61#(mark(X)) → U61#(X)U61#(ok(X)) → U61#(X)

Problem 5: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U22#(ok(X)) → U22#(X)U22#(mark(X)) → U22#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U22#(ok(X)) → U22#(X)U22#(mark(X)) → U22#(X)

Problem 6: DependencyGraph



Dependency Pair Problem

Dependency Pairs

active#(x(N, s(M))) → U71#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)active#(U71(X1, X2, X3)) → U71#(active(X1), X2, X3)
active#(isNat(x(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))active#(U32(tt, V2)) → U33#(isNat(V2))
active#(isNat(plus(V1, V2))) → U11#(and(isNatKind(V1), isNatKind(V2)), V1, V2)active#(isNat(x(V1, V2))) → isNatKind#(V2)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V1)active#(x(N, s(M))) → isNatKind#(N)
active#(x(N, s(M))) → and#(isNat(N), isNatKind(N))active#(U51(X1, X2, X3)) → active#(X1)
active#(plus(N, s(M))) → and#(isNat(N), isNatKind(N))active#(U71(X1, X2, X3)) → active#(X1)
active#(U61(X)) → U61#(active(X))active#(U12(tt, V2)) → U13#(isNat(V2))
active#(x(X1, X2)) → x#(X1, active(X2))active#(U21(tt, V1)) → U22#(isNat(V1))
active#(U11(X1, X2, X3)) → active#(X1)active#(U41(X1, X2)) → active#(X1)
active#(plus(N, s(M))) → isNatKind#(M)active#(plus(X1, X2)) → active#(X1)
active#(U51(tt, M, N)) → s#(plus(N, M))active#(U31(X1, X2, X3)) → active#(X1)
active#(plus(X1, X2)) → active#(X2)active#(x(N, 0)) → U61#(and(isNat(N), isNatKind(N)))
active#(U33(X)) → active#(X)active#(x(N, 0)) → isNat#(N)
active#(plus(N, s(M))) → isNatKind#(N)active#(x(N, s(M))) → and#(isNat(M), isNatKind(M))
active#(U11(X1, X2, X3)) → U11#(active(X1), X2, X3)active#(x(X1, X2)) → x#(active(X1), X2)
active#(isNat(plus(V1, V2))) → isNatKind#(V1)active#(plus(N, 0)) → isNatKind#(N)
active#(U11(tt, V1, V2)) → isNat#(V1)active#(isNat(x(V1, V2))) → isNatKind#(V1)
active#(plus(N, s(M))) → U51#(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N)active#(isNatKind(x(V1, V2))) → isNatKind#(V1)
active#(U13(X)) → active#(X)active#(isNat(plus(V1, V2))) → and#(isNatKind(V1), isNatKind(V2))
active#(x(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))active#(isNatKind(s(V1))) → isNatKind#(V1)
active#(U21(X1, X2)) → U21#(active(X1), X2)active#(x(N, 0)) → isNatKind#(N)
active#(U12(X1, X2)) → active#(X1)active#(x(X1, X2)) → active#(X1)
active#(isNatKind(plus(V1, V2))) → isNatKind#(V2)active#(plus(N, s(M))) → and#(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N)))
active#(plus(X1, X2)) → plus#(X1, active(X2))active#(U21(X1, X2)) → active#(X1)
active#(U51(tt, M, N)) → plus#(N, M)active#(x(N, s(M))) → isNat#(M)
active#(isNat(s(V1))) → U21#(isNatKind(V1), V1)active#(U32(X1, X2)) → U32#(active(X1), X2)
active#(U22(X)) → active#(X)active#(U32(X1, X2)) → active#(X1)
active#(s(X)) → active#(X)active#(x(N, s(M))) → isNat#(N)
active#(x(X1, X2)) → active#(X2)active#(x(N, 0)) → and#(isNat(N), isNatKind(N))
active#(U61(X)) → active#(X)active#(and(X1, X2)) → active#(X1)
active#(U31(tt, V1, V2)) → U32#(isNat(V1), V2)active#(plus(N, s(M))) → and#(isNat(M), isNatKind(M))

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


The following SCCs where found

active#(U51(X1, X2, X3)) → active#(X1)active#(U33(X)) → active#(X)
active#(U12(X1, X2)) → active#(X1)active#(U71(X1, X2, X3)) → active#(X1)
active#(x(X1, X2)) → active#(X1)active#(U11(X1, X2, X3)) → active#(X1)
active#(U41(X1, X2)) → active#(X1)active#(U21(X1, X2)) → active#(X1)
active#(plus(X1, X2)) → active#(X1)active#(U32(X1, X2)) → active#(X1)
active#(U22(X)) → active#(X)active#(s(X)) → active#(X)
active#(U31(X1, X2, X3)) → active#(X1)active#(x(X1, X2)) → active#(X2)
active#(U61(X)) → active#(X)active#(U13(X)) → active#(X)
active#(plus(X1, X2)) → active#(X2)active#(and(X1, X2)) → active#(X1)

Problem 7: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

isNatKind#(ok(X)) → isNatKind#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

isNatKind#(ok(X)) → isNatKind#(X)

Problem 8: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U32#(ok(X1), ok(X2)) → U32#(X1, X2)U32#(mark(X1), X2) → U32#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U32#(ok(X1), ok(X2)) → U32#(X1, X2)U32#(mark(X1), X2) → U32#(X1, X2)

Problem 9: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U31#(ok(X1), ok(X2), ok(X3)) → U31#(X1, X2, X3)U31#(mark(X1), X2, X3) → U31#(X1, X2, X3)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U31#(ok(X1), ok(X2), ok(X3)) → U31#(X1, X2, X3)U31#(mark(X1), X2, X3) → U31#(X1, X2, X3)

Problem 10: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U11#(mark(X1), X2, X3) → U11#(X1, X2, X3)U11#(ok(X1), ok(X2), ok(X3)) → U11#(X1, X2, X3)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U11#(mark(X1), X2, X3) → U11#(X1, X2, X3)U11#(ok(X1), ok(X2), ok(X3)) → U11#(X1, X2, X3)

Problem 11: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

x#(mark(X1), X2) → x#(X1, X2)x#(ok(X1), ok(X2)) → x#(X1, X2)
x#(X1, mark(X2)) → x#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

x#(mark(X1), X2) → x#(X1, X2)x#(ok(X1), ok(X2)) → x#(X1, X2)

Problem 12: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U13#(ok(X)) → U13#(X)U13#(mark(X)) → U13#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U13#(ok(X)) → U13#(X)U13#(mark(X)) → U13#(X)

Problem 13: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U12#(ok(X1), ok(X2)) → U12#(X1, X2)U12#(mark(X1), X2) → U12#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U12#(ok(X1), ok(X2)) → U12#(X1, X2)U12#(mark(X1), X2) → U12#(X1, X2)

Problem 14: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

s#(mark(X)) → s#(X)s#(ok(X)) → s#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

s#(mark(X)) → s#(X)s#(ok(X)) → s#(X)

Problem 15: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

and#(ok(X1), ok(X2)) → and#(X1, X2)and#(mark(X1), X2) → and#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

and#(ok(X1), ok(X2)) → and#(X1, X2)and#(mark(X1), X2) → and#(X1, X2)

Problem 16: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U21#(mark(X1), X2) → U21#(X1, X2)U21#(ok(X1), ok(X2)) → U21#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U21#(mark(X1), X2) → U21#(X1, X2)U21#(ok(X1), ok(X2)) → U21#(X1, X2)

Problem 18: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U51#(mark(X1), X2, X3) → U51#(X1, X2, X3)U51#(ok(X1), ok(X2), ok(X3)) → U51#(X1, X2, X3)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U51#(mark(X1), X2, X3) → U51#(X1, X2, X3)U51#(ok(X1), ok(X2), ok(X3)) → U51#(X1, X2, X3)

Problem 19: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

active#(U51(X1, X2, X3)) → active#(X1)active#(U33(X)) → active#(X)
active#(U12(X1, X2)) → active#(X1)active#(U71(X1, X2, X3)) → active#(X1)
active#(x(X1, X2)) → active#(X1)active#(U11(X1, X2, X3)) → active#(X1)
active#(U41(X1, X2)) → active#(X1)active#(U21(X1, X2)) → active#(X1)
active#(plus(X1, X2)) → active#(X1)active#(U32(X1, X2)) → active#(X1)
active#(U22(X)) → active#(X)active#(s(X)) → active#(X)
active#(U31(X1, X2, X3)) → active#(X1)active#(x(X1, X2)) → active#(X2)
active#(U61(X)) → active#(X)active#(U13(X)) → active#(X)
active#(plus(X1, X2)) → active#(X2)active#(and(X1, X2)) → active#(X1)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

active#(U51(X1, X2, X3)) → active#(X1)active#(U33(X)) → active#(X)
active#(U12(X1, X2)) → active#(X1)active#(U71(X1, X2, X3)) → active#(X1)
active#(x(X1, X2)) → active#(X1)active#(U11(X1, X2, X3)) → active#(X1)
active#(U41(X1, X2)) → active#(X1)active#(U21(X1, X2)) → active#(X1)
active#(plus(X1, X2)) → active#(X1)active#(U22(X)) → active#(X)
active#(U32(X1, X2)) → active#(X1)active#(s(X)) → active#(X)
active#(U31(X1, X2, X3)) → active#(X1)active#(x(X1, X2)) → active#(X2)
active#(U61(X)) → active#(X)active#(plus(X1, X2)) → active#(X2)
active#(U13(X)) → active#(X)active#(and(X1, X2)) → active#(X1)

Problem 20: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

proper#(U51(X1, X2, X3)) → proper#(X2)proper#(U41(X1, X2)) → proper#(X2)
proper#(U41(X1, X2)) → proper#(X1)proper#(U11(X1, X2, X3)) → proper#(X3)
proper#(x(X1, X2)) → proper#(X1)proper#(U12(X1, X2)) → proper#(X2)
proper#(and(X1, X2)) → proper#(X1)proper#(U13(X)) → proper#(X)
proper#(U21(X1, X2)) → proper#(X2)proper#(U32(X1, X2)) → proper#(X2)
proper#(U31(X1, X2, X3)) → proper#(X2)proper#(isNatKind(X)) → proper#(X)
proper#(U71(X1, X2, X3)) → proper#(X1)proper#(and(X1, X2)) → proper#(X2)
proper#(U11(X1, X2, X3)) → proper#(X2)proper#(U51(X1, X2, X3)) → proper#(X3)
proper#(plus(X1, X2)) → proper#(X1)proper#(plus(X1, X2)) → proper#(X2)
proper#(U31(X1, X2, X3)) → proper#(X3)proper#(U32(X1, X2)) → proper#(X1)
proper#(isNat(X)) → proper#(X)proper#(U12(X1, X2)) → proper#(X1)
proper#(U61(X)) → proper#(X)proper#(U71(X1, X2, X3)) → proper#(X3)
proper#(U31(X1, X2, X3)) → proper#(X1)proper#(x(X1, X2)) → proper#(X2)
proper#(U11(X1, X2, X3)) → proper#(X1)proper#(s(X)) → proper#(X)
proper#(U51(X1, X2, X3)) → proper#(X1)proper#(U71(X1, X2, X3)) → proper#(X2)
proper#(U21(X1, X2)) → proper#(X1)proper#(U22(X)) → proper#(X)
proper#(U33(X)) → proper#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

proper#(U41(X1, X2)) → proper#(X2)proper#(U51(X1, X2, X3)) → proper#(X2)
proper#(U41(X1, X2)) → proper#(X1)proper#(U11(X1, X2, X3)) → proper#(X3)
proper#(U12(X1, X2)) → proper#(X2)proper#(x(X1, X2)) → proper#(X1)
proper#(and(X1, X2)) → proper#(X1)proper#(U13(X)) → proper#(X)
proper#(U21(X1, X2)) → proper#(X2)proper#(U32(X1, X2)) → proper#(X2)
proper#(U31(X1, X2, X3)) → proper#(X2)proper#(isNatKind(X)) → proper#(X)
proper#(U71(X1, X2, X3)) → proper#(X1)proper#(and(X1, X2)) → proper#(X2)
proper#(U11(X1, X2, X3)) → proper#(X2)proper#(U51(X1, X2, X3)) → proper#(X3)
proper#(plus(X1, X2)) → proper#(X1)proper#(plus(X1, X2)) → proper#(X2)
proper#(U31(X1, X2, X3)) → proper#(X3)proper#(U32(X1, X2)) → proper#(X1)
proper#(isNat(X)) → proper#(X)proper#(U12(X1, X2)) → proper#(X1)
proper#(U61(X)) → proper#(X)proper#(U71(X1, X2, X3)) → proper#(X3)
proper#(U31(X1, X2, X3)) → proper#(X1)proper#(x(X1, X2)) → proper#(X2)
proper#(U11(X1, X2, X3)) → proper#(X1)proper#(s(X)) → proper#(X)
proper#(U51(X1, X2, X3)) → proper#(X1)proper#(U71(X1, X2, X3)) → proper#(X2)
proper#(U21(X1, X2)) → proper#(X1)proper#(U22(X)) → proper#(X)
proper#(U33(X)) → proper#(X)

Problem 21: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

plus#(ok(X1), ok(X2)) → plus#(X1, X2)plus#(X1, mark(X2)) → plus#(X1, X2)
plus#(mark(X1), X2) → plus#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

plus#(ok(X1), ok(X2)) → plus#(X1, X2)plus#(mark(X1), X2) → plus#(X1, X2)

Problem 22: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

isNat#(ok(X)) → isNat#(X)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

isNat#(ok(X)) → isNat#(X)

Problem 23: SubtermCriterion



Dependency Pair Problem

Dependency Pairs

U41#(ok(X1), ok(X2)) → U41#(X1, X2)U41#(mark(X1), X2) → U41#(X1, X2)

Rewrite Rules

active(U11(tt, V1, V2)) → mark(U12(isNat(V1), V2))active(U12(tt, V2)) → mark(U13(isNat(V2)))
active(U13(tt)) → mark(tt)active(U21(tt, V1)) → mark(U22(isNat(V1)))
active(U22(tt)) → mark(tt)active(U31(tt, V1, V2)) → mark(U32(isNat(V1), V2))
active(U32(tt, V2)) → mark(U33(isNat(V2)))active(U33(tt)) → mark(tt)
active(U41(tt, N)) → mark(N)active(U51(tt, M, N)) → mark(s(plus(N, M)))
active(U61(tt)) → mark(0)active(U71(tt, M, N)) → mark(plus(x(N, M), N))
active(and(tt, X)) → mark(X)active(isNat(0)) → mark(tt)
active(isNat(plus(V1, V2))) → mark(U11(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNat(s(V1))) → mark(U21(isNatKind(V1), V1))
active(isNat(x(V1, V2))) → mark(U31(and(isNatKind(V1), isNatKind(V2)), V1, V2))active(isNatKind(0)) → mark(tt)
active(isNatKind(plus(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(isNatKind(s(V1))) → mark(isNatKind(V1))
active(isNatKind(x(V1, V2))) → mark(and(isNatKind(V1), isNatKind(V2)))active(plus(N, 0)) → mark(U41(and(isNat(N), isNatKind(N)), N))
active(plus(N, s(M))) → mark(U51(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(x(N, 0)) → mark(U61(and(isNat(N), isNatKind(N))))
active(x(N, s(M))) → mark(U71(and(and(isNat(M), isNatKind(M)), and(isNat(N), isNatKind(N))), M, N))active(U11(X1, X2, X3)) → U11(active(X1), X2, X3)
active(U12(X1, X2)) → U12(active(X1), X2)active(U13(X)) → U13(active(X))
active(U21(X1, X2)) → U21(active(X1), X2)active(U22(X)) → U22(active(X))
active(U31(X1, X2, X3)) → U31(active(X1), X2, X3)active(U32(X1, X2)) → U32(active(X1), X2)
active(U33(X)) → U33(active(X))active(U41(X1, X2)) → U41(active(X1), X2)
active(U51(X1, X2, X3)) → U51(active(X1), X2, X3)active(s(X)) → s(active(X))
active(plus(X1, X2)) → plus(active(X1), X2)active(plus(X1, X2)) → plus(X1, active(X2))
active(U61(X)) → U61(active(X))active(U71(X1, X2, X3)) → U71(active(X1), X2, X3)
active(x(X1, X2)) → x(active(X1), X2)active(x(X1, X2)) → x(X1, active(X2))
active(and(X1, X2)) → and(active(X1), X2)U11(mark(X1), X2, X3) → mark(U11(X1, X2, X3))
U12(mark(X1), X2) → mark(U12(X1, X2))U13(mark(X)) → mark(U13(X))
U21(mark(X1), X2) → mark(U21(X1, X2))U22(mark(X)) → mark(U22(X))
U31(mark(X1), X2, X3) → mark(U31(X1, X2, X3))U32(mark(X1), X2) → mark(U32(X1, X2))
U33(mark(X)) → mark(U33(X))U41(mark(X1), X2) → mark(U41(X1, X2))
U51(mark(X1), X2, X3) → mark(U51(X1, X2, X3))s(mark(X)) → mark(s(X))
plus(mark(X1), X2) → mark(plus(X1, X2))plus(X1, mark(X2)) → mark(plus(X1, X2))
U61(mark(X)) → mark(U61(X))U71(mark(X1), X2, X3) → mark(U71(X1, X2, X3))
x(mark(X1), X2) → mark(x(X1, X2))x(X1, mark(X2)) → mark(x(X1, X2))
and(mark(X1), X2) → mark(and(X1, X2))proper(U11(X1, X2, X3)) → U11(proper(X1), proper(X2), proper(X3))
proper(tt) → ok(tt)proper(U12(X1, X2)) → U12(proper(X1), proper(X2))
proper(isNat(X)) → isNat(proper(X))proper(U13(X)) → U13(proper(X))
proper(U21(X1, X2)) → U21(proper(X1), proper(X2))proper(U22(X)) → U22(proper(X))
proper(U31(X1, X2, X3)) → U31(proper(X1), proper(X2), proper(X3))proper(U32(X1, X2)) → U32(proper(X1), proper(X2))
proper(U33(X)) → U33(proper(X))proper(U41(X1, X2)) → U41(proper(X1), proper(X2))
proper(U51(X1, X2, X3)) → U51(proper(X1), proper(X2), proper(X3))proper(s(X)) → s(proper(X))
proper(plus(X1, X2)) → plus(proper(X1), proper(X2))proper(U61(X)) → U61(proper(X))
proper(0) → ok(0)proper(U71(X1, X2, X3)) → U71(proper(X1), proper(X2), proper(X3))
proper(x(X1, X2)) → x(proper(X1), proper(X2))proper(and(X1, X2)) → and(proper(X1), proper(X2))
proper(isNatKind(X)) → isNatKind(proper(X))U11(ok(X1), ok(X2), ok(X3)) → ok(U11(X1, X2, X3))
U12(ok(X1), ok(X2)) → ok(U12(X1, X2))isNat(ok(X)) → ok(isNat(X))
U13(ok(X)) → ok(U13(X))U21(ok(X1), ok(X2)) → ok(U21(X1, X2))
U22(ok(X)) → ok(U22(X))U31(ok(X1), ok(X2), ok(X3)) → ok(U31(X1, X2, X3))
U32(ok(X1), ok(X2)) → ok(U32(X1, X2))U33(ok(X)) → ok(U33(X))
U41(ok(X1), ok(X2)) → ok(U41(X1, X2))U51(ok(X1), ok(X2), ok(X3)) → ok(U51(X1, X2, X3))
s(ok(X)) → ok(s(X))plus(ok(X1), ok(X2)) → ok(plus(X1, X2))
U61(ok(X)) → ok(U61(X))U71(ok(X1), ok(X2), ok(X3)) → ok(U71(X1, X2, X3))
x(ok(X1), ok(X2)) → ok(x(X1, X2))and(ok(X1), ok(X2)) → ok(and(X1, X2))
isNatKind(ok(X)) → ok(isNatKind(X))top(mark(X)) → top(proper(X))
top(ok(X)) → top(active(X))

Original Signature

Termination of terms over the following signature is verified: isNat, U61, U41, ok, proper, U21, top, U22, plus, isNatKind, mark, and, U71, 0, s, U51, tt, U11, active, U12, U31, U13, U32, U33, x

Strategy


Projection

The following projection was used:

Thus, the following dependency pairs are removed:

U41#(ok(X1), ok(X2)) → U41#(X1, X2)U41#(mark(X1), X2) → U41#(X1, X2)