Termination w.r.t. Q of the following Term Rewriting System could be proven:
Q restricted rewrite system:
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
↳ QTRS
↳ DependencyPairsProof
Q restricted rewrite system:
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
Using Dependency Pairs [1,15] we result in the following initial DP problem:
Q DP problem:
The TRS P consists of the following rules:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(filter2, app(f, x)), f)
APP(app(filter, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(+, app(app(+, x), y)), z) → APP(+, y)
APP(app(*, app(app(*, x), y)), z) → APP(*, y)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, x), app(app(*, y), z))
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
APP(app(*, x), app(app(+, y), z)) → APP(+, app(app(*, x), y))
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(app(app(filter2, app(f, x)), f), x), xs)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(*, x), app(app(+, y), z)) → APP(app(+, app(app(*, x), y)), app(app(*, x), z))
APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
APP(app(app(app(filter2, true), f), x), xs) → APP(app(filter, f), xs)
APP(app(+, app(app(+, x), y)), z) → APP(app(+, y), z)
APP(app(+, app(app(+, x), y)), z) → APP(app(+, x), app(app(+, y), z))
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), z)
APP(app(*, app(app(+, y), z)), x) → APP(app(+, app(app(*, x), y)), app(app(*, x), z))
APP(app(app(app(filter2, false), f), x), xs) → APP(filter, f)
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(app(filter2, app(f, x)), f), x)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(app(app(filter2, true), f), x), xs) → APP(cons, x)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
APP(app(filter, f), app(app(cons, x), xs)) → APP(filter2, app(f, x))
APP(app(map, f), app(app(cons, x), xs)) → APP(cons, app(f, x))
APP(app(app(app(filter2, true), f), x), xs) → APP(filter, f)
APP(app(*, app(app(+, y), z)), x) → APP(*, x)
APP(app(*, app(app(+, y), z)), x) → APP(+, app(app(*, x), y))
APP(app(app(app(filter2, true), f), x), xs) → APP(app(cons, x), app(app(filter, f), xs))
APP(app(map, f), app(app(cons, x), xs)) → APP(app(cons, app(f, x)), app(app(map, f), xs))
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
Q DP problem:
The TRS P consists of the following rules:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(filter2, app(f, x)), f)
APP(app(filter, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(+, app(app(+, x), y)), z) → APP(+, y)
APP(app(*, app(app(*, x), y)), z) → APP(*, y)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, x), app(app(*, y), z))
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
APP(app(*, x), app(app(+, y), z)) → APP(+, app(app(*, x), y))
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(app(app(filter2, app(f, x)), f), x), xs)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(*, x), app(app(+, y), z)) → APP(app(+, app(app(*, x), y)), app(app(*, x), z))
APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
APP(app(app(app(filter2, true), f), x), xs) → APP(app(filter, f), xs)
APP(app(+, app(app(+, x), y)), z) → APP(app(+, y), z)
APP(app(+, app(app(+, x), y)), z) → APP(app(+, x), app(app(+, y), z))
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), z)
APP(app(*, app(app(+, y), z)), x) → APP(app(+, app(app(*, x), y)), app(app(*, x), z))
APP(app(app(app(filter2, false), f), x), xs) → APP(filter, f)
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(app(filter2, app(f, x)), f), x)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(app(app(filter2, true), f), x), xs) → APP(cons, x)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
APP(app(filter, f), app(app(cons, x), xs)) → APP(filter2, app(f, x))
APP(app(map, f), app(app(cons, x), xs)) → APP(cons, app(f, x))
APP(app(app(app(filter2, true), f), x), xs) → APP(filter, f)
APP(app(*, app(app(+, y), z)), x) → APP(*, x)
APP(app(*, app(app(+, y), z)), x) → APP(+, app(app(*, x), y))
APP(app(app(app(filter2, true), f), x), xs) → APP(app(cons, x), app(app(filter, f), xs))
APP(app(map, f), app(app(cons, x), xs)) → APP(app(cons, app(f, x)), app(app(map, f), xs))
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
The approximation of the Dependency Graph [15,17,22] contains 3 SCCs with 17 less nodes.
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
APP(app(+, app(app(+, x), y)), z) → APP(app(+, y), z)
APP(app(+, app(app(+, x), y)), z) → APP(app(+, x), app(app(+, y), z))
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We can use the usable rules and reduction pair processor [15] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its argument. Then, we can delete all non-usable rules [17] from R.
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
APP(app(+, app(app(+, x), y)), z) → APP(app(+, y), z)
APP(app(+, app(app(+, x), y)), z) → APP(app(+, x), app(app(+, y), z))
The TRS R consists of the following rules:
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
First, we A-transformed [17] the QDP-Problem.
Then we obtain the following A-transformed DP problem.
The pairs P are:
+1(+(x, y), z) → +1(y, z)
+1(+(x, y), z) → +1(x, +(y, z))
and the Q and R are:
Q restricted rewrite system:
The TRS R consists of the following rules:
+(+(x, y), z) → +(x, +(y, z))
Q is empty.
By using the usable rules with reduction pair processor [15] with a polynomial ordering [25], all dependency pairs and the corresponding usable rules [17] can be oriented non-strictly. All non-usable rules are removed, and those dependency pairs and usable rules that have been oriented strictly or contain non-usable symbols in their left-hand side are removed as well.
No dependency pairs are removed.
No rules are removed from R.
Used ordering: POLO with Polynomial interpretation [25]:
POL(+(x1, x2)) = x1 + x2
POL(+1(x1, x2)) = 2·x1 + 2·x2
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ UsableRulesReductionPairsProof
↳ QDP
↳ QDPSizeChangeProof
↳ QDP
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
+1(+(x, y), z) → +1(x, +(y, z))
+1(+(x, y), z) → +1(y, z)
The TRS R consists of the following rules:
+(+(x, y), z) → +(x, +(y, z))
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- +1(+(x, y), z) → +1(y, z)
The graph contains the following edges 1 > 1, 2 >= 2
- +1(+(x, y), z) → +1(x, +(y, z))
The graph contains the following edges 1 > 1
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPApplicativeOrderProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, x), app(app(*, y), z))
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), z)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We use the reduction pair processor [15].Here, we combined the reduction pair processor with the A-transformation [17] which results in the following intermediate Q-DP Problem.
The a-transformed P is
*1(x, +(y, z)) → *1(x, z)
*1(*(x, y), z) → *1(y, z)
*1(*(x, y), z) → *1(x, *(y, z))
*1(x, +(y, z)) → *1(x, y)
*1(+(y, z), x) → *1(x, z)
*1(+(y, z), x) → *1(x, y)
The a-transformed usable rules are
+(+(x, y), z) → +(x, +(y, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))
*(+(y, z), x) → +(*(x, y), *(x, z))
*(*(x, y), z) → *(x, *(y, z))
The following pairs can be oriented strictly and are deleted.
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), z)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
The remaining pairs can at least be oriented weakly.
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, x), app(app(*, y), z))
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
Used ordering: Polynomial interpretation [25]:
POL(*(x1, x2)) = x1 + x1·x2 + x2
POL(*1(x1, x2)) = x1 + x1·x2
POL(+(x1, x2)) = 1 + x1 + x2
The following usable rules [17] were oriented:
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPApplicativeOrderProof
↳ QDP
↳ QDPOrderProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, x), app(app(*, y), z))
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We use the reduction pair processor [15]. Here, we combined the reduction pair processor with the A-transformation [17] which results in the following intermediate Q-DP Problem.
The a-transformed P is
*1(x, +(y, z)) → *1(x, z)
*1(*(x, y), z) → *1(y, z)
*1(x, +(y, z)) → *1(x, y)
*1(*(x, y), z) → *1(x, *(y, z))
The a-transformed usable rules are
*(x, +(y, z)) → +(*(x, y), *(x, z))
*(+(y, z), x) → +(*(x, y), *(x, z))
*(*(x, y), z) → *(x, *(y, z))
+(+(x, y), z) → +(x, +(y, z))
The following pairs can be oriented strictly and are deleted.
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
APP(app(*, app(app(*, x), y)), z) → APP(app(*, x), app(app(*, y), z))
The remaining pairs can at least be oriented weakly.
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
Used ordering: Matrix interpretation [3]:
Non-tuple symbols:
M( *(x1, x2) ) = | | + | | · | x1 | + | | · | x2 |
M( +(x1, x2) ) = | | + | | · | x1 | + | | · | x2 |
Tuple symbols:
M( *1(x1, x2) ) = | 0 | + | | · | x1 | + | | · | x2 |
Matrix type:
We used a basic matrix type which is not further parametrizeable.
The following usable rules [17] were oriented:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPApplicativeOrderProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ UsableRulesProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We can use the usable rules and reduction pair processor [15] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its argument. Then, we can delete all non-usable rules [17] from R.
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPApplicativeOrderProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ ATransformationProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We have applied the A-Transformation [17] to get from an applicative problem to a standard problem.
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDPApplicativeOrderProof
↳ QDP
↳ QDPOrderProof
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ ATransformationProof
↳ QDP
↳ QDPSizeChangeProof
↳ QDP
Q DP problem:
The TRS P consists of the following rules:
*(x, +(y, z)) → *(x, z)
*(x, +(y, z)) → *(x, y)
R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- *(x, +(y, z)) → *(x, z)
The graph contains the following edges 1 >= 1, 2 > 2
- *(x, +(y, z)) → *(x, y)
The graph contains the following edges 1 >= 1, 2 > 2
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDP
↳ UsableRulesProof
Q DP problem:
The TRS P consists of the following rules:
APP(app(filter, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
APP(app(app(app(filter2, true), f), x), xs) → APP(app(filter, f), xs)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
The TRS R consists of the following rules:
app(app(*, x), app(app(+, y), z)) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
app(app(map, f), nil) → nil
app(app(map, f), app(app(cons, x), xs)) → app(app(cons, app(f, x)), app(app(map, f), xs))
app(app(filter, f), nil) → nil
app(app(filter, f), app(app(cons, x), xs)) → app(app(app(app(filter2, app(f, x)), f), x), xs)
app(app(app(app(filter2, true), f), x), xs) → app(app(cons, x), app(app(filter, f), xs))
app(app(app(app(filter2, false), f), x), xs) → app(app(filter, f), xs)
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
We can use the usable rules and reduction pair processor [15] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its argument. Then, we can delete all non-usable rules [17] from R.
↳ QTRS
↳ DependencyPairsProof
↳ QDP
↳ DependencyGraphProof
↳ AND
↳ QDP
↳ QDP
↳ QDP
↳ UsableRulesProof
↳ QDP
↳ QDPSizeChangeProof
Q DP problem:
The TRS P consists of the following rules:
APP(app(filter, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(app(app(filter2, true), f), x), xs) → APP(app(filter, f), xs)
APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.
By using the subterm criterion [20] together with the size-change analysis [32] we have proven that there are no infinite chains for this DP problem. From the DPs we obtained the following set of size-change graphs:
- APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
The graph contains the following edges 1 >= 1, 2 > 2
- APP(app(filter, f), app(app(cons, x), xs)) → APP(f, x)
The graph contains the following edges 1 > 1, 2 > 2
- APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
The graph contains the following edges 1 > 1, 2 > 2
- APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
The graph contains the following edges 2 >= 2
- APP(app(app(app(filter2, true), f), x), xs) → APP(app(filter, f), xs)
The graph contains the following edges 2 >= 2