YES
0 QTRS
↳1 DependencyPairsProof (⇔, 5 ms)
↳2 QDP
↳3 DependencyGraphProof (⇔, 0 ms)
↳4 AND
↳5 QDP
↳6 UsableRulesProof (⇔, 0 ms)
↳7 QDP
↳8 UsableRulesReductionPairsProof (⇔, 0 ms)
↳9 QDP
↳10 PisEmptyProof (⇔, 0 ms)
↳11 YES
↳12 QDP
↳13 QDPApplicativeOrderProof (⇔, 0 ms)
↳14 QDP
↳15 QDPOrderProof (⇔, 11 ms)
↳16 QDP
↳17 UsableRulesProof (⇔, 0 ms)
↳18 QDP
↳19 ATransformationProof (⇔, 0 ms)
↳20 QDP
↳21 QDPSizeChangeProof (⇔, 0 ms)
↳22 YES
↳23 QDP
↳24 UsableRulesProof (⇔, 0 ms)
↳25 QDP
↳26 QDPSizeChangeProof (⇔, 0 ms)
↳27 YES
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)
APP(app(*, x), app(app(+, y), z)) → APP(app(+, app(app(*, x), y)), app(app(*, x), z))
APP(app(*, x), app(app(+, y), z)) → APP(+, app(app(*, x), y))
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
APP(app(*, x), app(app(+, y), z)) → 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(+, y), z)), x) → APP(+, app(app(*, x), y))
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
APP(app(*, app(app(+, y), z)), x) → APP(*, x)
APP(app(*, app(app(+, y), z)), x) → 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(*, y), z)
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(+, app(app(+, x), y)), z) → APP(app(+, y), z)
APP(app(+, app(app(+, x), y)), z) → APP(+, y)
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)
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)
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(+, 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)
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(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
+1(+(x, y), z) → +1(y, z)
+1(+(x, y), z) → +1(x, +(y, z))
+(+(x, y), z) → +(x, +(y, z))
The following rules are removed from R:
+1(+(x, y), z) → +1(y, z)
+1(+(x, y), z) → +1(x, +(y, z))
Used ordering: POLO with Polynomial interpretation [POLO]:
app(app(+, app(app(+, x), y)), z) → app(app(+, x), app(app(+, y), z))
POL(+(x1, x2)) = 1 + x1 + x2
POL(+1(x1, x2)) = 2·x1 + x2
+(+(x, y), z) → +(x, +(y, z))
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
APP(app(*, app(app(+, y), z)), x) → 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(*, 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))
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)
*1(x, +(y, z)) → *1(x, z)
*1(x, +(y, z)) → *1(x, y)
*1(+(y, z), x) → *1(x, y)
*1(+(y, z), x) → *1(x, z)
*1(*(x, y), z) → *1(x, *(y, z))
*1(*(x, y), z) → *1(y, z)
*(*(x, y), z) → *(x, *(y, z))
*(+(y, z), x) → +(*(x, y), *(x, z))
*(x, +(y, z)) → +(*(x, y), *(x, z))
+(+(x, y), z) → +(x, +(y, z))
The following pairs can be oriented strictly and are deleted.
The remaining pairs can at least be oriented weakly.
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), y)
APP(app(*, app(app(+, y), z)), x) → APP(app(*, x), z)
Used ordering: Polynomial interpretation [POLO]:
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), 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))
APP(app(*, app(app(*, x), y)), z) → APP(app(*, y), z)
POL(*(x1, x2)) = x1 + x1·x2 + x2
POL(*1(x1, x2)) = x1 + x1·x2
POL(+(x1, x2)) = 1 + x1 + x2
app(app(*, app(app(*, x), y)), z) → app(app(*, x), app(app(*, y), z))
app(app(*, app(app(+, y), z)), x) → app(app(+, app(app(*, x), y)), app(app(*, x), z))
app(app(*, x), app(app(+, y), z)) → 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(*, x), app(app(+, y), z)) → APP(app(*, x), 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))
APP(app(*, app(app(*, x), y)), z) → 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))
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)
*1(x, +(y, z)) → *1(x, z)
*1(x, +(y, z)) → *1(x, y)
*1(*(x, y), z) → *1(x, *(y, z))
*1(*(x, y), z) → *1(y, z)
*(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.
The remaining pairs can at least be oriented weakly.
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)
trivial
+=1
*_2=1
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(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
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)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), z)
APP(app(*, x), app(app(+, y), z)) → APP(app(*, x), y)
*(x, +(y, z)) → *(x, z)
*(x, +(y, z)) → *(x, y)
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)
APP(app(map, f), app(app(cons, x), xs)) → 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(filter, f), xs)
APP(app(app(app(filter2, false), f), x), xs) → APP(app(filter, f), xs)
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)
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(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)
From the DPs we obtained the following set of size-change graphs: