TIMEOUT
The TRS could not be proven terminating. The proof attempt took 60000 ms.
The following DP Processors were used
Problem 1 was processed with processor DependencyGraph (38ms).
| Problem 2 was processed with processor BackwardInstantiation (2ms).
| | Problem 5 was processed with processor BackwardInstantiation (2ms).
| | | Problem 6 was processed with processor Propagation (3ms).
| | | | Problem 7 remains open; application of the following processors failed [ForwardNarrowing (1ms), BackwardInstantiation (1ms), ForwardInstantiation (1ms), Propagation (0ms)].
| Problem 3 was processed with processor SubtermCriterion (1ms).
| Problem 4 was processed with processor SubtermCriterion (1ms).
The following open problems remain:
Open Dependency Pair Problem 2
Dependency Pairs
if_quot#(x, y, false, true) | → | quot#(x, y) | | quot#(x, y) | → | if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: minus, 0, le, s, if_quot, divByZeroError, false, true, quot
Problem 1: DependencyGraph
Dependency Pair Problem
Dependency Pairs
quot#(x, y) | → | le#(y, 0) | | if_quot#(x, y, false, true) | → | quot#(x, y) |
le#(s(x), s(y)) | → | le#(x, y) | | quot#(x, y) | → | minus#(x, y) |
minus#(s(x), s(y)) | → | minus#(x, y) | | quot#(x, y) | → | if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
quot#(x, y) | → | le#(y, x) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: 0, minus, s, le, if_quot, divByZeroError, true, false, quot
Strategy
The following SCCs where found
le#(s(x), s(y)) → le#(x, y) |
minus#(s(x), s(y)) → minus#(x, y) |
if_quot#(x, y, false, true) → quot#(x, y) | quot#(x, y) → if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
Problem 2: BackwardInstantiation
Dependency Pair Problem
Dependency Pairs
if_quot#(x, y, false, true) | → | quot#(x, y) | | quot#(x, y) | → | if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: 0, minus, s, le, if_quot, divByZeroError, true, false, quot
Strategy
Instantiation
For all potential predecessors l → r of the rule quot
#(
x,
y) → if_quot
#(minus(
x,
y),
y, le(
y, 0), le(
y,
x)) on dependency pair chains it holds that:
- quot#(x, y) matches r,
- all variables of quot#(x, y) are embedded in constructor contexts, i.e., each subterm of quot#(x, y), containing a variable is rooted by a constructor symbol.
Thus, quot
#(
x,
y) → if_quot
#(minus(
x,
y),
y, le(
y, 0), le(
y,
x)) is replaced by instances determined through the above matching. These instances are:
quot#(_x, _y) → if_quot#(minus(_x, _y), _y, le(_y, 0), le(_y, _x)) |
Problem 5: BackwardInstantiation
Dependency Pair Problem
Dependency Pairs
if_quot#(x, y, false, true) | → | quot#(x, y) | | quot#(_x, _y) | → | if_quot#(minus(_x, _y), _y, le(_y, 0), le(_y, _x)) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: minus, 0, le, s, if_quot, divByZeroError, false, true, quot
Strategy
Instantiation
For all potential predecessors l → r of the rule quot
#(
_x,
_y) → if_quot
#(minus(
_x,
_y),
_y, le(
_y, 0), le(
_y,
_x)) on dependency pair chains it holds that:
- quot#(_x, _y) matches r,
- all variables of quot#(_x, _y) are embedded in constructor contexts, i.e., each subterm of quot#(_x, _y), containing a variable is rooted by a constructor symbol.
Thus, quot
#(
_x,
_y) → if_quot
#(minus(
_x,
_y),
_y, le(
_y, 0), le(
_y,
_x)) is replaced by instances determined through the above matching. These instances are:
quot#(x, y) → if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
Problem 6: Propagation
Dependency Pair Problem
Dependency Pairs
if_quot#(x, y, false, true) | → | quot#(x, y) | | quot#(x, y) | → | if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: 0, minus, s, le, if_quot, divByZeroError, true, false, quot
Strategy
The dependency pairs if_quot
#(
x,
y, false, true) → quot
#(
x,
y) and quot
#(
x,
y) → if_quot
#(minus(
x,
y),
y, le(
y, 0), le(
y,
x)) are consolidated into the rule if_quot
#(
x,
y, false, true) → if_quot
#(minus(
x,
y),
y, le(
y, 0), le(
y,
x)) .
This is possible as
- all subterms of quot#(x, y) containing variables are rooted by a constructor symbol,
- there is no variable that is replacing in quot#(x, y), but non-replacing in both if_quot#(x, y, false, true) and if_quot#(minus(x, y), y, le(y, 0), le(y, x))
The dependency pairs if_quot
#(
x,
y, false, true) → quot
#(
x,
y) and quot
#(
x,
y) → if_quot
#(minus(
x,
y),
y, le(
y, 0), le(
y,
x)) are consolidated into the rule if_quot
#(
x,
y, false, true) → if_quot
#(minus(
x,
y),
y, le(
y, 0), le(
y,
x)) .
This is possible as
- all subterms of quot#(x, y) containing variables are rooted by a constructor symbol,
- there is no variable that is replacing in quot#(x, y), but non-replacing in both if_quot#(x, y, false, true) and if_quot#(minus(x, y), y, le(y, 0), le(y, x))
Summary
Removed Dependency Pairs | Added Dependency Pairs |
---|
if_quot#(x, y, false, true) → quot#(x, y) | if_quot#(x, y, false, true) → if_quot#(minus(x, y), y, le(y, 0), le(y, x)) |
quot#(x, y) → if_quot#(minus(x, y), y, le(y, 0), le(y, x)) | |
Problem 3: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
minus#(s(x), s(y)) | → | minus#(x, y) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: 0, minus, s, le, if_quot, divByZeroError, true, false, quot
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
minus#(s(x), s(y)) | → | minus#(x, y) |
Problem 4: SubtermCriterion
Dependency Pair Problem
Dependency Pairs
le#(s(x), s(y)) | → | le#(x, y) |
Rewrite Rules
minus(x, x) | → | 0 | | minus(0, x) | → | 0 |
minus(x, 0) | → | x | | minus(s(x), s(y)) | → | minus(x, y) |
le(0, y) | → | true | | le(s(x), 0) | → | false |
le(s(x), s(y)) | → | le(x, y) | | quot(x, y) | → | if_quot(minus(x, y), y, le(y, 0), le(y, x)) |
if_quot(x, y, true, z) | → | divByZeroError | | if_quot(x, y, false, true) | → | s(quot(x, y)) |
if_quot(x, y, false, false) | → | 0 |
Original Signature
Termination of terms over the following signature is verified: 0, minus, s, le, if_quot, divByZeroError, true, false, quot
Strategy
Projection
The following projection was used:
Thus, the following dependency pairs are removed:
le#(s(x), s(y)) | → | le#(x, y) |