/export/starexec/sandbox/solver/bin/starexec_run_FirstOrder /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES We consider the system theBenchmark. We are asked to determine termination of the following first-order TRS. 0 : [] --> o F : [] --> o T : [] --> o a : [] --> o and : [o * o] --> o andt : [o * o] --> o append : [o * o] --> o calls : [o * o * o] --> o case0 : [o * o * o] --> o case1 : [o * o * o * o] --> o case2 : [o * o * o] --> o case4 : [o * o * o] --> o case5 : [o * o * o * o] --> o case6 : [o * o * o * o] --> o case8 : [o * o * o * o] --> o case9 : [o * o * o * o] --> o cons : [o * o] --> o delete : [o * o] --> o element : [o * o] --> o empty : [] --> o eq : [o * o] --> o eqc : [o * o] --> o eqs : [o * o] --> o eqt : [o * o] --> o equal : [o * o] --> o excl : [] --> o excllock : [] --> o false : [] --> o gen!6220modtageq : [o * o] --> o gen!6220tag : [o] --> o if : [o * o * o] --> o imp : [o * o] --> o int : [o] --> o istops : [o * o] --> o lock : [] --> o locker : [] --> o locker2!6220add!6220pending : [o * o * o] --> o locker2!6220adduniq : [o * o] --> o locker2!6220check!6220available : [o * o] --> o locker2!6220check!6220availables : [o * o] --> o locker2!6220claim!6220lock : [o * o * o] --> o locker2!6220map!6220add!6220pending : [o * o * o] --> o locker2!6220map!6220claim!6220lock : [o * o * o] --> o locker2!6220map!6220promote!6220pending : [o * o] --> o locker2!6220obtainable : [o * o] --> o locker2!6220obtainables : [o * o] --> o locker2!6220promote!6220pending : [o * o] --> o locker2!6220release!6220lock : [o * o] --> o locker2!6220remove!6220pending : [o * o] --> o mcrlrecord : [] --> o member : [o * o] --> o nil : [] --> o nocalls : [] --> o not : [o] --> o ok : [] --> o or : [o * o] --> o pending : [] --> o pid : [o] --> o pops : [o] --> o push : [o * o * o] --> o push1 : [o * o * o * o * o * o] --> o pushs : [o * o] --> o record!6220extract : [o * o * o] --> o record!6220new : [o] --> o record!6220update : [o * o * o * o] --> o record!6220updates : [o * o * o] --> o release : [] --> o request : [] --> o resource : [] --> o s : [o] --> o stack : [o * o] --> o subtract : [o * o] --> o tag : [] --> o tops : [o] --> o true : [] --> o tuple : [o * o] --> o tuplenil : [o] --> o undefined : [] --> o or(T, T) => T or(F, T) => T or(T, F) => T or(F, F) => F and(T, X) => X and(X, T) => X and(F, X) => F and(X, F) => F imp(T, X) => X imp(F, X) => T not(T) => F not(F) => T if(T, X, Y) => X if(F, X, Y) => Y eq(T, T) => T eq(F, F) => T eq(T, F) => F eq(F, T) => F eqt(nil, undefined) => F eqt(nil, pid(X)) => F eqt(nil, int(X)) => F eqt(nil, cons(X, Y)) => F eqt(nil, tuple(X, Y)) => F eqt(nil, tuplenil(X)) => F eqt(a, nil) => F eqt(a, a) => T eqt(a, excl) => F eqt(a, false) => F eqt(a, lock) => F eqt(a, locker) => F eqt(a, mcrlrecord) => F eqt(a, ok) => F eqt(a, pending) => F eqt(a, release) => F eqt(a, request) => F eqt(a, resource) => F eqt(a, tag) => F eqt(a, true) => F eqt(a, undefined) => F eqt(a, pid(X)) => F eqt(a, int(X)) => F eqt(a, cons(X, Y)) => F eqt(a, tuple(X, Y)) => F eqt(a, tuplenil(X)) => F eqt(excl, nil) => F eqt(excl, a) => F eqt(excl, excl) => T eqt(excl, false) => F eqt(excl, lock) => F eqt(excl, locker) => F eqt(excl, mcrlrecord) => F eqt(excl, ok) => F eqt(excl, pending) => F eqt(excl, release) => F eqt(excl, request) => F eqt(excl, resource) => F eqt(excl, tag) => F eqt(excl, true) => F eqt(excl, undefined) => F eqt(excl, pid(X)) => F eqt(excl, eqt(false, int(X))) => F eqt(false, cons(X, Y)) => F eqt(false, tuple(X, Y)) => F eqt(false, tuplenil(X)) => F eqt(lock, nil) => F eqt(lock, a) => F eqt(lock, excl) => F eqt(lock, false) => F eqt(lock, lock) => T eqt(lock, locker) => F eqt(lock, mcrlrecord) => F eqt(lock, ok) => F eqt(lock, pending) => F eqt(lock, release) => F eqt(lock, request) => F eqt(lock, resource) => F eqt(lock, tag) => F eqt(lock, true) => F eqt(lock, undefined) => F eqt(lock, pid(X)) => F eqt(lock, int(X)) => F eqt(lock, cons(X, Y)) => F eqt(lock, tuple(X, Y)) => F eqt(lock, tuplenil(X)) => F eqt(locker, nil) => F eqt(locker, a) => F eqt(locker, excl) => F eqt(locker, false) => F eqt(locker, lock) => F eqt(locker, locker) => T eqt(locker, mcrlrecord) => F eqt(locker, ok) => F eqt(locker, pending) => F eqt(locker, release) => F eqt(locker, request) => F eqt(locker, resource) => F eqt(locker, tag) => F eqt(locker, true) => F eqt(locker, undefined) => F eqt(locker, pid(X)) => F eqt(locker, int(X)) => F eqt(locker, cons(X, Y)) => F eqt(locker, tuple(X, Y)) => F eqt(locker, tuplenil(X)) => F eqt(mcrlrecord, nil) => F eqt(mcrlrecord, a) => F eqt(mcrlrecord, excl) => F eqt(mcrlrecord, false) => F eqt(mcrlrecord, lock) => F eqt(mcrlrecord, locker) => F eqt(mcrlrecord, mcrlrecord) => T eqt(mcrlrecord, ok) => F eqt(mcrlrecord, pending) => F eqt(mcrlrecord, release) => F eqt(mcrlrecord, request) => F eqt(mcrlrecord, resource) => F eqt(ok, resource) => F eqt(ok, tag) => F eqt(ok, true) => F eqt(ok, undefined) => F eqt(ok, pid(X)) => F eqt(ok, int(X)) => F eqt(ok, cons(X, Y)) => F eqt(ok, tuple(X, Y)) => F eqt(ok, tuplenil(X)) => F eqt(pending, nil) => F eqt(pending, a) => F eqt(pending, excl) => F eqt(pending, false) => F eqt(pending, lock) => F eqt(pending, locker) => F eqt(pending, mcrlrecord) => F eqt(pending, ok) => F eqt(pending, pending) => T eqt(pending, release) => F eqt(pending, request) => F eqt(pending, resource) => F eqt(pending, tag) => F eqt(pending, true) => F eqt(pending, undefined) => F eqt(pending, pid(X)) => F eqt(pending, int(X)) => F eqt(pending, cons(X, Y)) => F eqt(pending, tuple(X, Y)) => F eqt(pending, tuplenil(X)) => F eqt(release, nil) => F eqt(release, a) => F eqt(release, excl) => F eqt(release, false) => F eqt(release, lock) => F eqt(release, locker) => F eqt(release, mcrlrecord) => F eqt(release, ok) => F eqt(request, mcrlrecord) => F eqt(request, ok) => F eqt(request, pending) => F eqt(request, release) => F eqt(request, request) => T eqt(request, resource) => F eqt(request, tag) => F eqt(request, true) => F eqt(request, undefined) => F eqt(request, pid(X)) => F eqt(request, int(X)) => F eqt(request, cons(X, Y)) => F eqt(request, tuple(X, Y)) => F eqt(request, tuplenil(X)) => F eqt(resource, nil) => F eqt(resource, a) => F eqt(resource, excl) => F eqt(resource, false) => F eqt(resource, lock) => F eqt(resource, locker) => F eqt(resource, mcrlrecord) => F eqt(resource, ok) => F eqt(resource, pending) => F eqt(resource, release) => F eqt(resource, request) => F eqt(resource, resource) => T eqt(resource, tag) => F eqt(resource, true) => F eqt(resource, undefined) => F eqt(resource, pid(X)) => F eqt(resource, int(X)) => F eqt(resource, cons(X, Y)) => F eqt(resource, tuple(X, Y)) => F eqt(resource, tuplenil(X)) => F eqt(tag, nil) => F eqt(tag, a) => F eqt(tag, excl) => F eqt(tag, false) => F eqt(tag, lock) => F eqt(tag, locker) => F eqt(tag, mcrlrecord) => F eqt(tag, ok) => F eqt(tag, pending) => F eqt(tag, release) => F eqt(tag, request) => F eqt(tag, resource) => F eqt(tag, tag) => T eqt(tag, true) => F eqt(tag, undefined) => F eqt(tag, pid(X)) => F eqt(tag, int(X)) => F eqt(tag, cons(X, Y)) => F eqt(tag, tuple(X, Y)) => F eqt(tag, tuplenil(X)) => F eqt(true, nil) => F eqt(true, a) => F eqt(true, excl) => F eqt(true, false) => F eqt(true, lock) => F eqt(true, locker) => F eqt(true, mcrlrecord) => F eqt(true, ok) => F eqt(true, pending) => F eqt(true, release) => F eqt(true, request) => F eqt(true, resource) => F eqt(true, tag) => F eqt(true, true) => T eqt(true, undefined) => F eqt(true, pid(X)) => F eqt(true, int(X)) => F eqt(true, cons(X, Y)) => F eqt(true, tuple(X, Y)) => F eqt(true, tuplenil(X)) => F eqt(undefined, nil) => F eqt(undefined, a) => F eqt(undefined, tuplenil(X)) => F eqt(pid(X), nil) => F eqt(pid(X), a) => F eqt(pid(X), excl) => F eqt(pid(X), false) => F eqt(pid(X), lock) => F eqt(pid(X), locker) => F eqt(pid(X), mcrlrecord) => F eqt(pid(X), ok) => F eqt(pid(X), pending) => F eqt(pid(X), release) => F eqt(pid(X), request) => F eqt(pid(X), resource) => F eqt(pid(X), tag) => F eqt(pid(X), true) => F eqt(pid(X), undefined) => F eqt(pid(X), pid(Y)) => eqt(X, Y) eqt(pid(X), int(Y)) => F eqt(pid(X), cons(Y, Z)) => F eqt(pid(X), tuple(Y, Z)) => F eqt(pid(X), tuplenil(Y)) => F eqt(int(X), nil) => F eqt(int(X), a) => F eqt(int(X), excl) => F eqt(int(X), false) => F eqt(int(X), lock) => F eqt(int(X), locker) => F eqt(int(X), mcrlrecord) => F eqt(int(X), ok) => F eqt(int(X), pending) => F eqt(int(X), release) => F eqt(int(X), request) => F eqt(int(X), resource) => F eqt(int(X), tag) => F eqt(int(X), true) => F eqt(int(X), undefined) => F eqt(cons(X, Y), resource) => F eqt(cons(X, Y), tag) => F eqt(cons(X, Y), true) => F eqt(cons(X, Y), undefined) => F eqt(cons(X, Y), pid(Z)) => F eqt(cons(X, Y), int(Z)) => F eqt(cons(X, Y), cons(Z, U)) => and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuple(Z, U)) => F eqt(cons(X, Y), tuplenil(Z)) => F eqt(tuple(X, Y), nil) => F eqt(tuple(X, Y), a) => F eqt(tuple(X, Y), excl) => F eqt(tuple(X, Y), false) => F eqt(tuple(X, Y), lock) => F eqt(tuple(X, Y), locker) => F eqt(tuple(X, Y), mcrlrecord) => F eqt(tuple(X, Y), ok) => F eqt(tuple(X, Y), pending) => F eqt(tuple(X, Y), release) => F eqt(tuple(X, Y), request) => F eqt(tuple(X, Y), resource) => F eqt(tuple(X, Y), tag) => F eqt(tuple(X, Y), true) => F eqt(tuple(X, Y), undefined) => F eqt(tuple(X, Y), pid(Z)) => F eqt(tuple(X, Y), int(Z)) => F eqt(tuple(X, Y), cons(Z, U)) => F eqt(tuple(X, Y), tuple(Z, U)) => and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) => F eqt(tuplenil(X), nil) => F eqt(tuplenil(X), a) => F eqt(tuplenil(X), excl) => F eqt(tuplenil(X), false) => F eqt(tuplenil(X), lock) => F eqt(tuplenil(X), locker) => F eqt(tuplenil(X), mcrlrecord) => F eqt(tuplenil(X), ok) => F eqt(tuplenil(X), pending) => F eqt(tuplenil(X), release) => F eqt(tuplenil(X), request) => F eqt(tuplenil(X), resource) => F eqt(tuplenil(X), tag) => F eqt(tuplenil(X), true) => F eqt(tuplenil(X), undefined) => F eqt(tuplenil(X), pid(Y)) => F eqt(tuplenil(X), int(Y)) => F eqt(tuplenil(X), cons(Y, Z)) => F eqt(tuplenil(X), tuple(Y, Z)) => F eqt(tuplenil(X), tuplenil(Y)) => eqt(X, Y) element(int(s(0)), tuplenil(X)) => X element(int(s(0)), tuple(X, Y)) => X element(int(s(s(X))), tuple(Y, Z)) => element(int(s(X)), Z) record!6220new(lock) => tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) record!6220extract(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, resource) => tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))) record!6220update(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, pending, U) => tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(U))))) record!6220updates(X, Y, nil) => X record!6220updates(X, Y, cons(tuple(Z, tuplenil(U)), V)) => record!6220updates(record!6220update(X, Y, Z, U), Y, V) locker2!6220map!6220promote!6220pending(nil, X) => nil locker2!6220map!6220promote!6220pending(cons(X, Y), Z) => cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(nil, X, Y) => nil locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) => cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220map!6220add!6220pending(nil, X, Y) => nil locker2!6220promote!6220pending(X, Y) => case0(Y, X, record!6220extract(X, lock, pending)) case0(X, Y, cons(X, Z)) => record!6220updates(Y, lock, cons(tuple(excl, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), nil))) case0(X, Y, Z) => Y locker2!6220remove!6220pending(X, Y) => record!6220updates(X, lock, cons(tuple(pending, tuplenil(subtract(record!6220extract(X, lock, pending), cons(Y, nil)))), nil)) locker2!6220add!6220pending(X, Y, Z) => case1(Z, Y, X, member(record!6220extract(X, lock, resource), Y)) case1(X, Y, Z, true) => record!6220updates(Z, lock, cons(tuple(pending, tuplenil(append(record!6220extract(Z, lock, pending), cons(X, nil)))), nil)) case1(X, Y, Z, false) => Z locker2!6220release!6220lock(X, Y) => case2(Y, X, gen!6220modtageq(Y, record!6220extract(X, lock, excl))) case2(X, Y, true) => record!6220updates(Y, lock, cons(tuple(excllock, excl), nil)) case4(X, Y, Z) => false locker2!6220obtainables(nil, X) => true locker2!6220obtainables(cons(X, Y), Z) => case5(Z, Y, X, member(Z, record!6220extract(X, lock, pending))) case5(X, Y, Z, true) => andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, false) => locker2!6220obtainables(Y, X) locker2!6220check!6220available(X, nil) => false locker2!6220check!6220available(X, cons(Y, Z)) => case6(Z, Y, X, equal(X, record!6220extract(Y, lock, resource))) case6(X, Y, Z, true) => andt(equal(record!6220extract(Y, lock, excl), nil), equal(record!6220extract(Y, lock, pending), nil)) case6(X, Y, Z, false) => locker2!6220check!6220available(Z, X) locker2!6220check!6220availables(nil, X) => true locker2!6220check!6220availables(cons(X, Y), Z) => andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(nil, X) => X append(cons(X, Y), Z) => cons(X, append(Y, Z)) subtract(X, nil) => X subtract(X, cons(Y, Z)) => subtract(delete(Y, X), Z) delete(X, nil) => nil delete(X, cons(Y, Z)) => case8(Z, Y, X, equal(X, Y)) case8(X, Y, Z, true) => X case8(X, Y, Z, false) => cons(Y, delete(Z, X)) gen!6220tag(X) => tuple(X, tuplenil(tag)) gen!6220modtageq(X, Y) => equal(X, Y) member(X, nil) => false member(X, cons(Y, Z)) => case9(Z, Y, X, equal(X, Y)) case9(X, Y, Z, true) => true case9(X, Y, Z, false) => member(Z, X) eqs(empty, empty) => T eqs(empty, stack(X, Y)) => F eqs(stack(X, Y), empty) => F eqs(stack(X, Y), stack(Z, U)) => and(eqt(X, Z), eqs(Y, U)) pushs(X, Y) => stack(X, Y) pops(stack(X, Y)) => Y tops(stack(X, Y)) => X istops(X, empty) => F istops(X, stack(Y, Z)) => eqt(X, Y) eqc(nocalls, nocalls) => T eqc(nocalls, calls(X, Y, Z)) => F eqc(calls(X, Y, Z), nocalls) => F eqc(calls(X, Y, Z), calls(U, V, W)) => and(eqt(X, U), and(eqs(Y, V), eqc(Z, W))) push(X, Y, nocalls) => calls(X, stack(Y, empty), nocalls) push(X, Y, calls(Z, U, V)) => push1(X, Y, Z, U, V, eqt(X, Z)) push1(X, Y, Z, U, V, T) => calls(Z, pushs(Y, U), V) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(T, T) >? T or(F, T) >? T or(T, F) >? T or(F, F) >? F and(T, X) >? X and(X, T) >? X and(F, X) >? F and(X, F) >? F imp(T, X) >? X imp(F, X) >? T not(T) >? F not(F) >? T if(T, X, Y) >? X if(F, X, Y) >? Y eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eq(F, T) >? F eqt(nil, undefined) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(nil, tuplenil(X)) >? F eqt(a, nil) >? F eqt(a, a) >? T eqt(a, excl) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, locker) >? F eqt(a, mcrlrecord) >? F eqt(a, ok) >? F eqt(a, pending) >? F eqt(a, release) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, true) >? F eqt(a, undefined) >? F eqt(a, pid(X)) >? F eqt(a, int(X)) >? F eqt(a, cons(X, Y)) >? F eqt(a, tuple(X, Y)) >? F eqt(a, tuplenil(X)) >? F eqt(excl, nil) >? F eqt(excl, a) >? F eqt(excl, excl) >? T eqt(excl, false) >? F eqt(excl, lock) >? F eqt(excl, locker) >? F eqt(excl, mcrlrecord) >? F eqt(excl, ok) >? F eqt(excl, pending) >? F eqt(excl, release) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, true) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(excl, eqt(false, int(X))) >? F eqt(false, cons(X, Y)) >? F eqt(false, tuple(X, Y)) >? F eqt(false, tuplenil(X)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, excl) >? F eqt(lock, false) >? F eqt(lock, lock) >? T eqt(lock, locker) >? F eqt(lock, mcrlrecord) >? F eqt(lock, ok) >? F eqt(lock, pending) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, undefined) >? F eqt(lock, pid(X)) >? F eqt(lock, int(X)) >? F eqt(lock, cons(X, Y)) >? F eqt(lock, tuple(X, Y)) >? F eqt(lock, tuplenil(X)) >? F eqt(locker, nil) >? F eqt(locker, a) >? F eqt(locker, excl) >? F eqt(locker, false) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, pending) >? F eqt(locker, release) >? F eqt(locker, request) >? F eqt(locker, resource) >? F eqt(locker, tag) >? F eqt(locker, true) >? F eqt(locker, undefined) >? F eqt(locker, pid(X)) >? F eqt(locker, int(X)) >? F eqt(locker, cons(X, Y)) >? F eqt(locker, tuple(X, Y)) >? F eqt(locker, tuplenil(X)) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, a) >? F eqt(mcrlrecord, excl) >? F eqt(mcrlrecord, false) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, ok) >? F eqt(mcrlrecord, pending) >? F eqt(mcrlrecord, release) >? F eqt(mcrlrecord, request) >? F eqt(mcrlrecord, resource) >? F eqt(ok, resource) >? F eqt(ok, tag) >? F eqt(ok, true) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, nil) >? F eqt(pending, a) >? F eqt(pending, excl) >? F eqt(pending, false) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, mcrlrecord) >? F eqt(pending, ok) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, request) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(pending, undefined) >? F eqt(pending, pid(X)) >? F eqt(pending, int(X)) >? F eqt(pending, cons(X, Y)) >? F eqt(pending, tuple(X, Y)) >? F eqt(pending, tuplenil(X)) >? F eqt(release, nil) >? F eqt(release, a) >? F eqt(release, excl) >? F eqt(release, false) >? F eqt(release, lock) >? F eqt(release, locker) >? F eqt(release, mcrlrecord) >? F eqt(release, ok) >? F eqt(request, mcrlrecord) >? F eqt(request, ok) >? F eqt(request, pending) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, true) >? F eqt(request, undefined) >? F eqt(request, pid(X)) >? F eqt(request, int(X)) >? F eqt(request, cons(X, Y)) >? F eqt(request, tuple(X, Y)) >? F eqt(request, tuplenil(X)) >? F eqt(resource, nil) >? F eqt(resource, a) >? F eqt(resource, excl) >? F eqt(resource, false) >? F eqt(resource, lock) >? F eqt(resource, locker) >? F eqt(resource, mcrlrecord) >? F eqt(resource, ok) >? F eqt(resource, pending) >? F eqt(resource, release) >? F eqt(resource, request) >? F eqt(resource, resource) >? T eqt(resource, tag) >? F eqt(resource, true) >? F eqt(resource, undefined) >? F eqt(resource, pid(X)) >? F eqt(resource, int(X)) >? F eqt(resource, cons(X, Y)) >? F eqt(resource, tuple(X, Y)) >? F eqt(resource, tuplenil(X)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, excl) >? F eqt(tag, false) >? F eqt(tag, lock) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, ok) >? F eqt(tag, pending) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, resource) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, pid(X)) >? F eqt(tag, int(X)) >? F eqt(tag, cons(X, Y)) >? F eqt(tag, tuple(X, Y)) >? F eqt(tag, tuplenil(X)) >? F eqt(true, nil) >? F eqt(true, a) >? F eqt(true, excl) >? F eqt(true, false) >? F eqt(true, lock) >? F eqt(true, locker) >? F eqt(true, mcrlrecord) >? F eqt(true, ok) >? F eqt(true, pending) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, resource) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, pid(X)) >? F eqt(true, int(X)) >? F eqt(true, cons(X, Y)) >? F eqt(true, tuple(X, Y)) >? F eqt(true, tuplenil(X)) >? F eqt(undefined, nil) >? F eqt(undefined, a) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), nil) >? F eqt(pid(X), a) >? F eqt(pid(X), excl) >? F eqt(pid(X), false) >? F eqt(pid(X), lock) >? F eqt(pid(X), locker) >? F eqt(pid(X), mcrlrecord) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), release) >? F eqt(pid(X), request) >? F eqt(pid(X), resource) >? F eqt(pid(X), tag) >? F eqt(pid(X), true) >? F eqt(pid(X), undefined) >? F eqt(pid(X), pid(Y)) >? eqt(X, Y) eqt(pid(X), int(Y)) >? F eqt(pid(X), cons(Y, Z)) >? F eqt(pid(X), tuple(Y, Z)) >? F eqt(pid(X), tuplenil(Y)) >? F eqt(int(X), nil) >? F eqt(int(X), a) >? F eqt(int(X), excl) >? F eqt(int(X), false) >? F eqt(int(X), lock) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), ok) >? F eqt(int(X), pending) >? F eqt(int(X), release) >? F eqt(int(X), request) >? F eqt(int(X), resource) >? F eqt(int(X), tag) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), resource) >? F eqt(cons(X, Y), tag) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), undefined) >? F eqt(cons(X, Y), pid(Z)) >? F eqt(cons(X, Y), int(Z)) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuple(Z, U)) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), excl) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), mcrlrecord) >? F eqt(tuple(X, Y), ok) >? F eqt(tuple(X, Y), pending) >? F eqt(tuple(X, Y), release) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), tag) >? F eqt(tuple(X, Y), true) >? F eqt(tuple(X, Y), undefined) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), int(Z)) >? F eqt(tuple(X, Y), cons(Z, U)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), a) >? F eqt(tuplenil(X), excl) >? F eqt(tuplenil(X), false) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), ok) >? F eqt(tuplenil(X), pending) >? F eqt(tuplenil(X), release) >? F eqt(tuplenil(X), request) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), tag) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F eqt(tuplenil(X), int(Y)) >? F eqt(tuplenil(X), cons(Y, Z)) >? F eqt(tuplenil(X), tuple(Y, Z)) >? F eqt(tuplenil(X), tuplenil(Y)) >? eqt(X, Y) element(int(s(0)), tuplenil(X)) >? X element(int(s(0)), tuple(X, Y)) >? X element(int(s(s(X))), tuple(Y, Z)) >? element(int(s(X)), Z) record!6220new(lock) >? tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) record!6220extract(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, resource) >? tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))) record!6220update(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, pending, U) >? tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(U))))) record!6220updates(X, Y, nil) >? X record!6220updates(X, Y, cons(tuple(Z, tuplenil(U)), V)) >? record!6220updates(record!6220update(X, Y, Z, U), Y, V) locker2!6220map!6220promote!6220pending(nil, X) >? nil locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(nil, X, Y) >? nil locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >? cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220map!6220add!6220pending(nil, X, Y) >? nil locker2!6220promote!6220pending(X, Y) >? case0(Y, X, record!6220extract(X, lock, pending)) case0(X, Y, cons(X, Z)) >? record!6220updates(Y, lock, cons(tuple(excl, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), nil))) case0(X, Y, Z) >? Y locker2!6220remove!6220pending(X, Y) >? record!6220updates(X, lock, cons(tuple(pending, tuplenil(subtract(record!6220extract(X, lock, pending), cons(Y, nil)))), nil)) locker2!6220add!6220pending(X, Y, Z) >? case1(Z, Y, X, member(record!6220extract(X, lock, resource), Y)) case1(X, Y, Z, true) >? record!6220updates(Z, lock, cons(tuple(pending, tuplenil(append(record!6220extract(Z, lock, pending), cons(X, nil)))), nil)) case1(X, Y, Z, false) >? Z locker2!6220release!6220lock(X, Y) >? case2(Y, X, gen!6220modtageq(Y, record!6220extract(X, lock, excl))) case2(X, Y, true) >? record!6220updates(Y, lock, cons(tuple(excllock, excl), nil)) case4(X, Y, Z) >? false locker2!6220obtainables(nil, X) >? true locker2!6220obtainables(cons(X, Y), Z) >? case5(Z, Y, X, member(Z, record!6220extract(X, lock, pending))) case5(X, Y, Z, true) >? andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, false) >? locker2!6220obtainables(Y, X) locker2!6220check!6220available(X, nil) >? false locker2!6220check!6220available(X, cons(Y, Z)) >? case6(Z, Y, X, equal(X, record!6220extract(Y, lock, resource))) case6(X, Y, Z, true) >? andt(equal(record!6220extract(Y, lock, excl), nil), equal(record!6220extract(Y, lock, pending), nil)) case6(X, Y, Z, false) >? locker2!6220check!6220available(Z, X) locker2!6220check!6220availables(nil, X) >? true locker2!6220check!6220availables(cons(X, Y), Z) >? andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(nil, X) >? X append(cons(X, Y), Z) >? cons(X, append(Y, Z)) subtract(X, nil) >? X subtract(X, cons(Y, Z)) >? subtract(delete(Y, X), Z) delete(X, nil) >? nil delete(X, cons(Y, Z)) >? case8(Z, Y, X, equal(X, Y)) case8(X, Y, Z, true) >? X case8(X, Y, Z, false) >? cons(Y, delete(Z, X)) gen!6220tag(X) >? tuple(X, tuplenil(tag)) gen!6220modtageq(X, Y) >? equal(X, Y) member(X, nil) >? false member(X, cons(Y, Z)) >? case9(Z, Y, X, equal(X, Y)) case9(X, Y, Z, true) >? true case9(X, Y, Z, false) >? member(Z, X) eqs(empty, empty) >? T eqs(empty, stack(X, Y)) >? F eqs(stack(X, Y), empty) >? F eqs(stack(X, Y), stack(Z, U)) >? and(eqt(X, Z), eqs(Y, U)) pushs(X, Y) >? stack(X, Y) pops(stack(X, Y)) >? Y tops(stack(X, Y)) >? X istops(X, empty) >? F istops(X, stack(Y, Z)) >? eqt(X, Y) eqc(nocalls, nocalls) >? T eqc(nocalls, calls(X, Y, Z)) >? F eqc(calls(X, Y, Z), nocalls) >? F eqc(calls(X, Y, Z), calls(U, V, W)) >? and(eqt(X, U), and(eqs(Y, V), eqc(Z, W))) push(X, Y, nocalls) >? calls(X, stack(Y, empty), nocalls) push(X, Y, calls(Z, U, V)) >? push1(X, Y, Z, U, V, eqt(X, Z)) push1(X, Y, Z, U, V, T) >? calls(Z, pushs(Y, U), V) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[case5(x_1, x_2, x_3, x_4)]] = case5(x_2, x_1, x_3, x_4) [[case6(x_1, x_2, x_3, x_4)]] = case6(x_3, x_1, x_2, x_4) [[case8(x_1, x_2, x_3, x_4)]] = case8(x_1, x_3, x_4, x_2) [[case9(x_1, x_2, x_3, x_4)]] = case9(x_1, x_3, x_2, x_4) [[delete(x_1, x_2)]] = delete(x_2, x_1) [[empty]] = _|_ [[excl]] = _|_ [[excllock]] = _|_ [[false]] = _|_ [[lock]] = _|_ [[mcrlrecord]] = _|_ [[member(x_1, x_2)]] = member(x_2, x_1) [[nil]] = _|_ [[not(x_1)]] = x_1 [[pops(x_1)]] = x_1 [[record!6220updates(x_1, x_2, x_3)]] = record!6220updates(x_2, x_3, x_1) [[resource]] = _|_ [[subtract(x_1, x_2)]] = subtract(x_2, x_1) [[tag]] = _|_ [[tops(x_1)]] = x_1 [[undefined]] = _|_ We choose Lex = {case5, case6, case8, case9, delete, locker2!6220check!6220available, locker2!6220obtainables, member, record!6220updates, subtract} and Mul = {0, a, and, andt, append, calls, case0, case1, case2, case4, cons, element, eq, eqc, eqs, eqt, equal, gen!6220modtageq, gen!6220tag, if, imp, int, istops, locker, locker2!6220add!6220pending, locker2!6220adduniq, locker2!6220check!6220availables, locker2!6220claim!6220lock, locker2!6220map!6220add!6220pending, locker2!6220map!6220claim!6220lock, locker2!6220map!6220promote!6220pending, locker2!6220obtainable, locker2!6220promote!6220pending, locker2!6220release!6220lock, locker2!6220remove!6220pending, nocalls, ok, or, pending, pid, push, push1, pushs, record!6220extract, record!6220new, record!6220update, release, request, s, stack, true, tuple, tuplenil}, and the following precedence: int > imp > locker2!6220add!6220pending > locker2!6220map!6220add!6220pending > release > element > case1 > record!6220new > if > locker2!6220remove!6220pending > subtract > locker2!6220map!6220claim!6220lock > a > s > locker2!6220check!6220availables > locker2!6220claim!6220lock > locker2!6220release!6220lock > push > push1 > pushs > case5 = locker2!6220obtainables > case9 = member > case8 = delete > locker2!6220map!6220promote!6220pending > eqc > eqs > ok > locker2!6220promote!6220pending > case0 > gen!6220tag > istops > locker2!6220obtainable > eqt > nocalls > stack > case6 = locker2!6220check!6220available > andt > record!6220extract > or > request > locker > eq > case2 > record!6220updates > record!6220update > gen!6220modtageq > tuplenil > append > cons > and > equal > pending > tuple > pid > calls > 0 > case4 > locker2!6220adduniq > true Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ and(_|_, X) >= X and(X, _|_) > X and(_|_, X) >= _|_ and(X, _|_) >= _|_ imp(_|_, X) > X imp(_|_, X) >= _|_ _|_ >= _|_ _|_ >= _|_ if(_|_, X, Y) > X if(_|_, X, Y) >= Y eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(a, _|_) >= _|_ eqt(a, a) >= _|_ eqt(a, _|_) >= _|_ eqt(a, _|_) >= _|_ eqt(a, _|_) >= _|_ eqt(a, locker) >= _|_ eqt(a, _|_) >= _|_ eqt(a, ok) >= _|_ eqt(a, pending) >= _|_ eqt(a, release) >= _|_ eqt(a, request) >= _|_ eqt(a, _|_) >= _|_ eqt(a, _|_) >= _|_ eqt(a, true) >= _|_ eqt(a, _|_) >= _|_ eqt(a, pid(X)) >= _|_ eqt(a, int(X)) >= _|_ eqt(a, cons(X, Y)) >= _|_ eqt(a, tuple(X, Y)) >= _|_ eqt(a, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, pending) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, true) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(_|_, eqt(_|_, int(X))) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, pending) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, true) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, a) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, locker) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, ok) >= _|_ eqt(locker, pending) >= _|_ eqt(locker, release) >= _|_ eqt(locker, request) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, true) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, pid(X)) >= _|_ eqt(locker, int(X)) >= _|_ eqt(locker, cons(X, Y)) >= _|_ eqt(locker, tuple(X, Y)) >= _|_ eqt(locker, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, pending) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(ok, _|_) >= _|_ eqt(ok, _|_) >= _|_ eqt(ok, true) >= _|_ eqt(ok, _|_) >= _|_ eqt(ok, pid(X)) >= _|_ eqt(ok, int(X)) >= _|_ eqt(ok, cons(X, Y)) >= _|_ eqt(ok, tuple(X, Y)) >= _|_ eqt(ok, tuplenil(X)) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, a) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, _|_) > _|_ eqt(pending, _|_) >= _|_ eqt(pending, locker) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, ok) > _|_ eqt(pending, pending) >= _|_ eqt(pending, release) >= _|_ eqt(pending, request) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, true) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, pid(X)) >= _|_ eqt(pending, int(X)) >= _|_ eqt(pending, cons(X, Y)) >= _|_ eqt(pending, tuple(X, Y)) > _|_ eqt(pending, tuplenil(X)) >= _|_ eqt(release, _|_) >= _|_ eqt(release, a) > _|_ eqt(release, _|_) >= _|_ eqt(release, _|_) >= _|_ eqt(release, _|_) >= _|_ eqt(release, locker) > _|_ eqt(release, _|_) >= _|_ eqt(release, ok) >= _|_ eqt(request, _|_) >= _|_ eqt(request, ok) >= _|_ eqt(request, pending) >= _|_ eqt(request, release) >= _|_ eqt(request, request) >= _|_ eqt(request, _|_) >= _|_ eqt(request, _|_) >= _|_ eqt(request, true) >= _|_ eqt(request, _|_) > _|_ eqt(request, pid(X)) >= _|_ eqt(request, int(X)) > _|_ eqt(request, cons(X, Y)) >= _|_ eqt(request, tuple(X, Y)) >= _|_ eqt(request, tuplenil(X)) >= _|_ eqt(_|_, _|_) > _|_ eqt(_|_, a) >= _|_ eqt(_|_, _|_) > _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, pending) >= _|_ eqt(_|_, release) > _|_ eqt(_|_, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, true) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) > _|_ eqt(_|_, tuplenil(X)) > _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, pending) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, true) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) > _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) > _|_ eqt(true, _|_) >= _|_ eqt(true, a) >= _|_ eqt(true, _|_) >= _|_ eqt(true, _|_) > _|_ eqt(true, _|_) >= _|_ eqt(true, locker) >= _|_ eqt(true, _|_) >= _|_ eqt(true, ok) >= _|_ eqt(true, pending) >= _|_ eqt(true, release) >= _|_ eqt(true, request) >= _|_ eqt(true, _|_) >= _|_ eqt(true, _|_) >= _|_ eqt(true, true) >= _|_ eqt(true, _|_) >= _|_ eqt(true, pid(X)) >= _|_ eqt(true, int(X)) > _|_ eqt(true, cons(X, Y)) >= _|_ eqt(true, tuple(X, Y)) >= _|_ eqt(true, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), a) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), locker) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), ok) >= _|_ eqt(pid(X), pending) >= _|_ eqt(pid(X), release) >= _|_ eqt(pid(X), request) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), true) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), pid(Y)) > eqt(X, Y) eqt(pid(X), int(Y)) >= _|_ eqt(pid(X), cons(Y, Z)) >= _|_ eqt(pid(X), tuple(Y, Z)) >= _|_ eqt(pid(X), tuplenil(Y)) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), a) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), locker) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), ok) >= _|_ eqt(int(X), pending) >= _|_ eqt(int(X), release) >= _|_ eqt(int(X), request) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), _|_) > _|_ eqt(int(X), true) >= _|_ eqt(int(X), _|_) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), true) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), pid(Z)) >= _|_ eqt(cons(X, Y), int(Z)) >= _|_ eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuple(Z, U)) >= _|_ eqt(cons(X, Y), tuplenil(Z)) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), locker) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), ok) >= _|_ eqt(tuple(X, Y), pending) >= _|_ eqt(tuple(X, Y), release) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), true) >= _|_ eqt(tuple(X, Y), _|_) > _|_ eqt(tuple(X, Y), pid(Z)) >= _|_ eqt(tuple(X, Y), int(Z)) >= _|_ eqt(tuple(X, Y), cons(Z, U)) >= _|_ eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), a) > _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), locker) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), ok) >= _|_ eqt(tuplenil(X), pending) >= _|_ eqt(tuplenil(X), release) >= _|_ eqt(tuplenil(X), request) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), _|_) > _|_ eqt(tuplenil(X), true) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), pid(Y)) >= _|_ eqt(tuplenil(X), int(Y)) >= _|_ eqt(tuplenil(X), cons(Y, Z)) > _|_ eqt(tuplenil(X), tuple(Y, Z)) > _|_ eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) element(int(s(0)), tuplenil(X)) > X element(int(s(0)), tuple(X, Y)) > X element(int(s(s(X))), tuple(Y, Z)) >= element(int(s(X)), Z) record!6220new(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_))))) record!6220extract(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) record!6220update(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(U))))) record!6220updates(X, Y, _|_) >= X record!6220updates(X, Y, cons(tuple(Z, tuplenil(U)), V)) > record!6220updates(record!6220update(X, Y, Z, U), Y, V) locker2!6220map!6220promote!6220pending(_|_, X) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(_|_, X, Y) >= _|_ locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220map!6220add!6220pending(_|_, X, Y) >= _|_ locker2!6220promote!6220pending(X, Y) >= case0(Y, X, record!6220extract(X, _|_, pending)) case0(X, Y, cons(X, Z)) > record!6220updates(Y, _|_, cons(tuple(_|_, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), _|_))) case0(X, Y, Z) > Y locker2!6220remove!6220pending(X, Y) > record!6220updates(X, _|_, cons(tuple(pending, tuplenil(subtract(record!6220extract(X, _|_, pending), cons(Y, _|_)))), _|_)) locker2!6220add!6220pending(X, Y, Z) > case1(Z, Y, X, member(record!6220extract(X, _|_, _|_), Y)) case1(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(pending, tuplenil(append(record!6220extract(Z, _|_, pending), cons(X, _|_)))), _|_)) case1(X, Y, Z, _|_) > Z locker2!6220release!6220lock(X, Y) > case2(Y, X, gen!6220modtageq(Y, record!6220extract(X, _|_, _|_))) case2(X, Y, true) > record!6220updates(Y, _|_, cons(tuple(_|_, _|_), _|_)) case4(X, Y, Z) >= _|_ locker2!6220obtainables(_|_, X) >= true locker2!6220obtainables(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, pending))) case5(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) locker2!6220check!6220available(X, _|_) > _|_ locker2!6220check!6220available(X, cons(Y, Z)) > case6(Z, Y, X, equal(X, record!6220extract(Y, _|_, _|_))) case6(X, Y, Z, true) > andt(equal(record!6220extract(Y, _|_, _|_), _|_), equal(record!6220extract(Y, _|_, pending), _|_)) case6(X, Y, Z, _|_) > locker2!6220check!6220available(Z, X) locker2!6220check!6220availables(_|_, X) >= true locker2!6220check!6220availables(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(_|_, X) >= X append(cons(X, Y), Z) > cons(X, append(Y, Z)) subtract(X, _|_) > X subtract(X, cons(Y, Z)) > subtract(delete(Y, X), Z) delete(X, _|_) >= _|_ delete(X, cons(Y, Z)) >= case8(Z, Y, X, equal(X, Y)) case8(X, Y, Z, true) >= X case8(X, Y, Z, _|_) >= cons(Y, delete(Z, X)) gen!6220tag(X) >= tuple(X, tuplenil(_|_)) gen!6220modtageq(X, Y) >= equal(X, Y) member(X, _|_) >= _|_ member(X, cons(Y, Z)) > case9(Z, Y, X, equal(X, Y)) case9(X, Y, Z, true) >= true case9(X, Y, Z, _|_) >= member(Z, X) eqs(_|_, _|_) >= _|_ eqs(_|_, stack(X, Y)) >= _|_ eqs(stack(X, Y), _|_) >= _|_ eqs(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) pushs(X, Y) > stack(X, Y) stack(X, Y) >= Y stack(X, Y) >= X istops(X, _|_) >= _|_ istops(X, stack(Y, Z)) > eqt(X, Y) eqc(nocalls, nocalls) >= _|_ eqc(nocalls, calls(X, Y, Z)) >= _|_ eqc(calls(X, Y, Z), nocalls) >= _|_ eqc(calls(X, Y, Z), calls(U, V, W)) > and(eqt(X, U), and(eqs(Y, V), eqc(Z, W))) push(X, Y, nocalls) > calls(X, stack(Y, _|_), nocalls) push(X, Y, calls(Z, U, V)) >= push1(X, Y, Z, U, V, eqt(X, Z)) push1(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) With these choices, we have: 1] or(_|_, _|_) >= _|_ by (Bot) 2] or(_|_, _|_) >= _|_ by (Bot) 3] or(_|_, _|_) >= _|_ by (Bot) 4] or(_|_, _|_) >= _|_ by (Bot) 5] and(_|_, X) >= X because [6], by (Star) 6] and*(_|_, X) >= X because [7], by (Select) 7] X >= X by (Meta) 8] and(X, _|_) > X because [9], by definition 9] and*(X, _|_) >= X because [7], by (Select) 10] and(_|_, X) >= _|_ by (Bot) 11] and(X, _|_) >= _|_ by (Bot) 12] imp(_|_, X) > X because [13], by definition 13] imp*(_|_, X) >= X because [7], by (Select) 14] imp(_|_, X) >= _|_ by (Bot) 15] _|_ >= _|_ by (Bot) 16] _|_ >= _|_ by (Bot) 17] if(_|_, X, Y) > X because [18], by definition 18] if*(_|_, X, Y) >= X because [19], by (Select) 19] X >= X by (Meta) 20] if(_|_, X, Y) >= Y because [21], by (Star) 21] if*(_|_, X, Y) >= Y because [22], by (Select) 22] Y >= Y by (Meta) 23] eq(_|_, _|_) >= _|_ by (Bot) 24] eq(_|_, _|_) >= _|_ by (Bot) 25] eq(_|_, _|_) >= _|_ by (Bot) 26] eq(_|_, _|_) >= _|_ by (Bot) 27] eqt(_|_, _|_) >= _|_ by (Bot) 28] eqt(_|_, pid(X)) >= _|_ by (Bot) 29] eqt(_|_, int(X)) >= _|_ by (Bot) 30] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 31] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 32] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 33] eqt(a, _|_) >= _|_ by (Bot) 34] eqt(a, a) >= _|_ by (Bot) 35] eqt(a, _|_) >= _|_ by (Bot) 36] eqt(a, _|_) >= _|_ by (Bot) 37] eqt(a, _|_) >= _|_ by (Bot) 38] eqt(a, locker) >= _|_ by (Bot) 39] eqt(a, _|_) >= _|_ by (Bot) 40] eqt(a, ok) >= _|_ by (Bot) 41] eqt(a, pending) >= _|_ by (Bot) 42] eqt(a, release) >= _|_ by (Bot) 43] eqt(a, request) >= _|_ by (Bot) 44] eqt(a, _|_) >= _|_ by (Bot) 45] eqt(a, _|_) >= _|_ by (Bot) 46] eqt(a, true) >= _|_ by (Bot) 47] eqt(a, _|_) >= _|_ by (Bot) 48] eqt(a, pid(X)) >= _|_ by (Bot) 49] eqt(a, int(X)) >= _|_ by (Bot) 50] eqt(a, cons(X, Y)) >= _|_ by (Bot) 51] eqt(a, tuple(X, Y)) >= _|_ by (Bot) 52] eqt(a, tuplenil(X)) >= _|_ by (Bot) 53] eqt(_|_, _|_) >= _|_ by (Bot) 54] eqt(_|_, a) >= _|_ by (Bot) 55] eqt(_|_, _|_) >= _|_ by (Bot) 56] eqt(_|_, _|_) >= _|_ by (Bot) 57] eqt(_|_, _|_) >= _|_ by (Bot) 58] eqt(_|_, locker) >= _|_ by (Bot) 59] eqt(_|_, _|_) >= _|_ by (Bot) 60] eqt(_|_, ok) >= _|_ by (Bot) 61] eqt(_|_, pending) >= _|_ by (Bot) 62] eqt(_|_, release) >= _|_ by (Bot) 63] eqt(_|_, request) >= _|_ by (Bot) 64] eqt(_|_, _|_) >= _|_ by (Bot) 65] eqt(_|_, _|_) >= _|_ by (Bot) 66] eqt(_|_, true) >= _|_ by (Bot) 67] eqt(_|_, _|_) >= _|_ by (Bot) 68] eqt(_|_, pid(X)) >= _|_ by (Bot) 69] eqt(_|_, eqt(_|_, int(X))) >= _|_ by (Bot) 70] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 71] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 72] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 73] eqt(_|_, _|_) >= _|_ by (Bot) 74] eqt(_|_, a) >= _|_ by (Bot) 75] eqt(_|_, _|_) >= _|_ by (Bot) 76] eqt(_|_, _|_) >= _|_ by (Bot) 77] eqt(_|_, _|_) >= _|_ by (Bot) 78] eqt(_|_, locker) >= _|_ by (Bot) 79] eqt(_|_, _|_) >= _|_ by (Bot) 80] eqt(_|_, ok) >= _|_ by (Bot) 81] eqt(_|_, pending) >= _|_ by (Bot) 82] eqt(_|_, release) >= _|_ by (Bot) 83] eqt(_|_, request) >= _|_ by (Bot) 84] eqt(_|_, _|_) >= _|_ by (Bot) 85] eqt(_|_, _|_) >= _|_ by (Bot) 86] eqt(_|_, true) >= _|_ by (Bot) 87] eqt(_|_, _|_) >= _|_ by (Bot) 88] eqt(_|_, pid(X)) >= _|_ by (Bot) 89] eqt(_|_, int(X)) >= _|_ by (Bot) 90] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 91] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 92] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 93] eqt(locker, _|_) >= _|_ by (Bot) 94] eqt(locker, a) >= _|_ by (Bot) 95] eqt(locker, _|_) >= _|_ by (Bot) 96] eqt(locker, _|_) >= _|_ by (Bot) 97] eqt(locker, _|_) >= _|_ by (Bot) 98] eqt(locker, locker) >= _|_ by (Bot) 99] eqt(locker, _|_) >= _|_ by (Bot) 100] eqt(locker, ok) >= _|_ by (Bot) 101] eqt(locker, pending) >= _|_ by (Bot) 102] eqt(locker, release) >= _|_ by (Bot) 103] eqt(locker, request) >= _|_ by (Bot) 104] eqt(locker, _|_) >= _|_ by (Bot) 105] eqt(locker, _|_) >= _|_ by (Bot) 106] eqt(locker, true) >= _|_ by (Bot) 107] eqt(locker, _|_) >= _|_ by (Bot) 108] eqt(locker, pid(X)) >= _|_ by (Bot) 109] eqt(locker, int(X)) >= _|_ by (Bot) 110] eqt(locker, cons(X, Y)) >= _|_ by (Bot) 111] eqt(locker, tuple(X, Y)) >= _|_ by (Bot) 112] eqt(locker, tuplenil(X)) >= _|_ by (Bot) 113] eqt(_|_, _|_) >= _|_ by (Bot) 114] eqt(_|_, a) >= _|_ by (Bot) 115] eqt(_|_, _|_) >= _|_ by (Bot) 116] eqt(_|_, _|_) >= _|_ by (Bot) 117] eqt(_|_, _|_) >= _|_ by (Bot) 118] eqt(_|_, locker) >= _|_ by (Bot) 119] eqt(_|_, _|_) >= _|_ by (Bot) 120] eqt(_|_, ok) >= _|_ by (Bot) 121] eqt(_|_, pending) >= _|_ by (Bot) 122] eqt(_|_, release) >= _|_ by (Bot) 123] eqt(_|_, request) >= _|_ by (Bot) 124] eqt(_|_, _|_) >= _|_ by (Bot) 125] eqt(ok, _|_) >= _|_ by (Bot) 126] eqt(ok, _|_) >= _|_ by (Bot) 127] eqt(ok, true) >= _|_ by (Bot) 128] eqt(ok, _|_) >= _|_ by (Bot) 129] eqt(ok, pid(X)) >= _|_ by (Bot) 130] eqt(ok, int(X)) >= _|_ by (Bot) 131] eqt(ok, cons(X, Y)) >= _|_ by (Bot) 132] eqt(ok, tuple(X, Y)) >= _|_ by (Bot) 133] eqt(ok, tuplenil(X)) >= _|_ by (Bot) 134] eqt(pending, _|_) >= _|_ by (Bot) 135] eqt(pending, a) >= _|_ by (Bot) 136] eqt(pending, _|_) >= _|_ by (Bot) 137] eqt(pending, _|_) > _|_ because [138], by definition 138] eqt*(pending, _|_) >= _|_ by (Bot) 139] eqt(pending, _|_) >= _|_ by (Bot) 140] eqt(pending, locker) >= _|_ by (Bot) 141] eqt(pending, _|_) >= _|_ by (Bot) 142] eqt(pending, ok) > _|_ because [143], by definition 143] eqt*(pending, ok) >= _|_ by (Bot) 144] eqt(pending, pending) >= _|_ by (Bot) 145] eqt(pending, release) >= _|_ by (Bot) 146] eqt(pending, request) >= _|_ by (Bot) 147] eqt(pending, _|_) >= _|_ by (Bot) 148] eqt(pending, _|_) >= _|_ by (Bot) 149] eqt(pending, true) >= _|_ by (Bot) 150] eqt(pending, _|_) >= _|_ by (Bot) 151] eqt(pending, pid(X)) >= _|_ by (Bot) 152] eqt(pending, int(X)) >= _|_ by (Bot) 153] eqt(pending, cons(X, Y)) >= _|_ by (Bot) 154] eqt(pending, tuple(X, Y)) > _|_ because [155], by definition 155] eqt*(pending, tuple(X, Y)) >= _|_ by (Bot) 156] eqt(pending, tuplenil(X)) >= _|_ by (Bot) 157] eqt(release, _|_) >= _|_ by (Bot) 158] eqt(release, a) > _|_ because [159], by definition 159] eqt*(release, a) >= _|_ by (Bot) 160] eqt(release, _|_) >= _|_ by (Bot) 161] eqt(release, _|_) >= _|_ by (Bot) 162] eqt(release, _|_) >= _|_ by (Bot) 163] eqt(release, locker) > _|_ because [164], by definition 164] eqt*(release, locker) >= _|_ by (Bot) 165] eqt(release, _|_) >= _|_ by (Bot) 166] eqt(release, ok) >= _|_ by (Bot) 167] eqt(request, _|_) >= _|_ by (Bot) 168] eqt(request, ok) >= _|_ by (Bot) 169] eqt(request, pending) >= _|_ by (Bot) 170] eqt(request, release) >= _|_ by (Bot) 171] eqt(request, request) >= _|_ by (Bot) 172] eqt(request, _|_) >= _|_ by (Bot) 173] eqt(request, _|_) >= _|_ by (Bot) 174] eqt(request, true) >= _|_ by (Bot) 175] eqt(request, _|_) > _|_ because [176], by definition 176] eqt*(request, _|_) >= _|_ by (Bot) 177] eqt(request, pid(X)) >= _|_ by (Bot) 178] eqt(request, int(X)) > _|_ because [179], by definition 179] eqt*(request, int(X)) >= _|_ by (Bot) 180] eqt(request, cons(X, Y)) >= _|_ by (Bot) 181] eqt(request, tuple(X, Y)) >= _|_ by (Bot) 182] eqt(request, tuplenil(X)) >= _|_ by (Bot) 183] eqt(_|_, _|_) > _|_ because [184], by definition 184] eqt*(_|_, _|_) >= _|_ by (Bot) 185] eqt(_|_, a) >= _|_ by (Bot) 186] eqt(_|_, _|_) > _|_ because [187], by definition 187] eqt*(_|_, _|_) >= _|_ by (Bot) 188] eqt(_|_, _|_) >= _|_ by (Bot) 189] eqt(_|_, _|_) >= _|_ by (Bot) 190] eqt(_|_, locker) >= _|_ by (Bot) 191] eqt(_|_, _|_) >= _|_ by (Bot) 192] eqt(_|_, ok) >= _|_ by (Bot) 193] eqt(_|_, pending) >= _|_ by (Bot) 194] eqt(_|_, release) > _|_ because [195], by definition 195] eqt*(_|_, release) >= _|_ by (Bot) 196] eqt(_|_, request) >= _|_ by (Bot) 197] eqt(_|_, _|_) >= _|_ by (Bot) 198] eqt(_|_, _|_) >= _|_ by (Bot) 199] eqt(_|_, true) >= _|_ by (Bot) 200] eqt(_|_, _|_) >= _|_ by (Bot) 201] eqt(_|_, pid(X)) >= _|_ by (Bot) 202] eqt(_|_, int(X)) >= _|_ by (Bot) 203] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 204] eqt(_|_, tuple(X, Y)) > _|_ because [205], by definition 205] eqt*(_|_, tuple(X, Y)) >= _|_ by (Bot) 206] eqt(_|_, tuplenil(X)) > _|_ because [207], by definition 207] eqt*(_|_, tuplenil(X)) >= _|_ by (Bot) 208] eqt(_|_, _|_) >= _|_ by (Bot) 209] eqt(_|_, a) >= _|_ by (Bot) 210] eqt(_|_, _|_) >= _|_ by (Bot) 211] eqt(_|_, _|_) >= _|_ by (Bot) 212] eqt(_|_, _|_) >= _|_ by (Bot) 213] eqt(_|_, locker) >= _|_ by (Bot) 214] eqt(_|_, _|_) >= _|_ by (Bot) 215] eqt(_|_, ok) >= _|_ by (Bot) 216] eqt(_|_, pending) >= _|_ by (Bot) 217] eqt(_|_, release) >= _|_ by (Bot) 218] eqt(_|_, request) >= _|_ by (Bot) 219] eqt(_|_, _|_) >= _|_ by (Bot) 220] eqt(_|_, _|_) >= _|_ by (Bot) 221] eqt(_|_, true) >= _|_ by (Bot) 222] eqt(_|_, _|_) >= _|_ by (Bot) 223] eqt(_|_, pid(X)) >= _|_ by (Bot) 224] eqt(_|_, int(X)) >= _|_ by (Bot) 225] eqt(_|_, cons(X, Y)) > _|_ because [226], by definition 226] eqt*(_|_, cons(X, Y)) >= _|_ by (Bot) 227] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 228] eqt(_|_, tuplenil(X)) > _|_ because [229], by definition 229] eqt*(_|_, tuplenil(X)) >= _|_ by (Bot) 230] eqt(true, _|_) >= _|_ by (Bot) 231] eqt(true, a) >= _|_ by (Bot) 232] eqt(true, _|_) >= _|_ by (Bot) 233] eqt(true, _|_) > _|_ because [234], by definition 234] eqt*(true, _|_) >= _|_ by (Bot) 235] eqt(true, _|_) >= _|_ by (Bot) 236] eqt(true, locker) >= _|_ by (Bot) 237] eqt(true, _|_) >= _|_ by (Bot) 238] eqt(true, ok) >= _|_ by (Bot) 239] eqt(true, pending) >= _|_ by (Bot) 240] eqt(true, release) >= _|_ by (Bot) 241] eqt(true, request) >= _|_ by (Bot) 242] eqt(true, _|_) >= _|_ by (Bot) 243] eqt(true, _|_) >= _|_ by (Bot) 244] eqt(true, true) >= _|_ by (Bot) 245] eqt(true, _|_) >= _|_ by (Bot) 246] eqt(true, pid(X)) >= _|_ by (Bot) 247] eqt(true, int(X)) > _|_ because [248], by definition 248] eqt*(true, int(X)) >= _|_ by (Bot) 249] eqt(true, cons(X, Y)) >= _|_ by (Bot) 250] eqt(true, tuple(X, Y)) >= _|_ by (Bot) 251] eqt(true, tuplenil(X)) >= _|_ by (Bot) 252] eqt(_|_, _|_) >= _|_ by (Bot) 253] eqt(_|_, a) >= _|_ by (Bot) 254] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 255] eqt(pid(X), _|_) >= _|_ by (Bot) 256] eqt(pid(X), a) >= _|_ by (Bot) 257] eqt(pid(X), _|_) >= _|_ by (Bot) 258] eqt(pid(X), _|_) >= _|_ by (Bot) 259] eqt(pid(X), _|_) >= _|_ by (Bot) 260] eqt(pid(X), locker) >= _|_ by (Bot) 261] eqt(pid(X), _|_) >= _|_ by (Bot) 262] eqt(pid(X), ok) >= _|_ by (Bot) 263] eqt(pid(X), pending) >= _|_ by (Bot) 264] eqt(pid(X), release) >= _|_ by (Bot) 265] eqt(pid(X), request) >= _|_ by (Bot) 266] eqt(pid(X), _|_) >= _|_ by (Bot) 267] eqt(pid(X), _|_) >= _|_ by (Bot) 268] eqt(pid(X), true) >= _|_ by (Bot) 269] eqt(pid(X), _|_) >= _|_ by (Bot) 270] eqt(pid(X), pid(Y)) > eqt(X, Y) because [271], by definition 271] eqt*(pid(X), pid(Y)) >= eqt(X, Y) because eqt in Mul, [272] and [275], by (Stat) 272] pid(X) >= X because [273], by (Star) 273] pid*(X) >= X because [274], by (Select) 274] X >= X by (Meta) 275] pid(Y) > Y because [276], by definition 276] pid*(Y) >= Y because [277], by (Select) 277] Y >= Y by (Meta) 278] eqt(pid(X), int(Y)) >= _|_ by (Bot) 279] eqt(pid(X), cons(Y, Z)) >= _|_ by (Bot) 280] eqt(pid(X), tuple(Y, Z)) >= _|_ by (Bot) 281] eqt(pid(X), tuplenil(Y)) >= _|_ by (Bot) 282] eqt(int(X), _|_) >= _|_ by (Bot) 283] eqt(int(X), a) >= _|_ by (Bot) 284] eqt(int(X), _|_) >= _|_ by (Bot) 285] eqt(int(X), _|_) >= _|_ by (Bot) 286] eqt(int(X), _|_) >= _|_ by (Bot) 287] eqt(int(X), locker) >= _|_ by (Bot) 288] eqt(int(X), _|_) >= _|_ by (Bot) 289] eqt(int(X), ok) >= _|_ by (Bot) 290] eqt(int(X), pending) >= _|_ by (Bot) 291] eqt(int(X), release) >= _|_ by (Bot) 292] eqt(int(X), request) >= _|_ by (Bot) 293] eqt(int(X), _|_) >= _|_ by (Bot) 294] eqt(int(X), _|_) > _|_ because [295], by definition 295] eqt*(int(X), _|_) >= _|_ by (Bot) 296] eqt(int(X), true) >= _|_ by (Bot) 297] eqt(int(X), _|_) >= _|_ by (Bot) 298] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 299] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 300] eqt(cons(X, Y), true) >= _|_ by (Bot) 301] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 302] eqt(cons(X, Y), pid(Z)) >= _|_ by (Bot) 303] eqt(cons(X, Y), int(Z)) >= _|_ by (Bot) 304] eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [305], by (Star) 305] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [306] and [313], by (Copy) 306] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [307] and [310], by (Stat) 307] cons(X, Y) >= X because [308], by (Star) 308] cons*(X, Y) >= X because [309], by (Select) 309] X >= X by (Meta) 310] cons(Z, U) > Z because [311], by definition 311] cons*(Z, U) >= Z because [312], by (Select) 312] Z >= Z by (Meta) 313] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [314] and [317], by (Stat) 314] cons(X, Y) > Y because [315], by definition 315] cons*(X, Y) >= Y because [316], by (Select) 316] Y >= Y by (Meta) 317] cons(Z, U) >= U because [318], by (Star) 318] cons*(Z, U) >= U because [319], by (Select) 319] U >= U by (Meta) 320] eqt(cons(X, Y), tuple(Z, U)) >= _|_ by (Bot) 321] eqt(cons(X, Y), tuplenil(Z)) >= _|_ by (Bot) 322] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 323] eqt(tuple(X, Y), a) >= _|_ by (Bot) 324] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 325] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 326] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 327] eqt(tuple(X, Y), locker) >= _|_ by (Bot) 328] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 329] eqt(tuple(X, Y), ok) >= _|_ by (Bot) 330] eqt(tuple(X, Y), pending) >= _|_ by (Bot) 331] eqt(tuple(X, Y), release) >= _|_ by (Bot) 332] eqt(tuple(X, Y), request) >= _|_ by (Bot) 333] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 334] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 335] eqt(tuple(X, Y), true) >= _|_ by (Bot) 336] eqt(tuple(X, Y), _|_) > _|_ because [337], by definition 337] eqt*(tuple(X, Y), _|_) >= _|_ by (Bot) 338] eqt(tuple(X, Y), pid(Z)) >= _|_ by (Bot) 339] eqt(tuple(X, Y), int(Z)) >= _|_ by (Bot) 340] eqt(tuple(X, Y), cons(Z, U)) >= _|_ by (Bot) 341] eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [342], by (Star) 342] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [343] and [348], by (Copy) 343] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [344] and [346], by (Stat) 344] tuple(X, Y) >= X because [345], by (Star) 345] tuple*(X, Y) >= X because [309], by (Select) 346] tuple(Z, U) > Z because [347], by definition 347] tuple*(Z, U) >= Z because [312], by (Select) 348] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [349] and [351], by (Stat) 349] tuple(X, Y) >= Y because [350], by (Star) 350] tuple*(X, Y) >= Y because [316], by (Select) 351] tuple(Z, U) > U because [352], by definition 352] tuple*(Z, U) >= U because [319], by (Select) 353] eqt(tuple(X, Y), tuplenil(Z)) >= _|_ by (Bot) 354] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 355] eqt(tuplenil(X), a) > _|_ because [356], by definition 356] eqt*(tuplenil(X), a) >= _|_ by (Bot) 357] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 358] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 359] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 360] eqt(tuplenil(X), locker) >= _|_ by (Bot) 361] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 362] eqt(tuplenil(X), ok) >= _|_ by (Bot) 363] eqt(tuplenil(X), pending) >= _|_ by (Bot) 364] eqt(tuplenil(X), release) >= _|_ by (Bot) 365] eqt(tuplenil(X), request) >= _|_ by (Bot) 366] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 367] eqt(tuplenil(X), _|_) > _|_ because [368], by definition 368] eqt*(tuplenil(X), _|_) >= _|_ by (Bot) 369] eqt(tuplenil(X), true) >= _|_ by (Bot) 370] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 371] eqt(tuplenil(X), pid(Y)) >= _|_ by (Bot) 372] eqt(tuplenil(X), int(Y)) >= _|_ by (Bot) 373] eqt(tuplenil(X), cons(Y, Z)) > _|_ because [374], by definition 374] eqt*(tuplenil(X), cons(Y, Z)) >= _|_ by (Bot) 375] eqt(tuplenil(X), tuple(Y, Z)) > _|_ because [376], by definition 376] eqt*(tuplenil(X), tuple(Y, Z)) >= _|_ by (Bot) 377] eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) because [378], by (Star) 378] eqt*(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) because eqt in Mul, [379] and [381], by (Stat) 379] tuplenil(X) >= X because [380], by (Star) 380] tuplenil*(X) >= X because [309], by (Select) 381] tuplenil(Y) > Y because [382], by definition 382] tuplenil*(Y) >= Y because [312], by (Select) 383] element(int(s(0)), tuplenil(X)) > X because [384], by definition 384] element*(int(s(0)), tuplenil(X)) >= X because [385], by (Select) 385] tuplenil(X) >= X because [386], by (Star) 386] tuplenil*(X) >= X because [316], by (Select) 387] element(int(s(0)), tuple(X, Y)) > X because [388], by definition 388] element*(int(s(0)), tuple(X, Y)) >= X because [389], by (Select) 389] tuple(X, Y) >= X because [390], by (Star) 390] tuple*(X, Y) >= X because [316], by (Select) 391] element(int(s(s(X))), tuple(Y, Z)) >= element(int(s(X)), Z) because element in Mul, [392] and [396], by (Fun) 392] int(s(s(X))) >= int(s(X)) because int in Mul and [393], by (Fun) 393] s(s(X)) >= s(X) because s in Mul and [394], by (Fun) 394] s(X) >= X because [395], by (Star) 395] s*(X) >= X because [274], by (Select) 396] tuple(Y, Z) >= Z because [397], by (Star) 397] tuple*(Y, Z) >= Z because [319], by (Select) 398] record!6220new(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_))))) because [399], by (Star) 399] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_))))) because record!6220new > tuple, [400] and [401], by (Copy) 400] record!6220new*(_|_) >= _|_ by (Bot) 401] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_)))) because record!6220new > tuple, [402] and [403], by (Copy) 402] record!6220new*(_|_) >= _|_ by (Bot) 403] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuplenil(_|_))) because record!6220new > tuple, [404] and [405], by (Copy) 404] record!6220new*(_|_) >= _|_ by (Bot) 405] record!6220new*(_|_) >= tuple(_|_, tuplenil(_|_)) because record!6220new > tuple, [406] and [407], by (Copy) 406] record!6220new*(_|_) >= _|_ by (Bot) 407] record!6220new*(_|_) >= tuplenil(_|_) because record!6220new > tuplenil and [406], by (Copy) 408] record!6220extract(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) because [409], by (Star) 409] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) because record!6220extract > tuple, [410] and [411], by (Copy) 410] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= _|_ by (Bot) 411] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) because record!6220extract > tuple, [412] and [413], by (Copy) 412] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= _|_ by (Bot) 413] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuple(X, tuple(Y, tuplenil(Z))) because record!6220extract > tuple, [414] and [422], by (Copy) 414] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= X because [415], by (Select) 415] tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= X because [416], by (Star) 416] tuple*(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= X because [417], by (Select) 417] tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= X because [418], by (Star) 418] tuple*(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= X because [419], by (Select) 419] tuple(X, tuple(Y, tuplenil(Z))) >= X because [420], by (Star) 420] tuple*(X, tuple(Y, tuplenil(Z))) >= X because [421], by (Select) 421] X >= X by (Meta) 422] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuple(Y, tuplenil(Z)) because record!6220extract > tuple, [423] and [433], by (Copy) 423] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= Y because [424], by (Select) 424] tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= Y because [425], by (Star) 425] tuple*(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= Y because [426], by (Select) 426] tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= Y because [427], by (Star) 427] tuple*(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= Y because [428], by (Select) 428] tuple(X, tuple(Y, tuplenil(Z))) >= Y because [429], by (Star) 429] tuple*(X, tuple(Y, tuplenil(Z))) >= Y because [430], by (Select) 430] tuple(Y, tuplenil(Z)) >= Y because [431], by (Star) 431] tuple*(Y, tuplenil(Z)) >= Y because [432], by (Select) 432] Y >= Y by (Meta) 433] record!6220extract*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_) >= tuplenil(Z) because [434], by (Select) 434] tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= tuplenil(Z) because [435], by (Star) 435] tuple*(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= tuplenil(Z) because [436], by (Select) 436] tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= tuplenil(Z) because [437], by (Star) 437] tuple*(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= tuplenil(Z) because [438], by (Select) 438] tuple(X, tuple(Y, tuplenil(Z))) >= tuplenil(Z) because [439], by (Star) 439] tuple*(X, tuple(Y, tuplenil(Z))) >= tuplenil(Z) because [440], by (Select) 440] tuple(Y, tuplenil(Z)) >= tuplenil(Z) because [441], by (Star) 441] tuple*(Y, tuplenil(Z)) >= tuplenil(Z) because [442], by (Select) 442] tuplenil(Z) >= tuplenil(Z) because tuplenil in Mul and [443], by (Fun) 443] Z >= Z by (Meta) 444] record!6220update(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(U))))) because [445], by (Star) 445] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(U))))) because record!6220update > tuple, [446] and [447], by (Copy) 446] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= _|_ by (Bot) 447] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuple(_|_, tuple(X, tuple(Y, tuplenil(U)))) because record!6220update > tuple, [448] and [449], by (Copy) 448] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= _|_ by (Bot) 449] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuple(X, tuple(Y, tuplenil(U))) because record!6220update > tuple, [450] and [451], by (Copy) 450] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= X because [415], by (Select) 451] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuple(Y, tuplenil(U)) because record!6220update > tuple, [452] and [453], by (Copy) 452] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= Y because [424], by (Select) 453] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= tuplenil(U) because record!6220update > tuplenil and [454], by (Copy) 454] record!6220update*(tuple(_|_, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, pending, U) >= U because [455], by (Select) 455] U >= U by (Meta) 456] record!6220updates(X, Y, _|_) >= X because [457], by (Star) 457] record!6220updates*(X, Y, _|_) >= X because [458], by (Select) 458] X >= X by (Meta) 459] record!6220updates(X, Y, cons(tuple(Z, tuplenil(U)), V)) > record!6220updates(record!6220update(X, Y, Z, U), Y, V) because [460], by definition 460] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= record!6220updates(record!6220update(X, Y, Z, U), Y, V) because [461], [462], [465], [467] and [481], by (Stat) 461] Y >= Y by (Meta) 462] cons(tuple(Z, tuplenil(U)), V) > V because [463], by definition 463] cons*(tuple(Z, tuplenil(U)), V) >= V because [464], by (Select) 464] V >= V by (Meta) 465] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= record!6220update(X, Y, Z, U) because record!6220updates > record!6220update, [466], [467], [468] and [474], by (Copy) 466] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= X because [458], by (Select) 467] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= Y because [461], by (Select) 468] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= Z because [469], by (Select) 469] cons(tuple(Z, tuplenil(U)), V) >= Z because [470], by (Star) 470] cons*(tuple(Z, tuplenil(U)), V) >= Z because [471], by (Select) 471] tuple(Z, tuplenil(U)) >= Z because [472], by (Star) 472] tuple*(Z, tuplenil(U)) >= Z because [473], by (Select) 473] Z >= Z by (Meta) 474] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= U because [475], by (Select) 475] cons(tuple(Z, tuplenil(U)), V) >= U because [476], by (Star) 476] cons*(tuple(Z, tuplenil(U)), V) >= U because [477], by (Select) 477] tuple(Z, tuplenil(U)) >= U because [478], by (Star) 478] tuple*(Z, tuplenil(U)) >= U because [479], by (Select) 479] tuplenil(U) >= U because [480], by (Star) 480] tuplenil*(U) >= U because [455], by (Select) 481] record!6220updates*(X, Y, cons(tuple(Z, tuplenil(U)), V)) >= V because [482], by (Select) 482] cons(tuple(Z, tuplenil(U)), V) >= V because [463], by (Star) 483] locker2!6220map!6220promote!6220pending(_|_, X) >= _|_ by (Bot) 484] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [485], by (Star) 485] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [486] and [493], by (Copy) 486] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [487] and [491], by (Copy) 487] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [488], by (Select) 488] cons(X, Y) >= X because [489], by (Star) 489] cons*(X, Y) >= X because [490], by (Select) 490] X >= X by (Meta) 491] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [492], by (Select) 492] Z >= Z by (Meta) 493] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [494] and [497], by (Stat) 494] cons(X, Y) > Y because [495], by definition 495] cons*(X, Y) >= Y because [496], by (Select) 496] Y >= Y by (Meta) 497] Z >= Z by (Meta) 498] locker2!6220map!6220claim!6220lock(_|_, X, Y) >= _|_ by (Bot) 499] locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because [500], by (Star) 500] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because locker2!6220map!6220claim!6220lock > cons, [501] and [507], by (Copy) 501] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220claim!6220lock(X, Z, U) because locker2!6220map!6220claim!6220lock > locker2!6220claim!6220lock, [502], [503] and [505], by (Copy) 502] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= X because [488], by (Select) 503] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= Z because [504], by (Select) 504] Z >= Z by (Meta) 505] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= U because [506], by (Select) 506] U >= U by (Meta) 507] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220map!6220claim!6220lock(Y, Z, U) because locker2!6220map!6220claim!6220lock in Mul, [494], [508] and [509], by (Stat) 508] Z >= Z by (Meta) 509] U >= U by (Meta) 510] locker2!6220map!6220add!6220pending(_|_, X, Y) >= _|_ by (Bot) 511] locker2!6220promote!6220pending(X, Y) >= case0(Y, X, record!6220extract(X, _|_, pending)) because [512], by (Star) 512] locker2!6220promote!6220pending*(X, Y) >= case0(Y, X, record!6220extract(X, _|_, pending)) because locker2!6220promote!6220pending > case0, [513], [514] and [515], by (Copy) 513] locker2!6220promote!6220pending*(X, Y) >= Y because [509], by (Select) 514] locker2!6220promote!6220pending*(X, Y) >= X because [490], by (Select) 515] locker2!6220promote!6220pending*(X, Y) >= record!6220extract(X, _|_, pending) because locker2!6220promote!6220pending > record!6220extract, [514], [516] and [517], by (Copy) 516] locker2!6220promote!6220pending*(X, Y) >= _|_ by (Bot) 517] locker2!6220promote!6220pending*(X, Y) >= pending because locker2!6220promote!6220pending > pending, by (Copy) 518] case0(X, Y, cons(X, Z)) > record!6220updates(Y, _|_, cons(tuple(_|_, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), _|_))) because [519], by definition 519] case0*(X, Y, cons(X, Z)) >= record!6220updates(Y, _|_, cons(tuple(_|_, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), _|_))) because case0 > record!6220updates, [520], [521] and [522], by (Copy) 520] case0*(X, Y, cons(X, Z)) >= Y because [490], by (Select) 521] case0*(X, Y, cons(X, Z)) >= _|_ by (Bot) 522] case0*(X, Y, cons(X, Z)) >= cons(tuple(_|_, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), _|_)) because case0 > cons, [523] and [527], by (Copy) 523] case0*(X, Y, cons(X, Z)) >= tuple(_|_, tuplenil(X)) because case0 > tuple, [524] and [525], by (Copy) 524] case0*(X, Y, cons(X, Z)) >= _|_ by (Bot) 525] case0*(X, Y, cons(X, Z)) >= tuplenil(X) because case0 > tuplenil and [526], by (Copy) 526] case0*(X, Y, cons(X, Z)) >= X because [509], by (Select) 527] case0*(X, Y, cons(X, Z)) >= cons(tuple(pending, tuplenil(Z)), _|_) because case0 > cons, [528] and [537], by (Copy) 528] case0*(X, Y, cons(X, Z)) >= tuple(pending, tuplenil(Z)) because case0 > tuple, [529] and [532], by (Copy) 529] case0*(X, Y, cons(X, Z)) >= pending because [530], by (Select) 530] cons(X, Z) >= pending because [531], by (Star) 531] cons*(X, Z) >= pending because cons > pending, by (Copy) 532] case0*(X, Y, cons(X, Z)) >= tuplenil(Z) because case0 > tuplenil and [533], by (Copy) 533] case0*(X, Y, cons(X, Z)) >= Z because [534], by (Select) 534] cons(X, Z) >= Z because [535], by (Star) 535] cons*(X, Z) >= Z because [536], by (Select) 536] Z >= Z by (Meta) 537] case0*(X, Y, cons(X, Z)) >= _|_ by (Bot) 538] case0(X, Y, Z) > Y because [539], by definition 539] case0*(X, Y, Z) >= Y because [490], by (Select) 540] locker2!6220remove!6220pending(X, Y) > record!6220updates(X, _|_, cons(tuple(pending, tuplenil(subtract(record!6220extract(X, _|_, pending), cons(Y, _|_)))), _|_)) because [541], by definition 541] locker2!6220remove!6220pending*(X, Y) >= record!6220updates(X, _|_, cons(tuple(pending, tuplenil(subtract(record!6220extract(X, _|_, pending), cons(Y, _|_)))), _|_)) because locker2!6220remove!6220pending > record!6220updates, [542], [543] and [544], by (Copy) 542] locker2!6220remove!6220pending*(X, Y) >= X because [490], by (Select) 543] locker2!6220remove!6220pending*(X, Y) >= _|_ by (Bot) 544] locker2!6220remove!6220pending*(X, Y) >= cons(tuple(pending, tuplenil(subtract(record!6220extract(X, _|_, pending), cons(Y, _|_)))), _|_) because locker2!6220remove!6220pending > cons, [545] and [552], by (Copy) 545] locker2!6220remove!6220pending*(X, Y) >= tuple(pending, tuplenil(subtract(record!6220extract(X, _|_, pending), cons(Y, _|_)))) because locker2!6220remove!6220pending > tuple, [546] and [547], by (Copy) 546] locker2!6220remove!6220pending*(X, Y) >= pending because locker2!6220remove!6220pending > pending, by (Copy) 547] locker2!6220remove!6220pending*(X, Y) >= tuplenil(subtract(record!6220extract(X, _|_, pending), cons(Y, _|_))) because locker2!6220remove!6220pending > tuplenil and [548], by (Copy) 548] locker2!6220remove!6220pending*(X, Y) >= subtract(record!6220extract(X, _|_, pending), cons(Y, _|_)) because locker2!6220remove!6220pending > subtract, [549] and [550], by (Copy) 549] locker2!6220remove!6220pending*(X, Y) >= record!6220extract(X, _|_, pending) because locker2!6220remove!6220pending > record!6220extract, [542], [543] and [546], by (Copy) 550] locker2!6220remove!6220pending*(X, Y) >= cons(Y, _|_) because locker2!6220remove!6220pending > cons, [551] and [552], by (Copy) 551] locker2!6220remove!6220pending*(X, Y) >= Y because [509], by (Select) 552] locker2!6220remove!6220pending*(X, Y) >= _|_ by (Bot) 553] locker2!6220add!6220pending(X, Y, Z) > case1(Z, Y, X, member(record!6220extract(X, _|_, _|_), Y)) because [554], by definition 554] locker2!6220add!6220pending*(X, Y, Z) >= case1(Z, Y, X, member(record!6220extract(X, _|_, _|_), Y)) because locker2!6220add!6220pending > case1, [555], [556], [557] and [558], by (Copy) 555] locker2!6220add!6220pending*(X, Y, Z) >= Z because [509], by (Select) 556] locker2!6220add!6220pending*(X, Y, Z) >= Y because [508], by (Select) 557] locker2!6220add!6220pending*(X, Y, Z) >= X because [490], by (Select) 558] locker2!6220add!6220pending*(X, Y, Z) >= member(record!6220extract(X, _|_, _|_), Y) because locker2!6220add!6220pending > member, [559] and [556], by (Copy) 559] locker2!6220add!6220pending*(X, Y, Z) >= record!6220extract(X, _|_, _|_) because locker2!6220add!6220pending > record!6220extract, [557], [560] and [561], by (Copy) 560] locker2!6220add!6220pending*(X, Y, Z) >= _|_ by (Bot) 561] locker2!6220add!6220pending*(X, Y, Z) >= _|_ by (Bot) 562] case1(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(pending, tuplenil(append(record!6220extract(Z, _|_, pending), cons(X, _|_)))), _|_)) because [563], by (Star) 563] case1*(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(pending, tuplenil(append(record!6220extract(Z, _|_, pending), cons(X, _|_)))), _|_)) because case1 > record!6220updates, [564], [565] and [566], by (Copy) 564] case1*(X, Y, Z, true) >= Z because [490], by (Select) 565] case1*(X, Y, Z, true) >= _|_ by (Bot) 566] case1*(X, Y, Z, true) >= cons(tuple(pending, tuplenil(append(record!6220extract(Z, _|_, pending), cons(X, _|_)))), _|_) because case1 > cons, [567] and [574], by (Copy) 567] case1*(X, Y, Z, true) >= tuple(pending, tuplenil(append(record!6220extract(Z, _|_, pending), cons(X, _|_)))) because case1 > tuple, [568] and [569], by (Copy) 568] case1*(X, Y, Z, true) >= pending because case1 > pending, by (Copy) 569] case1*(X, Y, Z, true) >= tuplenil(append(record!6220extract(Z, _|_, pending), cons(X, _|_))) because case1 > tuplenil and [570], by (Copy) 570] case1*(X, Y, Z, true) >= append(record!6220extract(Z, _|_, pending), cons(X, _|_)) because case1 > append, [571] and [572], by (Copy) 571] case1*(X, Y, Z, true) >= record!6220extract(Z, _|_, pending) because case1 > record!6220extract, [564], [565] and [568], by (Copy) 572] case1*(X, Y, Z, true) >= cons(X, _|_) because case1 > cons, [573] and [574], by (Copy) 573] case1*(X, Y, Z, true) >= X because [509], by (Select) 574] case1*(X, Y, Z, true) >= _|_ by (Bot) 575] case1(X, Y, Z, _|_) > Z because [576], by definition 576] case1*(X, Y, Z, _|_) >= Z because [490], by (Select) 577] locker2!6220release!6220lock(X, Y) > case2(Y, X, gen!6220modtageq(Y, record!6220extract(X, _|_, _|_))) because [578], by definition 578] locker2!6220release!6220lock*(X, Y) >= case2(Y, X, gen!6220modtageq(Y, record!6220extract(X, _|_, _|_))) because locker2!6220release!6220lock > case2, [579], [580] and [581], by (Copy) 579] locker2!6220release!6220lock*(X, Y) >= Y because [509], by (Select) 580] locker2!6220release!6220lock*(X, Y) >= X because [490], by (Select) 581] locker2!6220release!6220lock*(X, Y) >= gen!6220modtageq(Y, record!6220extract(X, _|_, _|_)) because locker2!6220release!6220lock > gen!6220modtageq, [579] and [582], by (Copy) 582] locker2!6220release!6220lock*(X, Y) >= record!6220extract(X, _|_, _|_) because locker2!6220release!6220lock > record!6220extract, [580], [583] and [584], by (Copy) 583] locker2!6220release!6220lock*(X, Y) >= _|_ by (Bot) 584] locker2!6220release!6220lock*(X, Y) >= _|_ by (Bot) 585] case2(X, Y, true) > record!6220updates(Y, _|_, cons(tuple(_|_, _|_), _|_)) because [586], by definition 586] case2*(X, Y, true) >= record!6220updates(Y, _|_, cons(tuple(_|_, _|_), _|_)) because case2 > record!6220updates, [587], [588] and [589], by (Copy) 587] case2*(X, Y, true) >= Y because [490], by (Select) 588] case2*(X, Y, true) >= _|_ by (Bot) 589] case2*(X, Y, true) >= cons(tuple(_|_, _|_), _|_) because case2 > cons, [590] and [593], by (Copy) 590] case2*(X, Y, true) >= tuple(_|_, _|_) because case2 > tuple, [591] and [592], by (Copy) 591] case2*(X, Y, true) >= _|_ by (Bot) 592] case2*(X, Y, true) >= _|_ by (Bot) 593] case2*(X, Y, true) >= _|_ by (Bot) 594] case4(X, Y, Z) >= _|_ by (Bot) 595] locker2!6220obtainables(_|_, X) >= true because [596], by (Star) 596] locker2!6220obtainables*(_|_, X) >= true because locker2!6220obtainables > true, by (Copy) 597] locker2!6220obtainables(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, pending))) because [598], by (Star) 598] locker2!6220obtainables*(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, pending))) because locker2!6220obtainables = case5, [494], [599], [600], [602] and [603], by (Stat) 599] locker2!6220obtainables*(cons(X, Y), Z) >= Z because [509], by (Select) 600] locker2!6220obtainables*(cons(X, Y), Z) >= Y because [601], by (Select) 601] cons(X, Y) >= Y because [495], by (Star) 602] locker2!6220obtainables*(cons(X, Y), Z) >= X because [488], by (Select) 603] locker2!6220obtainables*(cons(X, Y), Z) >= member(Z, record!6220extract(X, _|_, pending)) because locker2!6220obtainables > member, [599] and [604], by (Copy) 604] locker2!6220obtainables*(cons(X, Y), Z) >= record!6220extract(X, _|_, pending) because locker2!6220obtainables > record!6220extract, [602], [605] and [606], by (Copy) 605] locker2!6220obtainables*(cons(X, Y), Z) >= _|_ by (Bot) 606] locker2!6220obtainables*(cons(X, Y), Z) >= pending because [607], by (Select) 607] cons(X, Y) >= pending because [608], by (Star) 608] cons*(X, Y) >= pending because cons > pending, by (Copy) 609] case5(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) because [610], by (Star) 610] case5*(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) because case5 > andt, [611] and [614], by (Copy) 611] case5*(X, Y, Z, true) >= locker2!6220obtainable(Z, X) because case5 > locker2!6220obtainable, [612] and [613], by (Copy) 612] case5*(X, Y, Z, true) >= Z because [490], by (Select) 613] case5*(X, Y, Z, true) >= X because [509], by (Select) 614] case5*(X, Y, Z, true) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [509], [615], [616] and [613], by (Stat) 615] Y >= Y by (Meta) 616] case5*(X, Y, Z, true) >= Y because [615], by (Select) 617] case5(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because [618], by (Star) 618] case5*(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [509], [615], [619] and [620], by (Stat) 619] case5*(X, Y, Z, _|_) >= Y because [615], by (Select) 620] case5*(X, Y, Z, _|_) >= X because [509], by (Select) 621] locker2!6220check!6220available(X, _|_) > _|_ because [622], by definition 622] locker2!6220check!6220available*(X, _|_) >= _|_ by (Bot) 623] locker2!6220check!6220available(X, cons(Y, Z)) > case6(Z, Y, X, equal(X, record!6220extract(Y, _|_, _|_))) because [624], by definition 624] locker2!6220check!6220available*(X, cons(Y, Z)) >= case6(Z, Y, X, equal(X, record!6220extract(Y, _|_, _|_))) because locker2!6220check!6220available = case6, [625], [494], [626], [627], [628] and [629], by (Stat) 625] X >= X by (Meta) 626] locker2!6220check!6220available*(X, cons(Y, Z)) >= Z because [601], by (Select) 627] locker2!6220check!6220available*(X, cons(Y, Z)) >= Y because [488], by (Select) 628] locker2!6220check!6220available*(X, cons(Y, Z)) >= X because [625], by (Select) 629] locker2!6220check!6220available*(X, cons(Y, Z)) >= equal(X, record!6220extract(Y, _|_, _|_)) because locker2!6220check!6220available > equal, [628] and [630], by (Copy) 630] locker2!6220check!6220available*(X, cons(Y, Z)) >= record!6220extract(Y, _|_, _|_) because locker2!6220check!6220available > record!6220extract, [627], [631] and [632], by (Copy) 631] locker2!6220check!6220available*(X, cons(Y, Z)) >= _|_ by (Bot) 632] locker2!6220check!6220available*(X, cons(Y, Z)) >= _|_ by (Bot) 633] case6(X, Y, Z, true) > andt(equal(record!6220extract(Y, _|_, _|_), _|_), equal(record!6220extract(Y, _|_, pending), _|_)) because [634], by definition 634] case6*(X, Y, Z, true) >= andt(equal(record!6220extract(Y, _|_, _|_), _|_), equal(record!6220extract(Y, _|_, pending), _|_)) because case6 > andt, [635] and [641], by (Copy) 635] case6*(X, Y, Z, true) >= equal(record!6220extract(Y, _|_, _|_), _|_) because case6 > equal, [636] and [640], by (Copy) 636] case6*(X, Y, Z, true) >= record!6220extract(Y, _|_, _|_) because case6 > record!6220extract, [637], [638] and [639], by (Copy) 637] case6*(X, Y, Z, true) >= Y because [490], by (Select) 638] case6*(X, Y, Z, true) >= _|_ by (Bot) 639] case6*(X, Y, Z, true) >= _|_ by (Bot) 640] case6*(X, Y, Z, true) >= _|_ by (Bot) 641] case6*(X, Y, Z, true) >= equal(record!6220extract(Y, _|_, pending), _|_) because case6 > equal, [642] and [640], by (Copy) 642] case6*(X, Y, Z, true) >= record!6220extract(Y, _|_, pending) because case6 > record!6220extract, [637], [638] and [643], by (Copy) 643] case6*(X, Y, Z, true) >= pending because case6 > pending, by (Copy) 644] case6(X, Y, Z, _|_) > locker2!6220check!6220available(Z, X) because [645], by definition 645] case6*(X, Y, Z, _|_) >= locker2!6220check!6220available(Z, X) because case6 = locker2!6220check!6220available, [615], [625], [646] and [647], by (Stat) 646] case6*(X, Y, Z, _|_) >= Z because [625], by (Select) 647] case6*(X, Y, Z, _|_) >= X because [615], by (Select) 648] locker2!6220check!6220availables(_|_, X) >= true because [649], by (Star) 649] locker2!6220check!6220availables*(_|_, X) >= true because locker2!6220check!6220availables > true, by (Copy) 650] locker2!6220check!6220availables(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because [651], by (Star) 651] locker2!6220check!6220availables*(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because locker2!6220check!6220availables > andt, [652] and [657], by (Copy) 652] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220available(X, Z) because locker2!6220check!6220availables > locker2!6220check!6220available, [653] and [656], by (Copy) 653] locker2!6220check!6220availables*(cons(X, Y), Z) >= X because [654], by (Select) 654] cons(X, Y) >= X because [655], by (Star) 655] cons*(X, Y) >= X because [625], by (Select) 656] locker2!6220check!6220availables*(cons(X, Y), Z) >= Z because [615], by (Select) 657] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220availables(Y, Z) because locker2!6220check!6220availables in Mul, [658] and [615], by (Stat) 658] cons(X, Y) > Y because [659], by definition 659] cons*(X, Y) >= Y because [508], by (Select) 660] locker2!6220adduniq(_|_, X) >= X because [661], by (Star) 661] locker2!6220adduniq*(_|_, X) >= X because [662], by (Select) 662] X >= X by (Meta) 663] append(cons(X, Y), Z) > cons(X, append(Y, Z)) because [664], by definition 664] append*(cons(X, Y), Z) >= cons(X, append(Y, Z)) because append > cons, [665] and [669], by (Copy) 665] append*(cons(X, Y), Z) >= X because [666], by (Select) 666] cons(X, Y) >= X because [667], by (Star) 667] cons*(X, Y) >= X because [668], by (Select) 668] X >= X by (Meta) 669] append*(cons(X, Y), Z) >= append(Y, Z) because append in Mul, [670] and [673], by (Stat) 670] cons(X, Y) > Y because [671], by definition 671] cons*(X, Y) >= Y because [672], by (Select) 672] Y >= Y by (Meta) 673] Z >= Z by (Meta) 674] subtract(X, _|_) > X because [675], by definition 675] subtract*(X, _|_) >= X because [673], by (Select) 676] subtract(X, cons(Y, Z)) > subtract(delete(Y, X), Z) because [677], by definition 677] subtract*(X, cons(Y, Z)) >= subtract(delete(Y, X), Z) because [670], [678] and [681], by (Stat) 678] subtract*(X, cons(Y, Z)) >= delete(Y, X) because subtract > delete, [679] and [680], by (Copy) 679] subtract*(X, cons(Y, Z)) >= Y because [666], by (Select) 680] subtract*(X, cons(Y, Z)) >= X because [673], by (Select) 681] subtract*(X, cons(Y, Z)) >= Z because [682], by (Select) 682] cons(Y, Z) >= Z because [671], by (Star) 683] delete(X, _|_) >= _|_ by (Bot) 684] delete(X, cons(Y, Z)) >= case8(Z, Y, X, equal(X, Y)) because [685], by (Star) 685] delete*(X, cons(Y, Z)) >= case8(Z, Y, X, equal(X, Y)) because delete = case8, [670], [686], [687], [688] and [690], by (Stat) 686] delete*(X, cons(Y, Z)) >= Z because [682], by (Select) 687] delete*(X, cons(Y, Z)) >= Y because [666], by (Select) 688] delete*(X, cons(Y, Z)) >= X because [689], by (Select) 689] X >= X by (Meta) 690] delete*(X, cons(Y, Z)) >= equal(X, Y) because delete > equal, [688] and [687], by (Copy) 691] case8(X, Y, Z, true) >= X because [692], by (Star) 692] case8*(X, Y, Z, true) >= X because [672], by (Select) 693] case8(X, Y, Z, _|_) >= cons(Y, delete(Z, X)) because [694], by (Star) 694] case8*(X, Y, Z, _|_) >= cons(Y, delete(Z, X)) because case8 > cons, [695] and [696], by (Copy) 695] case8*(X, Y, Z, _|_) >= Y because [668], by (Select) 696] case8*(X, Y, Z, _|_) >= delete(Z, X) because case8 = delete, [697], [698], [699] and [700], by (Stat) 697] X >= X by (Meta) 698] Z >= Z by (Meta) 699] case8*(X, Y, Z, _|_) >= Z because [698], by (Select) 700] case8*(X, Y, Z, _|_) >= X because [697], by (Select) 701] gen!6220tag(X) >= tuple(X, tuplenil(_|_)) because [702], by (Star) 702] gen!6220tag*(X) >= tuple(X, tuplenil(_|_)) because gen!6220tag > tuple, [703] and [705], by (Copy) 703] gen!6220tag*(X) >= X because [704], by (Select) 704] X >= X by (Meta) 705] gen!6220tag*(X) >= tuplenil(_|_) because gen!6220tag > tuplenil and [706], by (Copy) 706] gen!6220tag*(X) >= _|_ by (Bot) 707] gen!6220modtageq(X, Y) >= equal(X, Y) because [708], by (Star) 708] gen!6220modtageq*(X, Y) >= equal(X, Y) because gen!6220modtageq > equal, [709] and [711], by (Copy) 709] gen!6220modtageq*(X, Y) >= X because [710], by (Select) 710] X >= X by (Meta) 711] gen!6220modtageq*(X, Y) >= Y because [712], by (Select) 712] Y >= Y by (Meta) 713] member(X, _|_) >= _|_ by (Bot) 714] member(X, cons(Y, Z)) > case9(Z, Y, X, equal(X, Y)) because [715], by definition 715] member*(X, cons(Y, Z)) >= case9(Z, Y, X, equal(X, Y)) because member = case9, [670], [716], [717], [718] and [719], by (Stat) 716] member*(X, cons(Y, Z)) >= Z because [682], by (Select) 717] member*(X, cons(Y, Z)) >= Y because [666], by (Select) 718] member*(X, cons(Y, Z)) >= X because [698], by (Select) 719] member*(X, cons(Y, Z)) >= equal(X, Y) because member > equal, [718] and [717], by (Copy) 720] case9(X, Y, Z, true) >= true because [721], by (Star) 721] case9*(X, Y, Z, true) >= true because case9 > true, by (Copy) 722] case9(X, Y, Z, _|_) >= member(Z, X) because [723], by (Star) 723] case9*(X, Y, Z, _|_) >= member(Z, X) because case9 = member, [697], [698], [724] and [725], by (Stat) 724] case9*(X, Y, Z, _|_) >= Z because [698], by (Select) 725] case9*(X, Y, Z, _|_) >= X because [697], by (Select) 726] eqs(_|_, _|_) >= _|_ by (Bot) 727] eqs(_|_, stack(X, Y)) >= _|_ by (Bot) 728] eqs(stack(X, Y), _|_) >= _|_ by (Bot) 729] eqs(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because [730], by (Star) 730] eqs*(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because eqs > and, [731] and [740], by (Copy) 731] eqs*(stack(X, Y), stack(Z, U)) >= eqt(X, Z) because eqs > eqt, [732] and [736], by (Copy) 732] eqs*(stack(X, Y), stack(Z, U)) >= X because [733], by (Select) 733] stack(X, Y) >= X because [734], by (Star) 734] stack*(X, Y) >= X because [735], by (Select) 735] X >= X by (Meta) 736] eqs*(stack(X, Y), stack(Z, U)) >= Z because [737], by (Select) 737] stack(Z, U) >= Z because [738], by (Star) 738] stack*(Z, U) >= Z because [739], by (Select) 739] Z >= Z by (Meta) 740] eqs*(stack(X, Y), stack(Z, U)) >= eqs(Y, U) because eqs in Mul, [741] and [744], by (Stat) 741] stack(X, Y) >= Y because [742], by (Star) 742] stack*(X, Y) >= Y because [743], by (Select) 743] Y >= Y by (Meta) 744] stack(Z, U) > U because [745], by definition 745] stack*(Z, U) >= U because [746], by (Select) 746] U >= U by (Meta) 747] pushs(X, Y) > stack(X, Y) because [748], by definition 748] pushs*(X, Y) >= stack(X, Y) because pushs > stack, [749] and [750], by (Copy) 749] pushs*(X, Y) >= X because [735], by (Select) 750] pushs*(X, Y) >= Y because [743], by (Select) 751] stack(X, Y) >= Y because [742], by (Star) 752] stack(X, Y) >= X because [734], by (Star) 753] istops(X, _|_) >= _|_ by (Bot) 754] istops(X, stack(Y, Z)) > eqt(X, Y) because [755], by definition 755] istops*(X, stack(Y, Z)) >= eqt(X, Y) because istops > eqt, [756] and [757], by (Copy) 756] istops*(X, stack(Y, Z)) >= X because [735], by (Select) 757] istops*(X, stack(Y, Z)) >= Y because [758], by (Select) 758] stack(Y, Z) >= Y because [759], by (Star) 759] stack*(Y, Z) >= Y because [739], by (Select) 760] eqc(nocalls, nocalls) >= _|_ by (Bot) 761] eqc(nocalls, calls(X, Y, Z)) >= _|_ by (Bot) 762] eqc(calls(X, Y, Z), nocalls) >= _|_ by (Bot) 763] eqc(calls(X, Y, Z), calls(U, V, W)) > and(eqt(X, U), and(eqs(Y, V), eqc(Z, W))) because [764], by definition 764] eqc*(calls(X, Y, Z), calls(U, V, W)) >= and(eqt(X, U), and(eqs(Y, V), eqc(Z, W))) because eqc > and, [765] and [772], by (Copy) 765] eqc*(calls(X, Y, Z), calls(U, V, W)) >= eqt(X, U) because eqc > eqt, [766] and [769], by (Copy) 766] eqc*(calls(X, Y, Z), calls(U, V, W)) >= X because [767], by (Select) 767] calls(X, Y, Z) >= X because [768], by (Star) 768] calls*(X, Y, Z) >= X because [735], by (Select) 769] eqc*(calls(X, Y, Z), calls(U, V, W)) >= U because [770], by (Select) 770] calls(U, V, W) >= U because [771], by (Star) 771] calls*(U, V, W) >= U because [739], by (Select) 772] eqc*(calls(X, Y, Z), calls(U, V, W)) >= and(eqs(Y, V), eqc(Z, W)) because eqc > and, [773] and [780], by (Copy) 773] eqc*(calls(X, Y, Z), calls(U, V, W)) >= eqs(Y, V) because eqc > eqs, [774] and [777], by (Copy) 774] eqc*(calls(X, Y, Z), calls(U, V, W)) >= Y because [775], by (Select) 775] calls(X, Y, Z) >= Y because [776], by (Star) 776] calls*(X, Y, Z) >= Y because [743], by (Select) 777] eqc*(calls(X, Y, Z), calls(U, V, W)) >= V because [778], by (Select) 778] calls(U, V, W) >= V because [779], by (Star) 779] calls*(U, V, W) >= V because [746], by (Select) 780] eqc*(calls(X, Y, Z), calls(U, V, W)) >= eqc(Z, W) because eqc in Mul, [781] and [784], by (Stat) 781] calls(X, Y, Z) > Z because [782], by definition 782] calls*(X, Y, Z) >= Z because [783], by (Select) 783] Z >= Z by (Meta) 784] calls(U, V, W) >= W because [785], by (Star) 785] calls*(U, V, W) >= W because [786], by (Select) 786] W >= W by (Meta) 787] push(X, Y, nocalls) > calls(X, stack(Y, _|_), nocalls) because [788], by definition 788] push*(X, Y, nocalls) >= calls(X, stack(Y, _|_), nocalls) because push > calls, [789], [790] and [793], by (Copy) 789] push*(X, Y, nocalls) >= X because [735], by (Select) 790] push*(X, Y, nocalls) >= stack(Y, _|_) because push > stack, [791] and [792], by (Copy) 791] push*(X, Y, nocalls) >= Y because [739], by (Select) 792] push*(X, Y, nocalls) >= _|_ by (Bot) 793] push*(X, Y, nocalls) >= nocalls because push > nocalls, by (Copy) 794] push(X, Y, calls(Z, U, V)) >= push1(X, Y, Z, U, V, eqt(X, Z)) because [795], by (Star) 795] push*(X, Y, calls(Z, U, V)) >= push1(X, Y, Z, U, V, eqt(X, Z)) because push > push1, [796], [797], [798], [802], [805] and [808], by (Copy) 796] push*(X, Y, calls(Z, U, V)) >= X because [735], by (Select) 797] push*(X, Y, calls(Z, U, V)) >= Y because [739], by (Select) 798] push*(X, Y, calls(Z, U, V)) >= Z because [799], by (Select) 799] calls(Z, U, V) >= Z because [800], by (Star) 800] calls*(Z, U, V) >= Z because [801], by (Select) 801] Z >= Z by (Meta) 802] push*(X, Y, calls(Z, U, V)) >= U because [803], by (Select) 803] calls(Z, U, V) >= U because [804], by (Star) 804] calls*(Z, U, V) >= U because [743], by (Select) 805] push*(X, Y, calls(Z, U, V)) >= V because [806], by (Select) 806] calls(Z, U, V) >= V because [807], by (Star) 807] calls*(Z, U, V) >= V because [783], by (Select) 808] push*(X, Y, calls(Z, U, V)) >= eqt(X, Z) because push > eqt, [796] and [798], by (Copy) 809] push1(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because [810], by (Star) 810] push1*(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because push1 > calls, [811], [812] and [815], by (Copy) 811] push1*(X, Y, Z, U, V, _|_) >= Z because [801], by (Select) 812] push1*(X, Y, Z, U, V, _|_) >= pushs(Y, U) because push1 > pushs, [813] and [814], by (Copy) 813] push1*(X, Y, Z, U, V, _|_) >= Y because [739], by (Select) 814] push1*(X, Y, Z, U, V, _|_) >= U because [743], by (Select) 815] push1*(X, Y, Z, U, V, _|_) >= V because [783], by (Select) We can thus remove the following rules: and(X, T) => X imp(T, X) => X if(T, X, Y) => X eqt(pending, false) => F eqt(pending, ok) => F eqt(pending, tuple(X, Y)) => F eqt(release, a) => F eqt(release, locker) => F eqt(request, undefined) => F eqt(request, int(X)) => F eqt(resource, nil) => F eqt(resource, excl) => F eqt(resource, release) => F eqt(resource, tuple(X, Y)) => F eqt(resource, tuplenil(X)) => F eqt(tag, cons(X, Y)) => F eqt(tag, tuplenil(X)) => F eqt(true, false) => F eqt(true, int(X)) => F eqt(pid(X), pid(Y)) => eqt(X, Y) eqt(int(X), tag) => F eqt(tuple(X, Y), undefined) => F eqt(tuplenil(X), a) => F eqt(tuplenil(X), tag) => F eqt(tuplenil(X), cons(Y, Z)) => F eqt(tuplenil(X), tuple(Y, Z)) => F element(int(s(0)), tuplenil(X)) => X element(int(s(0)), tuple(X, Y)) => X record!6220updates(X, Y, cons(tuple(Z, tuplenil(U)), V)) => record!6220updates(record!6220update(X, Y, Z, U), Y, V) case0(X, Y, cons(X, Z)) => record!6220updates(Y, lock, cons(tuple(excl, tuplenil(X)), cons(tuple(pending, tuplenil(Z)), nil))) case0(X, Y, Z) => Y locker2!6220remove!6220pending(X, Y) => record!6220updates(X, lock, cons(tuple(pending, tuplenil(subtract(record!6220extract(X, lock, pending), cons(Y, nil)))), nil)) locker2!6220add!6220pending(X, Y, Z) => case1(Z, Y, X, member(record!6220extract(X, lock, resource), Y)) case1(X, Y, Z, false) => Z locker2!6220release!6220lock(X, Y) => case2(Y, X, gen!6220modtageq(Y, record!6220extract(X, lock, excl))) case2(X, Y, true) => record!6220updates(Y, lock, cons(tuple(excllock, excl), nil)) locker2!6220check!6220available(X, nil) => false locker2!6220check!6220available(X, cons(Y, Z)) => case6(Z, Y, X, equal(X, record!6220extract(Y, lock, resource))) case6(X, Y, Z, true) => andt(equal(record!6220extract(Y, lock, excl), nil), equal(record!6220extract(Y, lock, pending), nil)) case6(X, Y, Z, false) => locker2!6220check!6220available(Z, X) append(cons(X, Y), Z) => cons(X, append(Y, Z)) subtract(X, nil) => X subtract(X, cons(Y, Z)) => subtract(delete(Y, X), Z) member(X, cons(Y, Z)) => case9(Z, Y, X, equal(X, Y)) pushs(X, Y) => stack(X, Y) istops(X, stack(Y, Z)) => eqt(X, Y) eqc(calls(X, Y, Z), calls(U, V, W)) => and(eqt(X, U), and(eqs(Y, V), eqc(Z, W))) push(X, Y, nocalls) => calls(X, stack(Y, empty), nocalls) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(T, T) >? T or(F, T) >? T or(T, F) >? T or(F, F) >? F and(T, X) >? X and(F, X) >? F and(X, F) >? F imp(F, X) >? T not(T) >? F not(F) >? T if(F, X, Y) >? Y eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eq(F, T) >? F eqt(nil, undefined) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(nil, tuplenil(X)) >? F eqt(a, nil) >? F eqt(a, a) >? T eqt(a, excl) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, locker) >? F eqt(a, mcrlrecord) >? F eqt(a, ok) >? F eqt(a, pending) >? F eqt(a, release) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, true) >? F eqt(a, undefined) >? F eqt(a, pid(X)) >? F eqt(a, int(X)) >? F eqt(a, cons(X, Y)) >? F eqt(a, tuple(X, Y)) >? F eqt(a, tuplenil(X)) >? F eqt(excl, nil) >? F eqt(excl, a) >? F eqt(excl, excl) >? T eqt(excl, false) >? F eqt(excl, lock) >? F eqt(excl, locker) >? F eqt(excl, mcrlrecord) >? F eqt(excl, ok) >? F eqt(excl, pending) >? F eqt(excl, release) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, true) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(excl, eqt(false, int(X))) >? F eqt(false, cons(X, Y)) >? F eqt(false, tuple(X, Y)) >? F eqt(false, tuplenil(X)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, excl) >? F eqt(lock, false) >? F eqt(lock, lock) >? T eqt(lock, locker) >? F eqt(lock, mcrlrecord) >? F eqt(lock, ok) >? F eqt(lock, pending) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, undefined) >? F eqt(lock, pid(X)) >? F eqt(lock, int(X)) >? F eqt(lock, cons(X, Y)) >? F eqt(lock, tuple(X, Y)) >? F eqt(lock, tuplenil(X)) >? F eqt(locker, nil) >? F eqt(locker, a) >? F eqt(locker, excl) >? F eqt(locker, false) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, pending) >? F eqt(locker, release) >? F eqt(locker, request) >? F eqt(locker, resource) >? F eqt(locker, tag) >? F eqt(locker, true) >? F eqt(locker, undefined) >? F eqt(locker, pid(X)) >? F eqt(locker, int(X)) >? F eqt(locker, cons(X, Y)) >? F eqt(locker, tuple(X, Y)) >? F eqt(locker, tuplenil(X)) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, a) >? F eqt(mcrlrecord, excl) >? F eqt(mcrlrecord, false) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, ok) >? F eqt(mcrlrecord, pending) >? F eqt(mcrlrecord, release) >? F eqt(mcrlrecord, request) >? F eqt(mcrlrecord, resource) >? F eqt(ok, resource) >? F eqt(ok, tag) >? F eqt(ok, true) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, nil) >? F eqt(pending, a) >? F eqt(pending, excl) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, mcrlrecord) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, request) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(pending, undefined) >? F eqt(pending, pid(X)) >? F eqt(pending, int(X)) >? F eqt(pending, cons(X, Y)) >? F eqt(pending, tuplenil(X)) >? F eqt(release, nil) >? F eqt(release, excl) >? F eqt(release, false) >? F eqt(release, lock) >? F eqt(release, mcrlrecord) >? F eqt(release, ok) >? F eqt(request, mcrlrecord) >? F eqt(request, ok) >? F eqt(request, pending) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, true) >? F eqt(request, pid(X)) >? F eqt(request, cons(X, Y)) >? F eqt(request, tuple(X, Y)) >? F eqt(request, tuplenil(X)) >? F eqt(resource, a) >? F eqt(resource, false) >? F eqt(resource, lock) >? F eqt(resource, locker) >? F eqt(resource, mcrlrecord) >? F eqt(resource, ok) >? F eqt(resource, pending) >? F eqt(resource, request) >? F eqt(resource, resource) >? T eqt(resource, tag) >? F eqt(resource, true) >? F eqt(resource, undefined) >? F eqt(resource, pid(X)) >? F eqt(resource, int(X)) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, excl) >? F eqt(tag, false) >? F eqt(tag, lock) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, ok) >? F eqt(tag, pending) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, resource) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, pid(X)) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, nil) >? F eqt(true, a) >? F eqt(true, excl) >? F eqt(true, lock) >? F eqt(true, locker) >? F eqt(true, mcrlrecord) >? F eqt(true, ok) >? F eqt(true, pending) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, resource) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, pid(X)) >? F eqt(true, cons(X, Y)) >? F eqt(true, tuple(X, Y)) >? F eqt(true, tuplenil(X)) >? F eqt(undefined, nil) >? F eqt(undefined, a) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), nil) >? F eqt(pid(X), a) >? F eqt(pid(X), excl) >? F eqt(pid(X), false) >? F eqt(pid(X), lock) >? F eqt(pid(X), locker) >? F eqt(pid(X), mcrlrecord) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), release) >? F eqt(pid(X), request) >? F eqt(pid(X), resource) >? F eqt(pid(X), tag) >? F eqt(pid(X), true) >? F eqt(pid(X), undefined) >? F eqt(pid(X), int(Y)) >? F eqt(pid(X), cons(Y, Z)) >? F eqt(pid(X), tuple(Y, Z)) >? F eqt(pid(X), tuplenil(Y)) >? F eqt(int(X), nil) >? F eqt(int(X), a) >? F eqt(int(X), excl) >? F eqt(int(X), false) >? F eqt(int(X), lock) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), ok) >? F eqt(int(X), pending) >? F eqt(int(X), release) >? F eqt(int(X), request) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), resource) >? F eqt(cons(X, Y), tag) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), undefined) >? F eqt(cons(X, Y), pid(Z)) >? F eqt(cons(X, Y), int(Z)) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuple(Z, U)) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), excl) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), mcrlrecord) >? F eqt(tuple(X, Y), ok) >? F eqt(tuple(X, Y), pending) >? F eqt(tuple(X, Y), release) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), tag) >? F eqt(tuple(X, Y), true) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), int(Z)) >? F eqt(tuple(X, Y), cons(Z, U)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), excl) >? F eqt(tuplenil(X), false) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), ok) >? F eqt(tuplenil(X), pending) >? F eqt(tuplenil(X), release) >? F eqt(tuplenil(X), request) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F eqt(tuplenil(X), int(Y)) >? F eqt(tuplenil(X), tuplenil(Y)) >? eqt(X, Y) element(int(s(s(X))), tuple(Y, Z)) >? element(int(s(X)), Z) record!6220new(lock) >? tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) record!6220extract(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, resource) >? tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))) record!6220update(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, pending, U) >? tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(U))))) record!6220updates(X, Y, nil) >? X locker2!6220map!6220promote!6220pending(nil, X) >? nil locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(nil, X, Y) >? nil locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >? cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220map!6220add!6220pending(nil, X, Y) >? nil locker2!6220promote!6220pending(X, Y) >? case0(Y, X, record!6220extract(X, lock, pending)) case1(X, Y, Z, true) >? record!6220updates(Z, lock, cons(tuple(pending, tuplenil(append(record!6220extract(Z, lock, pending), cons(X, nil)))), nil)) case4(X, Y, Z) >? false locker2!6220obtainables(nil, X) >? true locker2!6220obtainables(cons(X, Y), Z) >? case5(Z, Y, X, member(Z, record!6220extract(X, lock, pending))) case5(X, Y, Z, true) >? andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, false) >? locker2!6220obtainables(Y, X) locker2!6220check!6220availables(nil, X) >? true locker2!6220check!6220availables(cons(X, Y), Z) >? andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(nil, X) >? X delete(X, nil) >? nil delete(X, cons(Y, Z)) >? case8(Z, Y, X, equal(X, Y)) case8(X, Y, Z, true) >? X case8(X, Y, Z, false) >? cons(Y, delete(Z, X)) gen!6220tag(X) >? tuple(X, tuplenil(tag)) gen!6220modtageq(X, Y) >? equal(X, Y) member(X, nil) >? false case9(X, Y, Z, true) >? true case9(X, Y, Z, false) >? member(Z, X) eqs(empty, empty) >? T eqs(empty, stack(X, Y)) >? F eqs(stack(X, Y), empty) >? F eqs(stack(X, Y), stack(Z, U)) >? and(eqt(X, Z), eqs(Y, U)) pops(stack(X, Y)) >? Y tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(nocalls, calls(X, Y, Z)) >? F eqc(calls(X, Y, Z), nocalls) >? F push(X, Y, calls(Z, U, V)) >? push1(X, Y, Z, U, V, eqt(X, Z)) push1(X, Y, Z, U, V, T) >? calls(Z, pushs(Y, U), V) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[case5(x_1, x_2, x_3, x_4)]] = case5(x_1, x_2, x_4, x_3) [[case8(x_1, x_2, x_3, x_4)]] = case8(x_1, x_3, x_2, x_4) [[delete(x_1, x_2)]] = delete(x_2, x_1) [[false]] = _|_ [[lock]] = _|_ [[locker2!6220obtainables(x_1, x_2)]] = locker2!6220obtainables(x_2, x_1) [[nil]] = _|_ [[not(x_1)]] = x_1 [[pending]] = _|_ [[pid(x_1)]] = x_1 We choose Lex = {case5, case8, delete, locker2!6220obtainables} and Mul = {a, and, andt, append, calls, case0, case1, case4, case9, cons, element, empty, eq, eqc, eqs, eqt, equal, excl, gen!6220modtageq, gen!6220tag, if, imp, int, istops, locker, locker2!6220adduniq, locker2!6220check!6220available, locker2!6220check!6220availables, locker2!6220claim!6220lock, locker2!6220map!6220add!6220pending, locker2!6220map!6220claim!6220lock, locker2!6220map!6220promote!6220pending, locker2!6220obtainable, locker2!6220promote!6220pending, mcrlrecord, member, nocalls, ok, or, pops, push, push1, pushs, record!6220extract, record!6220new, record!6220update, record!6220updates, release, request, resource, s, stack, tag, tops, true, tuple, tuplenil, undefined}, and the following precedence: nocalls > locker > locker2!6220check!6220availables > record!6220update > case5 = locker2!6220obtainables > push > locker2!6220map!6220claim!6220lock > andt > pops > case9 = member > case8 = delete > s > or > locker2!6220claim!6220lock > equal = gen!6220modtageq > locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending > case0 > eqs > case1 > int > cons > record!6220extract > excl > eqt > locker2!6220check!6220available > ok > and > mcrlrecord = record!6220new > gen!6220tag > tuple > stack > push1 = pushs > record!6220updates > calls > a > locker2!6220obtainable > empty > release > eqc > if > locker2!6220adduniq > eq > locker2!6220map!6220add!6220pending > request > undefined > resource > tuplenil > case4 > element > append > imp > tops > istops > tag > true Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ and(_|_, X) > X and(_|_, X) >= _|_ and(X, _|_) >= _|_ imp(_|_, X) >= _|_ _|_ >= _|_ _|_ >= _|_ if(_|_, X, Y) >= Y eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) > _|_ eqt(_|_, undefined) >= _|_ eqt(_|_, X) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(a, _|_) >= _|_ eqt(a, a) >= _|_ eqt(a, excl) >= _|_ eqt(a, _|_) >= _|_ eqt(a, _|_) >= _|_ eqt(a, locker) >= _|_ eqt(a, mcrlrecord) >= _|_ eqt(a, ok) >= _|_ eqt(a, _|_) >= _|_ eqt(a, release) >= _|_ eqt(a, request) >= _|_ eqt(a, resource) >= _|_ eqt(a, tag) >= _|_ eqt(a, true) >= _|_ eqt(a, undefined) >= _|_ eqt(a, X) >= _|_ eqt(a, int(X)) >= _|_ eqt(a, cons(X, Y)) >= _|_ eqt(a, tuple(X, Y)) >= _|_ eqt(a, tuplenil(X)) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, a) >= _|_ eqt(excl, excl) >= _|_ eqt(excl, _|_) > _|_ eqt(excl, _|_) >= _|_ eqt(excl, locker) >= _|_ eqt(excl, mcrlrecord) >= _|_ eqt(excl, ok) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, release) >= _|_ eqt(excl, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, tag) >= _|_ eqt(excl, true) >= _|_ eqt(excl, undefined) >= _|_ eqt(excl, X) >= _|_ eqt(excl, eqt(_|_, int(X))) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, excl) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, mcrlrecord) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, resource) >= _|_ eqt(_|_, tag) >= _|_ eqt(_|_, true) >= _|_ eqt(_|_, undefined) >= _|_ eqt(_|_, X) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, a) >= _|_ eqt(locker, excl) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, locker) >= _|_ eqt(locker, mcrlrecord) >= _|_ eqt(locker, ok) >= _|_ eqt(locker, _|_) > _|_ eqt(locker, release) >= _|_ eqt(locker, request) >= _|_ eqt(locker, resource) >= _|_ eqt(locker, tag) >= _|_ eqt(locker, true) >= _|_ eqt(locker, undefined) >= _|_ eqt(locker, X) > _|_ eqt(locker, int(X)) >= _|_ eqt(locker, cons(X, Y)) >= _|_ eqt(locker, tuple(X, Y)) >= _|_ eqt(locker, tuplenil(X)) >= _|_ eqt(mcrlrecord, _|_) >= _|_ eqt(mcrlrecord, a) >= _|_ eqt(mcrlrecord, excl) >= _|_ eqt(mcrlrecord, _|_) >= _|_ eqt(mcrlrecord, _|_) >= _|_ eqt(mcrlrecord, locker) >= _|_ eqt(mcrlrecord, mcrlrecord) >= _|_ eqt(mcrlrecord, ok) >= _|_ eqt(mcrlrecord, _|_) >= _|_ eqt(mcrlrecord, release) >= _|_ eqt(mcrlrecord, request) >= _|_ eqt(mcrlrecord, resource) >= _|_ eqt(ok, resource) >= _|_ eqt(ok, tag) >= _|_ eqt(ok, true) >= _|_ eqt(ok, undefined) >= _|_ eqt(ok, X) >= _|_ eqt(ok, int(X)) >= _|_ eqt(ok, cons(X, Y)) >= _|_ eqt(ok, tuple(X, Y)) >= _|_ eqt(ok, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, excl) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, mcrlrecord) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, resource) >= _|_ eqt(_|_, tag) >= _|_ eqt(_|_, true) >= _|_ eqt(_|_, undefined) >= _|_ eqt(_|_, X) >= _|_ eqt(_|_, int(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(release, _|_) >= _|_ eqt(release, excl) >= _|_ eqt(release, _|_) >= _|_ eqt(release, _|_) >= _|_ eqt(release, mcrlrecord) >= _|_ eqt(release, ok) >= _|_ eqt(request, mcrlrecord) >= _|_ eqt(request, ok) >= _|_ eqt(request, _|_) >= _|_ eqt(request, release) >= _|_ eqt(request, request) >= _|_ eqt(request, resource) >= _|_ eqt(request, tag) >= _|_ eqt(request, true) >= _|_ eqt(request, X) >= _|_ eqt(request, cons(X, Y)) >= _|_ eqt(request, tuple(X, Y)) >= _|_ eqt(request, tuplenil(X)) >= _|_ eqt(resource, a) >= _|_ eqt(resource, _|_) >= _|_ eqt(resource, _|_) >= _|_ eqt(resource, locker) >= _|_ eqt(resource, mcrlrecord) >= _|_ eqt(resource, ok) >= _|_ eqt(resource, _|_) >= _|_ eqt(resource, request) >= _|_ eqt(resource, resource) >= _|_ eqt(resource, tag) >= _|_ eqt(resource, true) >= _|_ eqt(resource, undefined) >= _|_ eqt(resource, X) >= _|_ eqt(resource, int(X)) >= _|_ eqt(resource, cons(X, Y)) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, a) >= _|_ eqt(tag, excl) > _|_ eqt(tag, _|_) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, locker) >= _|_ eqt(tag, mcrlrecord) >= _|_ eqt(tag, ok) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, release) >= _|_ eqt(tag, request) >= _|_ eqt(tag, resource) >= _|_ eqt(tag, tag) >= _|_ eqt(tag, true) >= _|_ eqt(tag, undefined) >= _|_ eqt(tag, X) >= _|_ eqt(tag, int(X)) >= _|_ eqt(tag, tuple(X, Y)) >= _|_ eqt(true, _|_) >= _|_ eqt(true, a) >= _|_ eqt(true, excl) >= _|_ eqt(true, _|_) >= _|_ eqt(true, locker) >= _|_ eqt(true, mcrlrecord) >= _|_ eqt(true, ok) >= _|_ eqt(true, _|_) >= _|_ eqt(true, release) >= _|_ eqt(true, request) >= _|_ eqt(true, resource) >= _|_ eqt(true, tag) >= _|_ eqt(true, true) >= _|_ eqt(true, undefined) >= _|_ eqt(true, X) >= _|_ eqt(true, cons(X, Y)) >= _|_ eqt(true, tuple(X, Y)) >= _|_ eqt(true, tuplenil(X)) >= _|_ eqt(undefined, _|_) >= _|_ eqt(undefined, a) >= _|_ eqt(undefined, tuplenil(X)) >= _|_ eqt(X, _|_) >= _|_ eqt(X, a) >= _|_ eqt(X, excl) >= _|_ eqt(X, _|_) >= _|_ eqt(X, _|_) >= _|_ eqt(X, locker) >= _|_ eqt(X, mcrlrecord) >= _|_ eqt(X, ok) >= _|_ eqt(X, _|_) >= _|_ eqt(X, release) >= _|_ eqt(X, request) >= _|_ eqt(X, resource) >= _|_ eqt(X, tag) >= _|_ eqt(X, true) >= _|_ eqt(X, undefined) >= _|_ eqt(X, int(Y)) >= _|_ eqt(X, cons(Y, Z)) >= _|_ eqt(X, tuple(Y, Z)) > _|_ eqt(X, tuplenil(Y)) >= _|_ eqt(int(X), _|_) > _|_ eqt(int(X), a) >= _|_ eqt(int(X), excl) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), locker) >= _|_ eqt(int(X), mcrlrecord) >= _|_ eqt(int(X), ok) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), release) >= _|_ eqt(int(X), request) >= _|_ eqt(int(X), resource) >= _|_ eqt(int(X), true) >= _|_ eqt(int(X), undefined) >= _|_ eqt(cons(X, Y), resource) > _|_ eqt(cons(X, Y), tag) >= _|_ eqt(cons(X, Y), true) >= _|_ eqt(cons(X, Y), undefined) >= _|_ eqt(cons(X, Y), Z) >= _|_ eqt(cons(X, Y), int(Z)) > _|_ eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuple(Z, U)) > _|_ eqt(cons(X, Y), tuplenil(Z)) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), excl) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), locker) >= _|_ eqt(tuple(X, Y), mcrlrecord) >= _|_ eqt(tuple(X, Y), ok) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), release) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(tuple(X, Y), tag) >= _|_ eqt(tuple(X, Y), true) >= _|_ eqt(tuple(X, Y), Z) >= _|_ eqt(tuple(X, Y), int(Z)) > _|_ eqt(tuple(X, Y), cons(Z, U)) >= _|_ eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), excl) >= _|_ eqt(tuplenil(X), _|_) > _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), locker) >= _|_ eqt(tuplenil(X), mcrlrecord) >= _|_ eqt(tuplenil(X), ok) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), release) >= _|_ eqt(tuplenil(X), request) >= _|_ eqt(tuplenil(X), resource) >= _|_ eqt(tuplenil(X), true) >= _|_ eqt(tuplenil(X), undefined) >= _|_ eqt(tuplenil(X), Y) >= _|_ eqt(tuplenil(X), int(Y)) >= _|_ eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) element(int(s(s(X))), tuple(Y, Z)) > element(int(s(X)), Z) record!6220new(_|_) >= tuple(mcrlrecord, tuple(_|_, tuple(undefined, tuple(_|_, tuplenil(_|_))))) record!6220extract(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) > tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) record!6220update(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) > tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(U))))) record!6220updates(X, Y, _|_) > X locker2!6220map!6220promote!6220pending(_|_, X) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(_|_, X, Y) > _|_ locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220map!6220add!6220pending(_|_, X, Y) > _|_ locker2!6220promote!6220pending(X, Y) >= case0(Y, X, record!6220extract(X, _|_, _|_)) case1(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_)) case4(X, Y, Z) >= _|_ locker2!6220obtainables(_|_, X) > true locker2!6220obtainables(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) case5(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) locker2!6220check!6220availables(_|_, X) >= true locker2!6220check!6220availables(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(_|_, X) >= X delete(X, _|_) > _|_ delete(X, cons(Y, Z)) > case8(Z, Y, X, equal(X, Y)) case8(X, Y, Z, true) > X case8(X, Y, Z, _|_) > cons(Y, delete(Z, X)) gen!6220tag(X) >= tuple(X, tuplenil(tag)) gen!6220modtageq(X, Y) >= equal(X, Y) member(X, _|_) > _|_ case9(X, Y, Z, true) >= true case9(X, Y, Z, _|_) > member(Z, X) eqs(empty, empty) >= _|_ eqs(empty, stack(X, Y)) >= _|_ eqs(stack(X, Y), empty) >= _|_ eqs(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) pops(stack(X, Y)) >= Y tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ eqc(nocalls, calls(X, Y, Z)) > _|_ eqc(calls(X, Y, Z), nocalls) >= _|_ push(X, Y, calls(Z, U, V)) > push1(X, Y, Z, U, V, eqt(X, Z)) push1(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) With these choices, we have: 1] or(_|_, _|_) >= _|_ by (Bot) 2] or(_|_, _|_) >= _|_ by (Bot) 3] or(_|_, _|_) >= _|_ by (Bot) 4] or(_|_, _|_) >= _|_ by (Bot) 5] and(_|_, X) > X because [6], by definition 6] and*(_|_, X) >= X because [7], by (Select) 7] X >= X by (Meta) 8] and(_|_, X) >= _|_ by (Bot) 9] and(X, _|_) >= _|_ by (Bot) 10] imp(_|_, X) >= _|_ by (Bot) 11] _|_ >= _|_ by (Bot) 12] _|_ >= _|_ by (Bot) 13] if(_|_, X, Y) >= Y because [14], by (Star) 14] if*(_|_, X, Y) >= Y because [15], by (Select) 15] Y >= Y by (Meta) 16] eq(_|_, _|_) >= _|_ by (Bot) 17] eq(_|_, _|_) >= _|_ by (Bot) 18] eq(_|_, _|_) >= _|_ by (Bot) 19] eq(_|_, _|_) > _|_ because [20], by definition 20] eq*(_|_, _|_) >= _|_ by (Bot) 21] eqt(_|_, undefined) >= _|_ by (Bot) 22] eqt(_|_, X) >= _|_ by (Bot) 23] eqt(_|_, int(X)) >= _|_ by (Bot) 24] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 25] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 26] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 27] eqt(a, _|_) >= _|_ by (Bot) 28] eqt(a, a) >= _|_ by (Bot) 29] eqt(a, excl) >= _|_ by (Bot) 30] eqt(a, _|_) >= _|_ by (Bot) 31] eqt(a, _|_) >= _|_ by (Bot) 32] eqt(a, locker) >= _|_ by (Bot) 33] eqt(a, mcrlrecord) >= _|_ by (Bot) 34] eqt(a, ok) >= _|_ by (Bot) 35] eqt(a, _|_) >= _|_ by (Bot) 36] eqt(a, release) >= _|_ by (Bot) 37] eqt(a, request) >= _|_ by (Bot) 38] eqt(a, resource) >= _|_ by (Bot) 39] eqt(a, tag) >= _|_ by (Bot) 40] eqt(a, true) >= _|_ by (Bot) 41] eqt(a, undefined) >= _|_ by (Bot) 42] eqt(a, X) >= _|_ by (Bot) 43] eqt(a, int(X)) >= _|_ by (Bot) 44] eqt(a, cons(X, Y)) >= _|_ by (Bot) 45] eqt(a, tuple(X, Y)) >= _|_ by (Bot) 46] eqt(a, tuplenil(X)) >= _|_ by (Bot) 47] eqt(excl, _|_) >= _|_ by (Bot) 48] eqt(excl, a) >= _|_ by (Bot) 49] eqt(excl, excl) >= _|_ by (Bot) 50] eqt(excl, _|_) > _|_ because [51], by definition 51] eqt*(excl, _|_) >= _|_ by (Bot) 52] eqt(excl, _|_) >= _|_ by (Bot) 53] eqt(excl, locker) >= _|_ by (Bot) 54] eqt(excl, mcrlrecord) >= _|_ by (Bot) 55] eqt(excl, ok) >= _|_ by (Bot) 56] eqt(excl, _|_) >= _|_ by (Bot) 57] eqt(excl, release) >= _|_ by (Bot) 58] eqt(excl, request) >= _|_ by (Bot) 59] eqt(excl, resource) >= _|_ by (Bot) 60] eqt(excl, tag) >= _|_ by (Bot) 61] eqt(excl, true) >= _|_ by (Bot) 62] eqt(excl, undefined) >= _|_ by (Bot) 63] eqt(excl, X) >= _|_ by (Bot) 64] eqt(excl, eqt(_|_, int(X))) >= _|_ by (Bot) 65] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 66] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 67] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 68] eqt(_|_, _|_) >= _|_ by (Bot) 69] eqt(_|_, a) >= _|_ by (Bot) 70] eqt(_|_, excl) >= _|_ by (Bot) 71] eqt(_|_, _|_) >= _|_ by (Bot) 72] eqt(_|_, _|_) >= _|_ by (Bot) 73] eqt(_|_, locker) >= _|_ by (Bot) 74] eqt(_|_, mcrlrecord) >= _|_ by (Bot) 75] eqt(_|_, ok) >= _|_ by (Bot) 76] eqt(_|_, _|_) >= _|_ by (Bot) 77] eqt(_|_, release) >= _|_ by (Bot) 78] eqt(_|_, request) >= _|_ by (Bot) 79] eqt(_|_, resource) >= _|_ by (Bot) 80] eqt(_|_, tag) >= _|_ by (Bot) 81] eqt(_|_, true) >= _|_ by (Bot) 82] eqt(_|_, undefined) >= _|_ by (Bot) 83] eqt(_|_, X) >= _|_ by (Bot) 84] eqt(_|_, int(X)) >= _|_ by (Bot) 85] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 86] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 87] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 88] eqt(locker, _|_) >= _|_ by (Bot) 89] eqt(locker, a) >= _|_ by (Bot) 90] eqt(locker, excl) >= _|_ by (Bot) 91] eqt(locker, _|_) >= _|_ by (Bot) 92] eqt(locker, _|_) >= _|_ by (Bot) 93] eqt(locker, locker) >= _|_ by (Bot) 94] eqt(locker, mcrlrecord) >= _|_ by (Bot) 95] eqt(locker, ok) >= _|_ by (Bot) 96] eqt(locker, _|_) > _|_ because [97], by definition 97] eqt*(locker, _|_) >= _|_ by (Bot) 98] eqt(locker, release) >= _|_ by (Bot) 99] eqt(locker, request) >= _|_ by (Bot) 100] eqt(locker, resource) >= _|_ by (Bot) 101] eqt(locker, tag) >= _|_ by (Bot) 102] eqt(locker, true) >= _|_ by (Bot) 103] eqt(locker, undefined) >= _|_ by (Bot) 104] eqt(locker, X) > _|_ because [105], by definition 105] eqt*(locker, X) >= _|_ by (Bot) 106] eqt(locker, int(X)) >= _|_ by (Bot) 107] eqt(locker, cons(X, Y)) >= _|_ by (Bot) 108] eqt(locker, tuple(X, Y)) >= _|_ by (Bot) 109] eqt(locker, tuplenil(X)) >= _|_ by (Bot) 110] eqt(mcrlrecord, _|_) >= _|_ by (Bot) 111] eqt(mcrlrecord, a) >= _|_ by (Bot) 112] eqt(mcrlrecord, excl) >= _|_ by (Bot) 113] eqt(mcrlrecord, _|_) >= _|_ by (Bot) 114] eqt(mcrlrecord, _|_) >= _|_ by (Bot) 115] eqt(mcrlrecord, locker) >= _|_ by (Bot) 116] eqt(mcrlrecord, mcrlrecord) >= _|_ by (Bot) 117] eqt(mcrlrecord, ok) >= _|_ by (Bot) 118] eqt(mcrlrecord, _|_) >= _|_ by (Bot) 119] eqt(mcrlrecord, release) >= _|_ by (Bot) 120] eqt(mcrlrecord, request) >= _|_ by (Bot) 121] eqt(mcrlrecord, resource) >= _|_ by (Bot) 122] eqt(ok, resource) >= _|_ by (Bot) 123] eqt(ok, tag) >= _|_ by (Bot) 124] eqt(ok, true) >= _|_ by (Bot) 125] eqt(ok, undefined) >= _|_ by (Bot) 126] eqt(ok, X) >= _|_ by (Bot) 127] eqt(ok, int(X)) >= _|_ by (Bot) 128] eqt(ok, cons(X, Y)) >= _|_ by (Bot) 129] eqt(ok, tuple(X, Y)) >= _|_ by (Bot) 130] eqt(ok, tuplenil(X)) >= _|_ by (Bot) 131] eqt(_|_, _|_) >= _|_ by (Bot) 132] eqt(_|_, a) >= _|_ by (Bot) 133] eqt(_|_, excl) >= _|_ by (Bot) 134] eqt(_|_, _|_) >= _|_ by (Bot) 135] eqt(_|_, locker) >= _|_ by (Bot) 136] eqt(_|_, mcrlrecord) >= _|_ by (Bot) 137] eqt(_|_, _|_) >= _|_ by (Bot) 138] eqt(_|_, release) >= _|_ by (Bot) 139] eqt(_|_, request) >= _|_ by (Bot) 140] eqt(_|_, resource) >= _|_ by (Bot) 141] eqt(_|_, tag) >= _|_ by (Bot) 142] eqt(_|_, true) >= _|_ by (Bot) 143] eqt(_|_, undefined) >= _|_ by (Bot) 144] eqt(_|_, X) >= _|_ by (Bot) 145] eqt(_|_, int(X)) >= _|_ by (Bot) 146] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 147] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 148] eqt(release, _|_) >= _|_ by (Bot) 149] eqt(release, excl) >= _|_ by (Bot) 150] eqt(release, _|_) >= _|_ by (Bot) 151] eqt(release, _|_) >= _|_ by (Bot) 152] eqt(release, mcrlrecord) >= _|_ by (Bot) 153] eqt(release, ok) >= _|_ by (Bot) 154] eqt(request, mcrlrecord) >= _|_ by (Bot) 155] eqt(request, ok) >= _|_ by (Bot) 156] eqt(request, _|_) >= _|_ by (Bot) 157] eqt(request, release) >= _|_ by (Bot) 158] eqt(request, request) >= _|_ by (Bot) 159] eqt(request, resource) >= _|_ by (Bot) 160] eqt(request, tag) >= _|_ by (Bot) 161] eqt(request, true) >= _|_ by (Bot) 162] eqt(request, X) >= _|_ by (Bot) 163] eqt(request, cons(X, Y)) >= _|_ by (Bot) 164] eqt(request, tuple(X, Y)) >= _|_ by (Bot) 165] eqt(request, tuplenil(X)) >= _|_ by (Bot) 166] eqt(resource, a) >= _|_ by (Bot) 167] eqt(resource, _|_) >= _|_ by (Bot) 168] eqt(resource, _|_) >= _|_ by (Bot) 169] eqt(resource, locker) >= _|_ by (Bot) 170] eqt(resource, mcrlrecord) >= _|_ by (Bot) 171] eqt(resource, ok) >= _|_ by (Bot) 172] eqt(resource, _|_) >= _|_ by (Bot) 173] eqt(resource, request) >= _|_ by (Bot) 174] eqt(resource, resource) >= _|_ by (Bot) 175] eqt(resource, tag) >= _|_ by (Bot) 176] eqt(resource, true) >= _|_ by (Bot) 177] eqt(resource, undefined) >= _|_ by (Bot) 178] eqt(resource, X) >= _|_ by (Bot) 179] eqt(resource, int(X)) >= _|_ by (Bot) 180] eqt(resource, cons(X, Y)) >= _|_ by (Bot) 181] eqt(tag, _|_) >= _|_ by (Bot) 182] eqt(tag, a) >= _|_ by (Bot) 183] eqt(tag, excl) > _|_ because [184], by definition 184] eqt*(tag, excl) >= _|_ by (Bot) 185] eqt(tag, _|_) >= _|_ by (Bot) 186] eqt(tag, _|_) >= _|_ by (Bot) 187] eqt(tag, locker) >= _|_ by (Bot) 188] eqt(tag, mcrlrecord) >= _|_ by (Bot) 189] eqt(tag, ok) >= _|_ by (Bot) 190] eqt(tag, _|_) >= _|_ by (Bot) 191] eqt(tag, release) >= _|_ by (Bot) 192] eqt(tag, request) >= _|_ by (Bot) 193] eqt(tag, resource) >= _|_ by (Bot) 194] eqt(tag, tag) >= _|_ by (Bot) 195] eqt(tag, true) >= _|_ by (Bot) 196] eqt(tag, undefined) >= _|_ by (Bot) 197] eqt(tag, X) >= _|_ by (Bot) 198] eqt(tag, int(X)) >= _|_ by (Bot) 199] eqt(tag, tuple(X, Y)) >= _|_ by (Bot) 200] eqt(true, _|_) >= _|_ by (Bot) 201] eqt(true, a) >= _|_ by (Bot) 202] eqt(true, excl) >= _|_ by (Bot) 203] eqt(true, _|_) >= _|_ by (Bot) 204] eqt(true, locker) >= _|_ by (Bot) 205] eqt(true, mcrlrecord) >= _|_ by (Bot) 206] eqt(true, ok) >= _|_ by (Bot) 207] eqt(true, _|_) >= _|_ by (Bot) 208] eqt(true, release) >= _|_ by (Bot) 209] eqt(true, request) >= _|_ by (Bot) 210] eqt(true, resource) >= _|_ by (Bot) 211] eqt(true, tag) >= _|_ by (Bot) 212] eqt(true, true) >= _|_ by (Bot) 213] eqt(true, undefined) >= _|_ by (Bot) 214] eqt(true, X) >= _|_ by (Bot) 215] eqt(true, cons(X, Y)) >= _|_ by (Bot) 216] eqt(true, tuple(X, Y)) >= _|_ by (Bot) 217] eqt(true, tuplenil(X)) >= _|_ by (Bot) 218] eqt(undefined, _|_) >= _|_ by (Bot) 219] eqt(undefined, a) >= _|_ by (Bot) 220] eqt(undefined, tuplenil(X)) >= _|_ by (Bot) 221] eqt(X, _|_) >= _|_ by (Bot) 222] eqt(X, a) >= _|_ by (Bot) 223] eqt(X, excl) >= _|_ by (Bot) 224] eqt(X, _|_) >= _|_ by (Bot) 225] eqt(X, _|_) >= _|_ by (Bot) 226] eqt(X, locker) >= _|_ by (Bot) 227] eqt(X, mcrlrecord) >= _|_ by (Bot) 228] eqt(X, ok) >= _|_ by (Bot) 229] eqt(X, _|_) >= _|_ by (Bot) 230] eqt(X, release) >= _|_ by (Bot) 231] eqt(X, request) >= _|_ by (Bot) 232] eqt(X, resource) >= _|_ by (Bot) 233] eqt(X, tag) >= _|_ by (Bot) 234] eqt(X, true) >= _|_ by (Bot) 235] eqt(X, undefined) >= _|_ by (Bot) 236] eqt(X, int(Y)) >= _|_ by (Bot) 237] eqt(X, cons(Y, Z)) >= _|_ by (Bot) 238] eqt(X, tuple(Y, Z)) > _|_ because [239], by definition 239] eqt*(X, tuple(Y, Z)) >= _|_ by (Bot) 240] eqt(X, tuplenil(Y)) >= _|_ by (Bot) 241] eqt(int(X), _|_) > _|_ because [242], by definition 242] eqt*(int(X), _|_) >= _|_ by (Bot) 243] eqt(int(X), a) >= _|_ by (Bot) 244] eqt(int(X), excl) >= _|_ by (Bot) 245] eqt(int(X), _|_) >= _|_ by (Bot) 246] eqt(int(X), _|_) >= _|_ by (Bot) 247] eqt(int(X), locker) >= _|_ by (Bot) 248] eqt(int(X), mcrlrecord) >= _|_ by (Bot) 249] eqt(int(X), ok) >= _|_ by (Bot) 250] eqt(int(X), _|_) >= _|_ by (Bot) 251] eqt(int(X), release) >= _|_ by (Bot) 252] eqt(int(X), request) >= _|_ by (Bot) 253] eqt(int(X), resource) >= _|_ by (Bot) 254] eqt(int(X), true) >= _|_ by (Bot) 255] eqt(int(X), undefined) >= _|_ by (Bot) 256] eqt(cons(X, Y), resource) > _|_ because [257], by definition 257] eqt*(cons(X, Y), resource) >= _|_ by (Bot) 258] eqt(cons(X, Y), tag) >= _|_ by (Bot) 259] eqt(cons(X, Y), true) >= _|_ by (Bot) 260] eqt(cons(X, Y), undefined) >= _|_ by (Bot) 261] eqt(cons(X, Y), Z) >= _|_ by (Bot) 262] eqt(cons(X, Y), int(Z)) > _|_ because [263], by definition 263] eqt*(cons(X, Y), int(Z)) >= _|_ by (Bot) 264] eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [265], by (Star) 265] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [266] and [273], by (Copy) 266] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [267] and [270], by (Stat) 267] cons(X, Y) >= X because [268], by (Star) 268] cons*(X, Y) >= X because [269], by (Select) 269] X >= X by (Meta) 270] cons(Z, U) > Z because [271], by definition 271] cons*(Z, U) >= Z because [272], by (Select) 272] Z >= Z by (Meta) 273] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [274] and [277], by (Stat) 274] cons(X, Y) >= Y because [275], by (Star) 275] cons*(X, Y) >= Y because [276], by (Select) 276] Y >= Y by (Meta) 277] cons(Z, U) > U because [278], by definition 278] cons*(Z, U) >= U because [279], by (Select) 279] U >= U by (Meta) 280] eqt(cons(X, Y), tuple(Z, U)) > _|_ because [281], by definition 281] eqt*(cons(X, Y), tuple(Z, U)) >= _|_ by (Bot) 282] eqt(cons(X, Y), tuplenil(Z)) >= _|_ by (Bot) 283] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 284] eqt(tuple(X, Y), a) >= _|_ by (Bot) 285] eqt(tuple(X, Y), excl) >= _|_ by (Bot) 286] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 287] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 288] eqt(tuple(X, Y), locker) >= _|_ by (Bot) 289] eqt(tuple(X, Y), mcrlrecord) >= _|_ by (Bot) 290] eqt(tuple(X, Y), ok) >= _|_ by (Bot) 291] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 292] eqt(tuple(X, Y), release) >= _|_ by (Bot) 293] eqt(tuple(X, Y), request) >= _|_ by (Bot) 294] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 295] eqt(tuple(X, Y), tag) >= _|_ by (Bot) 296] eqt(tuple(X, Y), true) >= _|_ by (Bot) 297] eqt(tuple(X, Y), Z) >= _|_ by (Bot) 298] eqt(tuple(X, Y), int(Z)) > _|_ because [299], by definition 299] eqt*(tuple(X, Y), int(Z)) >= _|_ by (Bot) 300] eqt(tuple(X, Y), cons(Z, U)) >= _|_ by (Bot) 301] eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [302], by (Star) 302] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [303] and [308], by (Copy) 303] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [304] and [306], by (Stat) 304] tuple(X, Y) >= X because [305], by (Star) 305] tuple*(X, Y) >= X because [269], by (Select) 306] tuple(Z, U) > Z because [307], by definition 307] tuple*(Z, U) >= Z because [272], by (Select) 308] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [309] and [311], by (Stat) 309] tuple(X, Y) >= Y because [310], by (Star) 310] tuple*(X, Y) >= Y because [276], by (Select) 311] tuple(Z, U) > U because [312], by definition 312] tuple*(Z, U) >= U because [279], by (Select) 313] eqt(tuple(X, Y), tuplenil(Z)) >= _|_ by (Bot) 314] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 315] eqt(tuplenil(X), excl) >= _|_ by (Bot) 316] eqt(tuplenil(X), _|_) > _|_ because [317], by definition 317] eqt*(tuplenil(X), _|_) >= _|_ by (Bot) 318] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 319] eqt(tuplenil(X), locker) >= _|_ by (Bot) 320] eqt(tuplenil(X), mcrlrecord) >= _|_ by (Bot) 321] eqt(tuplenil(X), ok) >= _|_ by (Bot) 322] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 323] eqt(tuplenil(X), release) >= _|_ by (Bot) 324] eqt(tuplenil(X), request) >= _|_ by (Bot) 325] eqt(tuplenil(X), resource) >= _|_ by (Bot) 326] eqt(tuplenil(X), true) >= _|_ by (Bot) 327] eqt(tuplenil(X), undefined) >= _|_ by (Bot) 328] eqt(tuplenil(X), Y) >= _|_ by (Bot) 329] eqt(tuplenil(X), int(Y)) >= _|_ by (Bot) 330] eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) because eqt in Mul, [331] and [333], by (Fun) 331] tuplenil(X) >= X because [332], by (Star) 332] tuplenil*(X) >= X because [269], by (Select) 333] tuplenil(Y) >= Y because [334], by (Star) 334] tuplenil*(Y) >= Y because [272], by (Select) 335] element(int(s(s(X))), tuple(Y, Z)) > element(int(s(X)), Z) because [336], by definition 336] element*(int(s(s(X))), tuple(Y, Z)) >= element(int(s(X)), Z) because element in Mul, [337] and [344], by (Stat) 337] int(s(s(X))) > int(s(X)) because [338], by definition 338] int*(s(s(X))) >= int(s(X)) because [339], by (Select) 339] s(s(X)) >= int(s(X)) because [340], by (Star) 340] s*(s(X)) >= int(s(X)) because s > int and [341], by (Copy) 341] s*(s(X)) >= s(X) because [342], by (Select) 342] s(X) >= s(X) because s in Mul and [343], by (Fun) 343] X >= X by (Meta) 344] tuple(Y, Z) >= Z because [345], by (Star) 345] tuple*(Y, Z) >= Z because [279], by (Select) 346] record!6220new(_|_) >= tuple(mcrlrecord, tuple(_|_, tuple(undefined, tuple(_|_, tuplenil(_|_))))) because [347], by (Star) 347] record!6220new*(_|_) >= tuple(mcrlrecord, tuple(_|_, tuple(undefined, tuple(_|_, tuplenil(_|_))))) because record!6220new > tuple, [348] and [349], by (Copy) 348] record!6220new*(_|_) >= mcrlrecord because record!6220new = mcrlrecord and record!6220new in Mul, by (Stat) 349] record!6220new*(_|_) >= tuple(_|_, tuple(undefined, tuple(_|_, tuplenil(_|_)))) because record!6220new > tuple, [350] and [351], by (Copy) 350] record!6220new*(_|_) >= _|_ by (Bot) 351] record!6220new*(_|_) >= tuple(undefined, tuple(_|_, tuplenil(_|_))) because record!6220new > tuple, [352] and [353], by (Copy) 352] record!6220new*(_|_) >= undefined because record!6220new > undefined, by (Copy) 353] record!6220new*(_|_) >= tuple(_|_, tuplenil(_|_)) because record!6220new > tuple, [354] and [355], by (Copy) 354] record!6220new*(_|_) >= _|_ by (Bot) 355] record!6220new*(_|_) >= tuplenil(_|_) because record!6220new > tuplenil and [354], by (Copy) 356] record!6220extract(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) > tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) because [357], by definition 357] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) because record!6220extract > tuple, [358] and [359], by (Copy) 358] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= mcrlrecord because record!6220extract > mcrlrecord, by (Copy) 359] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) because record!6220extract > tuple, [360] and [361], by (Copy) 360] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= _|_ by (Bot) 361] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= tuple(X, tuple(Y, tuplenil(Z))) because record!6220extract > tuple, [362] and [370], by (Copy) 362] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= X because [363], by (Select) 363] tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= X because [364], by (Star) 364] tuple*(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= X because [365], by (Select) 365] tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= X because [366], by (Star) 366] tuple*(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= X because [367], by (Select) 367] tuple(X, tuple(Y, tuplenil(Z))) >= X because [368], by (Star) 368] tuple*(X, tuple(Y, tuplenil(Z))) >= X because [369], by (Select) 369] X >= X by (Meta) 370] record!6220extract*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, resource) >= tuple(Y, tuplenil(Z)) because [371], by (Select) 371] tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= tuple(Y, tuplenil(Z)) because [372], by (Star) 372] tuple*(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= tuple(Y, tuplenil(Z)) because [373], by (Select) 373] tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= tuple(Y, tuplenil(Z)) because [374], by (Star) 374] tuple*(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= tuple(Y, tuplenil(Z)) because [375], by (Select) 375] tuple(X, tuple(Y, tuplenil(Z))) >= tuple(Y, tuplenil(Z)) because [376], by (Star) 376] tuple*(X, tuple(Y, tuplenil(Z))) >= tuple(Y, tuplenil(Z)) because [377], by (Select) 377] tuple(Y, tuplenil(Z)) >= tuple(Y, tuplenil(Z)) because tuple in Mul, [378] and [379], by (Fun) 378] Y >= Y by (Meta) 379] tuplenil(Z) >= tuplenil(Z) because tuplenil in Mul and [380], by (Fun) 380] Z >= Z by (Meta) 381] record!6220update(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) > tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(U))))) because [382], by definition 382] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(U))))) because record!6220update > tuple, [383] and [384], by (Copy) 383] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= mcrlrecord because record!6220update > mcrlrecord, by (Copy) 384] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= tuple(_|_, tuple(X, tuple(Y, tuplenil(U)))) because record!6220update > tuple, [385] and [386], by (Copy) 385] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= _|_ by (Bot) 386] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= tuple(X, tuple(Y, tuplenil(U))) because record!6220update > tuple, [387] and [388], by (Copy) 387] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= X because [363], by (Select) 388] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= tuple(Y, tuplenil(U)) because record!6220update > tuple, [389] and [398], by (Copy) 389] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= Y because [390], by (Select) 390] tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= Y because [391], by (Star) 391] tuple*(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))) >= Y because [392], by (Select) 392] tuple(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= Y because [393], by (Star) 393] tuple*(_|_, tuple(X, tuple(Y, tuplenil(Z)))) >= Y because [394], by (Select) 394] tuple(X, tuple(Y, tuplenil(Z))) >= Y because [395], by (Star) 395] tuple*(X, tuple(Y, tuplenil(Z))) >= Y because [396], by (Select) 396] tuple(Y, tuplenil(Z)) >= Y because [397], by (Star) 397] tuple*(Y, tuplenil(Z)) >= Y because [378], by (Select) 398] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= tuplenil(U) because record!6220update > tuplenil and [399], by (Copy) 399] record!6220update*(tuple(mcrlrecord, tuple(_|_, tuple(X, tuple(Y, tuplenil(Z))))), _|_, _|_, U) >= U because [400], by (Select) 400] U >= U by (Meta) 401] record!6220updates(X, Y, _|_) > X because [402], by definition 402] record!6220updates*(X, Y, _|_) >= X because [403], by (Select) 403] X >= X by (Meta) 404] locker2!6220map!6220promote!6220pending(_|_, X) >= _|_ by (Bot) 405] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [406], by (Star) 406] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [407] and [414], by (Copy) 407] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [408] and [412], by (Copy) 408] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [409], by (Select) 409] cons(X, Y) >= X because [410], by (Star) 410] cons*(X, Y) >= X because [411], by (Select) 411] X >= X by (Meta) 412] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [413], by (Select) 413] Z >= Z by (Meta) 414] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [415] and [418], by (Stat) 415] cons(X, Y) > Y because [416], by definition 416] cons*(X, Y) >= Y because [417], by (Select) 417] Y >= Y by (Meta) 418] Z >= Z by (Meta) 419] locker2!6220map!6220claim!6220lock(_|_, X, Y) > _|_ because [420], by definition 420] locker2!6220map!6220claim!6220lock*(_|_, X, Y) >= _|_ by (Bot) 421] locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because [422], by (Star) 422] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because locker2!6220map!6220claim!6220lock > cons, [423] and [429], by (Copy) 423] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220claim!6220lock(X, Z, U) because locker2!6220map!6220claim!6220lock > locker2!6220claim!6220lock, [424], [425] and [427], by (Copy) 424] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= X because [409], by (Select) 425] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= Z because [426], by (Select) 426] Z >= Z by (Meta) 427] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= U because [428], by (Select) 428] U >= U by (Meta) 429] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220map!6220claim!6220lock(Y, Z, U) because locker2!6220map!6220claim!6220lock in Mul, [415], [430] and [431], by (Stat) 430] Z >= Z by (Meta) 431] U >= U by (Meta) 432] locker2!6220map!6220add!6220pending(_|_, X, Y) > _|_ because [433], by definition 433] locker2!6220map!6220add!6220pending*(_|_, X, Y) >= _|_ by (Bot) 434] locker2!6220promote!6220pending(X, Y) >= case0(Y, X, record!6220extract(X, _|_, _|_)) because [435], by (Star) 435] locker2!6220promote!6220pending*(X, Y) >= case0(Y, X, record!6220extract(X, _|_, _|_)) because locker2!6220promote!6220pending > case0, [436], [437] and [438], by (Copy) 436] locker2!6220promote!6220pending*(X, Y) >= Y because [431], by (Select) 437] locker2!6220promote!6220pending*(X, Y) >= X because [411], by (Select) 438] locker2!6220promote!6220pending*(X, Y) >= record!6220extract(X, _|_, _|_) because locker2!6220promote!6220pending > record!6220extract, [437], [439] and [440], by (Copy) 439] locker2!6220promote!6220pending*(X, Y) >= _|_ by (Bot) 440] locker2!6220promote!6220pending*(X, Y) >= _|_ by (Bot) 441] case1(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_)) because [442], by (Star) 442] case1*(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_)) because case1 > record!6220updates, [443], [444] and [445], by (Copy) 443] case1*(X, Y, Z, true) >= Z because [411], by (Select) 444] case1*(X, Y, Z, true) >= _|_ by (Bot) 445] case1*(X, Y, Z, true) >= cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_) because case1 > cons, [446] and [453], by (Copy) 446] case1*(X, Y, Z, true) >= tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))) because case1 > tuple, [447] and [448], by (Copy) 447] case1*(X, Y, Z, true) >= _|_ by (Bot) 448] case1*(X, Y, Z, true) >= tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_))) because case1 > tuplenil and [449], by (Copy) 449] case1*(X, Y, Z, true) >= append(record!6220extract(Z, _|_, _|_), cons(X, _|_)) because case1 > append, [450] and [451], by (Copy) 450] case1*(X, Y, Z, true) >= record!6220extract(Z, _|_, _|_) because case1 > record!6220extract, [443], [444] and [447], by (Copy) 451] case1*(X, Y, Z, true) >= cons(X, _|_) because case1 > cons, [452] and [453], by (Copy) 452] case1*(X, Y, Z, true) >= X because [431], by (Select) 453] case1*(X, Y, Z, true) >= _|_ by (Bot) 454] case4(X, Y, Z) >= _|_ by (Bot) 455] locker2!6220obtainables(_|_, X) > true because [456], by definition 456] locker2!6220obtainables*(_|_, X) >= true because locker2!6220obtainables > true, by (Copy) 457] locker2!6220obtainables(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) because [458], by (Star) 458] locker2!6220obtainables*(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) because locker2!6220obtainables = case5, [415], [431], [459], [460], [462] and [463], by (Stat) 459] locker2!6220obtainables*(cons(X, Y), Z) >= Z because [431], by (Select) 460] locker2!6220obtainables*(cons(X, Y), Z) >= Y because [461], by (Select) 461] cons(X, Y) >= Y because [416], by (Star) 462] locker2!6220obtainables*(cons(X, Y), Z) >= X because [409], by (Select) 463] locker2!6220obtainables*(cons(X, Y), Z) >= member(Z, record!6220extract(X, _|_, _|_)) because locker2!6220obtainables > member, [459] and [464], by (Copy) 464] locker2!6220obtainables*(cons(X, Y), Z) >= record!6220extract(X, _|_, _|_) because [465], by (Select) 465] cons(X, Y) >= record!6220extract(X, _|_, _|_) because [466], by (Star) 466] cons*(X, Y) >= record!6220extract(X, _|_, _|_) because cons > record!6220extract, [467], [468] and [469], by (Copy) 467] cons*(X, Y) >= X because [411], by (Select) 468] cons*(X, Y) >= _|_ by (Bot) 469] cons*(X, Y) >= _|_ by (Bot) 470] case5(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) because [471], by (Star) 471] case5*(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) because case5 > andt, [472] and [475], by (Copy) 472] case5*(X, Y, Z, true) >= locker2!6220obtainable(Z, X) because case5 > locker2!6220obtainable, [473] and [474], by (Copy) 473] case5*(X, Y, Z, true) >= Z because [411], by (Select) 474] case5*(X, Y, Z, true) >= X because [431], by (Select) 475] case5*(X, Y, Z, true) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [431], [476], [477] and [474], by (Stat) 476] Y >= Y by (Meta) 477] case5*(X, Y, Z, true) >= Y because [476], by (Select) 478] case5(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because [479], by (Star) 479] case5*(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [431], [476], [480] and [481], by (Stat) 480] case5*(X, Y, Z, _|_) >= Y because [476], by (Select) 481] case5*(X, Y, Z, _|_) >= X because [431], by (Select) 482] locker2!6220check!6220availables(_|_, X) >= true because [483], by (Star) 483] locker2!6220check!6220availables*(_|_, X) >= true because locker2!6220check!6220availables > true, by (Copy) 484] locker2!6220check!6220availables(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because [485], by (Star) 485] locker2!6220check!6220availables*(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because locker2!6220check!6220availables > andt, [486] and [492], by (Copy) 486] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220available(X, Z) because locker2!6220check!6220availables > locker2!6220check!6220available, [487] and [491], by (Copy) 487] locker2!6220check!6220availables*(cons(X, Y), Z) >= X because [488], by (Select) 488] cons(X, Y) >= X because [489], by (Star) 489] cons*(X, Y) >= X because [490], by (Select) 490] X >= X by (Meta) 491] locker2!6220check!6220availables*(cons(X, Y), Z) >= Z because [476], by (Select) 492] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220availables(Y, Z) because locker2!6220check!6220availables in Mul, [493] and [476], by (Stat) 493] cons(X, Y) > Y because [494], by definition 494] cons*(X, Y) >= Y because [430], by (Select) 495] locker2!6220adduniq(_|_, X) >= X because [496], by (Star) 496] locker2!6220adduniq*(_|_, X) >= X because [497], by (Select) 497] X >= X by (Meta) 498] delete(X, _|_) > _|_ because [499], by definition 499] delete*(X, _|_) >= _|_ by (Bot) 500] delete(X, cons(Y, Z)) > case8(Z, Y, X, equal(X, Y)) because [501], by definition 501] delete*(X, cons(Y, Z)) >= case8(Z, Y, X, equal(X, Y)) because delete = case8, [502], [505], [507], [511] and [513], by (Stat) 502] cons(Y, Z) > Z because [503], by definition 503] cons*(Y, Z) >= Z because [504], by (Select) 504] Z >= Z by (Meta) 505] delete*(X, cons(Y, Z)) >= Z because [506], by (Select) 506] cons(Y, Z) >= Z because [503], by (Star) 507] delete*(X, cons(Y, Z)) >= Y because [508], by (Select) 508] cons(Y, Z) >= Y because [509], by (Star) 509] cons*(Y, Z) >= Y because [510], by (Select) 510] Y >= Y by (Meta) 511] delete*(X, cons(Y, Z)) >= X because [512], by (Select) 512] X >= X by (Meta) 513] delete*(X, cons(Y, Z)) >= equal(X, Y) because delete > equal, [511] and [507], by (Copy) 514] case8(X, Y, Z, true) > X because [515], by definition 515] case8*(X, Y, Z, true) >= X because [504], by (Select) 516] case8(X, Y, Z, _|_) > cons(Y, delete(Z, X)) because [517], by definition 517] case8*(X, Y, Z, _|_) >= cons(Y, delete(Z, X)) because case8 > cons, [518] and [519], by (Copy) 518] case8*(X, Y, Z, _|_) >= Y because [510], by (Select) 519] case8*(X, Y, Z, _|_) >= delete(Z, X) because case8 = delete, [520], [521], [522] and [523], by (Stat) 520] X >= X by (Meta) 521] Z >= Z by (Meta) 522] case8*(X, Y, Z, _|_) >= Z because [521], by (Select) 523] case8*(X, Y, Z, _|_) >= X because [520], by (Select) 524] gen!6220tag(X) >= tuple(X, tuplenil(tag)) because [525], by (Star) 525] gen!6220tag*(X) >= tuple(X, tuplenil(tag)) because gen!6220tag > tuple, [526] and [528], by (Copy) 526] gen!6220tag*(X) >= X because [527], by (Select) 527] X >= X by (Meta) 528] gen!6220tag*(X) >= tuplenil(tag) because gen!6220tag > tuplenil and [529], by (Copy) 529] gen!6220tag*(X) >= tag because gen!6220tag > tag, by (Copy) 530] gen!6220modtageq(X, Y) >= equal(X, Y) because gen!6220modtageq = equal, gen!6220modtageq in Mul, [531] and [532], by (Fun) 531] X >= X by (Meta) 532] Y >= Y by (Meta) 533] member(X, _|_) > _|_ because [534], by definition 534] member*(X, _|_) >= _|_ by (Bot) 535] case9(X, Y, Z, true) >= true because [536], by (Star) 536] case9*(X, Y, Z, true) >= true because case9 > true, by (Copy) 537] case9(X, Y, Z, _|_) > member(Z, X) because [538], by definition 538] case9*(X, Y, Z, _|_) >= member(Z, X) because case9 = member, case9 in Mul, [520] and [521], by (Stat) 539] eqs(empty, empty) >= _|_ by (Bot) 540] eqs(empty, stack(X, Y)) >= _|_ by (Bot) 541] eqs(stack(X, Y), empty) >= _|_ by (Bot) 542] eqs(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because [543], by (Star) 543] eqs*(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because eqs > and, [544] and [553], by (Copy) 544] eqs*(stack(X, Y), stack(Z, U)) >= eqt(X, Z) because eqs > eqt, [545] and [549], by (Copy) 545] eqs*(stack(X, Y), stack(Z, U)) >= X because [546], by (Select) 546] stack(X, Y) >= X because [547], by (Star) 547] stack*(X, Y) >= X because [548], by (Select) 548] X >= X by (Meta) 549] eqs*(stack(X, Y), stack(Z, U)) >= Z because [550], by (Select) 550] stack(Z, U) >= Z because [551], by (Star) 551] stack*(Z, U) >= Z because [552], by (Select) 552] Z >= Z by (Meta) 553] eqs*(stack(X, Y), stack(Z, U)) >= eqs(Y, U) because eqs in Mul, [554] and [557], by (Stat) 554] stack(X, Y) > Y because [555], by definition 555] stack*(X, Y) >= Y because [556], by (Select) 556] Y >= Y by (Meta) 557] stack(Z, U) >= U because [558], by (Star) 558] stack*(Z, U) >= U because [559], by (Select) 559] U >= U by (Meta) 560] pops(stack(X, Y)) >= Y because [561], by (Star) 561] pops*(stack(X, Y)) >= Y because [562], by (Select) 562] stack(X, Y) >= Y because [555], by (Star) 563] tops(stack(X, Y)) >= X because [564], by (Star) 564] tops*(stack(X, Y)) >= X because [546], by (Select) 565] istops(X, empty) >= _|_ by (Bot) 566] eqc(nocalls, nocalls) >= _|_ by (Bot) 567] eqc(nocalls, calls(X, Y, Z)) > _|_ because [568], by definition 568] eqc*(nocalls, calls(X, Y, Z)) >= _|_ by (Bot) 569] eqc(calls(X, Y, Z), nocalls) >= _|_ by (Bot) 570] push(X, Y, calls(Z, U, V)) > push1(X, Y, Z, U, V, eqt(X, Z)) because [571], by definition 571] push*(X, Y, calls(Z, U, V)) >= push1(X, Y, Z, U, V, eqt(X, Z)) because push > push1, [572], [573], [574], [578], [581] and [585], by (Copy) 572] push*(X, Y, calls(Z, U, V)) >= X because [548], by (Select) 573] push*(X, Y, calls(Z, U, V)) >= Y because [552], by (Select) 574] push*(X, Y, calls(Z, U, V)) >= Z because [575], by (Select) 575] calls(Z, U, V) >= Z because [576], by (Star) 576] calls*(Z, U, V) >= Z because [577], by (Select) 577] Z >= Z by (Meta) 578] push*(X, Y, calls(Z, U, V)) >= U because [579], by (Select) 579] calls(Z, U, V) >= U because [580], by (Star) 580] calls*(Z, U, V) >= U because [556], by (Select) 581] push*(X, Y, calls(Z, U, V)) >= V because [582], by (Select) 582] calls(Z, U, V) >= V because [583], by (Star) 583] calls*(Z, U, V) >= V because [584], by (Select) 584] V >= V by (Meta) 585] push*(X, Y, calls(Z, U, V)) >= eqt(X, Z) because push > eqt, [572] and [574], by (Copy) 586] push1(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because [587], by (Star) 587] push1*(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because push1 > calls, [588], [589] and [592], by (Copy) 588] push1*(X, Y, Z, U, V, _|_) >= Z because [577], by (Select) 589] push1*(X, Y, Z, U, V, _|_) >= pushs(Y, U) because push1 = pushs, push1 in Mul, [590] and [591], by (Stat) 590] Y >= Y by (Meta) 591] U >= U by (Meta) 592] push1*(X, Y, Z, U, V, _|_) >= V because [584], by (Select) We can thus remove the following rules: and(T, X) => X eq(F, T) => F eqt(excl, false) => F eqt(locker, pending) => F eqt(locker, pid(X)) => F eqt(tag, excl) => F eqt(pid(X), tuple(Y, Z)) => F eqt(int(X), nil) => F eqt(cons(X, Y), resource) => F eqt(cons(X, Y), int(Z)) => F eqt(cons(X, Y), tuple(Z, U)) => F eqt(tuple(X, Y), int(Z)) => F eqt(tuplenil(X), false) => F element(int(s(s(X))), tuple(Y, Z)) => element(int(s(X)), Z) record!6220extract(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, resource) => tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))) record!6220update(tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(Z))))), lock, pending, U) => tuple(mcrlrecord, tuple(lock, tuple(X, tuple(Y, tuplenil(U))))) record!6220updates(X, Y, nil) => X locker2!6220map!6220claim!6220lock(nil, X, Y) => nil locker2!6220map!6220add!6220pending(nil, X, Y) => nil locker2!6220obtainables(nil, X) => true delete(X, nil) => nil delete(X, cons(Y, Z)) => case8(Z, Y, X, equal(X, Y)) case8(X, Y, Z, true) => X case8(X, Y, Z, false) => cons(Y, delete(Z, X)) member(X, nil) => false case9(X, Y, Z, false) => member(Z, X) eqc(nocalls, calls(X, Y, Z)) => F push(X, Y, calls(Z, U, V)) => push1(X, Y, Z, U, V, eqt(X, Z)) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(T, T) >? T or(F, T) >? T or(T, F) >? T or(F, F) >? F and(F, X) >? F and(X, F) >? F imp(F, X) >? T not(T) >? F not(F) >? T if(F, X, Y) >? Y eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eqt(nil, undefined) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(nil, tuplenil(X)) >? F eqt(a, nil) >? F eqt(a, a) >? T eqt(a, excl) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, locker) >? F eqt(a, mcrlrecord) >? F eqt(a, ok) >? F eqt(a, pending) >? F eqt(a, release) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, true) >? F eqt(a, undefined) >? F eqt(a, pid(X)) >? F eqt(a, int(X)) >? F eqt(a, cons(X, Y)) >? F eqt(a, tuple(X, Y)) >? F eqt(a, tuplenil(X)) >? F eqt(excl, nil) >? F eqt(excl, a) >? F eqt(excl, excl) >? T eqt(excl, lock) >? F eqt(excl, locker) >? F eqt(excl, mcrlrecord) >? F eqt(excl, ok) >? F eqt(excl, pending) >? F eqt(excl, release) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, true) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(excl, eqt(false, int(X))) >? F eqt(false, cons(X, Y)) >? F eqt(false, tuple(X, Y)) >? F eqt(false, tuplenil(X)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, excl) >? F eqt(lock, false) >? F eqt(lock, lock) >? T eqt(lock, locker) >? F eqt(lock, mcrlrecord) >? F eqt(lock, ok) >? F eqt(lock, pending) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, undefined) >? F eqt(lock, pid(X)) >? F eqt(lock, int(X)) >? F eqt(lock, cons(X, Y)) >? F eqt(lock, tuple(X, Y)) >? F eqt(lock, tuplenil(X)) >? F eqt(locker, nil) >? F eqt(locker, a) >? F eqt(locker, excl) >? F eqt(locker, false) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, release) >? F eqt(locker, request) >? F eqt(locker, resource) >? F eqt(locker, tag) >? F eqt(locker, true) >? F eqt(locker, undefined) >? F eqt(locker, int(X)) >? F eqt(locker, cons(X, Y)) >? F eqt(locker, tuple(X, Y)) >? F eqt(locker, tuplenil(X)) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, a) >? F eqt(mcrlrecord, excl) >? F eqt(mcrlrecord, false) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, ok) >? F eqt(mcrlrecord, pending) >? F eqt(mcrlrecord, release) >? F eqt(mcrlrecord, request) >? F eqt(mcrlrecord, resource) >? F eqt(ok, resource) >? F eqt(ok, tag) >? F eqt(ok, true) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, nil) >? F eqt(pending, a) >? F eqt(pending, excl) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, mcrlrecord) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, request) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(pending, undefined) >? F eqt(pending, pid(X)) >? F eqt(pending, int(X)) >? F eqt(pending, cons(X, Y)) >? F eqt(pending, tuplenil(X)) >? F eqt(release, nil) >? F eqt(release, excl) >? F eqt(release, false) >? F eqt(release, lock) >? F eqt(release, mcrlrecord) >? F eqt(release, ok) >? F eqt(request, mcrlrecord) >? F eqt(request, ok) >? F eqt(request, pending) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, true) >? F eqt(request, pid(X)) >? F eqt(request, cons(X, Y)) >? F eqt(request, tuple(X, Y)) >? F eqt(request, tuplenil(X)) >? F eqt(resource, a) >? F eqt(resource, false) >? F eqt(resource, lock) >? F eqt(resource, locker) >? F eqt(resource, mcrlrecord) >? F eqt(resource, ok) >? F eqt(resource, pending) >? F eqt(resource, request) >? F eqt(resource, resource) >? T eqt(resource, tag) >? F eqt(resource, true) >? F eqt(resource, undefined) >? F eqt(resource, pid(X)) >? F eqt(resource, int(X)) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, false) >? F eqt(tag, lock) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, ok) >? F eqt(tag, pending) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, resource) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, pid(X)) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, nil) >? F eqt(true, a) >? F eqt(true, excl) >? F eqt(true, lock) >? F eqt(true, locker) >? F eqt(true, mcrlrecord) >? F eqt(true, ok) >? F eqt(true, pending) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, resource) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, pid(X)) >? F eqt(true, cons(X, Y)) >? F eqt(true, tuple(X, Y)) >? F eqt(true, tuplenil(X)) >? F eqt(undefined, nil) >? F eqt(undefined, a) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), nil) >? F eqt(pid(X), a) >? F eqt(pid(X), excl) >? F eqt(pid(X), false) >? F eqt(pid(X), lock) >? F eqt(pid(X), locker) >? F eqt(pid(X), mcrlrecord) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), release) >? F eqt(pid(X), request) >? F eqt(pid(X), resource) >? F eqt(pid(X), tag) >? F eqt(pid(X), true) >? F eqt(pid(X), undefined) >? F eqt(pid(X), int(Y)) >? F eqt(pid(X), cons(Y, Z)) >? F eqt(pid(X), tuplenil(Y)) >? F eqt(int(X), a) >? F eqt(int(X), excl) >? F eqt(int(X), false) >? F eqt(int(X), lock) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), ok) >? F eqt(int(X), pending) >? F eqt(int(X), release) >? F eqt(int(X), request) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), tag) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), undefined) >? F eqt(cons(X, Y), pid(Z)) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), excl) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), mcrlrecord) >? F eqt(tuple(X, Y), ok) >? F eqt(tuple(X, Y), pending) >? F eqt(tuple(X, Y), release) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), tag) >? F eqt(tuple(X, Y), true) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), cons(Z, U)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), excl) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), ok) >? F eqt(tuplenil(X), pending) >? F eqt(tuplenil(X), release) >? F eqt(tuplenil(X), request) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F eqt(tuplenil(X), int(Y)) >? F eqt(tuplenil(X), tuplenil(Y)) >? eqt(X, Y) record!6220new(lock) >? tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) locker2!6220map!6220promote!6220pending(nil, X) >? nil locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >? cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220promote!6220pending(X, Y) >? case0(Y, X, record!6220extract(X, lock, pending)) case1(X, Y, Z, true) >? record!6220updates(Z, lock, cons(tuple(pending, tuplenil(append(record!6220extract(Z, lock, pending), cons(X, nil)))), nil)) case4(X, Y, Z) >? false locker2!6220obtainables(cons(X, Y), Z) >? case5(Z, Y, X, member(Z, record!6220extract(X, lock, pending))) case5(X, Y, Z, true) >? andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, false) >? locker2!6220obtainables(Y, X) locker2!6220check!6220availables(nil, X) >? true locker2!6220check!6220availables(cons(X, Y), Z) >? andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(nil, X) >? X gen!6220tag(X) >? tuple(X, tuplenil(tag)) gen!6220modtageq(X, Y) >? equal(X, Y) case9(X, Y, Z, true) >? true eqs(empty, empty) >? T eqs(empty, stack(X, Y)) >? F eqs(stack(X, Y), empty) >? F eqs(stack(X, Y), stack(Z, U)) >? and(eqt(X, Z), eqs(Y, U)) pops(stack(X, Y)) >? Y tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F push1(X, Y, Z, U, V, T) >? calls(Z, pushs(Y, U), V) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[T]] = _|_ [[case5(x_1, x_2, x_3, x_4)]] = case5(x_2, x_1, x_4, x_3) [[false]] = _|_ [[lock]] = _|_ [[nil]] = _|_ [[pending]] = _|_ [[pops(x_1)]] = x_1 [[tag]] = _|_ [[undefined]] = _|_ We choose Lex = {case5, locker2!6220obtainables} and Mul = {F, a, and, andt, append, calls, case0, case1, case4, case9, cons, empty, eq, eqc, eqs, eqt, equal, excl, gen!6220modtageq, gen!6220tag, if, imp, int, istops, locker, locker2!6220adduniq, locker2!6220check!6220available, locker2!6220check!6220availables, locker2!6220claim!6220lock, locker2!6220map!6220claim!6220lock, locker2!6220map!6220promote!6220pending, locker2!6220obtainable, locker2!6220promote!6220pending, mcrlrecord, member, nocalls, not, ok, or, pid, push1, pushs, record!6220extract, record!6220new, record!6220updates, release, request, resource, stack, tops, true, tuple, tuplenil}, and the following precedence: record!6220new > resource > case5 = locker2!6220obtainables > excl > empty > mcrlrecord > locker2!6220map!6220promote!6220pending > member > locker2!6220promote!6220pending > or > locker2!6220map!6220claim!6220lock > push1 > stack > calls > case1 > locker2!6220obtainable > record!6220updates > locker > locker2!6220adduniq > eqc > eq > case4 > case9 > ok > tops > istops > pushs > not > release > locker2!6220claim!6220lock > cons > gen!6220tag > tuple > tuplenil > case0 > F = eqs = eqt = pid > and > locker2!6220check!6220availables > int > andt > nocalls > locker2!6220check!6220available > if > true > a > imp > request > record!6220extract > gen!6220modtageq > equal > append Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) >= _|_ or(F, _|_) >= _|_ or(_|_, F) >= _|_ or(F, F) >= F and(F, X) >= F and(X, F) >= F imp(F, X) >= _|_ not(_|_) > F not(F) >= _|_ if(F, X, Y) >= Y eq(_|_, _|_) >= _|_ eq(F, F) >= _|_ eq(_|_, F) >= F eqt(_|_, _|_) >= F eqt(_|_, pid(X)) >= F eqt(_|_, int(X)) >= F eqt(_|_, cons(X, Y)) >= F eqt(_|_, tuple(X, Y)) >= F eqt(_|_, tuplenil(X)) >= F eqt(a, _|_) > F eqt(a, a) > _|_ eqt(a, excl) >= F eqt(a, _|_) >= F eqt(a, _|_) >= F eqt(a, locker) > F eqt(a, mcrlrecord) > F eqt(a, ok) >= F eqt(a, _|_) > F eqt(a, release) > F eqt(a, request) >= F eqt(a, resource) >= F eqt(a, _|_) >= F eqt(a, true) >= F eqt(a, _|_) > F eqt(a, pid(X)) >= F eqt(a, int(X)) >= F eqt(a, cons(X, Y)) > F eqt(a, tuple(X, Y)) >= F eqt(a, tuplenil(X)) > F eqt(excl, _|_) >= F eqt(excl, a) > F eqt(excl, excl) >= _|_ eqt(excl, _|_) >= F eqt(excl, locker) > F eqt(excl, mcrlrecord) > F eqt(excl, ok) >= F eqt(excl, _|_) >= F eqt(excl, release) > F eqt(excl, request) >= F eqt(excl, resource) >= F eqt(excl, _|_) >= F eqt(excl, true) >= F eqt(excl, _|_) >= F eqt(excl, pid(X)) >= F eqt(excl, eqt(_|_, int(X))) > F eqt(_|_, cons(X, Y)) >= F eqt(_|_, tuple(X, Y)) >= F eqt(_|_, tuplenil(X)) > F eqt(_|_, _|_) >= F eqt(_|_, a) >= F eqt(_|_, excl) >= F eqt(_|_, _|_) >= F eqt(_|_, _|_) >= _|_ eqt(_|_, locker) > F eqt(_|_, mcrlrecord) >= F eqt(_|_, ok) > F eqt(_|_, _|_) > F eqt(_|_, release) >= F eqt(_|_, request) >= F eqt(_|_, resource) >= F eqt(_|_, _|_) >= F eqt(_|_, true) >= F eqt(_|_, _|_) > F eqt(_|_, pid(X)) >= F eqt(_|_, int(X)) > F eqt(_|_, cons(X, Y)) > F eqt(_|_, tuple(X, Y)) > F eqt(_|_, tuplenil(X)) > F eqt(locker, _|_) >= F eqt(locker, a) >= F eqt(locker, excl) > F eqt(locker, _|_) > F eqt(locker, _|_) >= F eqt(locker, locker) >= _|_ eqt(locker, mcrlrecord) >= F eqt(locker, ok) >= F eqt(locker, release) >= F eqt(locker, request) >= F eqt(locker, resource) >= F eqt(locker, _|_) > F eqt(locker, true) > F eqt(locker, _|_) >= F eqt(locker, int(X)) > F eqt(locker, cons(X, Y)) > F eqt(locker, tuple(X, Y)) > F eqt(locker, tuplenil(X)) >= F eqt(mcrlrecord, _|_) >= F eqt(mcrlrecord, a) > F eqt(mcrlrecord, excl) > F eqt(mcrlrecord, _|_) > F eqt(mcrlrecord, _|_) >= F eqt(mcrlrecord, locker) >= F eqt(mcrlrecord, mcrlrecord) >= _|_ eqt(mcrlrecord, ok) >= F eqt(mcrlrecord, _|_) > F eqt(mcrlrecord, release) > F eqt(mcrlrecord, request) >= F eqt(mcrlrecord, resource) > F eqt(ok, resource) > F eqt(ok, _|_) >= F eqt(ok, true) >= F eqt(ok, _|_) >= F eqt(ok, pid(X)) >= F eqt(ok, int(X)) >= F eqt(ok, cons(X, Y)) >= F eqt(ok, tuple(X, Y)) >= F eqt(ok, tuplenil(X)) >= F eqt(_|_, _|_) > F eqt(_|_, a) >= F eqt(_|_, excl) > F eqt(_|_, _|_) >= F eqt(_|_, locker) >= F eqt(_|_, mcrlrecord) > F eqt(_|_, _|_) >= _|_ eqt(_|_, release) >= F eqt(_|_, request) > F eqt(_|_, resource) >= F eqt(_|_, _|_) >= F eqt(_|_, true) >= F eqt(_|_, _|_) >= F eqt(_|_, pid(X)) >= F eqt(_|_, int(X)) > F eqt(_|_, cons(X, Y)) > F eqt(_|_, tuplenil(X)) > F eqt(release, _|_) > F eqt(release, excl) >= F eqt(release, _|_) > F eqt(release, _|_) >= F eqt(release, mcrlrecord) > F eqt(release, ok) >= F eqt(request, mcrlrecord) >= F eqt(request, ok) > F eqt(request, _|_) > F eqt(request, release) >= F eqt(request, request) >= _|_ eqt(request, resource) >= F eqt(request, _|_) >= F eqt(request, true) > F eqt(request, pid(X)) >= F eqt(request, cons(X, Y)) >= F eqt(request, tuple(X, Y)) > F eqt(request, tuplenil(X)) >= F eqt(resource, a) > F eqt(resource, _|_) >= F eqt(resource, _|_) > F eqt(resource, locker) >= F eqt(resource, mcrlrecord) > F eqt(resource, ok) > F eqt(resource, _|_) > F eqt(resource, request) >= F eqt(resource, resource) > _|_ eqt(resource, _|_) >= F eqt(resource, true) > F eqt(resource, _|_) > F eqt(resource, pid(X)) > F eqt(resource, int(X)) > F eqt(resource, cons(X, Y)) >= F eqt(_|_, _|_) >= F eqt(_|_, a) >= F eqt(_|_, _|_) >= F eqt(_|_, _|_) >= F eqt(_|_, locker) >= F eqt(_|_, mcrlrecord) >= F eqt(_|_, ok) > F eqt(_|_, _|_) > F eqt(_|_, release) >= F eqt(_|_, request) >= F eqt(_|_, resource) > F eqt(_|_, _|_) >= _|_ eqt(_|_, true) >= F eqt(_|_, _|_) >= F eqt(_|_, pid(X)) > F eqt(_|_, int(X)) >= F eqt(_|_, tuple(X, Y)) >= F eqt(true, _|_) > F eqt(true, a) > F eqt(true, excl) > F eqt(true, _|_) >= F eqt(true, locker) >= F eqt(true, mcrlrecord) >= F eqt(true, ok) >= F eqt(true, _|_) > F eqt(true, release) >= F eqt(true, request) >= F eqt(true, resource) > F eqt(true, _|_) >= F eqt(true, true) >= _|_ eqt(true, _|_) >= F eqt(true, pid(X)) >= F eqt(true, cons(X, Y)) >= F eqt(true, tuple(X, Y)) > F eqt(true, tuplenil(X)) > F eqt(_|_, _|_) > F eqt(_|_, a) >= F eqt(_|_, tuplenil(X)) >= F eqt(pid(X), _|_) >= F eqt(pid(X), a) > F eqt(pid(X), excl) > F eqt(pid(X), _|_) > F eqt(pid(X), _|_) >= F eqt(pid(X), locker) > F eqt(pid(X), mcrlrecord) > F eqt(pid(X), ok) >= F eqt(pid(X), _|_) >= F eqt(pid(X), release) >= F eqt(pid(X), request) > F eqt(pid(X), resource) > F eqt(pid(X), _|_) > F eqt(pid(X), true) >= F eqt(pid(X), _|_) > F eqt(pid(X), int(Y)) >= F eqt(pid(X), cons(Y, Z)) > F eqt(pid(X), tuplenil(Y)) > F eqt(int(X), a) > F eqt(int(X), excl) > F eqt(int(X), _|_) > F eqt(int(X), _|_) > F eqt(int(X), locker) >= F eqt(int(X), mcrlrecord) >= F eqt(int(X), ok) > F eqt(int(X), _|_) > F eqt(int(X), release) >= F eqt(int(X), request) > F eqt(int(X), resource) >= F eqt(int(X), true) >= F eqt(int(X), _|_) >= F eqt(cons(X, Y), _|_) > F eqt(cons(X, Y), true) >= F eqt(cons(X, Y), _|_) > F eqt(cons(X, Y), pid(Z)) >= F eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >= F eqt(tuple(X, Y), _|_) >= F eqt(tuple(X, Y), a) >= F eqt(tuple(X, Y), excl) >= F eqt(tuple(X, Y), _|_) >= F eqt(tuple(X, Y), _|_) >= F eqt(tuple(X, Y), locker) >= F eqt(tuple(X, Y), mcrlrecord) > F eqt(tuple(X, Y), ok) >= F eqt(tuple(X, Y), _|_) > F eqt(tuple(X, Y), release) > F eqt(tuple(X, Y), request) >= F eqt(tuple(X, Y), resource) >= F eqt(tuple(X, Y), _|_) > F eqt(tuple(X, Y), true) > F eqt(tuple(X, Y), pid(Z)) >= F eqt(tuple(X, Y), cons(Z, U)) > F eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >= F eqt(tuplenil(X), _|_) >= F eqt(tuplenil(X), excl) > F eqt(tuplenil(X), _|_) >= F eqt(tuplenil(X), locker) >= F eqt(tuplenil(X), mcrlrecord) >= F eqt(tuplenil(X), ok) > F eqt(tuplenil(X), _|_) >= F eqt(tuplenil(X), release) > F eqt(tuplenil(X), request) > F eqt(tuplenil(X), resource) >= F eqt(tuplenil(X), true) >= F eqt(tuplenil(X), _|_) >= F eqt(tuplenil(X), pid(Y)) >= F eqt(tuplenil(X), int(Y)) > F eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) record!6220new(_|_) >= tuple(mcrlrecord, tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_))))) locker2!6220map!6220promote!6220pending(_|_, X) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) locker2!6220promote!6220pending(X, Y) > case0(Y, X, record!6220extract(X, _|_, _|_)) case1(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_)) case4(X, Y, Z) >= _|_ locker2!6220obtainables(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) case5(X, Y, Z, true) > andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) case5(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) locker2!6220check!6220availables(_|_, X) > true locker2!6220check!6220availables(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(_|_, X) >= X gen!6220tag(X) > tuple(X, tuplenil(_|_)) gen!6220modtageq(X, Y) >= equal(X, Y) case9(X, Y, Z, true) >= true eqs(empty, empty) >= _|_ eqs(empty, stack(X, Y)) >= F eqs(stack(X, Y), empty) > F eqs(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) stack(X, Y) > Y tops(stack(X, Y)) >= X istops(X, empty) >= F eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= F push1(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) With these choices, we have: 1] or(_|_, _|_) >= _|_ by (Bot) 2] or(F, _|_) >= _|_ by (Bot) 3] or(_|_, F) >= _|_ by (Bot) 4] or(F, F) >= F because [5], by (Star) 5] or*(F, F) >= F because or > F, by (Copy) 6] and(F, X) >= F because [7], by (Star) 7] and*(F, X) >= F because [8], by (Select) 8] F >= F by (Fun) 9] and(X, F) >= F because [10], by (Star) 10] and*(X, F) >= F because [8], by (Select) 11] imp(F, X) >= _|_ by (Bot) 12] not(_|_) > F because [13], by definition 13] not*(_|_) >= F because not > F, by (Copy) 14] not(F) >= _|_ by (Bot) 15] if(F, X, Y) >= Y because [16], by (Star) 16] if*(F, X, Y) >= Y because [17], by (Select) 17] Y >= Y by (Meta) 18] eq(_|_, _|_) >= _|_ by (Bot) 19] eq(F, F) >= _|_ by (Bot) 20] eq(_|_, F) >= F because [21], by (Star) 21] eq*(_|_, F) >= F because eq > F, by (Copy) 22] eqt(_|_, _|_) >= F because [23], by (Star) 23] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 24] eqt(_|_, pid(X)) >= F because [25], by (Star) 25] eqt*(_|_, pid(X)) >= F because [26], by (Select) 26] pid(X) >= F because [27], by (Star) 27] pid*(X) >= F because pid = F and pid in Mul, by (Stat) 28] eqt(_|_, int(X)) >= F because [29], by (Star) 29] eqt*(_|_, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 30] eqt(_|_, cons(X, Y)) >= F because [31], by (Star) 31] eqt*(_|_, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 32] eqt(_|_, tuple(X, Y)) >= F because [33], by (Star) 33] eqt*(_|_, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 34] eqt(_|_, tuplenil(X)) >= F because [35], by (Star) 35] eqt*(_|_, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 36] eqt(a, _|_) > F because [37], by definition 37] eqt*(a, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 38] eqt(a, a) > _|_ because [39], by definition 39] eqt*(a, a) >= _|_ by (Bot) 40] eqt(a, excl) >= F because [41], by (Star) 41] eqt*(a, excl) >= F because eqt = F and eqt in Mul, by (Stat) 42] eqt(a, _|_) >= F because [43], by (Star) 43] eqt*(a, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 44] eqt(a, _|_) >= F because [45], by (Star) 45] eqt*(a, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 46] eqt(a, locker) > F because [47], by definition 47] eqt*(a, locker) >= F because eqt = F and eqt in Mul, by (Stat) 48] eqt(a, mcrlrecord) > F because [49], by definition 49] eqt*(a, mcrlrecord) >= F because [50], by (Select) 50] mcrlrecord >= F because [51], by (Star) 51] mcrlrecord* >= F because mcrlrecord > F, by (Copy) 52] eqt(a, ok) >= F because [53], by (Star) 53] eqt*(a, ok) >= F because eqt = F and eqt in Mul, by (Stat) 54] eqt(a, _|_) > F because [55], by definition 55] eqt*(a, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 56] eqt(a, release) > F because [57], by definition 57] eqt*(a, release) >= F because eqt = F and eqt in Mul, by (Stat) 58] eqt(a, request) >= F because [59], by (Star) 59] eqt*(a, request) >= F because eqt = F and eqt in Mul, by (Stat) 60] eqt(a, resource) >= F because [61], by (Star) 61] eqt*(a, resource) >= F because eqt = F and eqt in Mul, by (Stat) 62] eqt(a, _|_) >= F because [63], by (Star) 63] eqt*(a, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 64] eqt(a, true) >= F because [65], by (Star) 65] eqt*(a, true) >= F because eqt = F and eqt in Mul, by (Stat) 66] eqt(a, _|_) > F because [67], by definition 67] eqt*(a, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 68] eqt(a, pid(X)) >= F because [69], by (Star) 69] eqt*(a, pid(X)) >= F because eqt = F and eqt in Mul, by (Stat) 70] eqt(a, int(X)) >= F because [71], by (Star) 71] eqt*(a, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 72] eqt(a, cons(X, Y)) > F because [73], by definition 73] eqt*(a, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 74] eqt(a, tuple(X, Y)) >= F because [75], by (Star) 75] eqt*(a, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 76] eqt(a, tuplenil(X)) > F because [77], by definition 77] eqt*(a, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 78] eqt(excl, _|_) >= F because [79], by (Star) 79] eqt*(excl, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 80] eqt(excl, a) > F because [81], by definition 81] eqt*(excl, a) >= F because eqt = F and eqt in Mul, by (Stat) 82] eqt(excl, excl) >= _|_ by (Bot) 83] eqt(excl, _|_) >= F because [84], by (Star) 84] eqt*(excl, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 85] eqt(excl, locker) > F because [86], by definition 86] eqt*(excl, locker) >= F because eqt = F and eqt in Mul, by (Stat) 87] eqt(excl, mcrlrecord) > F because [88], by definition 88] eqt*(excl, mcrlrecord) >= F because [50], by (Select) 89] eqt(excl, ok) >= F because [90], by (Star) 90] eqt*(excl, ok) >= F because eqt = F and eqt in Mul, by (Stat) 91] eqt(excl, _|_) >= F because [92], by (Star) 92] eqt*(excl, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 93] eqt(excl, release) > F because [94], by definition 94] eqt*(excl, release) >= F because eqt = F and eqt in Mul, by (Stat) 95] eqt(excl, request) >= F because [96], by (Star) 96] eqt*(excl, request) >= F because eqt = F and eqt in Mul, by (Stat) 97] eqt(excl, resource) >= F because [98], by (Star) 98] eqt*(excl, resource) >= F because eqt = F and eqt in Mul, by (Stat) 99] eqt(excl, _|_) >= F because [100], by (Star) 100] eqt*(excl, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 101] eqt(excl, true) >= F because [102], by (Star) 102] eqt*(excl, true) >= F because eqt = F and eqt in Mul, by (Stat) 103] eqt(excl, _|_) >= F because [104], by (Star) 104] eqt*(excl, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 105] eqt(excl, pid(X)) >= F because [106], by (Star) 106] eqt*(excl, pid(X)) >= F because [26], by (Select) 107] eqt(excl, eqt(_|_, int(X))) > F because [108], by definition 108] eqt*(excl, eqt(_|_, int(X))) >= F because eqt = F and eqt in Mul, by (Stat) 109] eqt(_|_, cons(X, Y)) >= F because [110], by (Star) 110] eqt*(_|_, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 111] eqt(_|_, tuple(X, Y)) >= F because [112], by (Star) 112] eqt*(_|_, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 113] eqt(_|_, tuplenil(X)) > F because [114], by definition 114] eqt*(_|_, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 115] eqt(_|_, _|_) >= F because [116], by (Star) 116] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 117] eqt(_|_, a) >= F because [118], by (Star) 118] eqt*(_|_, a) >= F because eqt = F and eqt in Mul, by (Stat) 119] eqt(_|_, excl) >= F because [120], by (Star) 120] eqt*(_|_, excl) >= F because eqt = F and eqt in Mul, by (Stat) 121] eqt(_|_, _|_) >= F because [122], by (Star) 122] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 123] eqt(_|_, _|_) >= _|_ by (Bot) 124] eqt(_|_, locker) > F because [125], by definition 125] eqt*(_|_, locker) >= F because eqt = F and eqt in Mul, by (Stat) 126] eqt(_|_, mcrlrecord) >= F because [127], by (Star) 127] eqt*(_|_, mcrlrecord) >= F because [50], by (Select) 128] eqt(_|_, ok) > F because [129], by definition 129] eqt*(_|_, ok) >= F because eqt = F and eqt in Mul, by (Stat) 130] eqt(_|_, _|_) > F because [131], by definition 131] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 132] eqt(_|_, release) >= F because [133], by (Star) 133] eqt*(_|_, release) >= F because eqt = F and eqt in Mul, by (Stat) 134] eqt(_|_, request) >= F because [135], by (Star) 135] eqt*(_|_, request) >= F because eqt = F and eqt in Mul, by (Stat) 136] eqt(_|_, resource) >= F because [137], by (Star) 137] eqt*(_|_, resource) >= F because eqt = F and eqt in Mul, by (Stat) 138] eqt(_|_, _|_) >= F because [139], by (Star) 139] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 140] eqt(_|_, true) >= F because [141], by (Star) 141] eqt*(_|_, true) >= F because eqt = F and eqt in Mul, by (Stat) 142] eqt(_|_, _|_) > F because [143], by definition 143] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 144] eqt(_|_, pid(X)) >= F because [145], by (Star) 145] eqt*(_|_, pid(X)) >= F because [26], by (Select) 146] eqt(_|_, int(X)) > F because [147], by definition 147] eqt*(_|_, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 148] eqt(_|_, cons(X, Y)) > F because [149], by definition 149] eqt*(_|_, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 150] eqt(_|_, tuple(X, Y)) > F because [151], by definition 151] eqt*(_|_, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 152] eqt(_|_, tuplenil(X)) > F because [153], by definition 153] eqt*(_|_, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 154] eqt(locker, _|_) >= F because [155], by (Star) 155] eqt*(locker, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 156] eqt(locker, a) >= F because [157], by (Star) 157] eqt*(locker, a) >= F because eqt = F and eqt in Mul, by (Stat) 158] eqt(locker, excl) > F because [159], by definition 159] eqt*(locker, excl) >= F because eqt = F and eqt in Mul, by (Stat) 160] eqt(locker, _|_) > F because [161], by definition 161] eqt*(locker, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 162] eqt(locker, _|_) >= F because [163], by (Star) 163] eqt*(locker, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 164] eqt(locker, locker) >= _|_ by (Bot) 165] eqt(locker, mcrlrecord) >= F because [166], by (Star) 166] eqt*(locker, mcrlrecord) >= F because eqt = F and eqt in Mul, by (Stat) 167] eqt(locker, ok) >= F because [168], by (Star) 168] eqt*(locker, ok) >= F because eqt = F and eqt in Mul, by (Stat) 169] eqt(locker, release) >= F because [170], by (Star) 170] eqt*(locker, release) >= F because eqt = F and eqt in Mul, by (Stat) 171] eqt(locker, request) >= F because [172], by (Star) 172] eqt*(locker, request) >= F because eqt = F and eqt in Mul, by (Stat) 173] eqt(locker, resource) >= F because [174], by (Star) 174] eqt*(locker, resource) >= F because eqt = F and eqt in Mul, by (Stat) 175] eqt(locker, _|_) > F because [176], by definition 176] eqt*(locker, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 177] eqt(locker, true) > F because [178], by definition 178] eqt*(locker, true) >= F because eqt = F and eqt in Mul, by (Stat) 179] eqt(locker, _|_) >= F because [180], by (Star) 180] eqt*(locker, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 181] eqt(locker, int(X)) > F because [182], by definition 182] eqt*(locker, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 183] eqt(locker, cons(X, Y)) > F because [184], by definition 184] eqt*(locker, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 185] eqt(locker, tuple(X, Y)) > F because [186], by definition 186] eqt*(locker, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 187] eqt(locker, tuplenil(X)) >= F because [188], by (Star) 188] eqt*(locker, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 189] eqt(mcrlrecord, _|_) >= F because [190], by (Star) 190] eqt*(mcrlrecord, _|_) >= F because [50], by (Select) 191] eqt(mcrlrecord, a) > F because [192], by definition 192] eqt*(mcrlrecord, a) >= F because eqt = F and eqt in Mul, by (Stat) 193] eqt(mcrlrecord, excl) > F because [194], by definition 194] eqt*(mcrlrecord, excl) >= F because [50], by (Select) 195] eqt(mcrlrecord, _|_) > F because [196], by definition 196] eqt*(mcrlrecord, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 197] eqt(mcrlrecord, _|_) >= F because [198], by (Star) 198] eqt*(mcrlrecord, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 199] eqt(mcrlrecord, locker) >= F because [200], by (Star) 200] eqt*(mcrlrecord, locker) >= F because [50], by (Select) 201] eqt(mcrlrecord, mcrlrecord) >= _|_ by (Bot) 202] eqt(mcrlrecord, ok) >= F because [203], by (Star) 203] eqt*(mcrlrecord, ok) >= F because [50], by (Select) 204] eqt(mcrlrecord, _|_) > F because [205], by definition 205] eqt*(mcrlrecord, _|_) >= F because [50], by (Select) 206] eqt(mcrlrecord, release) > F because [207], by definition 207] eqt*(mcrlrecord, release) >= F because [50], by (Select) 208] eqt(mcrlrecord, request) >= F because [209], by (Star) 209] eqt*(mcrlrecord, request) >= F because eqt = F and eqt in Mul, by (Stat) 210] eqt(mcrlrecord, resource) > F because [211], by definition 211] eqt*(mcrlrecord, resource) >= F because eqt = F and eqt in Mul, by (Stat) 212] eqt(ok, resource) > F because [213], by definition 213] eqt*(ok, resource) >= F because eqt = F and eqt in Mul, by (Stat) 214] eqt(ok, _|_) >= F because [215], by (Star) 215] eqt*(ok, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 216] eqt(ok, true) >= F because [217], by (Star) 217] eqt*(ok, true) >= F because eqt = F and eqt in Mul, by (Stat) 218] eqt(ok, _|_) >= F because [219], by (Star) 219] eqt*(ok, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 220] eqt(ok, pid(X)) >= F because [221], by (Star) 221] eqt*(ok, pid(X)) >= F because [26], by (Select) 222] eqt(ok, int(X)) >= F because [223], by (Star) 223] eqt*(ok, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 224] eqt(ok, cons(X, Y)) >= F because [225], by (Star) 225] eqt*(ok, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 226] eqt(ok, tuple(X, Y)) >= F because [227], by (Star) 227] eqt*(ok, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 228] eqt(ok, tuplenil(X)) >= F because [229], by (Star) 229] eqt*(ok, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 230] eqt(_|_, _|_) > F because [231], by definition 231] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 232] eqt(_|_, a) >= F because [233], by (Star) 233] eqt*(_|_, a) >= F because eqt = F and eqt in Mul, by (Stat) 234] eqt(_|_, excl) > F because [235], by definition 235] eqt*(_|_, excl) >= F because eqt = F and eqt in Mul, by (Stat) 236] eqt(_|_, _|_) >= F because [237], by (Star) 237] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 238] eqt(_|_, locker) >= F because [239], by (Star) 239] eqt*(_|_, locker) >= F because eqt = F and eqt in Mul, by (Stat) 240] eqt(_|_, mcrlrecord) > F because [241], by definition 241] eqt*(_|_, mcrlrecord) >= F because [50], by (Select) 242] eqt(_|_, _|_) >= _|_ by (Bot) 243] eqt(_|_, release) >= F because [244], by (Star) 244] eqt*(_|_, release) >= F because eqt = F and eqt in Mul, by (Stat) 245] eqt(_|_, request) > F because [246], by definition 246] eqt*(_|_, request) >= F because eqt = F and eqt in Mul, by (Stat) 247] eqt(_|_, resource) >= F because [248], by (Star) 248] eqt*(_|_, resource) >= F because eqt = F and eqt in Mul, by (Stat) 249] eqt(_|_, _|_) >= F because [250], by (Star) 250] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 251] eqt(_|_, true) >= F because [252], by (Star) 252] eqt*(_|_, true) >= F because eqt = F and eqt in Mul, by (Stat) 253] eqt(_|_, _|_) >= F because [254], by (Star) 254] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 255] eqt(_|_, pid(X)) >= F because [256], by (Star) 256] eqt*(_|_, pid(X)) >= F because [26], by (Select) 257] eqt(_|_, int(X)) > F because [258], by definition 258] eqt*(_|_, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 259] eqt(_|_, cons(X, Y)) > F because [260], by definition 260] eqt*(_|_, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 261] eqt(_|_, tuplenil(X)) > F because [262], by definition 262] eqt*(_|_, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 263] eqt(release, _|_) > F because [264], by definition 264] eqt*(release, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 265] eqt(release, excl) >= F because [266], by (Star) 266] eqt*(release, excl) >= F because eqt = F and eqt in Mul, by (Stat) 267] eqt(release, _|_) > F because [268], by definition 268] eqt*(release, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 269] eqt(release, _|_) >= F because [270], by (Star) 270] eqt*(release, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 271] eqt(release, mcrlrecord) > F because [272], by definition 272] eqt*(release, mcrlrecord) >= F because [50], by (Select) 273] eqt(release, ok) >= F because [274], by (Star) 274] eqt*(release, ok) >= F because eqt = F and eqt in Mul, by (Stat) 275] eqt(request, mcrlrecord) >= F because [276], by (Star) 276] eqt*(request, mcrlrecord) >= F because eqt = F and eqt in Mul, by (Stat) 277] eqt(request, ok) > F because [278], by definition 278] eqt*(request, ok) >= F because eqt = F and eqt in Mul, by (Stat) 279] eqt(request, _|_) > F because [280], by definition 280] eqt*(request, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 281] eqt(request, release) >= F because [282], by (Star) 282] eqt*(request, release) >= F because eqt = F and eqt in Mul, by (Stat) 283] eqt(request, request) >= _|_ by (Bot) 284] eqt(request, resource) >= F because [285], by (Star) 285] eqt*(request, resource) >= F because eqt = F and eqt in Mul, by (Stat) 286] eqt(request, _|_) >= F because [287], by (Star) 287] eqt*(request, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 288] eqt(request, true) > F because [289], by definition 289] eqt*(request, true) >= F because eqt = F and eqt in Mul, by (Stat) 290] eqt(request, pid(X)) >= F because [291], by (Star) 291] eqt*(request, pid(X)) >= F because [26], by (Select) 292] eqt(request, cons(X, Y)) >= F because [293], by (Star) 293] eqt*(request, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 294] eqt(request, tuple(X, Y)) > F because [295], by definition 295] eqt*(request, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 296] eqt(request, tuplenil(X)) >= F because [297], by (Star) 297] eqt*(request, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 298] eqt(resource, a) > F because [299], by definition 299] eqt*(resource, a) >= F because eqt = F and eqt in Mul, by (Stat) 300] eqt(resource, _|_) >= F because [301], by (Star) 301] eqt*(resource, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 302] eqt(resource, _|_) > F because [303], by definition 303] eqt*(resource, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 304] eqt(resource, locker) >= F because [305], by (Star) 305] eqt*(resource, locker) >= F because eqt = F and eqt in Mul, by (Stat) 306] eqt(resource, mcrlrecord) > F because [307], by definition 307] eqt*(resource, mcrlrecord) >= F because [50], by (Select) 308] eqt(resource, ok) > F because [309], by definition 309] eqt*(resource, ok) >= F because eqt = F and eqt in Mul, by (Stat) 310] eqt(resource, _|_) > F because [311], by definition 311] eqt*(resource, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 312] eqt(resource, request) >= F because [313], by (Star) 313] eqt*(resource, request) >= F because eqt = F and eqt in Mul, by (Stat) 314] eqt(resource, resource) > _|_ because [315], by definition 315] eqt*(resource, resource) >= _|_ by (Bot) 316] eqt(resource, _|_) >= F because [317], by (Star) 317] eqt*(resource, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 318] eqt(resource, true) > F because [319], by definition 319] eqt*(resource, true) >= F because eqt = F and eqt in Mul, by (Stat) 320] eqt(resource, _|_) > F because [321], by definition 321] eqt*(resource, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 322] eqt(resource, pid(X)) > F because [323], by definition 323] eqt*(resource, pid(X)) >= F because [26], by (Select) 324] eqt(resource, int(X)) > F because [325], by definition 325] eqt*(resource, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 326] eqt(resource, cons(X, Y)) >= F because [327], by (Star) 327] eqt*(resource, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 328] eqt(_|_, _|_) >= F because [329], by (Star) 329] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 330] eqt(_|_, a) >= F because [331], by (Star) 331] eqt*(_|_, a) >= F because eqt = F and eqt in Mul, by (Stat) 332] eqt(_|_, _|_) >= F because [333], by (Star) 333] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 334] eqt(_|_, _|_) >= F because [335], by (Star) 335] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 336] eqt(_|_, locker) >= F because [337], by (Star) 337] eqt*(_|_, locker) >= F because eqt = F and eqt in Mul, by (Stat) 338] eqt(_|_, mcrlrecord) >= F because [339], by (Star) 339] eqt*(_|_, mcrlrecord) >= F because [50], by (Select) 340] eqt(_|_, ok) > F because [341], by definition 341] eqt*(_|_, ok) >= F because eqt = F and eqt in Mul, by (Stat) 342] eqt(_|_, _|_) > F because [343], by definition 343] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 344] eqt(_|_, release) >= F because [345], by (Star) 345] eqt*(_|_, release) >= F because eqt = F and eqt in Mul, by (Stat) 346] eqt(_|_, request) >= F because [347], by (Star) 347] eqt*(_|_, request) >= F because eqt = F and eqt in Mul, by (Stat) 348] eqt(_|_, resource) > F because [349], by definition 349] eqt*(_|_, resource) >= F because eqt = F and eqt in Mul, by (Stat) 350] eqt(_|_, _|_) >= _|_ by (Bot) 351] eqt(_|_, true) >= F because [352], by (Star) 352] eqt*(_|_, true) >= F because eqt = F and eqt in Mul, by (Stat) 353] eqt(_|_, _|_) >= F because [354], by (Star) 354] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 355] eqt(_|_, pid(X)) > F because [356], by definition 356] eqt*(_|_, pid(X)) >= F because [26], by (Select) 357] eqt(_|_, int(X)) >= F because [358], by (Star) 358] eqt*(_|_, int(X)) >= F because eqt = F and eqt in Mul, by (Stat) 359] eqt(_|_, tuple(X, Y)) >= F because [360], by (Star) 360] eqt*(_|_, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 361] eqt(true, _|_) > F because [362], by definition 362] eqt*(true, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 363] eqt(true, a) > F because [364], by definition 364] eqt*(true, a) >= F because eqt = F and eqt in Mul, by (Stat) 365] eqt(true, excl) > F because [366], by definition 366] eqt*(true, excl) >= F because eqt = F and eqt in Mul, by (Stat) 367] eqt(true, _|_) >= F because [368], by (Star) 368] eqt*(true, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 369] eqt(true, locker) >= F because [370], by (Star) 370] eqt*(true, locker) >= F because eqt = F and eqt in Mul, by (Stat) 371] eqt(true, mcrlrecord) >= F because [372], by (Star) 372] eqt*(true, mcrlrecord) >= F because eqt = F and eqt in Mul, by (Stat) 373] eqt(true, ok) >= F because [374], by (Star) 374] eqt*(true, ok) >= F because eqt = F and eqt in Mul, by (Stat) 375] eqt(true, _|_) > F because [376], by definition 376] eqt*(true, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 377] eqt(true, release) >= F because [378], by (Star) 378] eqt*(true, release) >= F because eqt = F and eqt in Mul, by (Stat) 379] eqt(true, request) >= F because [380], by (Star) 380] eqt*(true, request) >= F because eqt = F and eqt in Mul, by (Stat) 381] eqt(true, resource) > F because [382], by definition 382] eqt*(true, resource) >= F because eqt = F and eqt in Mul, by (Stat) 383] eqt(true, _|_) >= F because [384], by (Star) 384] eqt*(true, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 385] eqt(true, true) >= _|_ by (Bot) 386] eqt(true, _|_) >= F because [387], by (Star) 387] eqt*(true, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 388] eqt(true, pid(X)) >= F because [389], by (Star) 389] eqt*(true, pid(X)) >= F because [26], by (Select) 390] eqt(true, cons(X, Y)) >= F because [391], by (Star) 391] eqt*(true, cons(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 392] eqt(true, tuple(X, Y)) > F because [393], by definition 393] eqt*(true, tuple(X, Y)) >= F because eqt = F and eqt in Mul, by (Stat) 394] eqt(true, tuplenil(X)) > F because [395], by definition 395] eqt*(true, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 396] eqt(_|_, _|_) > F because [397], by definition 397] eqt*(_|_, _|_) >= F because eqt = F and eqt in Mul, by (Stat) 398] eqt(_|_, a) >= F because [399], by (Star) 399] eqt*(_|_, a) >= F because eqt = F and eqt in Mul, by (Stat) 400] eqt(_|_, tuplenil(X)) >= F because [401], by (Star) 401] eqt*(_|_, tuplenil(X)) >= F because eqt = F and eqt in Mul, by (Stat) 402] eqt(pid(X), _|_) >= F because [403], by (Star) 403] eqt*(pid(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 404] eqt(pid(X), a) > F because [405], by definition 405] eqt*(pid(X), a) >= F because eqt = F and eqt in Mul, by (Stat) 406] eqt(pid(X), excl) > F because [407], by definition 407] eqt*(pid(X), excl) >= F because eqt = F and eqt in Mul, by (Stat) 408] eqt(pid(X), _|_) > F because [409], by definition 409] eqt*(pid(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 410] eqt(pid(X), _|_) >= F because [411], by (Star) 411] eqt*(pid(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 412] eqt(pid(X), locker) > F because [413], by definition 413] eqt*(pid(X), locker) >= F because eqt = F and eqt in Mul, by (Stat) 414] eqt(pid(X), mcrlrecord) > F because [415], by definition 415] eqt*(pid(X), mcrlrecord) >= F because [50], by (Select) 416] eqt(pid(X), ok) >= F because [417], by (Star) 417] eqt*(pid(X), ok) >= F because eqt = F and eqt in Mul, by (Stat) 418] eqt(pid(X), _|_) >= F because [419], by (Star) 419] eqt*(pid(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 420] eqt(pid(X), release) >= F because [421], by (Star) 421] eqt*(pid(X), release) >= F because eqt = F and eqt in Mul, by (Stat) 422] eqt(pid(X), request) > F because [423], by definition 423] eqt*(pid(X), request) >= F because eqt = F and eqt in Mul, by (Stat) 424] eqt(pid(X), resource) > F because [425], by definition 425] eqt*(pid(X), resource) >= F because eqt = F and eqt in Mul, by (Stat) 426] eqt(pid(X), _|_) > F because [427], by definition 427] eqt*(pid(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 428] eqt(pid(X), true) >= F because [429], by (Star) 429] eqt*(pid(X), true) >= F because eqt = F and eqt in Mul, by (Stat) 430] eqt(pid(X), _|_) > F because [431], by definition 431] eqt*(pid(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 432] eqt(pid(X), int(Y)) >= F because [433], by (Star) 433] eqt*(pid(X), int(Y)) >= F because eqt = F and eqt in Mul, by (Stat) 434] eqt(pid(X), cons(Y, Z)) > F because [435], by definition 435] eqt*(pid(X), cons(Y, Z)) >= F because eqt = F and eqt in Mul, by (Stat) 436] eqt(pid(X), tuplenil(Y)) > F because [437], by definition 437] eqt*(pid(X), tuplenil(Y)) >= F because eqt = F and eqt in Mul, by (Stat) 438] eqt(int(X), a) > F because [439], by definition 439] eqt*(int(X), a) >= F because eqt = F and eqt in Mul, by (Stat) 440] eqt(int(X), excl) > F because [441], by definition 441] eqt*(int(X), excl) >= F because eqt = F and eqt in Mul, by (Stat) 442] eqt(int(X), _|_) > F because [443], by definition 443] eqt*(int(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 444] eqt(int(X), _|_) > F because [445], by definition 445] eqt*(int(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 446] eqt(int(X), locker) >= F because [447], by (Star) 447] eqt*(int(X), locker) >= F because eqt = F and eqt in Mul, by (Stat) 448] eqt(int(X), mcrlrecord) >= F because [449], by (Star) 449] eqt*(int(X), mcrlrecord) >= F because [50], by (Select) 450] eqt(int(X), ok) > F because [451], by definition 451] eqt*(int(X), ok) >= F because eqt = F and eqt in Mul, by (Stat) 452] eqt(int(X), _|_) > F because [453], by definition 453] eqt*(int(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 454] eqt(int(X), release) >= F because [455], by (Star) 455] eqt*(int(X), release) >= F because eqt = F and eqt in Mul, by (Stat) 456] eqt(int(X), request) > F because [457], by definition 457] eqt*(int(X), request) >= F because eqt = F and eqt in Mul, by (Stat) 458] eqt(int(X), resource) >= F because [459], by (Star) 459] eqt*(int(X), resource) >= F because eqt = F and eqt in Mul, by (Stat) 460] eqt(int(X), true) >= F because [461], by (Star) 461] eqt*(int(X), true) >= F because eqt = F and eqt in Mul, by (Stat) 462] eqt(int(X), _|_) >= F because [463], by (Star) 463] eqt*(int(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 464] eqt(cons(X, Y), _|_) > F because [465], by definition 465] eqt*(cons(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 466] eqt(cons(X, Y), true) >= F because [467], by (Star) 467] eqt*(cons(X, Y), true) >= F because eqt = F and eqt in Mul, by (Stat) 468] eqt(cons(X, Y), _|_) > F because [469], by definition 469] eqt*(cons(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 470] eqt(cons(X, Y), pid(Z)) >= F because [471], by (Star) 471] eqt*(cons(X, Y), pid(Z)) >= F because [26], by (Select) 472] eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [473], by (Star) 473] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [474] and [481], by (Copy) 474] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [475] and [478], by (Stat) 475] cons(X, Y) > X because [476], by definition 476] cons*(X, Y) >= X because [477], by (Select) 477] X >= X by (Meta) 478] cons(Z, U) >= Z because [479], by (Star) 479] cons*(Z, U) >= Z because [480], by (Select) 480] Z >= Z by (Meta) 481] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [482] and [485], by (Stat) 482] cons(X, Y) > Y because [483], by definition 483] cons*(X, Y) >= Y because [484], by (Select) 484] Y >= Y by (Meta) 485] cons(Z, U) >= U because [486], by (Star) 486] cons*(Z, U) >= U because [487], by (Select) 487] U >= U by (Meta) 488] eqt(cons(X, Y), tuplenil(Z)) >= F because [489], by (Star) 489] eqt*(cons(X, Y), tuplenil(Z)) >= F because eqt = F and eqt in Mul, by (Stat) 490] eqt(tuple(X, Y), _|_) >= F because [491], by (Star) 491] eqt*(tuple(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 492] eqt(tuple(X, Y), a) >= F because [493], by (Star) 493] eqt*(tuple(X, Y), a) >= F because eqt = F and eqt in Mul, by (Stat) 494] eqt(tuple(X, Y), excl) >= F because [495], by (Star) 495] eqt*(tuple(X, Y), excl) >= F because eqt = F and eqt in Mul, by (Stat) 496] eqt(tuple(X, Y), _|_) >= F because [497], by (Star) 497] eqt*(tuple(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 498] eqt(tuple(X, Y), _|_) >= F because [499], by (Star) 499] eqt*(tuple(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 500] eqt(tuple(X, Y), locker) >= F because [501], by (Star) 501] eqt*(tuple(X, Y), locker) >= F because eqt = F and eqt in Mul, by (Stat) 502] eqt(tuple(X, Y), mcrlrecord) > F because [503], by definition 503] eqt*(tuple(X, Y), mcrlrecord) >= F because [50], by (Select) 504] eqt(tuple(X, Y), ok) >= F because [505], by (Star) 505] eqt*(tuple(X, Y), ok) >= F because eqt = F and eqt in Mul, by (Stat) 506] eqt(tuple(X, Y), _|_) > F because [507], by definition 507] eqt*(tuple(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 508] eqt(tuple(X, Y), release) > F because [509], by definition 509] eqt*(tuple(X, Y), release) >= F because eqt = F and eqt in Mul, by (Stat) 510] eqt(tuple(X, Y), request) >= F because [511], by (Star) 511] eqt*(tuple(X, Y), request) >= F because eqt = F and eqt in Mul, by (Stat) 512] eqt(tuple(X, Y), resource) >= F because [513], by (Star) 513] eqt*(tuple(X, Y), resource) >= F because eqt = F and eqt in Mul, by (Stat) 514] eqt(tuple(X, Y), _|_) > F because [515], by definition 515] eqt*(tuple(X, Y), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 516] eqt(tuple(X, Y), true) > F because [517], by definition 517] eqt*(tuple(X, Y), true) >= F because eqt = F and eqt in Mul, by (Stat) 518] eqt(tuple(X, Y), pid(Z)) >= F because [519], by (Star) 519] eqt*(tuple(X, Y), pid(Z)) >= F because [26], by (Select) 520] eqt(tuple(X, Y), cons(Z, U)) > F because [521], by definition 521] eqt*(tuple(X, Y), cons(Z, U)) >= F because eqt = F and eqt in Mul, by (Stat) 522] eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [523], by (Star) 523] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [524] and [529], by (Copy) 524] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [525] and [527], by (Stat) 525] tuple(X, Y) >= X because [526], by (Star) 526] tuple*(X, Y) >= X because [477], by (Select) 527] tuple(Z, U) > Z because [528], by definition 528] tuple*(Z, U) >= Z because [480], by (Select) 529] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [530] and [532], by (Stat) 530] tuple(X, Y) >= Y because [531], by (Star) 531] tuple*(X, Y) >= Y because [484], by (Select) 532] tuple(Z, U) > U because [533], by definition 533] tuple*(Z, U) >= U because [487], by (Select) 534] eqt(tuple(X, Y), tuplenil(Z)) >= F because [535], by (Star) 535] eqt*(tuple(X, Y), tuplenil(Z)) >= F because eqt = F and eqt in Mul, by (Stat) 536] eqt(tuplenil(X), _|_) >= F because [537], by (Star) 537] eqt*(tuplenil(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 538] eqt(tuplenil(X), excl) > F because [539], by definition 539] eqt*(tuplenil(X), excl) >= F because eqt = F and eqt in Mul, by (Stat) 540] eqt(tuplenil(X), _|_) >= F because [541], by (Star) 541] eqt*(tuplenil(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 542] eqt(tuplenil(X), locker) >= F because [543], by (Star) 543] eqt*(tuplenil(X), locker) >= F because eqt = F and eqt in Mul, by (Stat) 544] eqt(tuplenil(X), mcrlrecord) >= F because [545], by (Star) 545] eqt*(tuplenil(X), mcrlrecord) >= F because [50], by (Select) 546] eqt(tuplenil(X), ok) > F because [547], by definition 547] eqt*(tuplenil(X), ok) >= F because eqt = F and eqt in Mul, by (Stat) 548] eqt(tuplenil(X), _|_) >= F because [549], by (Star) 549] eqt*(tuplenil(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 550] eqt(tuplenil(X), release) > F because [551], by definition 551] eqt*(tuplenil(X), release) >= F because eqt = F and eqt in Mul, by (Stat) 552] eqt(tuplenil(X), request) > F because [553], by definition 553] eqt*(tuplenil(X), request) >= F because eqt = F and eqt in Mul, by (Stat) 554] eqt(tuplenil(X), resource) >= F because [555], by (Star) 555] eqt*(tuplenil(X), resource) >= F because eqt = F and eqt in Mul, by (Stat) 556] eqt(tuplenil(X), true) >= F because [557], by (Star) 557] eqt*(tuplenil(X), true) >= F because eqt = F and eqt in Mul, by (Stat) 558] eqt(tuplenil(X), _|_) >= F because [559], by (Star) 559] eqt*(tuplenil(X), _|_) >= F because eqt = F and eqt in Mul, by (Stat) 560] eqt(tuplenil(X), pid(Y)) >= F because [561], by (Star) 561] eqt*(tuplenil(X), pid(Y)) >= F because [26], by (Select) 562] eqt(tuplenil(X), int(Y)) > F because [563], by definition 563] eqt*(tuplenil(X), int(Y)) >= F because eqt = F and eqt in Mul, by (Stat) 564] eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) because eqt in Mul, [565] and [567], by (Fun) 565] tuplenil(X) >= X because [566], by (Star) 566] tuplenil*(X) >= X because [477], by (Select) 567] tuplenil(Y) >= Y because [568], by (Star) 568] tuplenil*(Y) >= Y because [480], by (Select) 569] record!6220new(_|_) >= tuple(mcrlrecord, tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_))))) because [570], by (Star) 570] record!6220new*(_|_) >= tuple(mcrlrecord, tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_))))) because record!6220new > tuple, [571] and [572], by (Copy) 571] record!6220new*(_|_) >= mcrlrecord because record!6220new > mcrlrecord, by (Copy) 572] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuplenil(_|_)))) because record!6220new > tuple, [573] and [574], by (Copy) 573] record!6220new*(_|_) >= _|_ by (Bot) 574] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuplenil(_|_))) because record!6220new > tuple, [575] and [576], by (Copy) 575] record!6220new*(_|_) >= _|_ by (Bot) 576] record!6220new*(_|_) >= tuple(_|_, tuplenil(_|_)) because record!6220new > tuple, [577] and [578], by (Copy) 577] record!6220new*(_|_) >= _|_ by (Bot) 578] record!6220new*(_|_) >= tuplenil(_|_) because record!6220new > tuplenil and [577], by (Copy) 579] locker2!6220map!6220promote!6220pending(_|_, X) >= _|_ by (Bot) 580] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [581], by (Star) 581] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [582] and [589], by (Copy) 582] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [583] and [587], by (Copy) 583] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [584], by (Select) 584] cons(X, Y) >= X because [585], by (Star) 585] cons*(X, Y) >= X because [586], by (Select) 586] X >= X by (Meta) 587] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [588], by (Select) 588] Z >= Z by (Meta) 589] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [590] and [593], by (Stat) 590] cons(X, Y) > Y because [591], by definition 591] cons*(X, Y) >= Y because [592], by (Select) 592] Y >= Y by (Meta) 593] Z >= Z by (Meta) 594] locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because [595], by (Star) 595] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because locker2!6220map!6220claim!6220lock > cons, [596] and [602], by (Copy) 596] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220claim!6220lock(X, Z, U) because locker2!6220map!6220claim!6220lock > locker2!6220claim!6220lock, [597], [598] and [600], by (Copy) 597] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= X because [584], by (Select) 598] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= Z because [599], by (Select) 599] Z >= Z by (Meta) 600] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= U because [601], by (Select) 601] U >= U by (Meta) 602] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220map!6220claim!6220lock(Y, Z, U) because locker2!6220map!6220claim!6220lock in Mul, [590], [603] and [604], by (Stat) 603] Z >= Z by (Meta) 604] U >= U by (Meta) 605] locker2!6220promote!6220pending(X, Y) > case0(Y, X, record!6220extract(X, _|_, _|_)) because [606], by definition 606] locker2!6220promote!6220pending*(X, Y) >= case0(Y, X, record!6220extract(X, _|_, _|_)) because locker2!6220promote!6220pending > case0, [607], [608] and [609], by (Copy) 607] locker2!6220promote!6220pending*(X, Y) >= Y because [604], by (Select) 608] locker2!6220promote!6220pending*(X, Y) >= X because [586], by (Select) 609] locker2!6220promote!6220pending*(X, Y) >= record!6220extract(X, _|_, _|_) because locker2!6220promote!6220pending > record!6220extract, [608], [610] and [611], by (Copy) 610] locker2!6220promote!6220pending*(X, Y) >= _|_ by (Bot) 611] locker2!6220promote!6220pending*(X, Y) >= _|_ by (Bot) 612] case1(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_)) because [613], by (Star) 613] case1*(X, Y, Z, true) >= record!6220updates(Z, _|_, cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_)) because case1 > record!6220updates, [614], [615] and [616], by (Copy) 614] case1*(X, Y, Z, true) >= Z because [586], by (Select) 615] case1*(X, Y, Z, true) >= _|_ by (Bot) 616] case1*(X, Y, Z, true) >= cons(tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))), _|_) because case1 > cons, [617] and [624], by (Copy) 617] case1*(X, Y, Z, true) >= tuple(_|_, tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_)))) because case1 > tuple, [618] and [619], by (Copy) 618] case1*(X, Y, Z, true) >= _|_ by (Bot) 619] case1*(X, Y, Z, true) >= tuplenil(append(record!6220extract(Z, _|_, _|_), cons(X, _|_))) because case1 > tuplenil and [620], by (Copy) 620] case1*(X, Y, Z, true) >= append(record!6220extract(Z, _|_, _|_), cons(X, _|_)) because case1 > append, [621] and [622], by (Copy) 621] case1*(X, Y, Z, true) >= record!6220extract(Z, _|_, _|_) because case1 > record!6220extract, [614], [615] and [618], by (Copy) 622] case1*(X, Y, Z, true) >= cons(X, _|_) because case1 > cons, [623] and [624], by (Copy) 623] case1*(X, Y, Z, true) >= X because [604], by (Select) 624] case1*(X, Y, Z, true) >= _|_ by (Bot) 625] case4(X, Y, Z) >= _|_ by (Bot) 626] locker2!6220obtainables(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) because [627], by (Star) 627] locker2!6220obtainables*(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) because locker2!6220obtainables = case5, [590], [628], [629], [631] and [632], by (Stat) 628] locker2!6220obtainables*(cons(X, Y), Z) >= Z because [604], by (Select) 629] locker2!6220obtainables*(cons(X, Y), Z) >= Y because [630], by (Select) 630] cons(X, Y) >= Y because [591], by (Star) 631] locker2!6220obtainables*(cons(X, Y), Z) >= X because [584], by (Select) 632] locker2!6220obtainables*(cons(X, Y), Z) >= member(Z, record!6220extract(X, _|_, _|_)) because locker2!6220obtainables > member, [628] and [633], by (Copy) 633] locker2!6220obtainables*(cons(X, Y), Z) >= record!6220extract(X, _|_, _|_) because locker2!6220obtainables > record!6220extract, [631], [634] and [635], by (Copy) 634] locker2!6220obtainables*(cons(X, Y), Z) >= _|_ by (Bot) 635] locker2!6220obtainables*(cons(X, Y), Z) >= _|_ by (Bot) 636] case5(X, Y, Z, true) > andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) because [637], by definition 637] case5*(X, Y, Z, true) >= andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) because case5 > andt, [638] and [641], by (Copy) 638] case5*(X, Y, Z, true) >= locker2!6220obtainable(Z, X) because case5 > locker2!6220obtainable, [639] and [640], by (Copy) 639] case5*(X, Y, Z, true) >= Z because [586], by (Select) 640] case5*(X, Y, Z, true) >= X because [604], by (Select) 641] case5*(X, Y, Z, true) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [604], [642], [643] and [640], by (Stat) 642] Y >= Y by (Meta) 643] case5*(X, Y, Z, true) >= Y because [642], by (Select) 644] case5(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because [645], by (Star) 645] case5*(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [604], [642], [646] and [647], by (Stat) 646] case5*(X, Y, Z, _|_) >= Y because [642], by (Select) 647] case5*(X, Y, Z, _|_) >= X because [604], by (Select) 648] locker2!6220check!6220availables(_|_, X) > true because [649], by definition 649] locker2!6220check!6220availables*(_|_, X) >= true because locker2!6220check!6220availables > true, by (Copy) 650] locker2!6220check!6220availables(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because [651], by (Star) 651] locker2!6220check!6220availables*(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because locker2!6220check!6220availables > andt, [652] and [658], by (Copy) 652] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220available(X, Z) because locker2!6220check!6220availables > locker2!6220check!6220available, [653] and [657], by (Copy) 653] locker2!6220check!6220availables*(cons(X, Y), Z) >= X because [654], by (Select) 654] cons(X, Y) >= X because [655], by (Star) 655] cons*(X, Y) >= X because [656], by (Select) 656] X >= X by (Meta) 657] locker2!6220check!6220availables*(cons(X, Y), Z) >= Z because [642], by (Select) 658] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220availables(Y, Z) because locker2!6220check!6220availables in Mul, [659] and [642], by (Stat) 659] cons(X, Y) > Y because [660], by definition 660] cons*(X, Y) >= Y because [603], by (Select) 661] locker2!6220adduniq(_|_, X) >= X because [662], by (Star) 662] locker2!6220adduniq*(_|_, X) >= X because [663], by (Select) 663] X >= X by (Meta) 664] gen!6220tag(X) > tuple(X, tuplenil(_|_)) because [665], by definition 665] gen!6220tag*(X) >= tuple(X, tuplenil(_|_)) because gen!6220tag > tuple, [666] and [668], by (Copy) 666] gen!6220tag*(X) >= X because [667], by (Select) 667] X >= X by (Meta) 668] gen!6220tag*(X) >= tuplenil(_|_) because gen!6220tag > tuplenil and [669], by (Copy) 669] gen!6220tag*(X) >= _|_ by (Bot) 670] gen!6220modtageq(X, Y) >= equal(X, Y) because [671], by (Star) 671] gen!6220modtageq*(X, Y) >= equal(X, Y) because gen!6220modtageq > equal, [672] and [674], by (Copy) 672] gen!6220modtageq*(X, Y) >= X because [673], by (Select) 673] X >= X by (Meta) 674] gen!6220modtageq*(X, Y) >= Y because [675], by (Select) 675] Y >= Y by (Meta) 676] case9(X, Y, Z, true) >= true because [677], by (Star) 677] case9*(X, Y, Z, true) >= true because case9 > true, by (Copy) 678] eqs(empty, empty) >= _|_ by (Bot) 679] eqs(empty, stack(X, Y)) >= F because [680], by (Star) 680] eqs*(empty, stack(X, Y)) >= F because eqs = F and eqs in Mul, by (Stat) 681] eqs(stack(X, Y), empty) > F because [682], by definition 682] eqs*(stack(X, Y), empty) >= F because eqs = F and eqs in Mul, by (Stat) 683] eqs(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because [684], by (Star) 684] eqs*(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because eqs > and, [685] and [692], by (Copy) 685] eqs*(stack(X, Y), stack(Z, U)) >= eqt(X, Z) because eqs = eqt, eqs in Mul, [686] and [689], by (Stat) 686] stack(X, Y) > X because [687], by definition 687] stack*(X, Y) >= X because [688], by (Select) 688] X >= X by (Meta) 689] stack(Z, U) >= Z because [690], by (Star) 690] stack*(Z, U) >= Z because [691], by (Select) 691] Z >= Z by (Meta) 692] eqs*(stack(X, Y), stack(Z, U)) >= eqs(Y, U) because eqs in Mul, [693] and [696], by (Stat) 693] stack(X, Y) > Y because [694], by definition 694] stack*(X, Y) >= Y because [695], by (Select) 695] Y >= Y by (Meta) 696] stack(Z, U) >= U because [697], by (Star) 697] stack*(Z, U) >= U because [698], by (Select) 698] U >= U by (Meta) 699] stack(X, Y) > Y because [694], by definition 700] tops(stack(X, Y)) >= X because [701], by (Star) 701] tops*(stack(X, Y)) >= X because [702], by (Select) 702] stack(X, Y) >= X because [687], by (Star) 703] istops(X, empty) >= F because [704], by (Star) 704] istops*(X, empty) >= F because istops > F, by (Copy) 705] eqc(nocalls, nocalls) >= _|_ by (Bot) 706] eqc(calls(X, Y, Z), nocalls) >= F because [707], by (Star) 707] eqc*(calls(X, Y, Z), nocalls) >= F because eqc > F, by (Copy) 708] push1(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because [709], by (Star) 709] push1*(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because push1 > calls, [710], [712] and [715], by (Copy) 710] push1*(X, Y, Z, U, V, _|_) >= Z because [711], by (Select) 711] Z >= Z by (Meta) 712] push1*(X, Y, Z, U, V, _|_) >= pushs(Y, U) because push1 > pushs, [713] and [714], by (Copy) 713] push1*(X, Y, Z, U, V, _|_) >= Y because [691], by (Select) 714] push1*(X, Y, Z, U, V, _|_) >= U because [695], by (Select) 715] push1*(X, Y, Z, U, V, _|_) >= V because [716], by (Select) 716] V >= V by (Meta) We can thus remove the following rules: not(T) => F eqt(a, nil) => F eqt(a, a) => T eqt(a, locker) => F eqt(a, mcrlrecord) => F eqt(a, pending) => F eqt(a, release) => F eqt(a, undefined) => F eqt(a, cons(X, Y)) => F eqt(a, tuplenil(X)) => F eqt(excl, a) => F eqt(excl, locker) => F eqt(excl, mcrlrecord) => F eqt(excl, release) => F eqt(excl, eqt(false, int(X))) => F eqt(false, tuplenil(X)) => F eqt(lock, locker) => F eqt(lock, ok) => F eqt(lock, pending) => F eqt(lock, undefined) => F eqt(lock, int(X)) => F eqt(lock, cons(X, Y)) => F eqt(lock, tuple(X, Y)) => F eqt(lock, tuplenil(X)) => F eqt(locker, excl) => F eqt(locker, false) => F eqt(locker, tag) => F eqt(locker, true) => F eqt(locker, int(X)) => F eqt(locker, cons(X, Y)) => F eqt(locker, tuple(X, Y)) => F eqt(mcrlrecord, a) => F eqt(mcrlrecord, excl) => F eqt(mcrlrecord, false) => F eqt(mcrlrecord, pending) => F eqt(mcrlrecord, release) => F eqt(mcrlrecord, resource) => F eqt(ok, resource) => F eqt(pending, nil) => F eqt(pending, excl) => F eqt(pending, mcrlrecord) => F eqt(pending, request) => F eqt(pending, int(X)) => F eqt(pending, cons(X, Y)) => F eqt(pending, tuplenil(X)) => F eqt(release, nil) => F eqt(release, false) => F eqt(release, mcrlrecord) => F eqt(request, ok) => F eqt(request, pending) => F eqt(request, true) => F eqt(request, tuple(X, Y)) => F eqt(resource, a) => F eqt(resource, lock) => F eqt(resource, mcrlrecord) => F eqt(resource, ok) => F eqt(resource, pending) => F eqt(resource, resource) => T eqt(resource, true) => F eqt(resource, undefined) => F eqt(resource, pid(X)) => F eqt(resource, int(X)) => F eqt(tag, ok) => F eqt(tag, pending) => F eqt(tag, resource) => F eqt(tag, pid(X)) => F eqt(true, nil) => F eqt(true, a) => F eqt(true, excl) => F eqt(true, pending) => F eqt(true, resource) => F eqt(true, tuple(X, Y)) => F eqt(true, tuplenil(X)) => F eqt(undefined, nil) => F eqt(pid(X), a) => F eqt(pid(X), excl) => F eqt(pid(X), false) => F eqt(pid(X), locker) => F eqt(pid(X), mcrlrecord) => F eqt(pid(X), request) => F eqt(pid(X), resource) => F eqt(pid(X), tag) => F eqt(pid(X), undefined) => F eqt(pid(X), cons(Y, Z)) => F eqt(pid(X), tuplenil(Y)) => F eqt(int(X), a) => F eqt(int(X), excl) => F eqt(int(X), false) => F eqt(int(X), lock) => F eqt(int(X), ok) => F eqt(int(X), pending) => F eqt(int(X), request) => F eqt(cons(X, Y), tag) => F eqt(cons(X, Y), undefined) => F eqt(tuple(X, Y), mcrlrecord) => F eqt(tuple(X, Y), pending) => F eqt(tuple(X, Y), release) => F eqt(tuple(X, Y), tag) => F eqt(tuple(X, Y), true) => F eqt(tuple(X, Y), cons(Z, U)) => F eqt(tuplenil(X), excl) => F eqt(tuplenil(X), ok) => F eqt(tuplenil(X), release) => F eqt(tuplenil(X), request) => F eqt(tuplenil(X), int(Y)) => F locker2!6220promote!6220pending(X, Y) => case0(Y, X, record!6220extract(X, lock, pending)) case5(X, Y, Z, true) => andt(locker2!6220obtainable(Z, X), locker2!6220obtainables(Y, X)) locker2!6220check!6220availables(nil, X) => true gen!6220tag(X) => tuple(X, tuplenil(tag)) eqs(stack(X, Y), empty) => F pops(stack(X, Y)) => Y We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(T, T) >? T or(F, T) >? T or(T, F) >? T or(F, F) >? F and(F, X) >? F and(X, F) >? F imp(F, X) >? T not(F) >? T if(F, X, Y) >? Y eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eqt(nil, undefined) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(nil, tuplenil(X)) >? F eqt(a, excl) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, ok) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, true) >? F eqt(a, pid(X)) >? F eqt(a, int(X)) >? F eqt(a, tuple(X, Y)) >? F eqt(excl, nil) >? F eqt(excl, excl) >? T eqt(excl, lock) >? F eqt(excl, ok) >? F eqt(excl, pending) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, true) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, cons(X, Y)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, excl) >? F eqt(lock, false) >? F eqt(lock, lock) >? T eqt(lock, mcrlrecord) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, nil) >? F eqt(locker, a) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, release) >? F eqt(locker, request) >? F eqt(locker, resource) >? F eqt(locker, undefined) >? F eqt(locker, tuplenil(X)) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, ok) >? F eqt(mcrlrecord, request) >? F eqt(ok, tag) >? F eqt(ok, true) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, a) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(pending, undefined) >? F eqt(pending, pid(X)) >? F eqt(release, excl) >? F eqt(release, lock) >? F eqt(release, ok) >? F eqt(request, mcrlrecord) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, pid(X)) >? F eqt(request, cons(X, Y)) >? F eqt(request, tuplenil(X)) >? F eqt(resource, false) >? F eqt(resource, locker) >? F eqt(resource, request) >? F eqt(resource, tag) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, false) >? F eqt(tag, lock) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, lock) >? F eqt(true, locker) >? F eqt(true, mcrlrecord) >? F eqt(true, ok) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, pid(X)) >? F eqt(true, cons(X, Y)) >? F eqt(undefined, a) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), nil) >? F eqt(pid(X), lock) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), release) >? F eqt(pid(X), true) >? F eqt(pid(X), int(Y)) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), release) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), pid(Z)) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), excl) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), ok) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), pending) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F eqt(tuplenil(X), tuplenil(Y)) >? eqt(X, Y) record!6220new(lock) >? tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) locker2!6220map!6220promote!6220pending(nil, X) >? nil locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) >? cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) case1(X, Y, Z, true) >? record!6220updates(Z, lock, cons(tuple(pending, tuplenil(append(record!6220extract(Z, lock, pending), cons(X, nil)))), nil)) case4(X, Y, Z) >? false locker2!6220obtainables(cons(X, Y), Z) >? case5(Z, Y, X, member(Z, record!6220extract(X, lock, pending))) case5(X, Y, Z, false) >? locker2!6220obtainables(Y, X) locker2!6220check!6220availables(cons(X, Y), Z) >? andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(nil, X) >? X gen!6220modtageq(X, Y) >? equal(X, Y) case9(X, Y, Z, true) >? true eqs(empty, empty) >? T eqs(empty, stack(X, Y)) >? F eqs(stack(X, Y), stack(Z, U)) >? and(eqt(X, Z), eqs(Y, U)) tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F push1(X, Y, Z, U, V, T) >? calls(Z, pushs(Y, U), V) about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[case5(x_1, x_2, x_3, x_4)]] = case5(x_2, x_1, x_3, x_4) [[false]] = _|_ [[int(x_1)]] = x_1 [[lock]] = _|_ [[mcrlrecord]] = _|_ [[nil]] = _|_ [[not(x_1)]] = x_1 [[pending]] = _|_ [[true]] = _|_ [[tuplenil(x_1)]] = x_1 [[undefined]] = _|_ We choose Lex = {case5, locker2!6220obtainables, record!6220extract} and Mul = {a, and, andt, append, calls, case1, case4, case9, cons, empty, eq, eqc, eqs, eqt, equal, excl, gen!6220modtageq, if, imp, istops, locker, locker2!6220adduniq, locker2!6220check!6220available, locker2!6220check!6220availables, locker2!6220claim!6220lock, locker2!6220map!6220claim!6220lock, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, member, nocalls, ok, or, pid, push1, pushs, record!6220new, record!6220updates, release, request, resource, stack, tag, tops, tuple}, and the following precedence: equal = gen!6220modtageq > locker2!6220map!6220promote!6220pending > locker2!6220map!6220claim!6220lock > locker2!6220check!6220availables > locker2!6220check!6220available > istops > tag > or > pid > case4 > locker2!6220adduniq > locker2!6220claim!6220lock > release > request > nocalls > andt > push1 > eqc > locker > empty > excl > case1 > record!6220new > tuple > pushs > imp > a > eqs > calls > eqt > and > record!6220updates > stack > cons > case5 = locker2!6220obtainables = record!6220extract > if > eq > tops > ok > locker2!6220promote!6220pending > resource > member > case9 > append Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ and(_|_, X) >= _|_ and(X, _|_) >= _|_ imp(_|_, X) > _|_ _|_ >= _|_ if(_|_, X, Y) > Y eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(_|_, X) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, X) >= _|_ eqt(a, excl) >= _|_ eqt(a, _|_) >= _|_ eqt(a, _|_) >= _|_ eqt(a, ok) >= _|_ eqt(a, request) >= _|_ eqt(a, resource) >= _|_ eqt(a, tag) >= _|_ eqt(a, _|_) >= _|_ eqt(a, pid(X)) >= _|_ eqt(a, X) >= _|_ eqt(a, tuple(X, Y)) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, excl) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, ok) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, tag) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, pid(X)) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, excl) > _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, resource) >= _|_ eqt(_|_, tag) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, a) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, locker) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, ok) >= _|_ eqt(locker, release) >= _|_ eqt(locker, request) >= _|_ eqt(locker, resource) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, X) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) >= _|_ eqt(_|_, request) >= _|_ eqt(ok, tag) >= _|_ eqt(ok, _|_) > _|_ eqt(ok, _|_) >= _|_ eqt(ok, pid(X)) >= _|_ eqt(ok, X) >= _|_ eqt(ok, cons(X, Y)) >= _|_ eqt(ok, tuple(X, Y)) >= _|_ eqt(ok, X) >= _|_ eqt(_|_, a) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, resource) >= _|_ eqt(_|_, tag) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) >= _|_ eqt(release, excl) >= _|_ eqt(release, _|_) >= _|_ eqt(release, ok) >= _|_ eqt(request, _|_) >= _|_ eqt(request, release) >= _|_ eqt(request, request) >= _|_ eqt(request, resource) >= _|_ eqt(request, tag) >= _|_ eqt(request, pid(X)) >= _|_ eqt(request, cons(X, Y)) >= _|_ eqt(request, X) >= _|_ eqt(resource, _|_) >= _|_ eqt(resource, locker) >= _|_ eqt(resource, request) >= _|_ eqt(resource, tag) >= _|_ eqt(resource, cons(X, Y)) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, a) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, _|_) > _|_ eqt(tag, locker) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, release) >= _|_ eqt(tag, request) >= _|_ eqt(tag, tag) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, X) >= _|_ eqt(tag, tuple(X, Y)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) > _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, tag) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, pid(X)) > _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, a) > _|_ eqt(_|_, X) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), ok) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), release) >= _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), Y) >= _|_ eqt(X, locker) >= _|_ eqt(X, _|_) >= _|_ eqt(X, release) >= _|_ eqt(X, resource) >= _|_ eqt(X, _|_) >= _|_ eqt(X, _|_) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), pid(Z)) >= _|_ eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), excl) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), locker) >= _|_ eqt(tuple(X, Y), ok) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(tuple(X, Y), pid(Z)) >= _|_ eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), Z) >= _|_ eqt(X, _|_) >= _|_ eqt(X, _|_) >= _|_ eqt(X, locker) >= _|_ eqt(X, _|_) >= _|_ eqt(X, _|_) >= _|_ eqt(X, resource) >= _|_ eqt(X, _|_) >= _|_ eqt(X, _|_) >= _|_ eqt(X, pid(Y)) >= _|_ eqt(X, Y) >= eqt(X, Y) record!6220new(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuple(_|_, _|_)))) locker2!6220map!6220promote!6220pending(_|_, X) > _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) > cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) case1(X, Y, Z, _|_) > record!6220updates(Z, _|_, cons(tuple(_|_, append(record!6220extract(Z, _|_, _|_), cons(X, _|_))), _|_)) case4(X, Y, Z) >= _|_ locker2!6220obtainables(cons(X, Y), Z) > case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) case5(X, Y, Z, _|_) > locker2!6220obtainables(Y, X) locker2!6220check!6220availables(cons(X, Y), Z) > andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) locker2!6220adduniq(_|_, X) >= X gen!6220modtageq(X, Y) >= equal(X, Y) case9(X, Y, Z, _|_) >= _|_ eqs(empty, empty) >= _|_ eqs(empty, stack(X, Y)) >= _|_ eqs(stack(X, Y), stack(Z, U)) > and(eqt(X, Z), eqs(Y, U)) tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= _|_ push1(X, Y, Z, U, V, _|_) > calls(Z, pushs(Y, U), V) With these choices, we have: 1] or(_|_, _|_) >= _|_ by (Bot) 2] or(_|_, _|_) >= _|_ by (Bot) 3] or(_|_, _|_) >= _|_ by (Bot) 4] or(_|_, _|_) >= _|_ by (Bot) 5] and(_|_, X) >= _|_ by (Bot) 6] and(X, _|_) >= _|_ by (Bot) 7] imp(_|_, X) > _|_ because [8], by definition 8] imp*(_|_, X) >= _|_ by (Bot) 9] _|_ >= _|_ by (Bot) 10] if(_|_, X, Y) > Y because [11], by definition 11] if*(_|_, X, Y) >= Y because [12], by (Select) 12] Y >= Y by (Meta) 13] eq(_|_, _|_) >= _|_ by (Bot) 14] eq(_|_, _|_) >= _|_ by (Bot) 15] eq(_|_, _|_) >= _|_ by (Bot) 16] eqt(_|_, _|_) >= _|_ by (Bot) 17] eqt(_|_, pid(X)) >= _|_ by (Bot) 18] eqt(_|_, X) >= _|_ by (Bot) 19] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 20] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 21] eqt(_|_, X) >= _|_ by (Bot) 22] eqt(a, excl) >= _|_ by (Bot) 23] eqt(a, _|_) >= _|_ by (Bot) 24] eqt(a, _|_) >= _|_ by (Bot) 25] eqt(a, ok) >= _|_ by (Bot) 26] eqt(a, request) >= _|_ by (Bot) 27] eqt(a, resource) >= _|_ by (Bot) 28] eqt(a, tag) >= _|_ by (Bot) 29] eqt(a, _|_) >= _|_ by (Bot) 30] eqt(a, pid(X)) >= _|_ by (Bot) 31] eqt(a, X) >= _|_ by (Bot) 32] eqt(a, tuple(X, Y)) >= _|_ by (Bot) 33] eqt(excl, _|_) >= _|_ by (Bot) 34] eqt(excl, excl) >= _|_ by (Bot) 35] eqt(excl, _|_) >= _|_ by (Bot) 36] eqt(excl, ok) >= _|_ by (Bot) 37] eqt(excl, _|_) >= _|_ by (Bot) 38] eqt(excl, request) >= _|_ by (Bot) 39] eqt(excl, resource) >= _|_ by (Bot) 40] eqt(excl, tag) >= _|_ by (Bot) 41] eqt(excl, _|_) >= _|_ by (Bot) 42] eqt(excl, _|_) >= _|_ by (Bot) 43] eqt(excl, pid(X)) >= _|_ by (Bot) 44] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 45] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 46] eqt(_|_, _|_) >= _|_ by (Bot) 47] eqt(_|_, a) >= _|_ by (Bot) 48] eqt(_|_, excl) > _|_ because [49], by definition 49] eqt*(_|_, excl) >= _|_ by (Bot) 50] eqt(_|_, _|_) >= _|_ by (Bot) 51] eqt(_|_, _|_) >= _|_ by (Bot) 52] eqt(_|_, _|_) >= _|_ by (Bot) 53] eqt(_|_, release) >= _|_ by (Bot) 54] eqt(_|_, request) >= _|_ by (Bot) 55] eqt(_|_, resource) >= _|_ by (Bot) 56] eqt(_|_, tag) >= _|_ by (Bot) 57] eqt(_|_, _|_) >= _|_ by (Bot) 58] eqt(_|_, pid(X)) >= _|_ by (Bot) 59] eqt(locker, _|_) >= _|_ by (Bot) 60] eqt(locker, a) >= _|_ by (Bot) 61] eqt(locker, _|_) >= _|_ by (Bot) 62] eqt(locker, locker) >= _|_ by (Bot) 63] eqt(locker, _|_) >= _|_ by (Bot) 64] eqt(locker, ok) >= _|_ by (Bot) 65] eqt(locker, release) >= _|_ by (Bot) 66] eqt(locker, request) >= _|_ by (Bot) 67] eqt(locker, resource) >= _|_ by (Bot) 68] eqt(locker, _|_) >= _|_ by (Bot) 69] eqt(locker, X) >= _|_ by (Bot) 70] eqt(_|_, _|_) >= _|_ by (Bot) 71] eqt(_|_, _|_) >= _|_ by (Bot) 72] eqt(_|_, locker) >= _|_ by (Bot) 73] eqt(_|_, _|_) >= _|_ by (Bot) 74] eqt(_|_, ok) >= _|_ by (Bot) 75] eqt(_|_, request) >= _|_ by (Bot) 76] eqt(ok, tag) >= _|_ by (Bot) 77] eqt(ok, _|_) > _|_ because [78], by definition 78] eqt*(ok, _|_) >= _|_ by (Bot) 79] eqt(ok, _|_) >= _|_ by (Bot) 80] eqt(ok, pid(X)) >= _|_ by (Bot) 81] eqt(ok, X) >= _|_ by (Bot) 82] eqt(ok, cons(X, Y)) >= _|_ by (Bot) 83] eqt(ok, tuple(X, Y)) >= _|_ by (Bot) 84] eqt(ok, X) >= _|_ by (Bot) 85] eqt(_|_, a) >= _|_ by (Bot) 86] eqt(_|_, _|_) >= _|_ by (Bot) 87] eqt(_|_, locker) >= _|_ by (Bot) 88] eqt(_|_, _|_) >= _|_ by (Bot) 89] eqt(_|_, release) >= _|_ by (Bot) 90] eqt(_|_, resource) >= _|_ by (Bot) 91] eqt(_|_, tag) >= _|_ by (Bot) 92] eqt(_|_, _|_) >= _|_ by (Bot) 93] eqt(_|_, _|_) >= _|_ by (Bot) 94] eqt(_|_, pid(X)) >= _|_ by (Bot) 95] eqt(release, excl) >= _|_ by (Bot) 96] eqt(release, _|_) >= _|_ by (Bot) 97] eqt(release, ok) >= _|_ by (Bot) 98] eqt(request, _|_) >= _|_ by (Bot) 99] eqt(request, release) >= _|_ by (Bot) 100] eqt(request, request) >= _|_ by (Bot) 101] eqt(request, resource) >= _|_ by (Bot) 102] eqt(request, tag) >= _|_ by (Bot) 103] eqt(request, pid(X)) >= _|_ by (Bot) 104] eqt(request, cons(X, Y)) >= _|_ by (Bot) 105] eqt(request, X) >= _|_ by (Bot) 106] eqt(resource, _|_) >= _|_ by (Bot) 107] eqt(resource, locker) >= _|_ by (Bot) 108] eqt(resource, request) >= _|_ by (Bot) 109] eqt(resource, tag) >= _|_ by (Bot) 110] eqt(resource, cons(X, Y)) >= _|_ by (Bot) 111] eqt(tag, _|_) >= _|_ by (Bot) 112] eqt(tag, a) >= _|_ by (Bot) 113] eqt(tag, _|_) >= _|_ by (Bot) 114] eqt(tag, _|_) > _|_ because [115], by definition 115] eqt*(tag, _|_) >= _|_ by (Bot) 116] eqt(tag, locker) >= _|_ by (Bot) 117] eqt(tag, _|_) >= _|_ by (Bot) 118] eqt(tag, release) >= _|_ by (Bot) 119] eqt(tag, request) >= _|_ by (Bot) 120] eqt(tag, tag) >= _|_ by (Bot) 121] eqt(tag, _|_) >= _|_ by (Bot) 122] eqt(tag, _|_) >= _|_ by (Bot) 123] eqt(tag, X) >= _|_ by (Bot) 124] eqt(tag, tuple(X, Y)) >= _|_ by (Bot) 125] eqt(_|_, _|_) >= _|_ by (Bot) 126] eqt(_|_, locker) >= _|_ by (Bot) 127] eqt(_|_, _|_) >= _|_ by (Bot) 128] eqt(_|_, ok) > _|_ because [129], by definition 129] eqt*(_|_, ok) >= _|_ by (Bot) 130] eqt(_|_, release) >= _|_ by (Bot) 131] eqt(_|_, request) >= _|_ by (Bot) 132] eqt(_|_, tag) >= _|_ by (Bot) 133] eqt(_|_, _|_) >= _|_ by (Bot) 134] eqt(_|_, _|_) >= _|_ by (Bot) 135] eqt(_|_, pid(X)) > _|_ because [136], by definition 136] eqt*(_|_, pid(X)) >= _|_ by (Bot) 137] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 138] eqt(_|_, a) > _|_ because [139], by definition 139] eqt*(_|_, a) >= _|_ by (Bot) 140] eqt(_|_, X) >= _|_ by (Bot) 141] eqt(pid(X), _|_) >= _|_ by (Bot) 142] eqt(pid(X), _|_) >= _|_ by (Bot) 143] eqt(pid(X), ok) >= _|_ by (Bot) 144] eqt(pid(X), _|_) >= _|_ by (Bot) 145] eqt(pid(X), release) >= _|_ by (Bot) 146] eqt(pid(X), _|_) >= _|_ by (Bot) 147] eqt(pid(X), Y) >= _|_ by (Bot) 148] eqt(X, locker) >= _|_ by (Bot) 149] eqt(X, _|_) >= _|_ by (Bot) 150] eqt(X, release) >= _|_ by (Bot) 151] eqt(X, resource) >= _|_ by (Bot) 152] eqt(X, _|_) >= _|_ by (Bot) 153] eqt(X, _|_) >= _|_ by (Bot) 154] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 155] eqt(cons(X, Y), pid(Z)) >= _|_ by (Bot) 156] eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [157], by (Star) 157] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [158] and [165], by (Copy) 158] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [159] and [162], by (Stat) 159] cons(X, Y) >= X because [160], by (Star) 160] cons*(X, Y) >= X because [161], by (Select) 161] X >= X by (Meta) 162] cons(Z, U) > Z because [163], by definition 163] cons*(Z, U) >= Z because [164], by (Select) 164] Z >= Z by (Meta) 165] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [166] and [169], by (Stat) 166] cons(X, Y) >= Y because [167], by (Star) 167] cons*(X, Y) >= Y because [168], by (Select) 168] Y >= Y by (Meta) 169] cons(Z, U) > U because [170], by definition 170] cons*(Z, U) >= U because [171], by (Select) 171] U >= U by (Meta) 172] eqt(cons(X, Y), Z) >= _|_ by (Bot) 173] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 174] eqt(tuple(X, Y), a) >= _|_ by (Bot) 175] eqt(tuple(X, Y), excl) >= _|_ by (Bot) 176] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 177] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 178] eqt(tuple(X, Y), locker) >= _|_ by (Bot) 179] eqt(tuple(X, Y), ok) >= _|_ by (Bot) 180] eqt(tuple(X, Y), request) >= _|_ by (Bot) 181] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 182] eqt(tuple(X, Y), pid(Z)) >= _|_ by (Bot) 183] eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [184], by (Star) 184] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [185] and [190], by (Copy) 185] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [186] and [188], by (Stat) 186] tuple(X, Y) >= X because [187], by (Star) 187] tuple*(X, Y) >= X because [161], by (Select) 188] tuple(Z, U) > Z because [189], by definition 189] tuple*(Z, U) >= Z because [164], by (Select) 190] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [191] and [193], by (Stat) 191] tuple(X, Y) >= Y because [192], by (Star) 192] tuple*(X, Y) >= Y because [168], by (Select) 193] tuple(Z, U) > U because [194], by definition 194] tuple*(Z, U) >= U because [171], by (Select) 195] eqt(tuple(X, Y), Z) >= _|_ by (Bot) 196] eqt(X, _|_) >= _|_ by (Bot) 197] eqt(X, _|_) >= _|_ by (Bot) 198] eqt(X, locker) >= _|_ by (Bot) 199] eqt(X, _|_) >= _|_ by (Bot) 200] eqt(X, _|_) >= _|_ by (Bot) 201] eqt(X, resource) >= _|_ by (Bot) 202] eqt(X, _|_) >= _|_ by (Bot) 203] eqt(X, _|_) >= _|_ by (Bot) 204] eqt(X, pid(Y)) >= _|_ by (Bot) 205] eqt(X, Y) >= eqt(X, Y) because eqt in Mul, [206] and [207], by (Fun) 206] X >= X by (Meta) 207] Y >= Y by (Meta) 208] record!6220new(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuple(_|_, _|_)))) because [209], by (Star) 209] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, tuple(_|_, _|_)))) because record!6220new > tuple, [210] and [211], by (Copy) 210] record!6220new*(_|_) >= _|_ by (Bot) 211] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, tuple(_|_, _|_))) because record!6220new > tuple, [212] and [213], by (Copy) 212] record!6220new*(_|_) >= _|_ by (Bot) 213] record!6220new*(_|_) >= tuple(_|_, tuple(_|_, _|_)) because record!6220new > tuple, [214] and [215], by (Copy) 214] record!6220new*(_|_) >= _|_ by (Bot) 215] record!6220new*(_|_) >= tuple(_|_, _|_) because record!6220new > tuple, [216] and [217], by (Copy) 216] record!6220new*(_|_) >= _|_ by (Bot) 217] record!6220new*(_|_) >= _|_ by (Bot) 218] locker2!6220map!6220promote!6220pending(_|_, X) > _|_ because [219], by definition 219] locker2!6220map!6220promote!6220pending*(_|_, X) >= _|_ by (Bot) 220] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [221], by (Star) 221] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [222] and [229], by (Copy) 222] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [223] and [227], by (Copy) 223] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [224], by (Select) 224] cons(X, Y) >= X because [225], by (Star) 225] cons*(X, Y) >= X because [226], by (Select) 226] X >= X by (Meta) 227] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [228], by (Select) 228] Z >= Z by (Meta) 229] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [230] and [233], by (Stat) 230] cons(X, Y) > Y because [231], by definition 231] cons*(X, Y) >= Y because [232], by (Select) 232] Y >= Y by (Meta) 233] Z >= Z by (Meta) 234] locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) > cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because [235], by definition 235] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) because locker2!6220map!6220claim!6220lock > cons, [236] and [242], by (Copy) 236] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220claim!6220lock(X, Z, U) because locker2!6220map!6220claim!6220lock > locker2!6220claim!6220lock, [237], [238] and [240], by (Copy) 237] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= X because [224], by (Select) 238] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= Z because [239], by (Select) 239] Z >= Z by (Meta) 240] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= U because [241], by (Select) 241] U >= U by (Meta) 242] locker2!6220map!6220claim!6220lock*(cons(X, Y), Z, U) >= locker2!6220map!6220claim!6220lock(Y, Z, U) because locker2!6220map!6220claim!6220lock in Mul, [230], [243] and [244], by (Stat) 243] Z >= Z by (Meta) 244] U >= U by (Meta) 245] case1(X, Y, Z, _|_) > record!6220updates(Z, _|_, cons(tuple(_|_, append(record!6220extract(Z, _|_, _|_), cons(X, _|_))), _|_)) because [246], by definition 246] case1*(X, Y, Z, _|_) >= record!6220updates(Z, _|_, cons(tuple(_|_, append(record!6220extract(Z, _|_, _|_), cons(X, _|_))), _|_)) because case1 > record!6220updates, [247], [248] and [249], by (Copy) 247] case1*(X, Y, Z, _|_) >= Z because [226], by (Select) 248] case1*(X, Y, Z, _|_) >= _|_ by (Bot) 249] case1*(X, Y, Z, _|_) >= cons(tuple(_|_, append(record!6220extract(Z, _|_, _|_), cons(X, _|_))), _|_) because case1 > cons, [250] and [256], by (Copy) 250] case1*(X, Y, Z, _|_) >= tuple(_|_, append(record!6220extract(Z, _|_, _|_), cons(X, _|_))) because case1 > tuple, [251] and [252], by (Copy) 251] case1*(X, Y, Z, _|_) >= _|_ by (Bot) 252] case1*(X, Y, Z, _|_) >= append(record!6220extract(Z, _|_, _|_), cons(X, _|_)) because case1 > append, [253] and [254], by (Copy) 253] case1*(X, Y, Z, _|_) >= record!6220extract(Z, _|_, _|_) because case1 > record!6220extract, [247], [248] and [251], by (Copy) 254] case1*(X, Y, Z, _|_) >= cons(X, _|_) because case1 > cons, [255] and [256], by (Copy) 255] case1*(X, Y, Z, _|_) >= X because [244], by (Select) 256] case1*(X, Y, Z, _|_) >= _|_ by (Bot) 257] case4(X, Y, Z) >= _|_ by (Bot) 258] locker2!6220obtainables(cons(X, Y), Z) > case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) because [259], by definition 259] locker2!6220obtainables*(cons(X, Y), Z) >= case5(Z, Y, X, member(Z, record!6220extract(X, _|_, _|_))) because locker2!6220obtainables = case5, [230], [260], [261], [263] and [264], by (Stat) 260] locker2!6220obtainables*(cons(X, Y), Z) >= Z because [244], by (Select) 261] locker2!6220obtainables*(cons(X, Y), Z) >= Y because [262], by (Select) 262] cons(X, Y) >= Y because [231], by (Star) 263] locker2!6220obtainables*(cons(X, Y), Z) >= X because [224], by (Select) 264] locker2!6220obtainables*(cons(X, Y), Z) >= member(Z, record!6220extract(X, _|_, _|_)) because locker2!6220obtainables > member, [260] and [265], by (Copy) 265] locker2!6220obtainables*(cons(X, Y), Z) >= record!6220extract(X, _|_, _|_) because locker2!6220obtainables = record!6220extract, [266], [263], [268] and [269], by (Stat) 266] cons(X, Y) > X because [267], by definition 267] cons*(X, Y) >= X because [226], by (Select) 268] locker2!6220obtainables*(cons(X, Y), Z) >= _|_ by (Bot) 269] locker2!6220obtainables*(cons(X, Y), Z) >= _|_ by (Bot) 270] case5(X, Y, Z, _|_) > locker2!6220obtainables(Y, X) because [271], by definition 271] case5*(X, Y, Z, _|_) >= locker2!6220obtainables(Y, X) because case5 = locker2!6220obtainables, [244], [272], [273] and [274], by (Stat) 272] Y >= Y by (Meta) 273] case5*(X, Y, Z, _|_) >= Y because [272], by (Select) 274] case5*(X, Y, Z, _|_) >= X because [244], by (Select) 275] locker2!6220check!6220availables(cons(X, Y), Z) > andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because [276], by definition 276] locker2!6220check!6220availables*(cons(X, Y), Z) >= andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) because locker2!6220check!6220availables > andt, [277] and [283], by (Copy) 277] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220available(X, Z) because locker2!6220check!6220availables > locker2!6220check!6220available, [278] and [282], by (Copy) 278] locker2!6220check!6220availables*(cons(X, Y), Z) >= X because [279], by (Select) 279] cons(X, Y) >= X because [280], by (Star) 280] cons*(X, Y) >= X because [281], by (Select) 281] X >= X by (Meta) 282] locker2!6220check!6220availables*(cons(X, Y), Z) >= Z because [272], by (Select) 283] locker2!6220check!6220availables*(cons(X, Y), Z) >= locker2!6220check!6220availables(Y, Z) because locker2!6220check!6220availables in Mul, [284] and [272], by (Stat) 284] cons(X, Y) > Y because [285], by definition 285] cons*(X, Y) >= Y because [243], by (Select) 286] locker2!6220adduniq(_|_, X) >= X because [287], by (Star) 287] locker2!6220adduniq*(_|_, X) >= X because [288], by (Select) 288] X >= X by (Meta) 289] gen!6220modtageq(X, Y) >= equal(X, Y) because gen!6220modtageq = equal, gen!6220modtageq in Mul, [290] and [291], by (Fun) 290] X >= X by (Meta) 291] Y >= Y by (Meta) 292] case9(X, Y, Z, _|_) >= _|_ by (Bot) 293] eqs(empty, empty) >= _|_ by (Bot) 294] eqs(empty, stack(X, Y)) >= _|_ by (Bot) 295] eqs(stack(X, Y), stack(Z, U)) > and(eqt(X, Z), eqs(Y, U)) because [296], by definition 296] eqs*(stack(X, Y), stack(Z, U)) >= and(eqt(X, Z), eqs(Y, U)) because eqs > and, [297] and [306], by (Copy) 297] eqs*(stack(X, Y), stack(Z, U)) >= eqt(X, Z) because eqs > eqt, [298] and [302], by (Copy) 298] eqs*(stack(X, Y), stack(Z, U)) >= X because [299], by (Select) 299] stack(X, Y) >= X because [300], by (Star) 300] stack*(X, Y) >= X because [301], by (Select) 301] X >= X by (Meta) 302] eqs*(stack(X, Y), stack(Z, U)) >= Z because [303], by (Select) 303] stack(Z, U) >= Z because [304], by (Star) 304] stack*(Z, U) >= Z because [305], by (Select) 305] Z >= Z by (Meta) 306] eqs*(stack(X, Y), stack(Z, U)) >= eqs(Y, U) because eqs in Mul, [307] and [310], by (Stat) 307] stack(X, Y) >= Y because [308], by (Star) 308] stack*(X, Y) >= Y because [309], by (Select) 309] Y >= Y by (Meta) 310] stack(Z, U) > U because [311], by definition 311] stack*(Z, U) >= U because [312], by (Select) 312] U >= U by (Meta) 313] tops(stack(X, Y)) >= X because [314], by (Star) 314] tops*(stack(X, Y)) >= X because [299], by (Select) 315] istops(X, empty) >= _|_ by (Bot) 316] eqc(nocalls, nocalls) >= _|_ by (Bot) 317] eqc(calls(X, Y, Z), nocalls) >= _|_ by (Bot) 318] push1(X, Y, Z, U, V, _|_) > calls(Z, pushs(Y, U), V) because [319], by definition 319] push1*(X, Y, Z, U, V, _|_) >= calls(Z, pushs(Y, U), V) because push1 > calls, [320], [322] and [325], by (Copy) 320] push1*(X, Y, Z, U, V, _|_) >= Z because [321], by (Select) 321] Z >= Z by (Meta) 322] push1*(X, Y, Z, U, V, _|_) >= pushs(Y, U) because push1 > pushs, [323] and [324], by (Copy) 323] push1*(X, Y, Z, U, V, _|_) >= Y because [305], by (Select) 324] push1*(X, Y, Z, U, V, _|_) >= U because [309], by (Select) 325] push1*(X, Y, Z, U, V, _|_) >= V because [326], by (Select) 326] V >= V by (Meta) We can thus remove the following rules: imp(F, X) => T if(F, X, Y) => Y eqt(lock, excl) => F eqt(ok, true) => F eqt(tag, lock) => F eqt(true, ok) => F eqt(true, pid(X)) => F eqt(undefined, a) => F locker2!6220map!6220promote!6220pending(nil, X) => nil locker2!6220map!6220claim!6220lock(cons(X, Y), Z, U) => cons(locker2!6220claim!6220lock(X, Z, U), locker2!6220map!6220claim!6220lock(Y, Z, U)) case1(X, Y, Z, true) => record!6220updates(Z, lock, cons(tuple(pending, tuplenil(append(record!6220extract(Z, lock, pending), cons(X, nil)))), nil)) locker2!6220obtainables(cons(X, Y), Z) => case5(Z, Y, X, member(Z, record!6220extract(X, lock, pending))) case5(X, Y, Z, false) => locker2!6220obtainables(Y, X) locker2!6220check!6220availables(cons(X, Y), Z) => andt(locker2!6220check!6220available(X, Z), locker2!6220check!6220availables(Y, Z)) eqs(stack(X, Y), stack(Z, U)) => and(eqt(X, Z), eqs(Y, U)) push1(X, Y, Z, U, V, T) => calls(Z, pushs(Y, U), V) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(T, T) >? T or(F, T) >? T or(T, F) >? T or(F, F) >? F and(F, X) >? F and(X, F) >? F not(F) >? T eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eqt(nil, undefined) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(nil, tuplenil(X)) >? F eqt(a, excl) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, ok) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, true) >? F eqt(a, pid(X)) >? F eqt(a, int(X)) >? F eqt(a, tuple(X, Y)) >? F eqt(excl, nil) >? F eqt(excl, excl) >? T eqt(excl, lock) >? F eqt(excl, ok) >? F eqt(excl, pending) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, true) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, cons(X, Y)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, false) >? F eqt(lock, lock) >? T eqt(lock, mcrlrecord) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, nil) >? F eqt(locker, a) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, release) >? F eqt(locker, request) >? F eqt(locker, resource) >? F eqt(locker, undefined) >? F eqt(locker, tuplenil(X)) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, ok) >? F eqt(mcrlrecord, request) >? F eqt(ok, tag) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, a) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(pending, undefined) >? F eqt(pending, pid(X)) >? F eqt(release, excl) >? F eqt(release, lock) >? F eqt(release, ok) >? F eqt(request, mcrlrecord) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, pid(X)) >? F eqt(request, cons(X, Y)) >? F eqt(request, tuplenil(X)) >? F eqt(resource, false) >? F eqt(resource, locker) >? F eqt(resource, request) >? F eqt(resource, tag) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, false) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, lock) >? F eqt(true, locker) >? F eqt(true, mcrlrecord) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, cons(X, Y)) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), nil) >? F eqt(pid(X), lock) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), release) >? F eqt(pid(X), true) >? F eqt(pid(X), int(Y)) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), release) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), pid(Z)) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), excl) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), ok) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), pending) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F eqt(tuplenil(X), tuplenil(Y)) >? eqt(X, Y) record!6220new(lock) >? tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false locker2!6220adduniq(nil, X) >? X gen!6220modtageq(X, Y) >? equal(X, Y) case9(X, Y, Z, true) >? true eqs(empty, empty) >? T eqs(empty, stack(X, Y)) >? F tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[int(x_1)]] = x_1 [[mcrlrecord]] = _|_ [[nil]] = _|_ [[not(x_1)]] = x_1 [[pid(x_1)]] = x_1 [[undefined]] = _|_ We choose Lex = {} and Mul = {a, and, calls, case4, case9, cons, empty, eq, eqc, eqs, eqt, equal, excl, gen!6220modtageq, istops, lock, locker, locker2!6220adduniq, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, nocalls, ok, or, pending, record!6220new, release, request, resource, stack, tag, tops, true, tuple, tuplenil}, and the following precedence: locker2!6220map!6220promote!6220pending > case9 > lock > tuplenil > locker2!6220promote!6220pending > gen!6220modtageq > true > ok > equal > calls > istops > case4 > locker > resource > tag > tops > eqs > a > request > release > nocalls > eq > cons > pending > record!6220new > eqc > eqt > and > empty > stack > tuple > or > excl > locker2!6220adduniq Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ and(_|_, X) >= _|_ and(X, _|_) >= _|_ _|_ >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, X) >= _|_ eqt(_|_, X) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(a, excl) > _|_ eqt(a, _|_) >= _|_ eqt(a, lock) >= _|_ eqt(a, ok) >= _|_ eqt(a, request) >= _|_ eqt(a, resource) >= _|_ eqt(a, tag) >= _|_ eqt(a, true) >= _|_ eqt(a, X) >= _|_ eqt(a, X) >= _|_ eqt(a, tuple(X, Y)) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, excl) >= _|_ eqt(excl, lock) >= _|_ eqt(excl, ok) >= _|_ eqt(excl, pending) >= _|_ eqt(excl, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, tag) >= _|_ eqt(excl, true) >= _|_ eqt(excl, _|_) >= _|_ eqt(excl, X) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, a) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, lock) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, release) >= _|_ eqt(lock, request) >= _|_ eqt(lock, resource) >= _|_ eqt(lock, tag) >= _|_ eqt(lock, true) >= _|_ eqt(lock, X) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, a) > _|_ eqt(locker, lock) >= _|_ eqt(locker, locker) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, ok) >= _|_ eqt(locker, release) >= _|_ eqt(locker, request) >= _|_ eqt(locker, resource) >= _|_ eqt(locker, _|_) >= _|_ eqt(locker, tuplenil(X)) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, lock) >= _|_ eqt(_|_, locker) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, ok) > _|_ eqt(_|_, request) >= _|_ eqt(ok, tag) > _|_ eqt(ok, _|_) >= _|_ eqt(ok, X) >= _|_ eqt(ok, X) >= _|_ eqt(ok, cons(X, Y)) >= _|_ eqt(ok, tuple(X, Y)) >= _|_ eqt(ok, tuplenil(X)) >= _|_ eqt(pending, a) >= _|_ eqt(pending, lock) >= _|_ eqt(pending, locker) >= _|_ eqt(pending, pending) >= _|_ eqt(pending, release) >= _|_ eqt(pending, resource) >= _|_ eqt(pending, tag) >= _|_ eqt(pending, true) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, X) >= _|_ eqt(release, excl) >= _|_ eqt(release, lock) >= _|_ eqt(release, ok) > _|_ eqt(request, _|_) > _|_ eqt(request, release) >= _|_ eqt(request, request) >= _|_ eqt(request, resource) >= _|_ eqt(request, tag) >= _|_ eqt(request, X) >= _|_ eqt(request, cons(X, Y)) >= _|_ eqt(request, tuplenil(X)) >= _|_ eqt(resource, _|_) >= _|_ eqt(resource, locker) >= _|_ eqt(resource, request) >= _|_ eqt(resource, tag) > _|_ eqt(resource, cons(X, Y)) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, a) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, locker) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, release) >= _|_ eqt(tag, request) >= _|_ eqt(tag, tag) >= _|_ eqt(tag, true) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, X) >= _|_ eqt(tag, tuple(X, Y)) >= _|_ eqt(true, lock) >= _|_ eqt(true, locker) > _|_ eqt(true, _|_) >= _|_ eqt(true, release) >= _|_ eqt(true, request) >= _|_ eqt(true, tag) >= _|_ eqt(true, true) >= _|_ eqt(true, _|_) >= _|_ eqt(true, cons(X, Y)) >= _|_ eqt(_|_, tuplenil(X)) >= _|_ eqt(X, _|_) >= _|_ eqt(X, lock) >= _|_ eqt(X, ok) >= _|_ eqt(X, pending) >= _|_ eqt(X, release) >= _|_ eqt(X, true) >= _|_ eqt(X, Y) >= _|_ eqt(X, locker) >= _|_ eqt(X, _|_) >= _|_ eqt(X, release) >= _|_ eqt(X, resource) >= _|_ eqt(X, true) >= _|_ eqt(X, _|_) >= _|_ eqt(cons(X, Y), true) >= _|_ eqt(cons(X, Y), Z) >= _|_ eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), excl) > _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), lock) >= _|_ eqt(tuple(X, Y), locker) >= _|_ eqt(tuple(X, Y), ok) > _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(tuple(X, Y), Z) >= _|_ eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuplenil(Z)) > _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), lock) >= _|_ eqt(tuplenil(X), locker) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), pending) >= _|_ eqt(tuplenil(X), resource) >= _|_ eqt(tuplenil(X), true) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), Y) >= _|_ eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) record!6220new(lock) > tuple(_|_, tuple(lock, tuple(_|_, tuple(_|_, tuplenil(_|_))))) locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ locker2!6220adduniq(_|_, X) > X gen!6220modtageq(X, Y) > equal(X, Y) case9(X, Y, Z, true) >= true eqs(empty, empty) >= _|_ eqs(empty, stack(X, Y)) >= _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= _|_ With these choices, we have: 1] or(_|_, _|_) >= _|_ by (Bot) 2] or(_|_, _|_) >= _|_ by (Bot) 3] or(_|_, _|_) >= _|_ by (Bot) 4] or(_|_, _|_) >= _|_ by (Bot) 5] and(_|_, X) >= _|_ by (Bot) 6] and(X, _|_) >= _|_ by (Bot) 7] _|_ >= _|_ by (Bot) 8] eq(_|_, _|_) >= _|_ by (Bot) 9] eq(_|_, _|_) >= _|_ by (Bot) 10] eq(_|_, _|_) >= _|_ by (Bot) 11] eqt(_|_, _|_) >= _|_ by (Bot) 12] eqt(_|_, X) >= _|_ by (Bot) 13] eqt(_|_, X) >= _|_ by (Bot) 14] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 15] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 16] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 17] eqt(a, excl) > _|_ because [18], by definition 18] eqt*(a, excl) >= _|_ by (Bot) 19] eqt(a, _|_) >= _|_ by (Bot) 20] eqt(a, lock) >= _|_ by (Bot) 21] eqt(a, ok) >= _|_ by (Bot) 22] eqt(a, request) >= _|_ by (Bot) 23] eqt(a, resource) >= _|_ by (Bot) 24] eqt(a, tag) >= _|_ by (Bot) 25] eqt(a, true) >= _|_ by (Bot) 26] eqt(a, X) >= _|_ by (Bot) 27] eqt(a, X) >= _|_ by (Bot) 28] eqt(a, tuple(X, Y)) >= _|_ by (Bot) 29] eqt(excl, _|_) >= _|_ by (Bot) 30] eqt(excl, excl) >= _|_ by (Bot) 31] eqt(excl, lock) >= _|_ by (Bot) 32] eqt(excl, ok) >= _|_ by (Bot) 33] eqt(excl, pending) >= _|_ by (Bot) 34] eqt(excl, request) >= _|_ by (Bot) 35] eqt(excl, resource) >= _|_ by (Bot) 36] eqt(excl, tag) >= _|_ by (Bot) 37] eqt(excl, true) >= _|_ by (Bot) 38] eqt(excl, _|_) >= _|_ by (Bot) 39] eqt(excl, X) >= _|_ by (Bot) 40] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 41] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 42] eqt(lock, _|_) >= _|_ by (Bot) 43] eqt(lock, a) >= _|_ by (Bot) 44] eqt(lock, _|_) >= _|_ by (Bot) 45] eqt(lock, lock) >= _|_ by (Bot) 46] eqt(lock, _|_) >= _|_ by (Bot) 47] eqt(lock, release) >= _|_ by (Bot) 48] eqt(lock, request) >= _|_ by (Bot) 49] eqt(lock, resource) >= _|_ by (Bot) 50] eqt(lock, tag) >= _|_ by (Bot) 51] eqt(lock, true) >= _|_ by (Bot) 52] eqt(lock, X) >= _|_ by (Bot) 53] eqt(locker, _|_) >= _|_ by (Bot) 54] eqt(locker, a) > _|_ because [55], by definition 55] eqt*(locker, a) >= _|_ by (Bot) 56] eqt(locker, lock) >= _|_ by (Bot) 57] eqt(locker, locker) >= _|_ by (Bot) 58] eqt(locker, _|_) >= _|_ by (Bot) 59] eqt(locker, ok) >= _|_ by (Bot) 60] eqt(locker, release) >= _|_ by (Bot) 61] eqt(locker, request) >= _|_ by (Bot) 62] eqt(locker, resource) >= _|_ by (Bot) 63] eqt(locker, _|_) >= _|_ by (Bot) 64] eqt(locker, tuplenil(X)) >= _|_ by (Bot) 65] eqt(_|_, _|_) >= _|_ by (Bot) 66] eqt(_|_, lock) >= _|_ by (Bot) 67] eqt(_|_, locker) >= _|_ by (Bot) 68] eqt(_|_, _|_) >= _|_ by (Bot) 69] eqt(_|_, ok) > _|_ because [70], by definition 70] eqt*(_|_, ok) >= _|_ by (Bot) 71] eqt(_|_, request) >= _|_ by (Bot) 72] eqt(ok, tag) > _|_ because [73], by definition 73] eqt*(ok, tag) >= _|_ by (Bot) 74] eqt(ok, _|_) >= _|_ by (Bot) 75] eqt(ok, X) >= _|_ by (Bot) 76] eqt(ok, X) >= _|_ by (Bot) 77] eqt(ok, cons(X, Y)) >= _|_ by (Bot) 78] eqt(ok, tuple(X, Y)) >= _|_ by (Bot) 79] eqt(ok, tuplenil(X)) >= _|_ by (Bot) 80] eqt(pending, a) >= _|_ by (Bot) 81] eqt(pending, lock) >= _|_ by (Bot) 82] eqt(pending, locker) >= _|_ by (Bot) 83] eqt(pending, pending) >= _|_ by (Bot) 84] eqt(pending, release) >= _|_ by (Bot) 85] eqt(pending, resource) >= _|_ by (Bot) 86] eqt(pending, tag) >= _|_ by (Bot) 87] eqt(pending, true) >= _|_ by (Bot) 88] eqt(pending, _|_) >= _|_ by (Bot) 89] eqt(pending, X) >= _|_ by (Bot) 90] eqt(release, excl) >= _|_ by (Bot) 91] eqt(release, lock) >= _|_ by (Bot) 92] eqt(release, ok) > _|_ because [93], by definition 93] eqt*(release, ok) >= _|_ by (Bot) 94] eqt(request, _|_) > _|_ because [95], by definition 95] eqt*(request, _|_) >= _|_ by (Bot) 96] eqt(request, release) >= _|_ by (Bot) 97] eqt(request, request) >= _|_ by (Bot) 98] eqt(request, resource) >= _|_ by (Bot) 99] eqt(request, tag) >= _|_ by (Bot) 100] eqt(request, X) >= _|_ by (Bot) 101] eqt(request, cons(X, Y)) >= _|_ by (Bot) 102] eqt(request, tuplenil(X)) >= _|_ by (Bot) 103] eqt(resource, _|_) >= _|_ by (Bot) 104] eqt(resource, locker) >= _|_ by (Bot) 105] eqt(resource, request) >= _|_ by (Bot) 106] eqt(resource, tag) > _|_ because [107], by definition 107] eqt*(resource, tag) >= _|_ by (Bot) 108] eqt(resource, cons(X, Y)) >= _|_ by (Bot) 109] eqt(tag, _|_) >= _|_ by (Bot) 110] eqt(tag, a) >= _|_ by (Bot) 111] eqt(tag, _|_) >= _|_ by (Bot) 112] eqt(tag, locker) >= _|_ by (Bot) 113] eqt(tag, _|_) >= _|_ by (Bot) 114] eqt(tag, release) >= _|_ by (Bot) 115] eqt(tag, request) >= _|_ by (Bot) 116] eqt(tag, tag) >= _|_ by (Bot) 117] eqt(tag, true) >= _|_ by (Bot) 118] eqt(tag, _|_) >= _|_ by (Bot) 119] eqt(tag, X) >= _|_ by (Bot) 120] eqt(tag, tuple(X, Y)) >= _|_ by (Bot) 121] eqt(true, lock) >= _|_ by (Bot) 122] eqt(true, locker) > _|_ because [123], by definition 123] eqt*(true, locker) >= _|_ by (Bot) 124] eqt(true, _|_) >= _|_ by (Bot) 125] eqt(true, release) >= _|_ by (Bot) 126] eqt(true, request) >= _|_ by (Bot) 127] eqt(true, tag) >= _|_ by (Bot) 128] eqt(true, true) >= _|_ by (Bot) 129] eqt(true, _|_) >= _|_ by (Bot) 130] eqt(true, cons(X, Y)) >= _|_ by (Bot) 131] eqt(_|_, tuplenil(X)) >= _|_ by (Bot) 132] eqt(X, _|_) >= _|_ by (Bot) 133] eqt(X, lock) >= _|_ by (Bot) 134] eqt(X, ok) >= _|_ by (Bot) 135] eqt(X, pending) >= _|_ by (Bot) 136] eqt(X, release) >= _|_ by (Bot) 137] eqt(X, true) >= _|_ by (Bot) 138] eqt(X, Y) >= _|_ by (Bot) 139] eqt(X, locker) >= _|_ by (Bot) 140] eqt(X, _|_) >= _|_ by (Bot) 141] eqt(X, release) >= _|_ by (Bot) 142] eqt(X, resource) >= _|_ by (Bot) 143] eqt(X, true) >= _|_ by (Bot) 144] eqt(X, _|_) >= _|_ by (Bot) 145] eqt(cons(X, Y), true) >= _|_ by (Bot) 146] eqt(cons(X, Y), Z) >= _|_ by (Bot) 147] eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [148], by (Star) 148] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [149] and [156], by (Copy) 149] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [150] and [153], by (Stat) 150] cons(X, Y) >= X because [151], by (Star) 151] cons*(X, Y) >= X because [152], by (Select) 152] X >= X by (Meta) 153] cons(Z, U) > Z because [154], by definition 154] cons*(Z, U) >= Z because [155], by (Select) 155] Z >= Z by (Meta) 156] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [157] and [160], by (Stat) 157] cons(X, Y) > Y because [158], by definition 158] cons*(X, Y) >= Y because [159], by (Select) 159] Y >= Y by (Meta) 160] cons(Z, U) >= U because [161], by (Star) 161] cons*(Z, U) >= U because [162], by (Select) 162] U >= U by (Meta) 163] eqt(cons(X, Y), tuplenil(Z)) >= _|_ by (Bot) 164] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 165] eqt(tuple(X, Y), a) >= _|_ by (Bot) 166] eqt(tuple(X, Y), excl) > _|_ because [167], by definition 167] eqt*(tuple(X, Y), excl) >= _|_ by (Bot) 168] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 169] eqt(tuple(X, Y), lock) >= _|_ by (Bot) 170] eqt(tuple(X, Y), locker) >= _|_ by (Bot) 171] eqt(tuple(X, Y), ok) > _|_ because [172], by definition 172] eqt*(tuple(X, Y), ok) >= _|_ by (Bot) 173] eqt(tuple(X, Y), request) >= _|_ by (Bot) 174] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 175] eqt(tuple(X, Y), Z) >= _|_ by (Bot) 176] eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [177], by (Star) 177] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [178] and [183], by (Copy) 178] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [179] and [181], by (Stat) 179] tuple(X, Y) >= X because [180], by (Star) 180] tuple*(X, Y) >= X because [152], by (Select) 181] tuple(Z, U) > Z because [182], by definition 182] tuple*(Z, U) >= Z because [155], by (Select) 183] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [184] and [186], by (Stat) 184] tuple(X, Y) >= Y because [185], by (Star) 185] tuple*(X, Y) >= Y because [159], by (Select) 186] tuple(Z, U) > U because [187], by definition 187] tuple*(Z, U) >= U because [162], by (Select) 188] eqt(tuple(X, Y), tuplenil(Z)) > _|_ because [189], by definition 189] eqt*(tuple(X, Y), tuplenil(Z)) >= _|_ by (Bot) 190] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 191] eqt(tuplenil(X), lock) >= _|_ by (Bot) 192] eqt(tuplenil(X), locker) >= _|_ by (Bot) 193] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 194] eqt(tuplenil(X), pending) >= _|_ by (Bot) 195] eqt(tuplenil(X), resource) >= _|_ by (Bot) 196] eqt(tuplenil(X), true) >= _|_ by (Bot) 197] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 198] eqt(tuplenil(X), Y) >= _|_ by (Bot) 199] eqt(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) because eqt in Mul, [200] and [202], by (Fun) 200] tuplenil(X) >= X because [201], by (Star) 201] tuplenil*(X) >= X because [152], by (Select) 202] tuplenil(Y) >= Y because [203], by (Star) 203] tuplenil*(Y) >= Y because [155], by (Select) 204] record!6220new(lock) > tuple(_|_, tuple(lock, tuple(_|_, tuple(_|_, tuplenil(_|_))))) because [205], by definition 205] record!6220new*(lock) >= tuple(_|_, tuple(lock, tuple(_|_, tuple(_|_, tuplenil(_|_))))) because record!6220new > tuple, [206] and [207], by (Copy) 206] record!6220new*(lock) >= _|_ by (Bot) 207] record!6220new*(lock) >= tuple(lock, tuple(_|_, tuple(_|_, tuplenil(_|_)))) because record!6220new > tuple, [208] and [210], by (Copy) 208] record!6220new*(lock) >= lock because [209], by (Select) 209] lock >= lock by (Fun) 210] record!6220new*(lock) >= tuple(_|_, tuple(_|_, tuplenil(_|_))) because record!6220new > tuple, [211] and [212], by (Copy) 211] record!6220new*(lock) >= _|_ by (Bot) 212] record!6220new*(lock) >= tuple(_|_, tuplenil(_|_)) because [213], by (Select) 213] lock >= tuple(_|_, tuplenil(_|_)) because [214], by (Star) 214] lock* >= tuple(_|_, tuplenil(_|_)) because lock > tuple, [215] and [216], by (Copy) 215] lock* >= _|_ by (Bot) 216] lock* >= tuplenil(_|_) because lock > tuplenil and [215], by (Copy) 217] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [218], by (Star) 218] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [219] and [226], by (Copy) 219] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [220] and [224], by (Copy) 220] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [221], by (Select) 221] cons(X, Y) >= X because [222], by (Star) 222] cons*(X, Y) >= X because [223], by (Select) 223] X >= X by (Meta) 224] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [225], by (Select) 225] Z >= Z by (Meta) 226] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [227] and [230], by (Stat) 227] cons(X, Y) > Y because [228], by definition 228] cons*(X, Y) >= Y because [229], by (Select) 229] Y >= Y by (Meta) 230] Z >= Z by (Meta) 231] case4(X, Y, Z) >= _|_ by (Bot) 232] locker2!6220adduniq(_|_, X) > X because [233], by definition 233] locker2!6220adduniq*(_|_, X) >= X because [234], by (Select) 234] X >= X by (Meta) 235] gen!6220modtageq(X, Y) > equal(X, Y) because [236], by definition 236] gen!6220modtageq*(X, Y) >= equal(X, Y) because gen!6220modtageq > equal, [237] and [239], by (Copy) 237] gen!6220modtageq*(X, Y) >= X because [238], by (Select) 238] X >= X by (Meta) 239] gen!6220modtageq*(X, Y) >= Y because [240], by (Select) 240] Y >= Y by (Meta) 241] case9(X, Y, Z, true) >= true because [242], by (Star) 242] case9*(X, Y, Z, true) >= true because case9 > true, by (Copy) 243] eqs(empty, empty) >= _|_ by (Bot) 244] eqs(empty, stack(X, Y)) >= _|_ by (Bot) 245] tops(stack(X, Y)) >= X because [246], by (Star) 246] tops*(stack(X, Y)) >= X because [247], by (Select) 247] stack(X, Y) >= X because [248], by (Star) 248] stack*(X, Y) >= X because [249], by (Select) 249] X >= X by (Meta) 250] istops(X, empty) >= _|_ by (Bot) 251] eqc(nocalls, nocalls) >= _|_ by (Bot) 252] eqc(calls(X, Y, Z), nocalls) >= _|_ by (Bot) We can thus remove the following rules: eqt(a, excl) => F eqt(locker, a) => F eqt(mcrlrecord, ok) => F eqt(ok, tag) => F eqt(release, ok) => F eqt(request, mcrlrecord) => F eqt(resource, tag) => F eqt(true, locker) => F eqt(tuple(X, Y), excl) => F eqt(tuple(X, Y), ok) => F eqt(tuple(X, Y), tuplenil(Z)) => F record!6220new(lock) => tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) locker2!6220adduniq(nil, X) => X gen!6220modtageq(X, Y) => equal(X, Y) We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(T, T) >? T or(F, T) >? T or(T, F) >? T or(F, F) >? F and(F, X) >? F and(X, F) >? F not(F) >? T eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eqt(nil, undefined) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(nil, tuplenil(X)) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, ok) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, true) >? F eqt(a, pid(X)) >? F eqt(a, int(X)) >? F eqt(a, tuple(X, Y)) >? F eqt(excl, nil) >? F eqt(excl, excl) >? T eqt(excl, lock) >? F eqt(excl, ok) >? F eqt(excl, pending) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, true) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, cons(X, Y)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, false) >? F eqt(lock, lock) >? T eqt(lock, mcrlrecord) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, nil) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, release) >? F eqt(locker, request) >? F eqt(locker, resource) >? F eqt(locker, undefined) >? F eqt(locker, tuplenil(X)) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, request) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, a) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(pending, undefined) >? F eqt(pending, pid(X)) >? F eqt(release, excl) >? F eqt(release, lock) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, pid(X)) >? F eqt(request, cons(X, Y)) >? F eqt(request, tuplenil(X)) >? F eqt(resource, false) >? F eqt(resource, locker) >? F eqt(resource, request) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, false) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, lock) >? F eqt(true, mcrlrecord) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, cons(X, Y)) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), nil) >? F eqt(pid(X), lock) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), release) >? F eqt(pid(X), true) >? F eqt(pid(X), int(Y)) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), release) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), pid(Z)) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), pending) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F eqt(tuplenil(X), tuplenil(Y)) >? eqt(X, Y) locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false case9(X, Y, Z, true) >? true eqs(empty, empty) >? T eqs(empty, stack(X, Y)) >? F tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[not(x_1)]] = x_1 [[true]] = _|_ We choose Lex = {} and Mul = {a, and, calls, case4, case9, cons, empty, eq, eqc, eqs, eqt, excl, int, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, ok, or, pending, pid, release, request, resource, stack, tag, tops, tuple, tuplenil, undefined}, and the following precedence: nocalls > nil > eq > istops > eqc > tuplenil > int > calls > eqt > case4 > pid > empty > stack > lock > tops > ok > tag > eqs > locker2!6220map!6220promote!6220pending > a > locker2!6220promote!6220pending > mcrlrecord > resource > case9 > excl > and > request > cons > undefined > release > locker > or > tuple > pending Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) > _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ and(_|_, X) >= _|_ and(X, _|_) >= _|_ _|_ >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) >= _|_ eqt(nil, undefined) > _|_ eqt(nil, pid(X)) >= _|_ eqt(nil, int(X)) >= _|_ eqt(nil, cons(X, Y)) >= _|_ eqt(nil, tuple(X, Y)) >= _|_ eqt(nil, tuplenil(X)) > _|_ eqt(a, _|_) >= _|_ eqt(a, lock) >= _|_ eqt(a, ok) > _|_ eqt(a, request) >= _|_ eqt(a, resource) >= _|_ eqt(a, tag) >= _|_ eqt(a, _|_) > _|_ eqt(a, pid(X)) >= _|_ eqt(a, int(X)) > _|_ eqt(a, tuple(X, Y)) > _|_ eqt(excl, nil) > _|_ eqt(excl, excl) > _|_ eqt(excl, lock) >= _|_ eqt(excl, ok) > _|_ eqt(excl, pending) >= _|_ eqt(excl, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, tag) >= _|_ eqt(excl, _|_) > _|_ eqt(excl, undefined) >= _|_ eqt(excl, pid(X)) >= _|_ eqt(_|_, cons(X, Y)) > _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(lock, nil) >= _|_ eqt(lock, a) >= _|_ eqt(lock, _|_) > _|_ eqt(lock, lock) >= _|_ eqt(lock, mcrlrecord) >= _|_ eqt(lock, release) >= _|_ eqt(lock, request) >= _|_ eqt(lock, resource) >= _|_ eqt(lock, tag) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, pid(X)) >= _|_ eqt(locker, nil) > _|_ eqt(locker, lock) >= _|_ eqt(locker, locker) >= _|_ eqt(locker, mcrlrecord) >= _|_ eqt(locker, ok) >= _|_ eqt(locker, release) >= _|_ eqt(locker, request) > _|_ eqt(locker, resource) >= _|_ eqt(locker, undefined) >= _|_ eqt(locker, tuplenil(X)) > _|_ eqt(mcrlrecord, nil) >= _|_ eqt(mcrlrecord, lock) >= _|_ eqt(mcrlrecord, locker) >= _|_ eqt(mcrlrecord, mcrlrecord) >= _|_ eqt(mcrlrecord, request) >= _|_ eqt(ok, undefined) >= _|_ eqt(ok, pid(X)) >= _|_ eqt(ok, int(X)) >= _|_ eqt(ok, cons(X, Y)) >= _|_ eqt(ok, tuple(X, Y)) >= _|_ eqt(ok, tuplenil(X)) >= _|_ eqt(pending, a) >= _|_ eqt(pending, lock) >= _|_ eqt(pending, locker) >= _|_ eqt(pending, pending) >= _|_ eqt(pending, release) >= _|_ eqt(pending, resource) >= _|_ eqt(pending, tag) >= _|_ eqt(pending, _|_) >= _|_ eqt(pending, undefined) > _|_ eqt(pending, pid(X)) > _|_ eqt(release, excl) >= _|_ eqt(release, lock) >= _|_ eqt(request, release) >= _|_ eqt(request, request) >= _|_ eqt(request, resource) >= _|_ eqt(request, tag) >= _|_ eqt(request, pid(X)) >= _|_ eqt(request, cons(X, Y)) >= _|_ eqt(request, tuplenil(X)) > _|_ eqt(resource, _|_) >= _|_ eqt(resource, locker) >= _|_ eqt(resource, request) >= _|_ eqt(resource, cons(X, Y)) >= _|_ eqt(tag, nil) >= _|_ eqt(tag, a) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, locker) >= _|_ eqt(tag, mcrlrecord) >= _|_ eqt(tag, release) >= _|_ eqt(tag, request) >= _|_ eqt(tag, tag) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, undefined) >= _|_ eqt(tag, int(X)) >= _|_ eqt(tag, tuple(X, Y)) >= _|_ eqt(_|_, lock) >= _|_ eqt(_|_, mcrlrecord) > _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) >= _|_ eqt(_|_, tag) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, undefined) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(undefined, tuplenil(X)) >= _|_ eqt(pid(X), nil) > _|_ eqt(pid(X), lock) > _|_ eqt(pid(X), ok) >= _|_ eqt(pid(X), pending) >= _|_ eqt(pid(X), release) > _|_ eqt(pid(X), _|_) >= _|_ eqt(pid(X), int(Y)) > _|_ eqt(int(X), locker) >= _|_ eqt(int(X), mcrlrecord) >= _|_ eqt(int(X), release) >= _|_ eqt(int(X), resource) >= _|_ eqt(int(X), _|_) >= _|_ eqt(int(X), undefined) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), pid(Z)) > _|_ eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), lock) >= _|_ eqt(tuple(X, Y), locker) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(tuple(X, Y), pid(Z)) >= _|_ eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) eqt(tuplenil(X), nil) >= _|_ eqt(tuplenil(X), lock) >= _|_ eqt(tuplenil(X), locker) >= _|_ eqt(tuplenil(X), mcrlrecord) >= _|_ eqt(tuplenil(X), pending) > _|_ eqt(tuplenil(X), resource) >= _|_ eqt(tuplenil(X), _|_) >= _|_ eqt(tuplenil(X), undefined) >= _|_ eqt(tuplenil(X), pid(Y)) >= _|_ eqt(tuplenil(X), tuplenil(Y)) > eqt(X, Y) locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ case9(X, Y, Z, _|_) >= _|_ eqs(empty, empty) >= _|_ eqs(empty, stack(X, Y)) > _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= _|_ With these choices, we have: 1] or(_|_, _|_) > _|_ because [2], by definition 2] or*(_|_, _|_) >= _|_ by (Bot) 3] or(_|_, _|_) >= _|_ by (Bot) 4] or(_|_, _|_) >= _|_ by (Bot) 5] or(_|_, _|_) >= _|_ by (Bot) 6] and(_|_, X) >= _|_ by (Bot) 7] and(X, _|_) >= _|_ by (Bot) 8] _|_ >= _|_ by (Bot) 9] eq(_|_, _|_) >= _|_ by (Bot) 10] eq(_|_, _|_) >= _|_ by (Bot) 11] eq(_|_, _|_) >= _|_ by (Bot) 12] eqt(nil, undefined) > _|_ because [13], by definition 13] eqt*(nil, undefined) >= _|_ by (Bot) 14] eqt(nil, pid(X)) >= _|_ by (Bot) 15] eqt(nil, int(X)) >= _|_ by (Bot) 16] eqt(nil, cons(X, Y)) >= _|_ by (Bot) 17] eqt(nil, tuple(X, Y)) >= _|_ by (Bot) 18] eqt(nil, tuplenil(X)) > _|_ because [19], by definition 19] eqt*(nil, tuplenil(X)) >= _|_ by (Bot) 20] eqt(a, _|_) >= _|_ by (Bot) 21] eqt(a, lock) >= _|_ by (Bot) 22] eqt(a, ok) > _|_ because [23], by definition 23] eqt*(a, ok) >= _|_ by (Bot) 24] eqt(a, request) >= _|_ by (Bot) 25] eqt(a, resource) >= _|_ by (Bot) 26] eqt(a, tag) >= _|_ by (Bot) 27] eqt(a, _|_) > _|_ because [28], by definition 28] eqt*(a, _|_) >= _|_ by (Bot) 29] eqt(a, pid(X)) >= _|_ by (Bot) 30] eqt(a, int(X)) > _|_ because [31], by definition 31] eqt*(a, int(X)) >= _|_ by (Bot) 32] eqt(a, tuple(X, Y)) > _|_ because [33], by definition 33] eqt*(a, tuple(X, Y)) >= _|_ by (Bot) 34] eqt(excl, nil) > _|_ because [35], by definition 35] eqt*(excl, nil) >= _|_ by (Bot) 36] eqt(excl, excl) > _|_ because [37], by definition 37] eqt*(excl, excl) >= _|_ by (Bot) 38] eqt(excl, lock) >= _|_ by (Bot) 39] eqt(excl, ok) > _|_ because [40], by definition 40] eqt*(excl, ok) >= _|_ by (Bot) 41] eqt(excl, pending) >= _|_ by (Bot) 42] eqt(excl, request) >= _|_ by (Bot) 43] eqt(excl, resource) >= _|_ by (Bot) 44] eqt(excl, tag) >= _|_ by (Bot) 45] eqt(excl, _|_) > _|_ because [46], by definition 46] eqt*(excl, _|_) >= _|_ by (Bot) 47] eqt(excl, undefined) >= _|_ by (Bot) 48] eqt(excl, pid(X)) >= _|_ by (Bot) 49] eqt(_|_, cons(X, Y)) > _|_ because [50], by definition 50] eqt*(_|_, cons(X, Y)) >= _|_ by (Bot) 51] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 52] eqt(lock, nil) >= _|_ by (Bot) 53] eqt(lock, a) >= _|_ by (Bot) 54] eqt(lock, _|_) > _|_ because [55], by definition 55] eqt*(lock, _|_) >= _|_ by (Bot) 56] eqt(lock, lock) >= _|_ by (Bot) 57] eqt(lock, mcrlrecord) >= _|_ by (Bot) 58] eqt(lock, release) >= _|_ by (Bot) 59] eqt(lock, request) >= _|_ by (Bot) 60] eqt(lock, resource) >= _|_ by (Bot) 61] eqt(lock, tag) >= _|_ by (Bot) 62] eqt(lock, _|_) >= _|_ by (Bot) 63] eqt(lock, pid(X)) >= _|_ by (Bot) 64] eqt(locker, nil) > _|_ because [65], by definition 65] eqt*(locker, nil) >= _|_ by (Bot) 66] eqt(locker, lock) >= _|_ by (Bot) 67] eqt(locker, locker) >= _|_ by (Bot) 68] eqt(locker, mcrlrecord) >= _|_ by (Bot) 69] eqt(locker, ok) >= _|_ by (Bot) 70] eqt(locker, release) >= _|_ by (Bot) 71] eqt(locker, request) > _|_ because [72], by definition 72] eqt*(locker, request) >= _|_ by (Bot) 73] eqt(locker, resource) >= _|_ by (Bot) 74] eqt(locker, undefined) >= _|_ by (Bot) 75] eqt(locker, tuplenil(X)) > _|_ because [76], by definition 76] eqt*(locker, tuplenil(X)) >= _|_ by (Bot) 77] eqt(mcrlrecord, nil) >= _|_ by (Bot) 78] eqt(mcrlrecord, lock) >= _|_ by (Bot) 79] eqt(mcrlrecord, locker) >= _|_ by (Bot) 80] eqt(mcrlrecord, mcrlrecord) >= _|_ by (Bot) 81] eqt(mcrlrecord, request) >= _|_ by (Bot) 82] eqt(ok, undefined) >= _|_ by (Bot) 83] eqt(ok, pid(X)) >= _|_ by (Bot) 84] eqt(ok, int(X)) >= _|_ by (Bot) 85] eqt(ok, cons(X, Y)) >= _|_ by (Bot) 86] eqt(ok, tuple(X, Y)) >= _|_ by (Bot) 87] eqt(ok, tuplenil(X)) >= _|_ by (Bot) 88] eqt(pending, a) >= _|_ by (Bot) 89] eqt(pending, lock) >= _|_ by (Bot) 90] eqt(pending, locker) >= _|_ by (Bot) 91] eqt(pending, pending) >= _|_ by (Bot) 92] eqt(pending, release) >= _|_ by (Bot) 93] eqt(pending, resource) >= _|_ by (Bot) 94] eqt(pending, tag) >= _|_ by (Bot) 95] eqt(pending, _|_) >= _|_ by (Bot) 96] eqt(pending, undefined) > _|_ because [97], by definition 97] eqt*(pending, undefined) >= _|_ by (Bot) 98] eqt(pending, pid(X)) > _|_ because [99], by definition 99] eqt*(pending, pid(X)) >= _|_ by (Bot) 100] eqt(release, excl) >= _|_ by (Bot) 101] eqt(release, lock) >= _|_ by (Bot) 102] eqt(request, release) >= _|_ by (Bot) 103] eqt(request, request) >= _|_ by (Bot) 104] eqt(request, resource) >= _|_ by (Bot) 105] eqt(request, tag) >= _|_ by (Bot) 106] eqt(request, pid(X)) >= _|_ by (Bot) 107] eqt(request, cons(X, Y)) >= _|_ by (Bot) 108] eqt(request, tuplenil(X)) > _|_ because [109], by definition 109] eqt*(request, tuplenil(X)) >= _|_ by (Bot) 110] eqt(resource, _|_) >= _|_ by (Bot) 111] eqt(resource, locker) >= _|_ by (Bot) 112] eqt(resource, request) >= _|_ by (Bot) 113] eqt(resource, cons(X, Y)) >= _|_ by (Bot) 114] eqt(tag, nil) >= _|_ by (Bot) 115] eqt(tag, a) >= _|_ by (Bot) 116] eqt(tag, _|_) >= _|_ by (Bot) 117] eqt(tag, locker) >= _|_ by (Bot) 118] eqt(tag, mcrlrecord) >= _|_ by (Bot) 119] eqt(tag, release) >= _|_ by (Bot) 120] eqt(tag, request) >= _|_ by (Bot) 121] eqt(tag, tag) >= _|_ by (Bot) 122] eqt(tag, _|_) >= _|_ by (Bot) 123] eqt(tag, undefined) >= _|_ by (Bot) 124] eqt(tag, int(X)) >= _|_ by (Bot) 125] eqt(tag, tuple(X, Y)) >= _|_ by (Bot) 126] eqt(_|_, lock) >= _|_ by (Bot) 127] eqt(_|_, mcrlrecord) > _|_ because [128], by definition 128] eqt*(_|_, mcrlrecord) >= _|_ by (Bot) 129] eqt(_|_, release) >= _|_ by (Bot) 130] eqt(_|_, request) >= _|_ by (Bot) 131] eqt(_|_, tag) >= _|_ by (Bot) 132] eqt(_|_, _|_) >= _|_ by (Bot) 133] eqt(_|_, undefined) >= _|_ by (Bot) 134] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 135] eqt(undefined, tuplenil(X)) >= _|_ by (Bot) 136] eqt(pid(X), nil) > _|_ because [137], by definition 137] eqt*(pid(X), nil) >= _|_ by (Bot) 138] eqt(pid(X), lock) > _|_ because [139], by definition 139] eqt*(pid(X), lock) >= _|_ by (Bot) 140] eqt(pid(X), ok) >= _|_ by (Bot) 141] eqt(pid(X), pending) >= _|_ by (Bot) 142] eqt(pid(X), release) > _|_ because [143], by definition 143] eqt*(pid(X), release) >= _|_ by (Bot) 144] eqt(pid(X), _|_) >= _|_ by (Bot) 145] eqt(pid(X), int(Y)) > _|_ because [146], by definition 146] eqt*(pid(X), int(Y)) >= _|_ by (Bot) 147] eqt(int(X), locker) >= _|_ by (Bot) 148] eqt(int(X), mcrlrecord) >= _|_ by (Bot) 149] eqt(int(X), release) >= _|_ by (Bot) 150] eqt(int(X), resource) >= _|_ by (Bot) 151] eqt(int(X), _|_) >= _|_ by (Bot) 152] eqt(int(X), undefined) >= _|_ by (Bot) 153] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 154] eqt(cons(X, Y), pid(Z)) > _|_ because [155], by definition 155] eqt*(cons(X, Y), pid(Z)) >= _|_ by (Bot) 156] eqt(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [157], by (Star) 157] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [158] and [165], by (Copy) 158] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [159] and [162], by (Stat) 159] cons(X, Y) >= X because [160], by (Star) 160] cons*(X, Y) >= X because [161], by (Select) 161] X >= X by (Meta) 162] cons(Z, U) > Z because [163], by definition 163] cons*(Z, U) >= Z because [164], by (Select) 164] Z >= Z by (Meta) 165] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [166] and [169], by (Stat) 166] cons(X, Y) > Y because [167], by definition 167] cons*(X, Y) >= Y because [168], by (Select) 168] Y >= Y by (Meta) 169] cons(Z, U) >= U because [170], by (Star) 170] cons*(Z, U) >= U because [171], by (Select) 171] U >= U by (Meta) 172] eqt(cons(X, Y), tuplenil(Z)) >= _|_ by (Bot) 173] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 174] eqt(tuple(X, Y), a) >= _|_ by (Bot) 175] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 176] eqt(tuple(X, Y), lock) >= _|_ by (Bot) 177] eqt(tuple(X, Y), locker) >= _|_ by (Bot) 178] eqt(tuple(X, Y), request) >= _|_ by (Bot) 179] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 180] eqt(tuple(X, Y), pid(Z)) >= _|_ by (Bot) 181] eqt(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because [182], by (Star) 182] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [183] and [188], by (Copy) 183] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [184] and [186], by (Stat) 184] tuple(X, Y) >= X because [185], by (Star) 185] tuple*(X, Y) >= X because [161], by (Select) 186] tuple(Z, U) > Z because [187], by definition 187] tuple*(Z, U) >= Z because [164], by (Select) 188] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [189] and [191], by (Stat) 189] tuple(X, Y) >= Y because [190], by (Star) 190] tuple*(X, Y) >= Y because [168], by (Select) 191] tuple(Z, U) > U because [192], by definition 192] tuple*(Z, U) >= U because [171], by (Select) 193] eqt(tuplenil(X), nil) >= _|_ by (Bot) 194] eqt(tuplenil(X), lock) >= _|_ by (Bot) 195] eqt(tuplenil(X), locker) >= _|_ by (Bot) 196] eqt(tuplenil(X), mcrlrecord) >= _|_ by (Bot) 197] eqt(tuplenil(X), pending) > _|_ because [198], by definition 198] eqt*(tuplenil(X), pending) >= _|_ by (Bot) 199] eqt(tuplenil(X), resource) >= _|_ by (Bot) 200] eqt(tuplenil(X), _|_) >= _|_ by (Bot) 201] eqt(tuplenil(X), undefined) >= _|_ by (Bot) 202] eqt(tuplenil(X), pid(Y)) >= _|_ by (Bot) 203] eqt(tuplenil(X), tuplenil(Y)) > eqt(X, Y) because [204], by definition 204] eqt*(tuplenil(X), tuplenil(Y)) >= eqt(X, Y) because eqt in Mul, [205] and [207], by (Stat) 205] tuplenil(X) >= X because [206], by (Star) 206] tuplenil*(X) >= X because [161], by (Select) 207] tuplenil(Y) > Y because [208], by definition 208] tuplenil*(Y) >= Y because [164], by (Select) 209] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [210], by (Star) 210] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [211] and [218], by (Copy) 211] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [212] and [216], by (Copy) 212] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [213], by (Select) 213] cons(X, Y) >= X because [214], by (Star) 214] cons*(X, Y) >= X because [215], by (Select) 215] X >= X by (Meta) 216] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [217], by (Select) 217] Z >= Z by (Meta) 218] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [219] and [222], by (Stat) 219] cons(X, Y) > Y because [220], by definition 220] cons*(X, Y) >= Y because [221], by (Select) 221] Y >= Y by (Meta) 222] Z >= Z by (Meta) 223] case4(X, Y, Z) >= _|_ by (Bot) 224] case9(X, Y, Z, _|_) >= _|_ by (Bot) 225] eqs(empty, empty) >= _|_ by (Bot) 226] eqs(empty, stack(X, Y)) > _|_ because [227], by definition 227] eqs*(empty, stack(X, Y)) >= _|_ by (Bot) 228] tops(stack(X, Y)) >= X because [229], by (Star) 229] tops*(stack(X, Y)) >= X because [230], by (Select) 230] stack(X, Y) >= X because [231], by (Star) 231] stack*(X, Y) >= X because [232], by (Select) 232] X >= X by (Meta) 233] istops(X, empty) >= _|_ by (Bot) 234] eqc(nocalls, nocalls) >= _|_ by (Bot) 235] eqc(calls(X, Y, Z), nocalls) >= _|_ by (Bot) We can thus remove the following rules: or(T, T) => T eqt(nil, undefined) => F eqt(nil, tuplenil(X)) => F eqt(a, ok) => F eqt(a, true) => F eqt(a, int(X)) => F eqt(a, tuple(X, Y)) => F eqt(excl, nil) => F eqt(excl, excl) => T eqt(excl, ok) => F eqt(excl, true) => F eqt(false, cons(X, Y)) => F eqt(lock, false) => F eqt(locker, nil) => F eqt(locker, request) => F eqt(locker, tuplenil(X)) => F eqt(pending, undefined) => F eqt(pending, pid(X)) => F eqt(request, tuplenil(X)) => F eqt(true, mcrlrecord) => F eqt(pid(X), nil) => F eqt(pid(X), lock) => F eqt(pid(X), release) => F eqt(pid(X), int(Y)) => F eqt(cons(X, Y), pid(Z)) => F eqt(tuplenil(X), pending) => F eqt(tuplenil(X), tuplenil(Y)) => eqt(X, Y) eqs(empty, stack(X, Y)) => F We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(F, T) >? T or(T, F) >? T or(F, F) >? F and(F, X) >? F and(X, F) >? F not(F) >? T eq(T, T) >? T eq(F, F) >? T eq(T, F) >? F eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(nil, cons(X, Y)) >? F eqt(nil, tuple(X, Y)) >? F eqt(a, false) >? F eqt(a, lock) >? F eqt(a, request) >? F eqt(a, resource) >? F eqt(a, tag) >? F eqt(a, pid(X)) >? F eqt(excl, lock) >? F eqt(excl, pending) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, lock) >? T eqt(lock, mcrlrecord) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, lock) >? F eqt(locker, locker) >? T eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, release) >? F eqt(locker, resource) >? F eqt(locker, undefined) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, request) >? F eqt(ok, undefined) >? F eqt(ok, pid(X)) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, a) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(release, excl) >? F eqt(release, lock) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, pid(X)) >? F eqt(request, cons(X, Y)) >? F eqt(resource, false) >? F eqt(resource, locker) >? F eqt(resource, request) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, false) >? F eqt(tag, locker) >? F eqt(tag, mcrlrecord) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, tag) >? T eqt(tag, true) >? F eqt(tag, undefined) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, lock) >? F eqt(true, release) >? F eqt(true, request) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, cons(X, Y)) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), true) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), release) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), cons(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuple(X, Y), tuple(Z, U)) >? and(eqt(X, Z), eqt(Y, U)) eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), lock) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false case9(X, Y, Z, true) >? true eqs(empty, empty) >? T tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[int(x_1)]] = x_1 [[pid(x_1)]] = x_1 [[true]] = _|_ [[tuplenil(x_1)]] = x_1 We choose Lex = {} and Mul = {a, and, calls, case4, case9, cons, empty, eq, eqc, eqs, eqt, excl, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, not, ok, or, pending, release, request, resource, stack, tag, tops, tuple, undefined}, and the following precedence: nil > eqc > or > lock > eq > locker2!6220map!6220promote!6220pending > eqs > request > eqt > tag > locker2!6220promote!6220pending > and > istops > calls > case9 > excl > case4 > cons > resource > empty > mcrlrecord > not > undefined > ok > pending > tops > nocalls > tuple > a > release > stack > locker Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ or(_|_, _|_) >= _|_ and(_|_, X) >= _|_ and(X, _|_) >= _|_ not(_|_) >= _|_ eq(_|_, _|_) >= _|_ eq(_|_, _|_) > _|_ eq(_|_, _|_) > _|_ eqt(nil, X) >= _|_ eqt(nil, X) >= _|_ eqt(nil, cons(X, Y)) > _|_ eqt(nil, tuple(X, Y)) > _|_ eqt(a, _|_) > _|_ eqt(a, lock) >= _|_ eqt(a, request) >= _|_ eqt(a, resource) > _|_ eqt(a, tag) > _|_ eqt(a, X) > _|_ eqt(excl, lock) >= _|_ eqt(excl, pending) >= _|_ eqt(excl, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, tag) >= _|_ eqt(excl, undefined) >= _|_ eqt(excl, X) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(lock, nil) >= _|_ eqt(lock, a) >= _|_ eqt(lock, lock) >= _|_ eqt(lock, mcrlrecord) >= _|_ eqt(lock, release) >= _|_ eqt(lock, request) >= _|_ eqt(lock, resource) >= _|_ eqt(lock, tag) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, X) >= _|_ eqt(locker, lock) > _|_ eqt(locker, locker) > _|_ eqt(locker, mcrlrecord) >= _|_ eqt(locker, ok) >= _|_ eqt(locker, release) >= _|_ eqt(locker, resource) > _|_ eqt(locker, undefined) >= _|_ eqt(mcrlrecord, nil) >= _|_ eqt(mcrlrecord, lock) >= _|_ eqt(mcrlrecord, locker) >= _|_ eqt(mcrlrecord, mcrlrecord) >= _|_ eqt(mcrlrecord, request) >= _|_ eqt(ok, undefined) >= _|_ eqt(ok, X) > _|_ eqt(ok, X) >= _|_ eqt(ok, cons(X, Y)) >= _|_ eqt(ok, tuple(X, Y)) >= _|_ eqt(ok, X) >= _|_ eqt(pending, a) >= _|_ eqt(pending, lock) >= _|_ eqt(pending, locker) >= _|_ eqt(pending, pending) >= _|_ eqt(pending, release) >= _|_ eqt(pending, resource) >= _|_ eqt(pending, tag) >= _|_ eqt(pending, _|_) >= _|_ eqt(release, excl) >= _|_ eqt(release, lock) >= _|_ eqt(request, release) >= _|_ eqt(request, request) >= _|_ eqt(request, resource) >= _|_ eqt(request, tag) >= _|_ eqt(request, X) >= _|_ eqt(request, cons(X, Y)) > _|_ eqt(resource, _|_) >= _|_ eqt(resource, locker) >= _|_ eqt(resource, request) >= _|_ eqt(resource, cons(X, Y)) >= _|_ eqt(tag, nil) >= _|_ eqt(tag, a) >= _|_ eqt(tag, _|_) >= _|_ eqt(tag, locker) >= _|_ eqt(tag, mcrlrecord) > _|_ eqt(tag, release) >= _|_ eqt(tag, request) >= _|_ eqt(tag, tag) > _|_ eqt(tag, _|_) >= _|_ eqt(tag, undefined) > _|_ eqt(tag, X) >= _|_ eqt(tag, tuple(X, Y)) >= _|_ eqt(_|_, lock) >= _|_ eqt(_|_, release) >= _|_ eqt(_|_, request) > _|_ eqt(_|_, tag) >= _|_ eqt(_|_, _|_) >= _|_ eqt(_|_, undefined) >= _|_ eqt(_|_, cons(X, Y)) >= _|_ eqt(undefined, X) >= _|_ eqt(X, ok) >= _|_ eqt(X, pending) >= _|_ eqt(X, _|_) >= _|_ eqt(X, locker) >= _|_ eqt(X, mcrlrecord) >= _|_ eqt(X, release) >= _|_ eqt(X, resource) >= _|_ eqt(X, _|_) >= _|_ eqt(X, undefined) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), cons(Z, U)) > and(eqt(X, Z), eqt(Y, U)) eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), lock) >= _|_ eqt(tuple(X, Y), locker) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(tuple(X, Y), Z) >= _|_ eqt(tuple(X, Y), tuple(Z, U)) > and(eqt(X, Z), eqt(Y, U)) eqt(X, nil) >= _|_ eqt(X, lock) > _|_ eqt(X, locker) >= _|_ eqt(X, mcrlrecord) >= _|_ eqt(X, resource) >= _|_ eqt(X, _|_) >= _|_ eqt(X, undefined) >= _|_ eqt(X, Y) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ case9(X, Y, Z, _|_) >= _|_ eqs(empty, empty) > _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= _|_ With these choices, we have: 1] or(_|_, _|_) >= _|_ by (Bot) 2] or(_|_, _|_) >= _|_ by (Bot) 3] or(_|_, _|_) >= _|_ by (Bot) 4] and(_|_, X) >= _|_ by (Bot) 5] and(X, _|_) >= _|_ by (Bot) 6] not(_|_) >= _|_ by (Bot) 7] eq(_|_, _|_) >= _|_ by (Bot) 8] eq(_|_, _|_) > _|_ because [9], by definition 9] eq*(_|_, _|_) >= _|_ by (Bot) 10] eq(_|_, _|_) > _|_ because [11], by definition 11] eq*(_|_, _|_) >= _|_ by (Bot) 12] eqt(nil, X) >= _|_ by (Bot) 13] eqt(nil, X) >= _|_ by (Bot) 14] eqt(nil, cons(X, Y)) > _|_ because [15], by definition 15] eqt*(nil, cons(X, Y)) >= _|_ by (Bot) 16] eqt(nil, tuple(X, Y)) > _|_ because [17], by definition 17] eqt*(nil, tuple(X, Y)) >= _|_ by (Bot) 18] eqt(a, _|_) > _|_ because [19], by definition 19] eqt*(a, _|_) >= _|_ by (Bot) 20] eqt(a, lock) >= _|_ by (Bot) 21] eqt(a, request) >= _|_ by (Bot) 22] eqt(a, resource) > _|_ because [23], by definition 23] eqt*(a, resource) >= _|_ by (Bot) 24] eqt(a, tag) > _|_ because [25], by definition 25] eqt*(a, tag) >= _|_ by (Bot) 26] eqt(a, X) > _|_ because [27], by definition 27] eqt*(a, X) >= _|_ by (Bot) 28] eqt(excl, lock) >= _|_ by (Bot) 29] eqt(excl, pending) >= _|_ by (Bot) 30] eqt(excl, request) >= _|_ by (Bot) 31] eqt(excl, resource) >= _|_ by (Bot) 32] eqt(excl, tag) >= _|_ by (Bot) 33] eqt(excl, undefined) >= _|_ by (Bot) 34] eqt(excl, X) >= _|_ by (Bot) 35] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 36] eqt(lock, nil) >= _|_ by (Bot) 37] eqt(lock, a) >= _|_ by (Bot) 38] eqt(lock, lock) >= _|_ by (Bot) 39] eqt(lock, mcrlrecord) >= _|_ by (Bot) 40] eqt(lock, release) >= _|_ by (Bot) 41] eqt(lock, request) >= _|_ by (Bot) 42] eqt(lock, resource) >= _|_ by (Bot) 43] eqt(lock, tag) >= _|_ by (Bot) 44] eqt(lock, _|_) >= _|_ by (Bot) 45] eqt(lock, X) >= _|_ by (Bot) 46] eqt(locker, lock) > _|_ because [47], by definition 47] eqt*(locker, lock) >= _|_ by (Bot) 48] eqt(locker, locker) > _|_ because [49], by definition 49] eqt*(locker, locker) >= _|_ by (Bot) 50] eqt(locker, mcrlrecord) >= _|_ by (Bot) 51] eqt(locker, ok) >= _|_ by (Bot) 52] eqt(locker, release) >= _|_ by (Bot) 53] eqt(locker, resource) > _|_ because [54], by definition 54] eqt*(locker, resource) >= _|_ by (Bot) 55] eqt(locker, undefined) >= _|_ by (Bot) 56] eqt(mcrlrecord, nil) >= _|_ by (Bot) 57] eqt(mcrlrecord, lock) >= _|_ by (Bot) 58] eqt(mcrlrecord, locker) >= _|_ by (Bot) 59] eqt(mcrlrecord, mcrlrecord) >= _|_ by (Bot) 60] eqt(mcrlrecord, request) >= _|_ by (Bot) 61] eqt(ok, undefined) >= _|_ by (Bot) 62] eqt(ok, X) > _|_ because [63], by definition 63] eqt*(ok, X) >= _|_ by (Bot) 64] eqt(ok, X) >= _|_ by (Bot) 65] eqt(ok, cons(X, Y)) >= _|_ by (Bot) 66] eqt(ok, tuple(X, Y)) >= _|_ by (Bot) 67] eqt(ok, X) >= _|_ by (Bot) 68] eqt(pending, a) >= _|_ by (Bot) 69] eqt(pending, lock) >= _|_ by (Bot) 70] eqt(pending, locker) >= _|_ by (Bot) 71] eqt(pending, pending) >= _|_ by (Bot) 72] eqt(pending, release) >= _|_ by (Bot) 73] eqt(pending, resource) >= _|_ by (Bot) 74] eqt(pending, tag) >= _|_ by (Bot) 75] eqt(pending, _|_) >= _|_ by (Bot) 76] eqt(release, excl) >= _|_ by (Bot) 77] eqt(release, lock) >= _|_ by (Bot) 78] eqt(request, release) >= _|_ by (Bot) 79] eqt(request, request) >= _|_ by (Bot) 80] eqt(request, resource) >= _|_ by (Bot) 81] eqt(request, tag) >= _|_ by (Bot) 82] eqt(request, X) >= _|_ by (Bot) 83] eqt(request, cons(X, Y)) > _|_ because [84], by definition 84] eqt*(request, cons(X, Y)) >= _|_ by (Bot) 85] eqt(resource, _|_) >= _|_ by (Bot) 86] eqt(resource, locker) >= _|_ by (Bot) 87] eqt(resource, request) >= _|_ by (Bot) 88] eqt(resource, cons(X, Y)) >= _|_ by (Bot) 89] eqt(tag, nil) >= _|_ by (Bot) 90] eqt(tag, a) >= _|_ by (Bot) 91] eqt(tag, _|_) >= _|_ by (Bot) 92] eqt(tag, locker) >= _|_ by (Bot) 93] eqt(tag, mcrlrecord) > _|_ because [94], by definition 94] eqt*(tag, mcrlrecord) >= _|_ by (Bot) 95] eqt(tag, release) >= _|_ by (Bot) 96] eqt(tag, request) >= _|_ by (Bot) 97] eqt(tag, tag) > _|_ because [98], by definition 98] eqt*(tag, tag) >= _|_ by (Bot) 99] eqt(tag, _|_) >= _|_ by (Bot) 100] eqt(tag, undefined) > _|_ because [101], by definition 101] eqt*(tag, undefined) >= _|_ by (Bot) 102] eqt(tag, X) >= _|_ by (Bot) 103] eqt(tag, tuple(X, Y)) >= _|_ by (Bot) 104] eqt(_|_, lock) >= _|_ by (Bot) 105] eqt(_|_, release) >= _|_ by (Bot) 106] eqt(_|_, request) > _|_ because [107], by definition 107] eqt*(_|_, request) >= _|_ by (Bot) 108] eqt(_|_, tag) >= _|_ by (Bot) 109] eqt(_|_, _|_) >= _|_ by (Bot) 110] eqt(_|_, undefined) >= _|_ by (Bot) 111] eqt(_|_, cons(X, Y)) >= _|_ by (Bot) 112] eqt(undefined, X) >= _|_ by (Bot) 113] eqt(X, ok) >= _|_ by (Bot) 114] eqt(X, pending) >= _|_ by (Bot) 115] eqt(X, _|_) >= _|_ by (Bot) 116] eqt(X, locker) >= _|_ by (Bot) 117] eqt(X, mcrlrecord) >= _|_ by (Bot) 118] eqt(X, release) >= _|_ by (Bot) 119] eqt(X, resource) >= _|_ by (Bot) 120] eqt(X, _|_) >= _|_ by (Bot) 121] eqt(X, undefined) >= _|_ by (Bot) 122] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 123] eqt(cons(X, Y), cons(Z, U)) > and(eqt(X, Z), eqt(Y, U)) because [124], by definition 124] eqt*(cons(X, Y), cons(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [125] and [132], by (Copy) 125] eqt*(cons(X, Y), cons(Z, U)) >= eqt(X, Z) because eqt in Mul, [126] and [129], by (Stat) 126] cons(X, Y) > X because [127], by definition 127] cons*(X, Y) >= X because [128], by (Select) 128] X >= X by (Meta) 129] cons(Z, U) >= Z because [130], by (Star) 130] cons*(Z, U) >= Z because [131], by (Select) 131] Z >= Z by (Meta) 132] eqt*(cons(X, Y), cons(Z, U)) >= eqt(Y, U) because eqt in Mul, [133] and [136], by (Stat) 133] cons(X, Y) >= Y because [134], by (Star) 134] cons*(X, Y) >= Y because [135], by (Select) 135] Y >= Y by (Meta) 136] cons(Z, U) > U because [137], by definition 137] cons*(Z, U) >= U because [138], by (Select) 138] U >= U by (Meta) 139] eqt(cons(X, Y), Z) >= _|_ by (Bot) 140] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 141] eqt(tuple(X, Y), a) >= _|_ by (Bot) 142] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 143] eqt(tuple(X, Y), lock) >= _|_ by (Bot) 144] eqt(tuple(X, Y), locker) >= _|_ by (Bot) 145] eqt(tuple(X, Y), request) >= _|_ by (Bot) 146] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 147] eqt(tuple(X, Y), Z) >= _|_ by (Bot) 148] eqt(tuple(X, Y), tuple(Z, U)) > and(eqt(X, Z), eqt(Y, U)) because [149], by definition 149] eqt*(tuple(X, Y), tuple(Z, U)) >= and(eqt(X, Z), eqt(Y, U)) because eqt > and, [150] and [155], by (Copy) 150] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(X, Z) because eqt in Mul, [151] and [153], by (Stat) 151] tuple(X, Y) >= X because [152], by (Star) 152] tuple*(X, Y) >= X because [128], by (Select) 153] tuple(Z, U) > Z because [154], by definition 154] tuple*(Z, U) >= Z because [131], by (Select) 155] eqt*(tuple(X, Y), tuple(Z, U)) >= eqt(Y, U) because eqt in Mul, [156] and [158], by (Stat) 156] tuple(X, Y) >= Y because [157], by (Star) 157] tuple*(X, Y) >= Y because [135], by (Select) 158] tuple(Z, U) > U because [159], by definition 159] tuple*(Z, U) >= U because [138], by (Select) 160] eqt(X, nil) >= _|_ by (Bot) 161] eqt(X, lock) > _|_ because [162], by definition 162] eqt*(X, lock) >= _|_ by (Bot) 163] eqt(X, locker) >= _|_ by (Bot) 164] eqt(X, mcrlrecord) >= _|_ by (Bot) 165] eqt(X, resource) >= _|_ by (Bot) 166] eqt(X, _|_) >= _|_ by (Bot) 167] eqt(X, undefined) >= _|_ by (Bot) 168] eqt(X, Y) >= _|_ by (Bot) 169] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [170], by (Star) 170] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [171] and [178], by (Copy) 171] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [172] and [176], by (Copy) 172] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [173], by (Select) 173] cons(X, Y) >= X because [174], by (Star) 174] cons*(X, Y) >= X because [175], by (Select) 175] X >= X by (Meta) 176] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [177], by (Select) 177] Z >= Z by (Meta) 178] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [179] and [182], by (Stat) 179] cons(X, Y) > Y because [180], by definition 180] cons*(X, Y) >= Y because [181], by (Select) 181] Y >= Y by (Meta) 182] Z >= Z by (Meta) 183] case4(X, Y, Z) >= _|_ by (Bot) 184] case9(X, Y, Z, _|_) >= _|_ by (Bot) 185] eqs(empty, empty) > _|_ because [186], by definition 186] eqs*(empty, empty) >= _|_ by (Bot) 187] tops(stack(X, Y)) >= X because [188], by (Star) 188] tops*(stack(X, Y)) >= X because [189], by (Select) 189] stack(X, Y) >= X because [190], by (Star) 190] stack*(X, Y) >= X because [191], by (Select) 191] X >= X by (Meta) 192] istops(X, empty) >= _|_ by (Bot) 193] eqc(nocalls, nocalls) >= _|_ by (Bot) 194] eqc(calls(X, Y, Z), nocalls) >= _|_ by (Bot) We can thus remove the following rules: eq(F, F) => T eq(T, F) => F eqt(nil, cons(X, Y)) => F eqt(nil, tuple(X, Y)) => F eqt(a, false) => F eqt(a, resource) => F eqt(a, tag) => F eqt(a, pid(X)) => F eqt(locker, lock) => F eqt(locker, locker) => T eqt(locker, resource) => F eqt(ok, pid(X)) => F eqt(request, cons(X, Y)) => F eqt(tag, mcrlrecord) => F eqt(tag, tag) => T eqt(tag, undefined) => F eqt(true, request) => F eqt(cons(X, Y), cons(Z, U)) => and(eqt(X, Z), eqt(Y, U)) eqt(tuple(X, Y), tuple(Z, U)) => and(eqt(X, Z), eqt(Y, U)) eqt(tuplenil(X), lock) => F eqs(empty, empty) => T We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(F, T) >? T or(T, F) >? T or(F, F) >? F and(F, X) >? F and(X, F) >? F not(F) >? T eq(T, T) >? T eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(a, lock) >? F eqt(a, request) >? F eqt(excl, lock) >? F eqt(excl, pending) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, a) >? F eqt(lock, lock) >? T eqt(lock, mcrlrecord) >? F eqt(lock, release) >? F eqt(lock, request) >? F eqt(lock, resource) >? F eqt(lock, tag) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(locker, release) >? F eqt(locker, undefined) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, lock) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(mcrlrecord, request) >? F eqt(ok, undefined) >? F eqt(ok, int(X)) >? F eqt(ok, cons(X, Y)) >? F eqt(ok, tuple(X, Y)) >? F eqt(ok, tuplenil(X)) >? F eqt(pending, a) >? F eqt(pending, lock) >? F eqt(pending, locker) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, resource) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(release, excl) >? F eqt(release, lock) >? F eqt(request, release) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(request, tag) >? F eqt(request, pid(X)) >? F eqt(resource, false) >? F eqt(resource, locker) >? F eqt(resource, request) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, a) >? F eqt(tag, false) >? F eqt(tag, locker) >? F eqt(tag, release) >? F eqt(tag, request) >? F eqt(tag, true) >? F eqt(tag, int(X)) >? F eqt(tag, tuple(X, Y)) >? F eqt(true, lock) >? F eqt(true, release) >? F eqt(true, tag) >? F eqt(true, true) >? T eqt(true, undefined) >? F eqt(true, cons(X, Y)) >? F eqt(undefined, tuplenil(X)) >? F eqt(pid(X), ok) >? F eqt(pid(X), pending) >? F eqt(pid(X), true) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), release) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), lock) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuple(X, Y), pid(Z)) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), locker) >? F eqt(tuplenil(X), mcrlrecord) >? F eqt(tuplenil(X), resource) >? F eqt(tuplenil(X), true) >? F eqt(tuplenil(X), undefined) >? F eqt(tuplenil(X), pid(Y)) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false case9(X, Y, Z, true) >? true tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[T]] = _|_ [[false]] = _|_ We choose Lex = {} and Mul = {F, a, and, calls, case4, case9, cons, empty, eq, eqc, eqt, excl, int, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, not, ok, or, pending, pid, release, request, resource, stack, tag, tops, true, tuple, tuplenil, undefined}, and the following precedence: and > or > calls > resource > not > lock > ok > locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending > release > eq > true > eqc > mcrlrecord > stack > case4 > int > tops > nocalls > pending > tag > request > istops > F = excl = locker = nil = tuple = tuplenil > cons > case9 > eqt > undefined > a > pid > empty Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(F, _|_) >= _|_ or(_|_, F) >= _|_ or(F, F) >= F and(F, X) > F and(X, F) >= F not(F) >= _|_ eq(_|_, _|_) >= _|_ eqt(nil, pid(X)) >= F eqt(nil, int(X)) >= F eqt(a, lock) >= F eqt(a, request) >= F eqt(excl, lock) > F eqt(excl, pending) > F eqt(excl, request) >= F eqt(excl, resource) >= F eqt(excl, tag) >= F eqt(excl, undefined) >= F eqt(excl, pid(X)) >= F eqt(_|_, tuple(X, Y)) >= F eqt(lock, nil) >= F eqt(lock, a) > F eqt(lock, lock) > _|_ eqt(lock, mcrlrecord) > F eqt(lock, release) > F eqt(lock, request) >= F eqt(lock, resource) > F eqt(lock, tag) > F eqt(lock, true) >= F eqt(lock, pid(X)) >= F eqt(locker, mcrlrecord) >= F eqt(locker, ok) >= F eqt(locker, release) > F eqt(locker, undefined) > F eqt(mcrlrecord, nil) >= F eqt(mcrlrecord, lock) > F eqt(mcrlrecord, locker) >= F eqt(mcrlrecord, mcrlrecord) >= _|_ eqt(mcrlrecord, request) > F eqt(ok, undefined) > F eqt(ok, int(X)) > F eqt(ok, cons(X, Y)) > F eqt(ok, tuple(X, Y)) > F eqt(ok, tuplenil(X)) > F eqt(pending, a) > F eqt(pending, lock) >= F eqt(pending, locker) > F eqt(pending, pending) >= _|_ eqt(pending, release) >= F eqt(pending, resource) > F eqt(pending, tag) >= F eqt(pending, true) >= F eqt(release, excl) > F eqt(release, lock) >= F eqt(request, release) > F eqt(request, request) >= _|_ eqt(request, resource) >= F eqt(request, tag) > F eqt(request, pid(X)) > F eqt(resource, _|_) >= F eqt(resource, locker) > F eqt(resource, request) >= F eqt(resource, cons(X, Y)) >= F eqt(tag, nil) >= F eqt(tag, a) > F eqt(tag, _|_) >= F eqt(tag, locker) >= F eqt(tag, release) > F eqt(tag, request) >= F eqt(tag, true) >= F eqt(tag, int(X)) >= F eqt(tag, tuple(X, Y)) > F eqt(true, lock) > F eqt(true, release) > F eqt(true, tag) > F eqt(true, true) >= _|_ eqt(true, undefined) > F eqt(true, cons(X, Y)) > F eqt(undefined, tuplenil(X)) > F eqt(pid(X), ok) > F eqt(pid(X), pending) >= F eqt(pid(X), true) > F eqt(int(X), locker) >= F eqt(int(X), mcrlrecord) >= F eqt(int(X), release) >= F eqt(int(X), resource) >= F eqt(int(X), true) >= F eqt(int(X), undefined) >= F eqt(cons(X, Y), true) >= F eqt(cons(X, Y), tuplenil(Z)) >= F eqt(tuple(X, Y), nil) >= F eqt(tuple(X, Y), a) >= F eqt(tuple(X, Y), _|_) >= F eqt(tuple(X, Y), lock) > F eqt(tuple(X, Y), locker) >= F eqt(tuple(X, Y), request) >= F eqt(tuple(X, Y), resource) >= F eqt(tuple(X, Y), pid(Z)) > F eqt(tuplenil(X), nil) >= F eqt(tuplenil(X), locker) > F eqt(tuplenil(X), mcrlrecord) >= F eqt(tuplenil(X), resource) > F eqt(tuplenil(X), true) > F eqt(tuplenil(X), undefined) > F eqt(tuplenil(X), pid(Y)) > F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ case9(X, Y, Z, true) >= true tops(stack(X, Y)) >= X istops(X, empty) >= F eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= F With these choices, we have: 1] or(F, _|_) >= _|_ by (Bot) 2] or(_|_, F) >= _|_ by (Bot) 3] or(F, F) >= F because [4], by (Star) 4] or*(F, F) >= F because or > F, by (Copy) 5] and(F, X) > F because [6], by definition 6] and*(F, X) >= F because [7], by (Select) 7] F >= F by (Fun) 8] and(X, F) >= F because [9], by (Star) 9] and*(X, F) >= F because and > F, by (Copy) 10] not(F) >= _|_ by (Bot) 11] eq(_|_, _|_) >= _|_ by (Bot) 12] eqt(nil, pid(X)) >= F because [13], by (Star) 13] eqt*(nil, pid(X)) >= F because [14], by (Select) 14] nil >= F because nil = F, by (Fun) 15] eqt(nil, int(X)) >= F because [16], by (Star) 16] eqt*(nil, int(X)) >= F because [14], by (Select) 17] eqt(a, lock) >= F because [18], by (Star) 18] eqt*(a, lock) >= F because [19], by (Select) 19] lock >= F because [20], by (Star) 20] lock* >= F because lock > F, by (Copy) 21] eqt(a, request) >= F because [22], by (Star) 22] eqt*(a, request) >= F because [23], by (Select) 23] request >= F because [24], by (Star) 24] request* >= F because request > F, by (Copy) 25] eqt(excl, lock) > F because [26], by definition 26] eqt*(excl, lock) >= F because [27], by (Select) 27] excl >= F because excl = F, by (Fun) 28] eqt(excl, pending) > F because [29], by definition 29] eqt*(excl, pending) >= F because [30], by (Select) 30] pending >= F because [31], by (Star) 31] pending* >= F because pending > F, by (Copy) 32] eqt(excl, request) >= F because [33], by (Star) 33] eqt*(excl, request) >= F because [23], by (Select) 34] eqt(excl, resource) >= F because [35], by (Star) 35] eqt*(excl, resource) >= F because [27], by (Select) 36] eqt(excl, tag) >= F because [37], by (Star) 37] eqt*(excl, tag) >= F because [38], by (Select) 38] tag >= F because [39], by (Star) 39] tag* >= F because tag > F, by (Copy) 40] eqt(excl, undefined) >= F because [41], by (Star) 41] eqt*(excl, undefined) >= F because [27], by (Select) 42] eqt(excl, pid(X)) >= F because [43], by (Star) 43] eqt*(excl, pid(X)) >= F because [27], by (Select) 44] eqt(_|_, tuple(X, Y)) >= F because [45], by (Star) 45] eqt*(_|_, tuple(X, Y)) >= F because [46], by (Select) 46] tuple(X, Y) >= F because [47], by (Star) 47] tuple*(X, Y) >= F because tuple = F and tuple in Mul, by (Stat) 48] eqt(lock, nil) >= F because [49], by (Star) 49] eqt*(lock, nil) >= F because [14], by (Select) 50] eqt(lock, a) > F because [51], by definition 51] eqt*(lock, a) >= F because [19], by (Select) 52] eqt(lock, lock) > _|_ because [53], by definition 53] eqt*(lock, lock) >= _|_ by (Bot) 54] eqt(lock, mcrlrecord) > F because [55], by definition 55] eqt*(lock, mcrlrecord) >= F because [19], by (Select) 56] eqt(lock, release) > F because [57], by definition 57] eqt*(lock, release) >= F because [19], by (Select) 58] eqt(lock, request) >= F because [59], by (Star) 59] eqt*(lock, request) >= F because [23], by (Select) 60] eqt(lock, resource) > F because [61], by definition 61] eqt*(lock, resource) >= F because [62], by (Select) 62] resource >= F because [63], by (Star) 63] resource* >= F because resource > F, by (Copy) 64] eqt(lock, tag) > F because [65], by definition 65] eqt*(lock, tag) >= F because [38], by (Select) 66] eqt(lock, true) >= F because [67], by (Star) 67] eqt*(lock, true) >= F because [68], by (Select) 68] true >= F because [69], by (Star) 69] true* >= F because true > F, by (Copy) 70] eqt(lock, pid(X)) >= F because [71], by (Star) 71] eqt*(lock, pid(X)) >= F because [19], by (Select) 72] eqt(locker, mcrlrecord) >= F because [73], by (Star) 73] eqt*(locker, mcrlrecord) >= F because [74], by (Select) 74] locker >= F because locker = F, by (Fun) 75] eqt(locker, ok) >= F because [76], by (Star) 76] eqt*(locker, ok) >= F because [77], by (Select) 77] ok >= F because [78], by (Star) 78] ok* >= F because ok > F, by (Copy) 79] eqt(locker, release) > F because [80], by definition 80] eqt*(locker, release) >= F because [74], by (Select) 81] eqt(locker, undefined) > F because [82], by definition 82] eqt*(locker, undefined) >= F because [74], by (Select) 83] eqt(mcrlrecord, nil) >= F because [84], by (Star) 84] eqt*(mcrlrecord, nil) >= F because [14], by (Select) 85] eqt(mcrlrecord, lock) > F because [86], by definition 86] eqt*(mcrlrecord, lock) >= F because [19], by (Select) 87] eqt(mcrlrecord, locker) >= F because [88], by (Star) 88] eqt*(mcrlrecord, locker) >= F because [74], by (Select) 89] eqt(mcrlrecord, mcrlrecord) >= _|_ by (Bot) 90] eqt(mcrlrecord, request) > F because [91], by definition 91] eqt*(mcrlrecord, request) >= F because [23], by (Select) 92] eqt(ok, undefined) > F because [93], by definition 93] eqt*(ok, undefined) >= F because [77], by (Select) 94] eqt(ok, int(X)) > F because [95], by definition 95] eqt*(ok, int(X)) >= F because [77], by (Select) 96] eqt(ok, cons(X, Y)) > F because [97], by definition 97] eqt*(ok, cons(X, Y)) >= F because [77], by (Select) 98] eqt(ok, tuple(X, Y)) > F because [99], by definition 99] eqt*(ok, tuple(X, Y)) >= F because [77], by (Select) 100] eqt(ok, tuplenil(X)) > F because [101], by definition 101] eqt*(ok, tuplenil(X)) >= F because [102], by (Select) 102] tuplenil(X) >= F because [103], by (Star) 103] tuplenil*(X) >= F because tuplenil = F and tuplenil in Mul, by (Stat) 104] eqt(pending, a) > F because [105], by definition 105] eqt*(pending, a) >= F because [30], by (Select) 106] eqt(pending, lock) >= F because [107], by (Star) 107] eqt*(pending, lock) >= F because [19], by (Select) 108] eqt(pending, locker) > F because [109], by definition 109] eqt*(pending, locker) >= F because [30], by (Select) 110] eqt(pending, pending) >= _|_ by (Bot) 111] eqt(pending, release) >= F because [112], by (Star) 112] eqt*(pending, release) >= F because [30], by (Select) 113] eqt(pending, resource) > F because [114], by definition 114] eqt*(pending, resource) >= F because [30], by (Select) 115] eqt(pending, tag) >= F because [116], by (Star) 116] eqt*(pending, tag) >= F because [30], by (Select) 117] eqt(pending, true) >= F because [118], by (Star) 118] eqt*(pending, true) >= F because [30], by (Select) 119] eqt(release, excl) > F because [120], by definition 120] eqt*(release, excl) >= F because [27], by (Select) 121] eqt(release, lock) >= F because [122], by (Star) 122] eqt*(release, lock) >= F because [19], by (Select) 123] eqt(request, release) > F because [124], by definition 124] eqt*(request, release) >= F because [23], by (Select) 125] eqt(request, request) >= _|_ by (Bot) 126] eqt(request, resource) >= F because [127], by (Star) 127] eqt*(request, resource) >= F because [62], by (Select) 128] eqt(request, tag) > F because [129], by definition 129] eqt*(request, tag) >= F because [23], by (Select) 130] eqt(request, pid(X)) > F because [131], by definition 131] eqt*(request, pid(X)) >= F because [23], by (Select) 132] eqt(resource, _|_) >= F because [133], by (Star) 133] eqt*(resource, _|_) >= F because [62], by (Select) 134] eqt(resource, locker) > F because [135], by definition 135] eqt*(resource, locker) >= F because [74], by (Select) 136] eqt(resource, request) >= F because [137], by (Star) 137] eqt*(resource, request) >= F because [23], by (Select) 138] eqt(resource, cons(X, Y)) >= F because [139], by (Star) 139] eqt*(resource, cons(X, Y)) >= F because [62], by (Select) 140] eqt(tag, nil) >= F because [141], by (Star) 141] eqt*(tag, nil) >= F because [14], by (Select) 142] eqt(tag, a) > F because [143], by definition 143] eqt*(tag, a) >= F because [38], by (Select) 144] eqt(tag, _|_) >= F because [145], by (Star) 145] eqt*(tag, _|_) >= F because [38], by (Select) 146] eqt(tag, locker) >= F because [147], by (Star) 147] eqt*(tag, locker) >= F because [38], by (Select) 148] eqt(tag, release) > F because [149], by definition 149] eqt*(tag, release) >= F because [38], by (Select) 150] eqt(tag, request) >= F because [151], by (Star) 151] eqt*(tag, request) >= F because [23], by (Select) 152] eqt(tag, true) >= F because [153], by (Star) 153] eqt*(tag, true) >= F because [38], by (Select) 154] eqt(tag, int(X)) >= F because [155], by (Star) 155] eqt*(tag, int(X)) >= F because [38], by (Select) 156] eqt(tag, tuple(X, Y)) > F because [157], by definition 157] eqt*(tag, tuple(X, Y)) >= F because [38], by (Select) 158] eqt(true, lock) > F because [159], by definition 159] eqt*(true, lock) >= F because [68], by (Select) 160] eqt(true, release) > F because [161], by definition 161] eqt*(true, release) >= F because [68], by (Select) 162] eqt(true, tag) > F because [163], by definition 163] eqt*(true, tag) >= F because [68], by (Select) 164] eqt(true, true) >= _|_ by (Bot) 165] eqt(true, undefined) > F because [166], by definition 166] eqt*(true, undefined) >= F because [68], by (Select) 167] eqt(true, cons(X, Y)) > F because [168], by definition 168] eqt*(true, cons(X, Y)) >= F because [68], by (Select) 169] eqt(undefined, tuplenil(X)) > F because [170], by definition 170] eqt*(undefined, tuplenil(X)) >= F because [102], by (Select) 171] eqt(pid(X), ok) > F because [172], by definition 172] eqt*(pid(X), ok) >= F because [77], by (Select) 173] eqt(pid(X), pending) >= F because [174], by (Star) 174] eqt*(pid(X), pending) >= F because [30], by (Select) 175] eqt(pid(X), true) > F because [176], by definition 176] eqt*(pid(X), true) >= F because [68], by (Select) 177] eqt(int(X), locker) >= F because [178], by (Star) 178] eqt*(int(X), locker) >= F because [179], by (Select) 179] int(X) >= F because [180], by (Star) 180] int*(X) >= F because int > F, by (Copy) 181] eqt(int(X), mcrlrecord) >= F because [182], by (Star) 182] eqt*(int(X), mcrlrecord) >= F because [179], by (Select) 183] eqt(int(X), release) >= F because [184], by (Star) 184] eqt*(int(X), release) >= F because [179], by (Select) 185] eqt(int(X), resource) >= F because [186], by (Star) 186] eqt*(int(X), resource) >= F because [62], by (Select) 187] eqt(int(X), true) >= F because [188], by (Star) 188] eqt*(int(X), true) >= F because [68], by (Select) 189] eqt(int(X), undefined) >= F because [190], by (Star) 190] eqt*(int(X), undefined) >= F because [179], by (Select) 191] eqt(cons(X, Y), true) >= F because [192], by (Star) 192] eqt*(cons(X, Y), true) >= F because [68], by (Select) 193] eqt(cons(X, Y), tuplenil(Z)) >= F because [194], by (Star) 194] eqt*(cons(X, Y), tuplenil(Z)) >= F because [102], by (Select) 195] eqt(tuple(X, Y), nil) >= F because [196], by (Star) 196] eqt*(tuple(X, Y), nil) >= F because [14], by (Select) 197] eqt(tuple(X, Y), a) >= F because [198], by (Star) 198] eqt*(tuple(X, Y), a) >= F because [199], by (Select) 199] tuple(X, Y) >= F because [200], by (Star) 200] tuple*(X, Y) >= F because tuple = F and tuple in Mul, by (Stat) 201] eqt(tuple(X, Y), _|_) >= F because [202], by (Star) 202] eqt*(tuple(X, Y), _|_) >= F because [199], by (Select) 203] eqt(tuple(X, Y), lock) > F because [204], by definition 204] eqt*(tuple(X, Y), lock) >= F because [19], by (Select) 205] eqt(tuple(X, Y), locker) >= F because [206], by (Star) 206] eqt*(tuple(X, Y), locker) >= F because [199], by (Select) 207] eqt(tuple(X, Y), request) >= F because [208], by (Star) 208] eqt*(tuple(X, Y), request) >= F because [23], by (Select) 209] eqt(tuple(X, Y), resource) >= F because [210], by (Star) 210] eqt*(tuple(X, Y), resource) >= F because [62], by (Select) 211] eqt(tuple(X, Y), pid(Z)) > F because [212], by definition 212] eqt*(tuple(X, Y), pid(Z)) >= F because [199], by (Select) 213] eqt(tuplenil(X), nil) >= F because [214], by (Star) 214] eqt*(tuplenil(X), nil) >= F because [14], by (Select) 215] eqt(tuplenil(X), locker) > F because [216], by definition 216] eqt*(tuplenil(X), locker) >= F because [217], by (Select) 217] tuplenil(X) >= F because [218], by (Star) 218] tuplenil*(X) >= F because tuplenil = F and tuplenil in Mul, by (Stat) 219] eqt(tuplenil(X), mcrlrecord) >= F because [220], by (Star) 220] eqt*(tuplenil(X), mcrlrecord) >= F because [217], by (Select) 221] eqt(tuplenil(X), resource) > F because [222], by definition 222] eqt*(tuplenil(X), resource) >= F because [62], by (Select) 223] eqt(tuplenil(X), true) > F because [224], by definition 224] eqt*(tuplenil(X), true) >= F because [68], by (Select) 225] eqt(tuplenil(X), undefined) > F because [226], by definition 226] eqt*(tuplenil(X), undefined) >= F because [217], by (Select) 227] eqt(tuplenil(X), pid(Y)) > F because [228], by definition 228] eqt*(tuplenil(X), pid(Y)) >= F because [217], by (Select) 229] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [230], by (Star) 230] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [231] and [238], by (Copy) 231] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [232] and [236], by (Copy) 232] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [233], by (Select) 233] cons(X, Y) >= X because [234], by (Star) 234] cons*(X, Y) >= X because [235], by (Select) 235] X >= X by (Meta) 236] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [237], by (Select) 237] Z >= Z by (Meta) 238] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [239] and [242], by (Stat) 239] cons(X, Y) > Y because [240], by definition 240] cons*(X, Y) >= Y because [241], by (Select) 241] Y >= Y by (Meta) 242] Z >= Z by (Meta) 243] case4(X, Y, Z) >= _|_ by (Bot) 244] case9(X, Y, Z, true) >= true because [245], by (Star) 245] case9*(X, Y, Z, true) >= true because [246], by (Select) 246] true >= true by (Fun) 247] tops(stack(X, Y)) >= X because [248], by (Star) 248] tops*(stack(X, Y)) >= X because [249], by (Select) 249] stack(X, Y) >= X because [250], by (Star) 250] stack*(X, Y) >= X because [251], by (Select) 251] X >= X by (Meta) 252] istops(X, empty) >= F because [253], by (Star) 253] istops*(X, empty) >= F because istops > F, by (Copy) 254] eqc(nocalls, nocalls) >= _|_ by (Bot) 255] eqc(calls(X, Y, Z), nocalls) >= F because [256], by (Star) 256] eqc*(calls(X, Y, Z), nocalls) >= F because eqc > F, by (Copy) We can thus remove the following rules: and(F, X) => F eqt(excl, lock) => F eqt(excl, pending) => F eqt(lock, a) => F eqt(lock, lock) => T eqt(lock, mcrlrecord) => F eqt(lock, release) => F eqt(lock, resource) => F eqt(lock, tag) => F eqt(locker, release) => F eqt(locker, undefined) => F eqt(mcrlrecord, lock) => F eqt(mcrlrecord, request) => F eqt(ok, undefined) => F eqt(ok, int(X)) => F eqt(ok, cons(X, Y)) => F eqt(ok, tuple(X, Y)) => F eqt(ok, tuplenil(X)) => F eqt(pending, a) => F eqt(pending, locker) => F eqt(pending, resource) => F eqt(release, excl) => F eqt(request, release) => F eqt(request, tag) => F eqt(request, pid(X)) => F eqt(resource, locker) => F eqt(tag, a) => F eqt(tag, release) => F eqt(tag, tuple(X, Y)) => F eqt(true, lock) => F eqt(true, release) => F eqt(true, tag) => F eqt(true, undefined) => F eqt(true, cons(X, Y)) => F eqt(undefined, tuplenil(X)) => F eqt(pid(X), ok) => F eqt(pid(X), true) => F eqt(tuple(X, Y), lock) => F eqt(tuple(X, Y), pid(Z)) => F eqt(tuplenil(X), locker) => F eqt(tuplenil(X), resource) => F eqt(tuplenil(X), true) => F eqt(tuplenil(X), undefined) => F eqt(tuplenil(X), pid(Y)) => F We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): or(F, T) >? T or(T, F) >? T or(F, F) >? F and(X, F) >? F not(F) >? T eq(T, T) >? T eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(a, lock) >? F eqt(a, request) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, tag) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(mcrlrecord, nil) >? F eqt(mcrlrecord, locker) >? F eqt(mcrlrecord, mcrlrecord) >? T eqt(pending, lock) >? F eqt(pending, pending) >? T eqt(pending, release) >? F eqt(pending, tag) >? F eqt(pending, true) >? F eqt(release, lock) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(resource, false) >? F eqt(resource, request) >? F eqt(resource, cons(X, Y)) >? F eqt(tag, nil) >? F eqt(tag, false) >? F eqt(tag, locker) >? F eqt(tag, request) >? F eqt(tag, true) >? F eqt(tag, int(X)) >? F eqt(true, true) >? T eqt(pid(X), pending) >? F eqt(int(X), locker) >? F eqt(int(X), mcrlrecord) >? F eqt(int(X), release) >? F eqt(int(X), resource) >? F eqt(int(X), true) >? F eqt(int(X), undefined) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F eqt(tuplenil(X), mcrlrecord) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false case9(X, Y, Z, true) >? true tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[T]] = _|_ [[not(x_1)]] = x_1 [[pid(x_1)]] = x_1 [[true]] = _|_ We choose Lex = {} and Mul = {F, a, and, calls, case4, case9, cons, empty, eq, eqc, eqt, excl, false, int, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, ok, or, pending, release, request, resource, stack, tag, tops, tuple, tuplenil, undefined}, and the following precedence: tops > stack > excl > case9 > case4 > nil > undefined > eqt > release > false > request > F = calls = istops = locker > pending > eqc > resource > tuplenil > mcrlrecord > a > int > locker2!6220map!6220promote!6220pending > tag > cons > eq > empty > or > tuple > lock > locker2!6220promote!6220pending > and > nocalls > ok Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: or(F, _|_) > _|_ or(_|_, F) > _|_ or(F, F) > F and(X, F) >= F F >= _|_ eq(_|_, _|_) > _|_ eqt(nil, X) >= F eqt(nil, int(X)) >= F eqt(a, lock) >= F eqt(a, request) >= F eqt(excl, request) >= F eqt(excl, resource) >= F eqt(excl, tag) > F eqt(excl, undefined) >= F eqt(excl, X) >= F eqt(false, tuple(X, Y)) >= F eqt(lock, nil) >= F eqt(lock, request) >= F eqt(lock, _|_) >= F eqt(lock, X) >= F eqt(locker, mcrlrecord) >= F eqt(locker, ok) >= F eqt(mcrlrecord, nil) >= F eqt(mcrlrecord, locker) > F eqt(mcrlrecord, mcrlrecord) > _|_ eqt(pending, lock) > F eqt(pending, pending) >= _|_ eqt(pending, release) > F eqt(pending, tag) >= F eqt(pending, _|_) > F eqt(release, lock) >= F eqt(request, request) >= _|_ eqt(request, resource) >= F eqt(resource, false) >= F eqt(resource, request) > F eqt(resource, cons(X, Y)) > F eqt(tag, nil) >= F eqt(tag, false) > F eqt(tag, locker) >= F eqt(tag, request) >= F eqt(tag, _|_) > F eqt(tag, int(X)) > F eqt(_|_, _|_) >= _|_ eqt(X, pending) >= F eqt(int(X), locker) >= F eqt(int(X), mcrlrecord) > F eqt(int(X), release) >= F eqt(int(X), resource) > F eqt(int(X), _|_) >= F eqt(int(X), undefined) > F eqt(cons(X, Y), _|_) >= F eqt(cons(X, Y), tuplenil(Z)) >= F eqt(tuple(X, Y), nil) >= F eqt(tuple(X, Y), a) >= F eqt(tuple(X, Y), false) >= F eqt(tuple(X, Y), locker) >= F eqt(tuple(X, Y), request) >= F eqt(tuple(X, Y), resource) >= F eqt(tuplenil(X), nil) >= F eqt(tuplenil(X), mcrlrecord) > F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= false case9(X, Y, Z, _|_) >= _|_ tops(stack(X, Y)) >= X istops(X, empty) >= F eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) >= F With these choices, we have: 1] or(F, _|_) > _|_ because [2], by definition 2] or*(F, _|_) >= _|_ by (Bot) 3] or(_|_, F) > _|_ because [4], by definition 4] or*(_|_, F) >= _|_ by (Bot) 5] or(F, F) > F because [6], by definition 6] or*(F, F) >= F because [7], by (Select) 7] F >= F by (Fun) 8] and(X, F) >= F because [9], by (Star) 9] and*(X, F) >= F because [7], by (Select) 10] F >= _|_ by (Bot) 11] eq(_|_, _|_) > _|_ because [12], by definition 12] eq*(_|_, _|_) >= _|_ by (Bot) 13] eqt(nil, X) >= F because [14], by (Star) 14] eqt*(nil, X) >= F because eqt > F, by (Copy) 15] eqt(nil, int(X)) >= F because [16], by (Star) 16] eqt*(nil, int(X)) >= F because eqt > F, by (Copy) 17] eqt(a, lock) >= F because [18], by (Star) 18] eqt*(a, lock) >= F because eqt > F, by (Copy) 19] eqt(a, request) >= F because [20], by (Star) 20] eqt*(a, request) >= F because eqt > F, by (Copy) 21] eqt(excl, request) >= F because [22], by (Star) 22] eqt*(excl, request) >= F because [23], by (Select) 23] request >= F because [24], by (Star) 24] request* >= F because request > F, by (Copy) 25] eqt(excl, resource) >= F because [26], by (Star) 26] eqt*(excl, resource) >= F because eqt > F, by (Copy) 27] eqt(excl, tag) > F because [28], by definition 28] eqt*(excl, tag) >= F because eqt > F, by (Copy) 29] eqt(excl, undefined) >= F because [30], by (Star) 30] eqt*(excl, undefined) >= F because eqt > F, by (Copy) 31] eqt(excl, X) >= F because [32], by (Star) 32] eqt*(excl, X) >= F because eqt > F, by (Copy) 33] eqt(false, tuple(X, Y)) >= F because [34], by (Star) 34] eqt*(false, tuple(X, Y)) >= F because [35], by (Select) 35] false >= F because [36], by (Star) 36] false* >= F because false > F, by (Copy) 37] eqt(lock, nil) >= F because [38], by (Star) 38] eqt*(lock, nil) >= F because eqt > F, by (Copy) 39] eqt(lock, request) >= F because [40], by (Star) 40] eqt*(lock, request) >= F because [23], by (Select) 41] eqt(lock, _|_) >= F because [42], by (Star) 42] eqt*(lock, _|_) >= F because eqt > F, by (Copy) 43] eqt(lock, X) >= F because [44], by (Star) 44] eqt*(lock, X) >= F because eqt > F, by (Copy) 45] eqt(locker, mcrlrecord) >= F because [46], by (Star) 46] eqt*(locker, mcrlrecord) >= F because eqt > F, by (Copy) 47] eqt(locker, ok) >= F because [48], by (Star) 48] eqt*(locker, ok) >= F because eqt > F, by (Copy) 49] eqt(mcrlrecord, nil) >= F because [50], by (Star) 50] eqt*(mcrlrecord, nil) >= F because [51], by (Select) 51] nil >= F because [52], by (Star) 52] nil* >= F because nil > F, by (Copy) 53] eqt(mcrlrecord, locker) > F because [54], by definition 54] eqt*(mcrlrecord, locker) >= F because eqt > F, by (Copy) 55] eqt(mcrlrecord, mcrlrecord) > _|_ because [56], by definition 56] eqt*(mcrlrecord, mcrlrecord) >= _|_ by (Bot) 57] eqt(pending, lock) > F because [58], by definition 58] eqt*(pending, lock) >= F because eqt > F, by (Copy) 59] eqt(pending, pending) >= _|_ by (Bot) 60] eqt(pending, release) > F because [61], by definition 61] eqt*(pending, release) >= F because eqt > F, by (Copy) 62] eqt(pending, tag) >= F because [63], by (Star) 63] eqt*(pending, tag) >= F because eqt > F, by (Copy) 64] eqt(pending, _|_) > F because [65], by definition 65] eqt*(pending, _|_) >= F because eqt > F, by (Copy) 66] eqt(release, lock) >= F because [67], by (Star) 67] eqt*(release, lock) >= F because eqt > F, by (Copy) 68] eqt(request, request) >= _|_ by (Bot) 69] eqt(request, resource) >= F because [70], by (Star) 70] eqt*(request, resource) >= F because eqt > F, by (Copy) 71] eqt(resource, false) >= F because [72], by (Star) 72] eqt*(resource, false) >= F because [35], by (Select) 73] eqt(resource, request) > F because [74], by definition 74] eqt*(resource, request) >= F because eqt > F, by (Copy) 75] eqt(resource, cons(X, Y)) > F because [76], by definition 76] eqt*(resource, cons(X, Y)) >= F because eqt > F, by (Copy) 77] eqt(tag, nil) >= F because [78], by (Star) 78] eqt*(tag, nil) >= F because eqt > F, by (Copy) 79] eqt(tag, false) > F because [80], by definition 80] eqt*(tag, false) >= F because eqt > F, by (Copy) 81] eqt(tag, locker) >= F because [82], by (Star) 82] eqt*(tag, locker) >= F because [83], by (Select) 83] locker >= F because locker = F, by (Fun) 84] eqt(tag, request) >= F because [85], by (Star) 85] eqt*(tag, request) >= F because eqt > F, by (Copy) 86] eqt(tag, _|_) > F because [87], by definition 87] eqt*(tag, _|_) >= F because eqt > F, by (Copy) 88] eqt(tag, int(X)) > F because [89], by definition 89] eqt*(tag, int(X)) >= F because eqt > F, by (Copy) 90] eqt(_|_, _|_) >= _|_ by (Bot) 91] eqt(X, pending) >= F because [92], by (Star) 92] eqt*(X, pending) >= F because eqt > F, by (Copy) 93] eqt(int(X), locker) >= F because [94], by (Star) 94] eqt*(int(X), locker) >= F because [83], by (Select) 95] eqt(int(X), mcrlrecord) > F because [96], by definition 96] eqt*(int(X), mcrlrecord) >= F because eqt > F, by (Copy) 97] eqt(int(X), release) >= F because [98], by (Star) 98] eqt*(int(X), release) >= F because eqt > F, by (Copy) 99] eqt(int(X), resource) > F because [100], by definition 100] eqt*(int(X), resource) >= F because eqt > F, by (Copy) 101] eqt(int(X), _|_) >= F because [102], by (Star) 102] eqt*(int(X), _|_) >= F because eqt > F, by (Copy) 103] eqt(int(X), undefined) > F because [104], by definition 104] eqt*(int(X), undefined) >= F because eqt > F, by (Copy) 105] eqt(cons(X, Y), _|_) >= F because [106], by (Star) 106] eqt*(cons(X, Y), _|_) >= F because eqt > F, by (Copy) 107] eqt(cons(X, Y), tuplenil(Z)) >= F because [108], by (Star) 108] eqt*(cons(X, Y), tuplenil(Z)) >= F because eqt > F, by (Copy) 109] eqt(tuple(X, Y), nil) >= F because [110], by (Star) 110] eqt*(tuple(X, Y), nil) >= F because eqt > F, by (Copy) 111] eqt(tuple(X, Y), a) >= F because [112], by (Star) 112] eqt*(tuple(X, Y), a) >= F because eqt > F, by (Copy) 113] eqt(tuple(X, Y), false) >= F because [114], by (Star) 114] eqt*(tuple(X, Y), false) >= F because [35], by (Select) 115] eqt(tuple(X, Y), locker) >= F because [116], by (Star) 116] eqt*(tuple(X, Y), locker) >= F because [83], by (Select) 117] eqt(tuple(X, Y), request) >= F because [118], by (Star) 118] eqt*(tuple(X, Y), request) >= F because [23], by (Select) 119] eqt(tuple(X, Y), resource) >= F because [120], by (Star) 120] eqt*(tuple(X, Y), resource) >= F because eqt > F, by (Copy) 121] eqt(tuplenil(X), nil) >= F because [122], by (Star) 122] eqt*(tuplenil(X), nil) >= F because eqt > F, by (Copy) 123] eqt(tuplenil(X), mcrlrecord) > F because [124], by definition 124] eqt*(tuplenil(X), mcrlrecord) >= F because eqt > F, by (Copy) 125] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [126], by (Star) 126] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [127] and [134], by (Copy) 127] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [128] and [132], by (Copy) 128] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [129], by (Select) 129] cons(X, Y) >= X because [130], by (Star) 130] cons*(X, Y) >= X because [131], by (Select) 131] X >= X by (Meta) 132] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [133], by (Select) 133] Z >= Z by (Meta) 134] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [135] and [138], by (Stat) 135] cons(X, Y) > Y because [136], by definition 136] cons*(X, Y) >= Y because [137], by (Select) 137] Y >= Y by (Meta) 138] Z >= Z by (Meta) 139] case4(X, Y, Z) >= false because [140], by (Star) 140] case4*(X, Y, Z) >= false because case4 > false, by (Copy) 141] case9(X, Y, Z, _|_) >= _|_ by (Bot) 142] tops(stack(X, Y)) >= X because [143], by (Star) 143] tops*(stack(X, Y)) >= X because [144], by (Select) 144] stack(X, Y) >= X because [145], by (Star) 145] stack*(X, Y) >= X because [146], by (Select) 146] X >= X by (Meta) 147] istops(X, empty) >= F because [148], by (Star) 148] istops*(X, empty) >= F because istops = F and istops in Mul, by (Stat) 149] eqc(nocalls, nocalls) >= _|_ by (Bot) 150] eqc(calls(X, Y, Z), nocalls) >= F because [151], by (Star) 151] eqc*(calls(X, Y, Z), nocalls) >= F because [152], by (Select) 152] calls(X, Y, Z) >= F because [153], by (Star) 153] calls*(X, Y, Z) >= F because calls = F and calls in Mul, by (Stat) We can thus remove the following rules: or(F, T) => T or(T, F) => T or(F, F) => F eq(T, T) => T eqt(excl, tag) => F eqt(mcrlrecord, locker) => F eqt(mcrlrecord, mcrlrecord) => T eqt(pending, lock) => F eqt(pending, release) => F eqt(pending, true) => F eqt(resource, request) => F eqt(resource, cons(X, Y)) => F eqt(tag, false) => F eqt(tag, true) => F eqt(tag, int(X)) => F eqt(int(X), mcrlrecord) => F eqt(int(X), resource) => F eqt(int(X), undefined) => F eqt(tuplenil(X), mcrlrecord) => F We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): and(X, F) >? F not(F) >? T eqt(nil, pid(X)) >? F eqt(nil, int(X)) >? F eqt(a, lock) >? F eqt(a, request) >? F eqt(excl, request) >? F eqt(excl, resource) >? F eqt(excl, undefined) >? F eqt(excl, pid(X)) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, mcrlrecord) >? F eqt(locker, ok) >? F eqt(mcrlrecord, nil) >? F eqt(pending, pending) >? T eqt(pending, tag) >? F eqt(release, lock) >? F eqt(request, request) >? T eqt(request, resource) >? F eqt(resource, false) >? F eqt(tag, nil) >? F eqt(tag, locker) >? F eqt(tag, request) >? F eqt(true, true) >? T eqt(pid(X), pending) >? F eqt(int(X), locker) >? F eqt(int(X), release) >? F eqt(int(X), true) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), locker) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false case9(X, Y, Z, true) >? true tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T eqc(calls(X, Y, Z), nocalls) >? F about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[int(x_1)]] = x_1 [[pid(x_1)]] = x_1 [[true]] = _|_ [[tuplenil(x_1)]] = x_1 We choose Lex = {} and Mul = {a, and, calls, case4, case9, cons, empty, eqc, eqt, excl, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, not, ok, pending, release, request, resource, stack, tag, tops, tuple, undefined}, and the following precedence: stack > nil > istops > ok > case4 > undefined > tag > locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending > locker > mcrlrecord > and > release > nocalls > eqt > excl > tuple > cons > lock > tops > request > case9 > a > calls > eqc > resource > empty > pending > not Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: and(X, _|_) >= _|_ not(_|_) >= _|_ eqt(nil, X) > _|_ eqt(nil, X) >= _|_ eqt(a, lock) >= _|_ eqt(a, request) >= _|_ eqt(excl, request) > _|_ eqt(excl, resource) >= _|_ eqt(excl, undefined) >= _|_ eqt(excl, X) > _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(lock, nil) >= _|_ eqt(lock, request) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, X) >= _|_ eqt(locker, mcrlrecord) > _|_ eqt(locker, ok) >= _|_ eqt(mcrlrecord, nil) >= _|_ eqt(pending, pending) >= _|_ eqt(pending, tag) >= _|_ eqt(release, lock) >= _|_ eqt(request, request) >= _|_ eqt(request, resource) > _|_ eqt(resource, _|_) >= _|_ eqt(tag, nil) > _|_ eqt(tag, locker) >= _|_ eqt(tag, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(X, pending) > _|_ eqt(X, locker) > _|_ eqt(X, release) >= _|_ eqt(X, _|_) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), locker) > _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(X, nil) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ case9(X, Y, Z, _|_) >= _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ eqc(calls(X, Y, Z), nocalls) > _|_ With these choices, we have: 1] and(X, _|_) >= _|_ by (Bot) 2] not(_|_) >= _|_ by (Bot) 3] eqt(nil, X) > _|_ because [4], by definition 4] eqt*(nil, X) >= _|_ by (Bot) 5] eqt(nil, X) >= _|_ by (Bot) 6] eqt(a, lock) >= _|_ by (Bot) 7] eqt(a, request) >= _|_ by (Bot) 8] eqt(excl, request) > _|_ because [9], by definition 9] eqt*(excl, request) >= _|_ by (Bot) 10] eqt(excl, resource) >= _|_ by (Bot) 11] eqt(excl, undefined) >= _|_ by (Bot) 12] eqt(excl, X) > _|_ because [13], by definition 13] eqt*(excl, X) >= _|_ by (Bot) 14] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 15] eqt(lock, nil) >= _|_ by (Bot) 16] eqt(lock, request) >= _|_ by (Bot) 17] eqt(lock, _|_) >= _|_ by (Bot) 18] eqt(lock, X) >= _|_ by (Bot) 19] eqt(locker, mcrlrecord) > _|_ because [20], by definition 20] eqt*(locker, mcrlrecord) >= _|_ by (Bot) 21] eqt(locker, ok) >= _|_ by (Bot) 22] eqt(mcrlrecord, nil) >= _|_ by (Bot) 23] eqt(pending, pending) >= _|_ by (Bot) 24] eqt(pending, tag) >= _|_ by (Bot) 25] eqt(release, lock) >= _|_ by (Bot) 26] eqt(request, request) >= _|_ by (Bot) 27] eqt(request, resource) > _|_ because [28], by definition 28] eqt*(request, resource) >= _|_ by (Bot) 29] eqt(resource, _|_) >= _|_ by (Bot) 30] eqt(tag, nil) > _|_ because [31], by definition 31] eqt*(tag, nil) >= _|_ by (Bot) 32] eqt(tag, locker) >= _|_ by (Bot) 33] eqt(tag, request) >= _|_ by (Bot) 34] eqt(_|_, _|_) >= _|_ by (Bot) 35] eqt(X, pending) > _|_ because [36], by definition 36] eqt*(X, pending) >= _|_ by (Bot) 37] eqt(X, locker) > _|_ because [38], by definition 38] eqt*(X, locker) >= _|_ by (Bot) 39] eqt(X, release) >= _|_ by (Bot) 40] eqt(X, _|_) >= _|_ by (Bot) 41] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 42] eqt(cons(X, Y), Z) >= _|_ by (Bot) 43] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 44] eqt(tuple(X, Y), a) >= _|_ by (Bot) 45] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 46] eqt(tuple(X, Y), locker) > _|_ because [47], by definition 47] eqt*(tuple(X, Y), locker) >= _|_ by (Bot) 48] eqt(tuple(X, Y), request) >= _|_ by (Bot) 49] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 50] eqt(X, nil) >= _|_ by (Bot) 51] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [52], by (Star) 52] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [53] and [60], by (Copy) 53] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [54] and [58], by (Copy) 54] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [55], by (Select) 55] cons(X, Y) >= X because [56], by (Star) 56] cons*(X, Y) >= X because [57], by (Select) 57] X >= X by (Meta) 58] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [59], by (Select) 59] Z >= Z by (Meta) 60] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [61] and [64], by (Stat) 61] cons(X, Y) > Y because [62], by definition 62] cons*(X, Y) >= Y because [63], by (Select) 63] Y >= Y by (Meta) 64] Z >= Z by (Meta) 65] case4(X, Y, Z) >= _|_ by (Bot) 66] case9(X, Y, Z, _|_) >= _|_ by (Bot) 67] tops(stack(X, Y)) >= X because [68], by (Star) 68] tops*(stack(X, Y)) >= X because [69], by (Select) 69] stack(X, Y) >= X because [70], by (Star) 70] stack*(X, Y) >= X because [71], by (Select) 71] X >= X by (Meta) 72] istops(X, empty) >= _|_ by (Bot) 73] eqc(nocalls, nocalls) >= _|_ by (Bot) 74] eqc(calls(X, Y, Z), nocalls) > _|_ because [75], by definition 75] eqc*(calls(X, Y, Z), nocalls) >= _|_ by (Bot) We can thus remove the following rules: eqt(nil, pid(X)) => F eqt(excl, request) => F eqt(excl, pid(X)) => F eqt(locker, mcrlrecord) => F eqt(request, resource) => F eqt(tag, nil) => F eqt(pid(X), pending) => F eqt(int(X), locker) => F eqt(tuple(X, Y), locker) => F eqc(calls(X, Y, Z), nocalls) => F We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): and(X, F) >? F not(F) >? T eqt(nil, int(X)) >? F eqt(a, lock) >? F eqt(a, request) >? F eqt(excl, resource) >? F eqt(excl, undefined) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, ok) >? F eqt(mcrlrecord, nil) >? F eqt(pending, pending) >? T eqt(pending, tag) >? F eqt(release, lock) >? F eqt(request, request) >? T eqt(resource, false) >? F eqt(tag, locker) >? F eqt(tag, request) >? F eqt(true, true) >? T eqt(int(X), release) >? F eqt(int(X), true) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false case9(X, Y, Z, true) >? true tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[pid(x_1)]] = x_1 [[true]] = _|_ [[tuplenil(x_1)]] = x_1 We choose Lex = {} and Mul = {a, and, case4, case9, cons, empty, eqc, eqt, excl, int, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, not, ok, pending, release, request, resource, stack, tag, tops, tuple, undefined}, and the following precedence: empty > eqt > tag > resource > lock > a > and > istops > locker2!6220map!6220promote!6220pending > tuple > locker2!6220promote!6220pending > cons > int > stack > eqc > pending > case4 > ok > tops > release > nocalls > case9 > undefined > excl > mcrlrecord > nil > not > request > locker Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: and(X, _|_) >= _|_ not(_|_) >= _|_ eqt(nil, int(X)) >= _|_ eqt(a, lock) >= _|_ eqt(a, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, undefined) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(lock, nil) >= _|_ eqt(lock, request) >= _|_ eqt(lock, _|_) >= _|_ eqt(lock, X) >= _|_ eqt(locker, ok) >= _|_ eqt(mcrlrecord, nil) >= _|_ eqt(pending, pending) >= _|_ eqt(pending, tag) >= _|_ eqt(release, lock) >= _|_ eqt(request, request) >= _|_ eqt(resource, _|_) >= _|_ eqt(tag, locker) >= _|_ eqt(tag, request) >= _|_ eqt(_|_, _|_) >= _|_ eqt(int(X), release) >= _|_ eqt(int(X), _|_) >= _|_ eqt(cons(X, Y), _|_) >= _|_ eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), a) >= _|_ eqt(tuple(X, Y), _|_) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(X, nil) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ case9(X, Y, Z, _|_) > _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ With these choices, we have: 1] and(X, _|_) >= _|_ by (Bot) 2] not(_|_) >= _|_ by (Bot) 3] eqt(nil, int(X)) >= _|_ by (Bot) 4] eqt(a, lock) >= _|_ by (Bot) 5] eqt(a, request) >= _|_ by (Bot) 6] eqt(excl, resource) >= _|_ by (Bot) 7] eqt(excl, undefined) >= _|_ by (Bot) 8] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 9] eqt(lock, nil) >= _|_ by (Bot) 10] eqt(lock, request) >= _|_ by (Bot) 11] eqt(lock, _|_) >= _|_ by (Bot) 12] eqt(lock, X) >= _|_ by (Bot) 13] eqt(locker, ok) >= _|_ by (Bot) 14] eqt(mcrlrecord, nil) >= _|_ by (Bot) 15] eqt(pending, pending) >= _|_ by (Bot) 16] eqt(pending, tag) >= _|_ by (Bot) 17] eqt(release, lock) >= _|_ by (Bot) 18] eqt(request, request) >= _|_ by (Bot) 19] eqt(resource, _|_) >= _|_ by (Bot) 20] eqt(tag, locker) >= _|_ by (Bot) 21] eqt(tag, request) >= _|_ by (Bot) 22] eqt(_|_, _|_) >= _|_ by (Bot) 23] eqt(int(X), release) >= _|_ by (Bot) 24] eqt(int(X), _|_) >= _|_ by (Bot) 25] eqt(cons(X, Y), _|_) >= _|_ by (Bot) 26] eqt(cons(X, Y), Z) >= _|_ by (Bot) 27] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 28] eqt(tuple(X, Y), a) >= _|_ by (Bot) 29] eqt(tuple(X, Y), _|_) >= _|_ by (Bot) 30] eqt(tuple(X, Y), request) >= _|_ by (Bot) 31] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 32] eqt(X, nil) >= _|_ by (Bot) 33] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [34], by (Star) 34] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [35] and [42], by (Copy) 35] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [36] and [40], by (Copy) 36] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [37], by (Select) 37] cons(X, Y) >= X because [38], by (Star) 38] cons*(X, Y) >= X because [39], by (Select) 39] X >= X by (Meta) 40] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [41], by (Select) 41] Z >= Z by (Meta) 42] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [43] and [46], by (Stat) 43] cons(X, Y) > Y because [44], by definition 44] cons*(X, Y) >= Y because [45], by (Select) 45] Y >= Y by (Meta) 46] Z >= Z by (Meta) 47] case4(X, Y, Z) >= _|_ by (Bot) 48] case9(X, Y, Z, _|_) > _|_ because [49], by definition 49] case9*(X, Y, Z, _|_) >= _|_ by (Bot) 50] tops(stack(X, Y)) >= X because [51], by (Star) 51] tops*(stack(X, Y)) >= X because [52], by (Select) 52] stack(X, Y) >= X because [53], by (Star) 53] stack*(X, Y) >= X because [54], by (Select) 54] X >= X by (Meta) 55] istops(X, empty) >= _|_ by (Bot) 56] eqc(nocalls, nocalls) >= _|_ by (Bot) We can thus remove the following rules: case9(X, Y, Z, true) => true We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): and(X, F) >? F not(F) >? T eqt(nil, int(X)) >? F eqt(a, lock) >? F eqt(a, request) >? F eqt(excl, resource) >? F eqt(excl, undefined) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, nil) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(lock, pid(X)) >? F eqt(locker, ok) >? F eqt(mcrlrecord, nil) >? F eqt(pending, pending) >? T eqt(pending, tag) >? F eqt(release, lock) >? F eqt(request, request) >? T eqt(resource, false) >? F eqt(tag, locker) >? F eqt(tag, request) >? F eqt(true, true) >? T eqt(int(X), release) >? F eqt(int(X), true) >? F eqt(cons(X, Y), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), a) >? F eqt(tuple(X, Y), false) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[int(x_1)]] = x_1 [[tuplenil(x_1)]] = x_1 We choose Lex = {} and Mul = {a, and, case4, cons, empty, eqc, eqt, excl, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, mcrlrecord, nil, nocalls, not, ok, pending, pid, release, request, resource, stack, tag, tops, true, tuple, undefined}, and the following precedence: empty > resource > tag > request > tuple > nocalls > istops > nil > case4 > pid > not > locker > pending > mcrlrecord > eqc > stack > locker2!6220map!6220promote!6220pending > ok > locker2!6220promote!6220pending > a > and > tops > cons > release > lock > excl > eqt > true > undefined Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: and(X, _|_) >= _|_ not(_|_) >= _|_ eqt(nil, X) >= _|_ eqt(a, lock) > _|_ eqt(a, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, undefined) >= _|_ eqt(_|_, tuple(X, Y)) >= _|_ eqt(lock, nil) > _|_ eqt(lock, request) >= _|_ eqt(lock, true) >= _|_ eqt(lock, pid(X)) > _|_ eqt(locker, ok) >= _|_ eqt(mcrlrecord, nil) > _|_ eqt(pending, pending) >= _|_ eqt(pending, tag) > _|_ eqt(release, lock) >= _|_ eqt(request, request) >= _|_ eqt(resource, _|_) >= _|_ eqt(tag, locker) > _|_ eqt(tag, request) >= _|_ eqt(true, true) > _|_ eqt(X, release) >= _|_ eqt(X, true) >= _|_ eqt(cons(X, Y), true) > _|_ eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), a) > _|_ eqt(tuple(X, Y), _|_) > _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(X, nil) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >= _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ With these choices, we have: 1] and(X, _|_) >= _|_ by (Bot) 2] not(_|_) >= _|_ by (Bot) 3] eqt(nil, X) >= _|_ by (Bot) 4] eqt(a, lock) > _|_ because [5], by definition 5] eqt*(a, lock) >= _|_ by (Bot) 6] eqt(a, request) >= _|_ by (Bot) 7] eqt(excl, resource) >= _|_ by (Bot) 8] eqt(excl, undefined) >= _|_ by (Bot) 9] eqt(_|_, tuple(X, Y)) >= _|_ by (Bot) 10] eqt(lock, nil) > _|_ because [11], by definition 11] eqt*(lock, nil) >= _|_ by (Bot) 12] eqt(lock, request) >= _|_ by (Bot) 13] eqt(lock, true) >= _|_ by (Bot) 14] eqt(lock, pid(X)) > _|_ because [15], by definition 15] eqt*(lock, pid(X)) >= _|_ by (Bot) 16] eqt(locker, ok) >= _|_ by (Bot) 17] eqt(mcrlrecord, nil) > _|_ because [18], by definition 18] eqt*(mcrlrecord, nil) >= _|_ by (Bot) 19] eqt(pending, pending) >= _|_ by (Bot) 20] eqt(pending, tag) > _|_ because [21], by definition 21] eqt*(pending, tag) >= _|_ by (Bot) 22] eqt(release, lock) >= _|_ by (Bot) 23] eqt(request, request) >= _|_ by (Bot) 24] eqt(resource, _|_) >= _|_ by (Bot) 25] eqt(tag, locker) > _|_ because [26], by definition 26] eqt*(tag, locker) >= _|_ by (Bot) 27] eqt(tag, request) >= _|_ by (Bot) 28] eqt(true, true) > _|_ because [29], by definition 29] eqt*(true, true) >= _|_ by (Bot) 30] eqt(X, release) >= _|_ by (Bot) 31] eqt(X, true) >= _|_ by (Bot) 32] eqt(cons(X, Y), true) > _|_ because [33], by definition 33] eqt*(cons(X, Y), true) >= _|_ by (Bot) 34] eqt(cons(X, Y), Z) >= _|_ by (Bot) 35] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 36] eqt(tuple(X, Y), a) > _|_ because [37], by definition 37] eqt*(tuple(X, Y), a) >= _|_ by (Bot) 38] eqt(tuple(X, Y), _|_) > _|_ because [39], by definition 39] eqt*(tuple(X, Y), _|_) >= _|_ by (Bot) 40] eqt(tuple(X, Y), request) >= _|_ by (Bot) 41] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 42] eqt(X, nil) >= _|_ by (Bot) 43] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [44], by (Star) 44] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [45] and [52], by (Copy) 45] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [46] and [50], by (Copy) 46] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [47], by (Select) 47] cons(X, Y) >= X because [48], by (Star) 48] cons*(X, Y) >= X because [49], by (Select) 49] X >= X by (Meta) 50] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [51], by (Select) 51] Z >= Z by (Meta) 52] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [53] and [56], by (Stat) 53] cons(X, Y) > Y because [54], by definition 54] cons*(X, Y) >= Y because [55], by (Select) 55] Y >= Y by (Meta) 56] Z >= Z by (Meta) 57] case4(X, Y, Z) >= _|_ by (Bot) 58] tops(stack(X, Y)) >= X because [59], by (Star) 59] tops*(stack(X, Y)) >= X because [60], by (Select) 60] stack(X, Y) >= X because [61], by (Star) 61] stack*(X, Y) >= X because [62], by (Select) 62] X >= X by (Meta) 63] istops(X, empty) >= _|_ by (Bot) 64] eqc(nocalls, nocalls) >= _|_ by (Bot) We can thus remove the following rules: eqt(a, lock) => F eqt(lock, nil) => F eqt(lock, pid(X)) => F eqt(mcrlrecord, nil) => F eqt(pending, tag) => F eqt(tag, locker) => F eqt(true, true) => T eqt(cons(X, Y), true) => F eqt(tuple(X, Y), a) => F eqt(tuple(X, Y), false) => F We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): and(X, F) >? F not(F) >? T eqt(nil, int(X)) >? F eqt(a, request) >? F eqt(excl, resource) >? F eqt(excl, undefined) >? F eqt(false, tuple(X, Y)) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(locker, ok) >? F eqt(pending, pending) >? T eqt(release, lock) >? F eqt(request, request) >? T eqt(resource, false) >? F eqt(tag, request) >? F eqt(int(X), release) >? F eqt(int(X), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) >? false tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[false]] = _|_ [[int(x_1)]] = x_1 [[tuplenil(x_1)]] = x_1 We choose Lex = {} and Mul = {a, and, case4, cons, empty, eqc, eqt, excl, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, nil, nocalls, not, ok, pending, release, request, resource, stack, tag, tops, true, tuple, undefined}, and the following precedence: empty > locker > nil > resource > istops > tops > nocalls = not > lock > and > release > eqt > excl > tuple > a > eqc > stack > locker2!6220map!6220promote!6220pending = locker2!6220promote!6220pending > cons > pending > case4 > true > undefined > request > tag > ok Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: and(X, _|_) >= _|_ not(_|_) >= _|_ eqt(nil, X) >= _|_ eqt(a, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, undefined) >= _|_ eqt(_|_, tuple(X, Y)) > _|_ eqt(lock, request) >= _|_ eqt(lock, true) >= _|_ eqt(locker, ok) >= _|_ eqt(pending, pending) >= _|_ eqt(release, lock) >= _|_ eqt(request, request) >= _|_ eqt(resource, _|_) > _|_ eqt(tag, request) >= _|_ eqt(X, release) > _|_ eqt(X, true) >= _|_ eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(X, nil) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) case4(X, Y, Z) > _|_ tops(stack(X, Y)) >= X istops(X, empty) >= _|_ eqc(nocalls, nocalls) >= _|_ With these choices, we have: 1] and(X, _|_) >= _|_ by (Bot) 2] not(_|_) >= _|_ by (Bot) 3] eqt(nil, X) >= _|_ by (Bot) 4] eqt(a, request) >= _|_ by (Bot) 5] eqt(excl, resource) >= _|_ by (Bot) 6] eqt(excl, undefined) >= _|_ by (Bot) 7] eqt(_|_, tuple(X, Y)) > _|_ because [8], by definition 8] eqt*(_|_, tuple(X, Y)) >= _|_ by (Bot) 9] eqt(lock, request) >= _|_ by (Bot) 10] eqt(lock, true) >= _|_ by (Bot) 11] eqt(locker, ok) >= _|_ by (Bot) 12] eqt(pending, pending) >= _|_ by (Bot) 13] eqt(release, lock) >= _|_ by (Bot) 14] eqt(request, request) >= _|_ by (Bot) 15] eqt(resource, _|_) > _|_ because [16], by definition 16] eqt*(resource, _|_) >= _|_ by (Bot) 17] eqt(tag, request) >= _|_ by (Bot) 18] eqt(X, release) > _|_ because [19], by definition 19] eqt*(X, release) >= _|_ by (Bot) 20] eqt(X, true) >= _|_ by (Bot) 21] eqt(cons(X, Y), Z) >= _|_ by (Bot) 22] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 23] eqt(tuple(X, Y), request) >= _|_ by (Bot) 24] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 25] eqt(X, nil) >= _|_ by (Bot) 26] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [27], by (Star) 27] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [28] and [33], by (Copy) 28] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending = locker2!6220promote!6220pending, locker2!6220map!6220promote!6220pending in Mul, [29] and [32], by (Stat) 29] cons(X, Y) > X because [30], by definition 30] cons*(X, Y) >= X because [31], by (Select) 31] X >= X by (Meta) 32] Z >= Z by (Meta) 33] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [34] and [32], by (Stat) 34] cons(X, Y) > Y because [35], by definition 35] cons*(X, Y) >= Y because [36], by (Select) 36] Y >= Y by (Meta) 37] case4(X, Y, Z) > _|_ because [38], by definition 38] case4*(X, Y, Z) >= _|_ by (Bot) 39] tops(stack(X, Y)) >= X because [40], by (Star) 40] tops*(stack(X, Y)) >= X because [41], by (Select) 41] stack(X, Y) >= X because [42], by (Star) 42] stack*(X, Y) >= X because [43], by (Select) 43] X >= X by (Meta) 44] istops(X, empty) >= _|_ by (Bot) 45] eqc(nocalls, nocalls) >= _|_ by (Bot) We can thus remove the following rules: eqt(false, tuple(X, Y)) => F eqt(resource, false) => F eqt(int(X), release) => F case4(X, Y, Z) => false We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): and(X, F) >? F not(F) >? T eqt(nil, int(X)) >? F eqt(a, request) >? F eqt(excl, resource) >? F eqt(excl, undefined) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(locker, ok) >? F eqt(pending, pending) >? T eqt(release, lock) >? F eqt(request, request) >? T eqt(tag, request) >? F eqt(int(X), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) >? cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) tops(stack(X, Y)) >? X istops(X, empty) >? F eqc(nocalls, nocalls) >? T about to try horpo We use a recursive path ordering as defined in [Kop12, Chapter 5]. Argument functions: [[F]] = _|_ [[T]] = _|_ [[tuplenil(x_1)]] = x_1 We choose Lex = {} and Mul = {a, and, cons, empty, eqc, eqt, excl, int, istops, lock, locker, locker2!6220map!6220promote!6220pending, locker2!6220promote!6220pending, nil, nocalls, not, ok, pending, release, request, resource, stack, tag, tops, true, tuple, undefined}, and the following precedence: a > release > pending > request > undefined > and > ok > locker2!6220map!6220promote!6220pending > tag > int > not > locker2!6220promote!6220pending > resource > locker > cons > eqt > lock > excl > tuple > eqc > nil > empty > nocalls > stack > istops > true > tops Taking the argument function into account, and fixing the greater / greater equal choices, the constraints can be denoted as follows: and(X, _|_) >= _|_ not(_|_) >= _|_ eqt(nil, int(X)) >= _|_ eqt(a, request) >= _|_ eqt(excl, resource) >= _|_ eqt(excl, undefined) > _|_ eqt(lock, request) >= _|_ eqt(lock, true) >= _|_ eqt(locker, ok) >= _|_ eqt(pending, pending) >= _|_ eqt(release, lock) >= _|_ eqt(request, request) >= _|_ eqt(tag, request) >= _|_ eqt(int(X), true) >= _|_ eqt(cons(X, Y), Z) >= _|_ eqt(tuple(X, Y), nil) >= _|_ eqt(tuple(X, Y), request) >= _|_ eqt(tuple(X, Y), resource) >= _|_ eqt(X, nil) >= _|_ locker2!6220map!6220promote!6220pending(cons(X, Y), Z) > cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) tops(stack(X, Y)) >= X istops(X, empty) > _|_ eqc(nocalls, nocalls) >= _|_ With these choices, we have: 1] and(X, _|_) >= _|_ by (Bot) 2] not(_|_) >= _|_ by (Bot) 3] eqt(nil, int(X)) >= _|_ by (Bot) 4] eqt(a, request) >= _|_ by (Bot) 5] eqt(excl, resource) >= _|_ by (Bot) 6] eqt(excl, undefined) > _|_ because [7], by definition 7] eqt*(excl, undefined) >= _|_ by (Bot) 8] eqt(lock, request) >= _|_ by (Bot) 9] eqt(lock, true) >= _|_ by (Bot) 10] eqt(locker, ok) >= _|_ by (Bot) 11] eqt(pending, pending) >= _|_ by (Bot) 12] eqt(release, lock) >= _|_ by (Bot) 13] eqt(request, request) >= _|_ by (Bot) 14] eqt(tag, request) >= _|_ by (Bot) 15] eqt(int(X), true) >= _|_ by (Bot) 16] eqt(cons(X, Y), Z) >= _|_ by (Bot) 17] eqt(tuple(X, Y), nil) >= _|_ by (Bot) 18] eqt(tuple(X, Y), request) >= _|_ by (Bot) 19] eqt(tuple(X, Y), resource) >= _|_ by (Bot) 20] eqt(X, nil) >= _|_ by (Bot) 21] locker2!6220map!6220promote!6220pending(cons(X, Y), Z) > cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because [22], by definition 22] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) because locker2!6220map!6220promote!6220pending > cons, [23] and [30], by (Copy) 23] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220promote!6220pending(X, Z) because locker2!6220map!6220promote!6220pending > locker2!6220promote!6220pending, [24] and [28], by (Copy) 24] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= X because [25], by (Select) 25] cons(X, Y) >= X because [26], by (Star) 26] cons*(X, Y) >= X because [27], by (Select) 27] X >= X by (Meta) 28] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= Z because [29], by (Select) 29] Z >= Z by (Meta) 30] locker2!6220map!6220promote!6220pending*(cons(X, Y), Z) >= locker2!6220map!6220promote!6220pending(Y, Z) because locker2!6220map!6220promote!6220pending in Mul, [31] and [34], by (Stat) 31] cons(X, Y) > Y because [32], by definition 32] cons*(X, Y) >= Y because [33], by (Select) 33] Y >= Y by (Meta) 34] Z >= Z by (Meta) 35] tops(stack(X, Y)) >= X because [36], by (Star) 36] tops*(stack(X, Y)) >= X because [37], by (Select) 37] stack(X, Y) >= X because [38], by (Star) 38] stack*(X, Y) >= X because [39], by (Select) 39] X >= X by (Meta) 40] istops(X, empty) > _|_ because [41], by definition 41] istops*(X, empty) >= _|_ by (Bot) 42] eqc(nocalls, nocalls) >= _|_ by (Bot) We can thus remove the following rules: eqt(excl, undefined) => F locker2!6220map!6220promote!6220pending(cons(X, Y), Z) => cons(locker2!6220promote!6220pending(X, Z), locker2!6220map!6220promote!6220pending(Y, Z)) istops(X, empty) => F We use rule removal, following [Kop12, Theorem 2.23]. This gives the following requirements (possibly using Theorems 2.25 and 2.26 in [Kop12]): and(X, F) >? F not(F) >? T eqt(nil, int(X)) >? F eqt(a, request) >? F eqt(excl, resource) >? F eqt(lock, request) >? F eqt(lock, true) >? F eqt(locker, ok) >? F eqt(pending, pending) >? T eqt(release, lock) >? F eqt(request, request) >? T eqt(tag, request) >? F eqt(int(X), true) >? F eqt(cons(X, Y), tuplenil(Z)) >? F eqt(tuple(X, Y), nil) >? F eqt(tuple(X, Y), request) >? F eqt(tuple(X, Y), resource) >? F eqt(tuplenil(X), nil) >? F tops(stack(X, Y)) >? X eqc(nocalls, nocalls) >? T We orient these requirements with a polynomial interpretation in the natural numbers. The following interpretation satisfies the requirements: F = 0 T = 0 a = 3 and = \y0y1.3 + y0 + 3y1 cons = \y0y1.3 + y0 + y1 eqc = \y0y1.3 + 3y0 + 3y1 eqt = \y0y1.3 + 3y0 + 3y1 excl = 3 int = \y0.3 + y0 lock = 3 locker = 3 nil = 3 nocalls = 3 not = \y0.3 + 3y0 ok = 3 pending = 3 release = 3 request = 3 resource = 3 stack = \y0y1.3 + y0 + y1 tag = 3 tops = \y0.3 + y0 true = 3 tuple = \y0y1.3 + y0 + y1 tuplenil = \y0.3 + y0 Using this interpretation, the requirements translate to: [[and(_x0, F)]] = 3 + x0 > 0 = [[F]] [[not(F)]] = 3 > 0 = [[T]] [[eqt(nil, int(_x0))]] = 21 + 3x0 > 0 = [[F]] [[eqt(a, request)]] = 21 > 0 = [[F]] [[eqt(excl, resource)]] = 21 > 0 = [[F]] [[eqt(lock, request)]] = 21 > 0 = [[F]] [[eqt(lock, true)]] = 21 > 0 = [[F]] [[eqt(locker, ok)]] = 21 > 0 = [[F]] [[eqt(pending, pending)]] = 21 > 0 = [[T]] [[eqt(release, lock)]] = 21 > 0 = [[F]] [[eqt(request, request)]] = 21 > 0 = [[T]] [[eqt(tag, request)]] = 21 > 0 = [[F]] [[eqt(int(_x0), true)]] = 21 + 3x0 > 0 = [[F]] [[eqt(cons(_x0, _x1), tuplenil(_x2))]] = 21 + 3x0 + 3x1 + 3x2 > 0 = [[F]] [[eqt(tuple(_x0, _x1), nil)]] = 21 + 3x0 + 3x1 > 0 = [[F]] [[eqt(tuple(_x0, _x1), request)]] = 21 + 3x0 + 3x1 > 0 = [[F]] [[eqt(tuple(_x0, _x1), resource)]] = 21 + 3x0 + 3x1 > 0 = [[F]] [[eqt(tuplenil(_x0), nil)]] = 21 + 3x0 > 0 = [[F]] [[tops(stack(_x0, _x1))]] = 6 + x0 + x1 > x0 = [[_x0]] [[eqc(nocalls, nocalls)]] = 21 > 0 = [[T]] We can thus remove the following rules: and(X, F) => F not(F) => T eqt(nil, int(X)) => F eqt(a, request) => F eqt(excl, resource) => F eqt(lock, request) => F eqt(lock, true) => F eqt(locker, ok) => F eqt(pending, pending) => T eqt(release, lock) => F eqt(request, request) => T eqt(tag, request) => F eqt(int(X), true) => F eqt(cons(X, Y), tuplenil(Z)) => F eqt(tuple(X, Y), nil) => F eqt(tuple(X, Y), request) => F eqt(tuple(X, Y), resource) => F eqt(tuplenil(X), nil) => F tops(stack(X, Y)) => X eqc(nocalls, nocalls) => T All rules were succesfully removed. Thus, termination of the original system has been reduced to termination of the beta-rule, which is well-known to hold. +++ Citations +++ [Kop12] C. Kop. Higher Order Termination. PhD Thesis, 2012.