0 QTRS
↳1 Overlay + Local Confluence (⇔)
↳2 QTRS
↳3 DependencyPairsProof (⇔)
↳4 QDP
↳5 DependencyGraphProof (⇔)
↳6 AND
↳7 QDP
↳8 UsableRulesProof (⇔)
↳9 QDP
↳10 QReductionProof (⇔)
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 TRUE
↳14 QDP
↳15 UsableRulesProof (⇔)
↳16 QDP
↳17 QReductionProof (⇔)
↳18 QDP
↳19 QDPSizeChangeProof (⇔)
↳20 TRUE
↳21 QDP
↳22 UsableRulesProof (⇔)
↳23 QDP
↳24 QReductionProof (⇔)
↳25 QDP
↳26 QDPSizeChangeProof (⇔)
↳27 TRUE
↳28 QDP
↳29 UsableRulesProof (⇔)
↳30 QDP
↳31 QReductionProof (⇔)
↳32 QDP
↳33 QDPSizeChangeProof (⇔)
↳34 TRUE
↳35 QDP
↳36 UsableRulesProof (⇔)
↳37 QDP
↳38 QReductionProof (⇔)
↳39 QDP
↳40 Instantiation (⇔)
↳41 QDP
↳42 NonInfProof (⇔)
↳43 QDP
↳44 DependencyGraphProof (⇔)
↳45 TRUE
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
SORT(l) → ST(0, l)
ST(n, l) → COND1(member(n, l), n, l)
ST(n, l) → MEMBER(n, l)
COND1(true, n, l) → ST(s(n), l)
COND1(false, n, l) → COND2(gt(n, max(l)), n, l)
COND1(false, n, l) → GT(n, max(l))
COND1(false, n, l) → MAX(l)
COND2(false, n, l) → ST(s(n), l)
MEMBER(n, cons(m, l)) → OR(equal(n, m), member(n, l))
MEMBER(n, cons(m, l)) → EQUAL(n, m)
MEMBER(n, cons(m, l)) → MEMBER(n, l)
EQUAL(s(x), s(y)) → EQUAL(x, y)
GT(s(u), s(v)) → GT(u, v)
MAX(cons(u, l)) → IF(gt(u, max(l)), u, max(l))
MAX(cons(u, l)) → GT(u, max(l))
MAX(cons(u, l)) → MAX(l)
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
GT(s(u), s(v)) → GT(u, v)
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
GT(s(u), s(v)) → GT(u, v)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
GT(s(u), s(v)) → GT(u, v)
From the DPs we obtained the following set of size-change graphs:
MAX(cons(u, l)) → MAX(l)
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
MAX(cons(u, l)) → MAX(l)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
MAX(cons(u, l)) → MAX(l)
From the DPs we obtained the following set of size-change graphs:
EQUAL(s(x), s(y)) → EQUAL(x, y)
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
EQUAL(s(x), s(y)) → EQUAL(x, y)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
EQUAL(s(x), s(y)) → EQUAL(x, y)
From the DPs we obtained the following set of size-change graphs:
MEMBER(n, cons(m, l)) → MEMBER(n, l)
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
MEMBER(n, cons(m, l)) → MEMBER(n, l)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
MEMBER(n, cons(m, l)) → MEMBER(n, l)
From the DPs we obtained the following set of size-change graphs:
COND1(true, n, l) → ST(s(n), l)
ST(n, l) → COND1(member(n, l), n, l)
COND1(false, n, l) → COND2(gt(n, max(l)), n, l)
COND2(false, n, l) → ST(s(n), l)
sort(l) → st(0, l)
st(n, l) → cond1(member(n, l), n, l)
cond1(true, n, l) → cons(n, st(s(n), l))
cond1(false, n, l) → cond2(gt(n, max(l)), n, l)
cond2(true, n, l) → nil
cond2(false, n, l) → st(s(n), l)
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
or(x, true) → true
or(x, false) → x
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
if(true, u, v) → u
if(false, u, v) → v
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
COND1(true, n, l) → ST(s(n), l)
ST(n, l) → COND1(member(n, l), n, l)
COND1(false, n, l) → COND2(gt(n, max(l)), n, l)
COND2(false, n, l) → ST(s(n), l)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
if(true, u, v) → u
if(false, u, v) → v
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
or(x, true) → true
or(x, false) → x
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
sort(x0)
st(x0, x1)
cond1(true, x0, x1)
cond1(false, x0, x1)
cond2(true, x0, x1)
cond2(false, x0, x1)
COND1(true, n, l) → ST(s(n), l)
ST(n, l) → COND1(member(n, l), n, l)
COND1(false, n, l) → COND2(gt(n, max(l)), n, l)
COND2(false, n, l) → ST(s(n), l)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
if(true, u, v) → u
if(false, u, v) → v
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
or(x, true) → true
or(x, false) → x
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
ST(s(z0), z1) → COND1(member(s(z0), z1), s(z0), z1)
COND1(true, n, l) → ST(s(n), l)
COND1(false, n, l) → COND2(gt(n, max(l)), n, l)
COND2(false, n, l) → ST(s(n), l)
ST(s(z0), z1) → COND1(member(s(z0), z1), s(z0), z1)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
if(true, u, v) → u
if(false, u, v) → v
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
or(x, true) → true
or(x, false) → x
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)
(1) (COND1(member(x2, x3), x2, x3)=COND1(true, x4, x5) ⇒ COND1(true, x4, x5)≥ST(s(x4), x5))
(2) (member(x2, x3)=true ⇒ COND1(true, x2, x3)≥ST(s(x2), x3))
(3) (or(equal(x45, x44), member(x45, x43))=true∧(member(x45, x43)=true ⇒ COND1(true, x45, x43)≥ST(s(x45), x43)) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(4) (equal(x45, x44)=x46∧member(x45, x43)=x47∧or(x46, x47)=true∧(member(x45, x43)=true ⇒ COND1(true, x45, x43)≥ST(s(x45), x43)) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(5) (true=true∧equal(x45, x44)=x48∧member(x45, x43)=true∧(member(x45, x43)=true ⇒ COND1(true, x45, x43)≥ST(s(x45), x43)) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(6) (x49=true∧equal(x45, x44)=x49∧member(x45, x43)=false∧(member(x45, x43)=true ⇒ COND1(true, x45, x43)≥ST(s(x45), x43)) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(7) (equal(x45, x44)=x48∧member(x45, x43)=true∧(member(x45, x43)=true ⇒ COND1(true, x45, x43)≥ST(s(x45), x43)) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(8) (equal(x45, x44)=true ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(9) (equal(x45, x44)=x48∧COND1(true, x45, x43)≥ST(s(x45), x43) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(10) (COND1(true, x45, x43)≥ST(s(x45), x43) ⇒ COND1(true, x45, cons(x44, x43))≥ST(s(x45), cons(x44, x43)))
(11) (true=true ⇒ COND1(true, 0, cons(0, x43))≥ST(s(0), cons(0, x43)))
(12) (equal(x53, x52)=true∧(∀x54:equal(x53, x52)=true ⇒ COND1(true, x53, cons(x52, x54))≥ST(s(x53), cons(x52, x54))) ⇒ COND1(true, s(x53), cons(s(x52), x43))≥ST(s(s(x53)), cons(s(x52), x43)))
(13) (COND1(true, 0, cons(0, x43))≥ST(s(0), cons(0, x43)))
(14) (COND1(true, x53, cons(x52, x43))≥ST(s(x53), cons(x52, x43)) ⇒ COND1(true, s(x53), cons(s(x52), x43))≥ST(s(s(x53)), cons(s(x52), x43)))
(15) (ST(s(x10), x11)=ST(x12, x13) ⇒ ST(x12, x13)≥COND1(member(x12, x13), x12, x13))
(16) (ST(s(x10), x11)≥COND1(member(s(x10), x11), s(x10), x11))
(17) (ST(s(x18), x19)=ST(x20, x21) ⇒ ST(x20, x21)≥COND1(member(x20, x21), x20, x21))
(18) (ST(s(x18), x19)≥COND1(member(s(x18), x19), s(x18), x19))
(19) (COND1(member(x24, x25), x24, x25)=COND1(false, x26, x27) ⇒ COND1(false, x26, x27)≥COND2(gt(x26, max(x27)), x26, x27))
(20) (member(x24, x25)=false ⇒ COND1(false, x24, x25)≥COND2(gt(x24, max(x25)), x24, x25))
(21) (false=false ⇒ COND1(false, x55, nil)≥COND2(gt(x55, max(nil)), x55, nil))
(22) (or(equal(x58, x57), member(x58, x56))=false∧(member(x58, x56)=false ⇒ COND1(false, x58, x56)≥COND2(gt(x58, max(x56)), x58, x56)) ⇒ COND1(false, x58, cons(x57, x56))≥COND2(gt(x58, max(cons(x57, x56))), x58, cons(x57, x56)))
(23) (COND1(false, x55, nil)≥COND2(gt(x55, max(nil)), x55, nil))
(24) (equal(x58, x57)=x59∧member(x58, x56)=x60∧or(x59, x60)=false∧(member(x58, x56)=false ⇒ COND1(false, x58, x56)≥COND2(gt(x58, max(x56)), x58, x56)) ⇒ COND1(false, x58, cons(x57, x56))≥COND2(gt(x58, max(cons(x57, x56))), x58, cons(x57, x56)))
(25) (x62=false∧equal(x58, x57)=x62∧member(x58, x56)=false∧(member(x58, x56)=false ⇒ COND1(false, x58, x56)≥COND2(gt(x58, max(x56)), x58, x56)) ⇒ COND1(false, x58, cons(x57, x56))≥COND2(gt(x58, max(cons(x57, x56))), x58, cons(x57, x56)))
(26) (x62=false∧equal(x58, x57)=x62∧COND1(false, x58, x56)≥COND2(gt(x58, max(x56)), x58, x56) ⇒ COND1(false, x58, cons(x57, x56))≥COND2(gt(x58, max(cons(x57, x56))), x58, cons(x57, x56)))
(27) (equal(x58, x57)=false∧COND1(false, x58, x56)≥COND2(gt(x58, max(x56)), x58, x56) ⇒ COND1(false, x58, cons(x57, x56))≥COND2(gt(x58, max(cons(x57, x56))), x58, cons(x57, x56)))
(28) (false=false∧COND1(false, s(x63), x56)≥COND2(gt(s(x63), max(x56)), s(x63), x56) ⇒ COND1(false, s(x63), cons(0, x56))≥COND2(gt(s(x63), max(cons(0, x56))), s(x63), cons(0, x56)))
(29) (false=false∧COND1(false, 0, x56)≥COND2(gt(0, max(x56)), 0, x56) ⇒ COND1(false, 0, cons(s(x64), x56))≥COND2(gt(0, max(cons(s(x64), x56))), 0, cons(s(x64), x56)))
(30) (equal(x66, x65)=false∧COND1(false, s(x66), x56)≥COND2(gt(s(x66), max(x56)), s(x66), x56)∧(∀x67:equal(x66, x65)=false∧COND1(false, x66, x67)≥COND2(gt(x66, max(x67)), x66, x67) ⇒ COND1(false, x66, cons(x65, x67))≥COND2(gt(x66, max(cons(x65, x67))), x66, cons(x65, x67))) ⇒ COND1(false, s(x66), cons(s(x65), x56))≥COND2(gt(s(x66), max(cons(s(x65), x56))), s(x66), cons(s(x65), x56)))
(31) (COND1(false, s(x63), x56)≥COND2(gt(s(x63), max(x56)), s(x63), x56) ⇒ COND1(false, s(x63), cons(0, x56))≥COND2(gt(s(x63), max(cons(0, x56))), s(x63), cons(0, x56)))
(32) (COND1(false, 0, x56)≥COND2(gt(0, max(x56)), 0, x56) ⇒ COND1(false, 0, cons(s(x64), x56))≥COND2(gt(0, max(cons(s(x64), x56))), 0, cons(s(x64), x56)))
(33) (COND1(false, s(x66), x56)≥COND2(gt(s(x66), max(x56)), s(x66), x56) ⇒ COND1(false, s(x66), cons(s(x65), x56))≥COND2(gt(s(x66), max(cons(s(x65), x56))), s(x66), cons(s(x65), x56)))
(34) (COND2(gt(x36, max(x37)), x36, x37)=COND2(false, x38, x39) ⇒ COND2(false, x38, x39)≥ST(s(x38), x39))
(35) (max(x37)=x68∧gt(x36, x68)=false ⇒ COND2(false, x36, x37)≥ST(s(x36), x37))
(36) (false=false∧max(x37)=x69 ⇒ COND2(false, 0, x37)≥ST(s(0), x37))
(37) (gt(x72, x71)=false∧max(x37)=s(x71)∧(∀x73:gt(x72, x71)=false∧max(x73)=x71 ⇒ COND2(false, x72, x73)≥ST(s(x72), x73)) ⇒ COND2(false, s(x72), x37)≥ST(s(s(x72)), x37))
(38) (COND2(false, 0, x37)≥ST(s(0), x37))
(39) (if(gt(x75, max(x74)), x75, max(x74))=s(x71)∧gt(x72, x71)=false∧(∀x73:gt(x72, x71)=false∧max(x73)=x71 ⇒ COND2(false, x72, x73)≥ST(s(x72), x73))∧(∀x76,x77,x78:max(x74)=s(x76)∧gt(x77, x76)=false∧(∀x78:gt(x77, x76)=false∧max(x78)=x76 ⇒ COND2(false, x77, x78)≥ST(s(x77), x78)) ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(x72), cons(x75, x74))≥ST(s(s(x72)), cons(x75, x74)))
(40) (gt(x75, x81)=x79∧max(x74)=x80∧if(x79, x75, x80)=s(x71)∧gt(x72, x71)=false∧(∀x73:gt(x72, x71)=false∧max(x73)=x71 ⇒ COND2(false, x72, x73)≥ST(s(x72), x73))∧(∀x76,x77,x78:max(x74)=s(x76)∧gt(x77, x76)=false∧(∀x78:gt(x77, x76)=false∧max(x78)=x76 ⇒ COND2(false, x77, x78)≥ST(s(x77), x78)) ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(x72), cons(x75, x74))≥ST(s(s(x72)), cons(x75, x74)))
(41) (x83=s(x71)∧gt(x83, x81)=true∧max(x74)=x82∧gt(x72, x71)=false∧(∀x73:gt(x72, x71)=false∧max(x73)=x71 ⇒ COND2(false, x72, x73)≥ST(s(x72), x73))∧(∀x76,x77,x78:max(x74)=s(x76)∧gt(x77, x76)=false∧(∀x78:gt(x77, x76)=false∧max(x78)=x76 ⇒ COND2(false, x77, x78)≥ST(s(x77), x78)) ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(x72), cons(x83, x74))≥ST(s(s(x72)), cons(x83, x74)))
(42) (x84=s(x71)∧gt(x85, x81)=false∧max(x74)=x84∧gt(x72, x71)=false∧(∀x73:gt(x72, x71)=false∧max(x73)=x71 ⇒ COND2(false, x72, x73)≥ST(s(x72), x73))∧(∀x76,x77,x78:max(x74)=s(x76)∧gt(x77, x76)=false∧(∀x78:gt(x77, x76)=false∧max(x78)=x76 ⇒ COND2(false, x77, x78)≥ST(s(x77), x78)) ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(x72), cons(x85, x74))≥ST(s(s(x72)), cons(x85, x74)))
(43) (gt(x72, x71)=false∧(∀x76,x77:max(x74)=s(x76)∧gt(x77, x76)=false ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(x72), cons(s(x71), x74))≥ST(s(s(x72)), cons(s(x71), x74)))
(44) (gt(x85, x81)=false∧max(x74)=s(x71)∧gt(x72, x71)=false∧(∀x73:gt(x72, x71)=false∧max(x73)=x71 ⇒ COND2(false, x72, x73)≥ST(s(x72), x73))∧(∀x76,x77,x78:max(x74)=s(x76)∧gt(x77, x76)=false∧(∀x78:gt(x77, x76)=false∧max(x78)=x76 ⇒ COND2(false, x77, x78)≥ST(s(x77), x78)) ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(x72), cons(x85, x74))≥ST(s(s(x72)), cons(x85, x74)))
(45) (false=false∧(∀x76,x77:max(x74)=s(x76)∧gt(x77, x76)=false ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74)) ⇒ COND2(false, s(0), cons(s(x87), x74))≥ST(s(s(0)), cons(s(x87), x74)))
(46) (gt(x90, x89)=false∧(∀x76,x77:max(x74)=s(x76)∧gt(x77, x76)=false ⇒ COND2(false, s(x77), x74)≥ST(s(s(x77)), x74))∧(∀x91,x92,x93:gt(x90, x89)=false∧(∀x92,x93:max(x91)=s(x92)∧gt(x93, x92)=false ⇒ COND2(false, s(x93), x91)≥ST(s(s(x93)), x91)) ⇒ COND2(false, s(x90), cons(s(x89), x91))≥ST(s(s(x90)), cons(s(x89), x91))) ⇒ COND2(false, s(s(x90)), cons(s(s(x89)), x74))≥ST(s(s(s(x90))), cons(s(s(x89)), x74)))
(47) (COND2(false, s(0), cons(s(x87), x74))≥ST(s(s(0)), cons(s(x87), x74)))
(48) (COND2(false, s(x90), cons(s(x89), x74))≥ST(s(s(x90)), cons(s(x89), x74)) ⇒ COND2(false, s(s(x90)), cons(s(s(x89)), x74))≥ST(s(s(s(x90))), cons(s(s(x89)), x74)))
(49) (gt(x85, x81)=false∧COND2(false, s(x72), x74)≥ST(s(s(x72)), x74) ⇒ COND2(false, s(x72), cons(x85, x74))≥ST(s(s(x72)), cons(x85, x74)))
(50) (false=false∧COND2(false, s(x72), x74)≥ST(s(s(x72)), x74) ⇒ COND2(false, s(x72), cons(0, x74))≥ST(s(s(x72)), cons(0, x74)))
(51) (gt(x97, x96)=false∧COND2(false, s(x72), x74)≥ST(s(s(x72)), x74)∧(∀x98,x99:gt(x97, x96)=false∧COND2(false, s(x98), x99)≥ST(s(s(x98)), x99) ⇒ COND2(false, s(x98), cons(x97, x99))≥ST(s(s(x98)), cons(x97, x99))) ⇒ COND2(false, s(x72), cons(s(x97), x74))≥ST(s(s(x72)), cons(s(x97), x74)))
(52) (COND2(false, s(x72), x74)≥ST(s(s(x72)), x74) ⇒ COND2(false, s(x72), cons(0, x74))≥ST(s(s(x72)), cons(0, x74)))
(53) (COND2(false, s(x72), cons(x97, x74))≥ST(s(s(x72)), cons(x97, x74)) ⇒ COND2(false, s(x72), cons(s(x97), x74))≥ST(s(s(x72)), cons(s(x97), x74)))
POL(0) = 0
POL(COND1(x1, x2, x3)) = -1 - x1 - x2 + x3
POL(COND2(x1, x2, x3)) = -1 - x1 - x2 + x3
POL(ST(x1, x2)) = -1 - x1 + x2
POL(c) = -2
POL(cons(x1, x2)) = x1 + x2
POL(equal(x1, x2)) = 0
POL(false) = 0
POL(gt(x1, x2)) = 0
POL(if(x1, x2, x3)) = 1 + x2 + x3
POL(max(x1)) = 0
POL(member(x1, x2)) = 0
POL(nil) = 0
POL(or(x1, x2)) = 0
POL(s(x1)) = 1 + x1
POL(true) = 0
The following pairs are in Pbound:
COND1(true, n, l) → ST(s(n), l)
COND2(false, n, l) → ST(s(n), l)
The following rules are usable:
COND1(true, n, l) → ST(s(n), l)
COND2(false, n, l) → ST(s(n), l)
true → or(x, true)
x → or(x, false)
false → gt(0, v)
true → gt(s(u), 0)
gt(u, v) → gt(s(u), s(v))
false → member(n, nil)
or(equal(n, m), member(n, l)) → member(n, cons(m, l))
ST(n, l) → COND1(member(n, l), n, l)
COND1(false, n, l) → COND2(gt(n, max(l)), n, l)
max(nil) → 0
max(cons(u, l)) → if(gt(u, max(l)), u, max(l))
gt(0, v) → false
gt(s(u), 0) → true
gt(s(u), s(v)) → gt(u, v)
if(true, u, v) → u
if(false, u, v) → v
member(n, nil) → false
member(n, cons(m, l)) → or(equal(n, m), member(n, l))
equal(0, 0) → true
equal(s(x), 0) → false
equal(0, s(y)) → false
equal(s(x), s(y)) → equal(x, y)
or(x, true) → true
or(x, false) → x
member(x0, nil)
member(x0, cons(x1, x2))
or(x0, true)
or(x0, false)
equal(0, 0)
equal(s(x0), 0)
equal(0, s(x0))
equal(s(x0), s(x1))
gt(0, x0)
gt(s(x0), 0)
gt(s(x0), s(x1))
max(nil)
max(cons(x0, x1))
if(true, x0, x1)
if(false, x0, x1)