(0) Obligation:

Q restricted rewrite system:
The TRS R consists of the following rules:

app(app(., 1), x) → x
app(app(., x), 1) → x
app(app(., app(i, x)), x) → 1
app(app(., x), app(i, x)) → 1
app(app(., app(i, y)), app(app(., y), z)) → z
app(app(., y), app(app(., app(i, y)), z)) → z
app(app(., app(app(., x), y)), z) → app(app(., x), app(app(., y), z))
app(i, 1) → 1
app(i, app(i, x)) → x
app(i, app(app(., x), y)) → app(app(., app(i, y)), app(i, x))
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.

(1) DependencyPairsProof (EQUIVALENT transformation)

Using Dependency Pairs [AG00,LPAR04] we result in the following initial DP problem.

(2) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(., app(app(., x), y)), z) → APP(app(., x), app(app(., y), z))
APP(app(., app(app(., x), y)), z) → APP(app(., y), z)
APP(app(., app(app(., x), y)), z) → APP(., y)
APP(i, app(app(., x), y)) → APP(app(., app(i, y)), app(i, x))
APP(i, app(app(., x), y)) → APP(., app(i, y))
APP(i, app(app(., x), y)) → APP(i, y)
APP(i, app(app(., x), y)) → APP(i, x)
APP(app(map, f), app(app(cons, x), xs)) → APP(app(cons, app(f, x)), app(app(map, f), xs))
APP(app(map, f), app(app(cons, x), xs)) → APP(cons, app(f, x))
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)
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(app(app(filter2, app(f, x)), f), x), xs)
APP(app(filter, f), app(app(cons, x), xs)) → APP(app(app(filter2, app(f, x)), f), x)
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(filter2, app(f, x))
APP(app(filter, f), app(app(cons, x), xs)) → APP(f, x)
APP(app(app(app(filter2, true), f), x), xs) → APP(app(cons, x), app(app(filter, f), xs))
APP(app(app(app(filter2, true), f), x), xs) → APP(cons, x)
APP(app(app(app(filter2, true), f), x), xs) → APP(app(filter, f), xs)
APP(app(app(app(filter2, true), f), x), xs) → APP(filter, f)
APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
APP(app(app(app(filter2, false), f), x), xs) → APP(filter, f)

The TRS R consists of the following rules:

app(app(., 1), x) → x
app(app(., x), 1) → x
app(app(., app(i, x)), x) → 1
app(app(., x), app(i, x)) → 1
app(app(., app(i, y)), app(app(., y), z)) → z
app(app(., y), app(app(., app(i, y)), z)) → z
app(app(., app(app(., x), y)), z) → app(app(., x), app(app(., y), z))
app(i, 1) → 1
app(i, app(i, x)) → x
app(i, app(app(., x), y)) → app(app(., app(i, y)), app(i, x))
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.

(3) DependencyGraphProof (EQUIVALENT transformation)

The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 3 SCCs with 12 less nodes.

(4) Complex Obligation (AND)

(5) Obligation:

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(., 1), x) → x
app(app(., x), 1) → x
app(app(., app(i, x)), x) → 1
app(app(., x), app(i, x)) → 1
app(app(., app(i, y)), app(app(., y), z)) → z
app(app(., y), app(app(., app(i, y)), z)) → z
app(app(., app(app(., x), y)), z) → app(app(., x), app(app(., y), z))
app(i, 1) → 1
app(i, app(i, x)) → x
app(i, app(app(., x), y)) → app(app(., app(i, y)), app(i, x))
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.

(6) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(7) Obligation:

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(., 1), x) → x
app(app(., x), 1) → x
app(app(., app(i, x)), x) → 1
app(app(., x), app(i, x)) → 1
app(app(., app(i, y)), app(app(., y), z)) → z
app(app(., y), app(app(., app(i, y)), z)) → z
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.

(8) UsableRulesReductionPairsProof (EQUIVALENT transformation)

First, we A-transformed [FROCOS05] 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:

.(1, x) → x
.(x, 1) → x
.(i(x), x) → 1
.(x, i(x)) → 1
.(i(y), .(y, z)) → z
.(y, .(i(y), z)) → z
.(.(x, y), z) → .(x, .(y, z))

Q is empty.

By using the usable rules with reduction pair processor [LPAR04] with a polynomial ordering [POLO], all dependency pairs and the corresponding usable rules [FROCOS05] 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.

The following rules are removed from R:

.(i(x), x) → 1
.(x, i(x)) → 1
.(i(y), .(y, z)) → z
.(y, .(i(y), z)) → z
Used ordering: POLO with Polynomial interpretation [POLO]:

POL(.(x1, x2)) = x1 + x2   
POL(.1(x1, x2)) = 2·x1 + 2·x2   
POL(1) = 0   
POL(i(x1)) = x1   

(9) Obligation:

Q DP problem:
The TRS P consists of the following rules:

.1(.(x, y), z) → .1(y, z)
.1(.(x, y), z) → .1(x, .(y, z))

The TRS R consists of the following rules:

.(1, x) → x
.(x, 1) → x
.(.(x, y), z) → .(x, .(y, z))

Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(10) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] 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

(11) TRUE

(12) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(i, app(app(., x), y)) → APP(i, x)
APP(i, app(app(., x), y)) → APP(i, y)

The TRS R consists of the following rules:

app(app(., 1), x) → x
app(app(., x), 1) → x
app(app(., app(i, x)), x) → 1
app(app(., x), app(i, x)) → 1
app(app(., app(i, y)), app(app(., y), z)) → z
app(app(., y), app(app(., app(i, y)), z)) → z
app(app(., app(app(., x), y)), z) → app(app(., x), app(app(., y), z))
app(i, 1) → 1
app(i, app(i, x)) → x
app(i, app(app(., x), y)) → app(app(., app(i, y)), app(i, x))
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.

(13) UsableRulesProof (EQUIVALENT transformation)

We can use the usable rules and reduction pair processor [LPAR04] with the Ce-compatible extension of the polynomial order that maps every function symbol to the sum of its arguments. Then, we can delete all non-usable rules [FROCOS05] from R.

(14) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(i, app(app(., x), y)) → APP(i, x)
APP(i, app(app(., x), y)) → APP(i, y)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(15) ATransformationProof (EQUIVALENT transformation)

We have applied the A-Transformation [FROCOS05] to get from an applicative problem to a standard problem.

(16) Obligation:

Q DP problem:
The TRS P consists of the following rules:

i(.(x, y)) → i(x)
i(.(x, y)) → i(y)

R is empty.
Q is empty.
We have to consider all minimal (P,Q,R)-chains.

(17) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] 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:

  • i(.(x, y)) → i(x)
    The graph contains the following edges 1 > 1

  • i(.(x, y)) → i(y)
    The graph contains the following edges 1 > 1

(18) TRUE

(19) Obligation:

Q DP problem:
The TRS P consists of the following rules:

APP(app(map, f), app(app(cons, x), xs)) → APP(app(map, f), xs)
APP(app(map, f), app(app(cons, x), xs)) → APP(f, x)
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(filter, f), xs)
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)

The TRS R consists of the following rules:

app(app(., 1), x) → x
app(app(., x), 1) → x
app(app(., app(i, x)), x) → 1
app(app(., x), app(i, x)) → 1
app(app(., app(i, y)), app(app(., y), z)) → z
app(app(., y), app(app(., app(i, y)), z)) → z
app(app(., app(app(., x), y)), z) → app(app(., x), app(app(., y), z))
app(i, 1) → 1
app(i, app(i, x)) → x
app(i, app(app(., x), y)) → app(app(., app(i, y)), app(i, x))
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.

(20) QDPSizeChangeProof (EQUIVALENT transformation)

By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] 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(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(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(app(app(app(filter2, app(f, x)), f), x), 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

  • APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
    The graph contains the following edges 2 >= 2

(21) TRUE