890.65/291.57 WORST_CASE(Omega(n^1), ?) 890.77/291.59 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 890.77/291.59 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 890.77/291.59 890.77/291.59 890.77/291.59 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 890.77/291.59 890.77/291.59 (0) CpxTRS 890.77/291.59 (1) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] 890.77/291.59 (2) TRS for Loop Detection 890.77/291.59 (3) DecreasingLoopProof [LOWER BOUND(ID), 0 ms] 890.77/291.59 (4) BEST 890.77/291.59 (5) proven lower bound 890.77/291.59 (6) LowerBoundPropagationProof [FINISHED, 0 ms] 890.77/291.59 (7) BOUNDS(n^1, INF) 890.77/291.59 (8) TRS for Loop Detection 890.77/291.59 890.77/291.59 890.77/291.59 ---------------------------------------- 890.77/291.59 890.77/291.59 (0) 890.77/291.59 Obligation: 890.77/291.59 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 890.77/291.59 890.77/291.59 890.77/291.59 The TRS R consists of the following rules: 890.77/291.59 890.77/291.59 or(T, T) -> T 890.77/291.59 or(F, T) -> T 890.77/291.59 or(T, F) -> T 890.77/291.59 or(F, F) -> F 890.77/291.59 and(T, B) -> B 890.77/291.59 and(B, T) -> B 890.77/291.59 and(F, B) -> F 890.77/291.59 and(B, F) -> F 890.77/291.59 imp(T, B) -> B 890.77/291.59 imp(F, B) -> T 890.77/291.59 not(T) -> F 890.77/291.59 not(F) -> T 890.77/291.59 if(T, B1, B2) -> B1 890.77/291.59 if(F, B1, B2) -> B2 890.77/291.59 eq(T, T) -> T 890.77/291.59 eq(F, F) -> T 890.77/291.59 eq(T, F) -> F 890.77/291.59 eq(F, T) -> F 890.77/291.59 eqt(nil, undefined) -> F 890.77/291.59 eqt(nil, pid(N2)) -> F 890.77/291.59 eqt(nil, int(N2)) -> F 890.77/291.59 eqt(nil, cons(H2, T2)) -> F 890.77/291.59 eqt(nil, tuple(H2, T2)) -> F 890.77/291.59 eqt(nil, tuplenil(H2)) -> F 890.77/291.59 eqt(a, nil) -> F 890.77/291.59 eqt(a, a) -> T 890.77/291.59 eqt(a, excl) -> F 890.77/291.59 eqt(a, false) -> F 890.77/291.59 eqt(a, lock) -> F 890.77/291.59 eqt(a, locker) -> F 890.77/291.59 eqt(a, mcrlrecord) -> F 890.77/291.59 eqt(a, ok) -> F 890.77/291.59 eqt(a, pending) -> F 890.77/291.59 eqt(a, release) -> F 890.77/291.59 eqt(a, request) -> F 890.77/291.59 eqt(a, resource) -> F 890.77/291.59 eqt(a, tag) -> F 890.77/291.59 eqt(a, true) -> F 890.77/291.59 eqt(a, undefined) -> F 890.77/291.59 eqt(a, pid(N2)) -> F 890.77/291.59 eqt(a, int(N2)) -> F 890.77/291.59 eqt(a, cons(H2, T2)) -> F 890.77/291.59 eqt(a, tuple(H2, T2)) -> F 890.77/291.59 eqt(a, tuplenil(H2)) -> F 890.77/291.59 eqt(excl, nil) -> F 890.77/291.59 eqt(excl, a) -> F 890.77/291.59 eqt(excl, excl) -> T 890.77/291.59 eqt(excl, false) -> F 890.77/291.59 eqt(excl, lock) -> F 890.77/291.59 eqt(excl, locker) -> F 890.77/291.59 eqt(excl, mcrlrecord) -> F 890.77/291.59 eqt(excl, ok) -> F 890.77/291.59 eqt(excl, pending) -> F 890.77/291.59 eqt(excl, release) -> F 890.77/291.59 eqt(excl, request) -> F 890.77/291.59 eqt(excl, resource) -> F 890.77/291.59 eqt(excl, tag) -> F 890.77/291.59 eqt(excl, true) -> F 890.77/291.59 eqt(excl, undefined) -> F 890.77/291.59 eqt(excl, pid(N2)) -> F 890.77/291.59 eqt(excl, eqt(false, int(N2))) -> F 890.77/291.59 eqt(false, cons(H2, T2)) -> F 890.77/291.59 eqt(false, tuple(H2, T2)) -> F 890.77/291.59 eqt(false, tuplenil(H2)) -> F 890.77/291.59 eqt(lock, nil) -> F 890.77/291.59 eqt(lock, a) -> F 890.77/291.59 eqt(lock, excl) -> F 890.77/291.59 eqt(lock, false) -> F 890.77/291.59 eqt(lock, lock) -> T 890.77/291.59 eqt(lock, locker) -> F 890.77/291.59 eqt(lock, mcrlrecord) -> F 890.77/291.59 eqt(lock, ok) -> F 890.77/291.59 eqt(lock, pending) -> F 890.77/291.59 eqt(lock, release) -> F 890.77/291.59 eqt(lock, request) -> F 890.77/291.59 eqt(lock, resource) -> F 890.77/291.59 eqt(lock, tag) -> F 890.77/291.59 eqt(lock, true) -> F 890.77/291.59 eqt(lock, undefined) -> F 890.77/291.59 eqt(lock, pid(N2)) -> F 890.77/291.59 eqt(lock, int(N2)) -> F 890.77/291.59 eqt(lock, cons(H2, T2)) -> F 890.77/291.59 eqt(lock, tuple(H2, T2)) -> F 890.77/291.59 eqt(lock, tuplenil(H2)) -> F 890.77/291.59 eqt(locker, nil) -> F 890.77/291.59 eqt(locker, a) -> F 890.77/291.59 eqt(locker, excl) -> F 890.77/291.59 eqt(locker, false) -> F 890.77/291.59 eqt(locker, lock) -> F 890.77/291.59 eqt(locker, locker) -> T 890.77/291.59 eqt(locker, mcrlrecord) -> F 890.77/291.59 eqt(locker, ok) -> F 890.77/291.59 eqt(locker, pending) -> F 890.77/291.59 eqt(locker, release) -> F 890.77/291.59 eqt(locker, request) -> F 890.77/291.59 eqt(locker, resource) -> F 890.77/291.59 eqt(locker, tag) -> F 890.77/291.59 eqt(locker, true) -> F 890.77/291.59 eqt(locker, undefined) -> F 890.77/291.59 eqt(locker, pid(N2)) -> F 890.77/291.59 eqt(locker, int(N2)) -> F 890.77/291.59 eqt(locker, cons(H2, T2)) -> F 890.77/291.59 eqt(locker, tuple(H2, T2)) -> F 890.77/291.59 eqt(locker, tuplenil(H2)) -> F 890.77/291.59 eqt(mcrlrecord, nil) -> F 890.77/291.59 eqt(mcrlrecord, a) -> F 890.77/291.59 eqt(mcrlrecord, excl) -> F 890.77/291.59 eqt(mcrlrecord, false) -> F 890.77/291.59 eqt(mcrlrecord, lock) -> F 890.77/291.59 eqt(mcrlrecord, locker) -> F 890.77/291.59 eqt(mcrlrecord, mcrlrecord) -> T 890.77/291.59 eqt(mcrlrecord, ok) -> F 890.77/291.59 eqt(mcrlrecord, pending) -> F 890.77/291.59 eqt(mcrlrecord, release) -> F 890.77/291.59 eqt(mcrlrecord, request) -> F 890.77/291.59 eqt(mcrlrecord, resource) -> F 890.77/291.59 eqt(ok, resource) -> F 890.77/291.59 eqt(ok, tag) -> F 890.77/291.59 eqt(ok, true) -> F 890.77/291.59 eqt(ok, undefined) -> F 890.77/291.59 eqt(ok, pid(N2)) -> F 890.77/291.59 eqt(ok, int(N2)) -> F 890.77/291.59 eqt(ok, cons(H2, T2)) -> F 890.77/291.59 eqt(ok, tuple(H2, T2)) -> F 890.77/291.59 eqt(ok, tuplenil(H2)) -> F 890.77/291.59 eqt(pending, nil) -> F 890.77/291.59 eqt(pending, a) -> F 890.77/291.59 eqt(pending, excl) -> F 890.77/291.59 eqt(pending, false) -> F 890.77/291.59 eqt(pending, lock) -> F 890.77/291.59 eqt(pending, locker) -> F 890.77/291.59 eqt(pending, mcrlrecord) -> F 890.77/291.59 eqt(pending, ok) -> F 890.77/291.59 eqt(pending, pending) -> T 890.77/291.59 eqt(pending, release) -> F 890.77/291.59 eqt(pending, request) -> F 890.77/291.59 eqt(pending, resource) -> F 890.77/291.59 eqt(pending, tag) -> F 890.77/291.59 eqt(pending, true) -> F 890.77/291.59 eqt(pending, undefined) -> F 890.77/291.59 eqt(pending, pid(N2)) -> F 890.77/291.59 eqt(pending, int(N2)) -> F 890.77/291.59 eqt(pending, cons(H2, T2)) -> F 890.77/291.59 eqt(pending, tuple(H2, T2)) -> F 890.77/291.59 eqt(pending, tuplenil(H2)) -> F 890.77/291.59 eqt(release, nil) -> F 890.77/291.59 eqt(release, a) -> F 890.77/291.59 eqt(release, excl) -> F 890.77/291.59 eqt(release, false) -> F 890.77/291.59 eqt(release, lock) -> F 890.77/291.59 eqt(release, locker) -> F 890.77/291.59 eqt(release, mcrlrecord) -> F 890.77/291.59 eqt(release, ok) -> F 890.77/291.59 eqt(request, mcrlrecord) -> F 890.77/291.59 eqt(request, ok) -> F 890.77/291.59 eqt(request, pending) -> F 890.77/291.59 eqt(request, release) -> F 890.77/291.59 eqt(request, request) -> T 890.77/291.59 eqt(request, resource) -> F 890.77/291.59 eqt(request, tag) -> F 890.77/291.59 eqt(request, true) -> F 890.77/291.59 eqt(request, undefined) -> F 890.77/291.59 eqt(request, pid(N2)) -> F 890.77/291.59 eqt(request, int(N2)) -> F 890.77/291.59 eqt(request, cons(H2, T2)) -> F 890.77/291.59 eqt(request, tuple(H2, T2)) -> F 890.77/291.59 eqt(request, tuplenil(H2)) -> F 890.77/291.59 eqt(resource, nil) -> F 890.77/291.59 eqt(resource, a) -> F 890.77/291.59 eqt(resource, excl) -> F 890.77/291.59 eqt(resource, false) -> F 890.77/291.59 eqt(resource, lock) -> F 890.77/291.59 eqt(resource, locker) -> F 890.77/291.59 eqt(resource, mcrlrecord) -> F 890.77/291.59 eqt(resource, ok) -> F 890.77/291.59 eqt(resource, pending) -> F 890.77/291.59 eqt(resource, release) -> F 890.77/291.59 eqt(resource, request) -> F 890.77/291.59 eqt(resource, resource) -> T 890.77/291.59 eqt(resource, tag) -> F 890.77/291.59 eqt(resource, true) -> F 890.77/291.59 eqt(resource, undefined) -> F 890.77/291.59 eqt(resource, pid(N2)) -> F 890.77/291.59 eqt(resource, int(N2)) -> F 890.77/291.59 eqt(resource, cons(H2, T2)) -> F 890.77/291.59 eqt(resource, tuple(H2, T2)) -> F 890.77/291.59 eqt(resource, tuplenil(H2)) -> F 890.77/291.59 eqt(tag, nil) -> F 890.77/291.59 eqt(tag, a) -> F 890.77/291.59 eqt(tag, excl) -> F 890.77/291.59 eqt(tag, false) -> F 890.77/291.59 eqt(tag, lock) -> F 890.77/291.59 eqt(tag, locker) -> F 890.77/291.59 eqt(tag, mcrlrecord) -> F 890.77/291.59 eqt(tag, ok) -> F 890.77/291.59 eqt(tag, pending) -> F 890.77/291.59 eqt(tag, release) -> F 890.77/291.59 eqt(tag, request) -> F 890.77/291.59 eqt(tag, resource) -> F 890.77/291.59 eqt(tag, tag) -> T 890.77/291.59 eqt(tag, true) -> F 890.77/291.59 eqt(tag, undefined) -> F 890.77/291.59 eqt(tag, pid(N2)) -> F 890.77/291.59 eqt(tag, int(N2)) -> F 890.77/291.59 eqt(tag, cons(H2, T2)) -> F 890.77/291.59 eqt(tag, tuple(H2, T2)) -> F 890.77/291.59 eqt(tag, tuplenil(H2)) -> F 890.77/291.59 eqt(true, nil) -> F 890.77/291.59 eqt(true, a) -> F 890.77/291.59 eqt(true, excl) -> F 890.77/291.59 eqt(true, false) -> F 890.77/291.59 eqt(true, lock) -> F 890.77/291.59 eqt(true, locker) -> F 890.77/291.59 eqt(true, mcrlrecord) -> F 890.77/291.59 eqt(true, ok) -> F 890.77/291.59 eqt(true, pending) -> F 890.77/291.59 eqt(true, release) -> F 890.77/291.59 eqt(true, request) -> F 890.77/291.59 eqt(true, resource) -> F 890.77/291.59 eqt(true, tag) -> F 890.77/291.59 eqt(true, true) -> T 890.77/291.59 eqt(true, undefined) -> F 890.77/291.59 eqt(true, pid(N2)) -> F 890.77/291.59 eqt(true, int(N2)) -> F 890.77/291.59 eqt(true, cons(H2, T2)) -> F 890.77/291.59 eqt(true, tuple(H2, T2)) -> F 890.77/291.59 eqt(true, tuplenil(H2)) -> F 890.77/291.59 eqt(undefined, nil) -> F 890.77/291.59 eqt(undefined, a) -> F 890.77/291.59 eqt(undefined, tuplenil(H2)) -> F 890.77/291.59 eqt(pid(N1), nil) -> F 890.77/291.59 eqt(pid(N1), a) -> F 890.77/291.59 eqt(pid(N1), excl) -> F 890.77/291.59 eqt(pid(N1), false) -> F 890.77/291.59 eqt(pid(N1), lock) -> F 890.77/291.59 eqt(pid(N1), locker) -> F 890.77/291.59 eqt(pid(N1), mcrlrecord) -> F 890.77/291.59 eqt(pid(N1), ok) -> F 890.77/291.59 eqt(pid(N1), pending) -> F 890.77/291.59 eqt(pid(N1), release) -> F 890.77/291.59 eqt(pid(N1), request) -> F 890.77/291.59 eqt(pid(N1), resource) -> F 890.77/291.59 eqt(pid(N1), tag) -> F 890.77/291.59 eqt(pid(N1), true) -> F 890.77/291.59 eqt(pid(N1), undefined) -> F 890.77/291.59 eqt(pid(N1), pid(N2)) -> eqt(N1, N2) 890.77/291.59 eqt(pid(N1), int(N2)) -> F 890.77/291.59 eqt(pid(N1), cons(H2, T2)) -> F 890.77/291.59 eqt(pid(N1), tuple(H2, T2)) -> F 890.77/291.59 eqt(pid(N1), tuplenil(H2)) -> F 890.77/291.59 eqt(int(N1), nil) -> F 890.77/291.59 eqt(int(N1), a) -> F 890.77/291.59 eqt(int(N1), excl) -> F 890.77/291.59 eqt(int(N1), false) -> F 890.77/291.59 eqt(int(N1), lock) -> F 890.77/291.59 eqt(int(N1), locker) -> F 890.77/291.59 eqt(int(N1), mcrlrecord) -> F 890.77/291.59 eqt(int(N1), ok) -> F 890.77/291.59 eqt(int(N1), pending) -> F 890.77/291.59 eqt(int(N1), release) -> F 890.77/291.59 eqt(int(N1), request) -> F 890.77/291.59 eqt(int(N1), resource) -> F 890.77/291.59 eqt(int(N1), tag) -> F 890.77/291.59 eqt(int(N1), true) -> F 890.77/291.59 eqt(int(N1), undefined) -> F 890.77/291.59 eqt(cons(H1, T1), resource) -> F 890.77/291.59 eqt(cons(H1, T1), tag) -> F 890.77/291.59 eqt(cons(H1, T1), true) -> F 890.77/291.59 eqt(cons(H1, T1), undefined) -> F 890.77/291.59 eqt(cons(H1, T1), pid(N2)) -> F 890.77/291.59 eqt(cons(H1, T1), int(N2)) -> F 890.77/291.59 eqt(cons(H1, T1), cons(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.60 eqt(cons(H1, T1), tuple(H2, T2)) -> F 890.77/291.60 eqt(cons(H1, T1), tuplenil(H2)) -> F 890.77/291.60 eqt(tuple(H1, T1), nil) -> F 890.77/291.60 eqt(tuple(H1, T1), a) -> F 890.77/291.60 eqt(tuple(H1, T1), excl) -> F 890.77/291.60 eqt(tuple(H1, T1), false) -> F 890.77/291.60 eqt(tuple(H1, T1), lock) -> F 890.77/291.60 eqt(tuple(H1, T1), locker) -> F 890.77/291.60 eqt(tuple(H1, T1), mcrlrecord) -> F 890.77/291.60 eqt(tuple(H1, T1), ok) -> F 890.77/291.60 eqt(tuple(H1, T1), pending) -> F 890.77/291.60 eqt(tuple(H1, T1), release) -> F 890.77/291.60 eqt(tuple(H1, T1), request) -> F 890.77/291.60 eqt(tuple(H1, T1), resource) -> F 890.77/291.60 eqt(tuple(H1, T1), tag) -> F 890.77/291.60 eqt(tuple(H1, T1), true) -> F 890.77/291.60 eqt(tuple(H1, T1), undefined) -> F 890.77/291.60 eqt(tuple(H1, T1), pid(N2)) -> F 890.77/291.60 eqt(tuple(H1, T1), int(N2)) -> F 890.77/291.60 eqt(tuple(H1, T1), cons(H2, T2)) -> F 890.77/291.60 eqt(tuple(H1, T1), tuple(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.60 eqt(tuple(H1, T1), tuplenil(H2)) -> F 890.77/291.60 eqt(tuplenil(H1), nil) -> F 890.77/291.60 eqt(tuplenil(H1), a) -> F 890.77/291.60 eqt(tuplenil(H1), excl) -> F 890.77/291.60 eqt(tuplenil(H1), false) -> F 890.77/291.60 eqt(tuplenil(H1), lock) -> F 890.77/291.60 eqt(tuplenil(H1), locker) -> F 890.77/291.60 eqt(tuplenil(H1), mcrlrecord) -> F 890.77/291.60 eqt(tuplenil(H1), ok) -> F 890.77/291.60 eqt(tuplenil(H1), pending) -> F 890.77/291.60 eqt(tuplenil(H1), release) -> F 890.77/291.60 eqt(tuplenil(H1), request) -> F 890.77/291.60 eqt(tuplenil(H1), resource) -> F 890.77/291.60 eqt(tuplenil(H1), tag) -> F 890.77/291.60 eqt(tuplenil(H1), true) -> F 890.77/291.60 eqt(tuplenil(H1), undefined) -> F 890.77/291.60 eqt(tuplenil(H1), pid(N2)) -> F 890.77/291.60 eqt(tuplenil(H1), int(N2)) -> F 890.77/291.60 eqt(tuplenil(H1), cons(H2, T2)) -> F 890.77/291.60 eqt(tuplenil(H1), tuple(H2, T2)) -> F 890.77/291.60 eqt(tuplenil(H1), tuplenil(H2)) -> eqt(H1, H2) 890.77/291.60 element(int(s(0)), tuplenil(T1)) -> T1 890.77/291.60 element(int(s(0)), tuple(T1, T2)) -> T1 890.77/291.60 element(int(s(s(N1))), tuple(T1, T2)) -> element(int(s(N1)), T2) 890.77/291.60 record_new(lock) -> tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) 890.77/291.60 record_extract(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, resource) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))) 890.77/291.60 record_update(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, pending, NewF) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(NewF))))) 890.77/291.60 record_updates(Record, Name, nil) -> Record 890.77/291.60 record_updates(Record, Name, cons(tuple(Field, tuplenil(NewF)), Fields)) -> record_updates(record_update(Record, Name, Field, NewF), Name, Fields) 890.77/291.60 locker2_map_promote_pending(nil, Pending) -> nil 890.77/291.60 locker2_map_promote_pending(cons(Lock, Locks), Pending) -> cons(locker2_promote_pending(Lock, Pending), locker2_map_promote_pending(Locks, Pending)) 890.77/291.60 locker2_map_claim_lock(nil, Resources, Client) -> nil 890.77/291.60 locker2_map_claim_lock(cons(Lock, Locks), Resources, Client) -> cons(locker2_claim_lock(Lock, Resources, Client), locker2_map_claim_lock(Locks, Resources, Client)) 890.77/291.60 locker2_map_add_pending(nil, Resources, Client) -> nil 890.77/291.60 locker2_promote_pending(Lock, Client) -> case0(Client, Lock, record_extract(Lock, lock, pending)) 890.77/291.60 case0(Client, Lock, cons(Client, Pendings)) -> record_updates(Lock, lock, cons(tuple(excl, tuplenil(Client)), cons(tuple(pending, tuplenil(Pendings)), nil))) 890.77/291.60 case0(Client, Lock, MCRLFree0) -> Lock 890.77/291.60 locker2_remove_pending(Lock, Client) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(subtract(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.60 locker2_add_pending(Lock, Resources, Client) -> case1(Client, Resources, Lock, member(record_extract(Lock, lock, resource), Resources)) 890.77/291.60 case1(Client, Resources, Lock, true) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(append(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.60 case1(Client, Resources, Lock, false) -> Lock 890.77/291.60 locker2_release_lock(Lock, Client) -> case2(Client, Lock, gen_modtageq(Client, record_extract(Lock, lock, excl))) 890.77/291.60 case2(Client, Lock, true) -> record_updates(Lock, lock, cons(tuple(excllock, excl), nil)) 890.77/291.60 case4(Client, Lock, MCRLFree1) -> false 890.77/291.60 locker2_obtainables(nil, Client) -> true 890.77/291.60 locker2_obtainables(cons(Lock, Locks), Client) -> case5(Client, Locks, Lock, member(Client, record_extract(Lock, lock, pending))) 890.77/291.60 case5(Client, Locks, Lock, true) -> andt(locker2_obtainable(Lock, Client), locker2_obtainables(Locks, Client)) 890.77/291.60 case5(Client, Locks, Lock, false) -> locker2_obtainables(Locks, Client) 890.77/291.60 locker2_check_available(Resource, nil) -> false 890.77/291.60 locker2_check_available(Resource, cons(Lock, Locks)) -> case6(Locks, Lock, Resource, equal(Resource, record_extract(Lock, lock, resource))) 890.77/291.60 case6(Locks, Lock, Resource, true) -> andt(equal(record_extract(Lock, lock, excl), nil), equal(record_extract(Lock, lock, pending), nil)) 890.77/291.60 case6(Locks, Lock, Resource, false) -> locker2_check_available(Resource, Locks) 890.77/291.60 locker2_check_availables(nil, Locks) -> true 890.77/291.60 locker2_check_availables(cons(Resource, Resources), Locks) -> andt(locker2_check_available(Resource, Locks), locker2_check_availables(Resources, Locks)) 890.77/291.60 locker2_adduniq(nil, List) -> List 890.77/291.60 append(cons(Head, Tail), List) -> cons(Head, append(Tail, List)) 890.77/291.60 subtract(List, nil) -> List 890.77/291.60 subtract(List, cons(Head, Tail)) -> subtract(delete(Head, List), Tail) 890.77/291.60 delete(E, nil) -> nil 890.77/291.60 delete(E, cons(Head, Tail)) -> case8(Tail, Head, E, equal(E, Head)) 890.77/291.60 case8(Tail, Head, E, true) -> Tail 890.77/291.60 case8(Tail, Head, E, false) -> cons(Head, delete(E, Tail)) 890.77/291.60 gen_tag(Pid) -> tuple(Pid, tuplenil(tag)) 890.77/291.60 gen_modtageq(Client1, Client2) -> equal(Client1, Client2) 890.77/291.60 member(E, nil) -> false 890.77/291.60 member(E, cons(Head, Tail)) -> case9(Tail, Head, E, equal(E, Head)) 890.77/291.60 case9(Tail, Head, E, true) -> true 890.77/291.60 case9(Tail, Head, E, false) -> member(E, Tail) 890.77/291.60 eqs(empty, empty) -> T 890.77/291.60 eqs(empty, stack(E2, S2)) -> F 890.77/291.60 eqs(stack(E1, S1), empty) -> F 890.77/291.60 eqs(stack(E1, S1), stack(E2, S2)) -> and(eqt(E1, E2), eqs(S1, S2)) 890.77/291.60 pushs(E1, S1) -> stack(E1, S1) 890.77/291.60 pops(stack(E1, S1)) -> S1 890.77/291.60 tops(stack(E1, S1)) -> E1 890.77/291.60 istops(E1, empty) -> F 890.77/291.60 istops(E1, stack(E2, S1)) -> eqt(E1, E2) 890.77/291.60 eqc(nocalls, nocalls) -> T 890.77/291.60 eqc(nocalls, calls(E2, S2, CS2)) -> F 890.77/291.60 eqc(calls(E1, S1, CS1), nocalls) -> F 890.77/291.60 eqc(calls(E1, S1, CS1), calls(E2, S2, CS2)) -> and(eqt(E1, E2), and(eqs(S1, S2), eqc(CS1, CS2))) 890.77/291.60 push(E1, E2, nocalls) -> calls(E1, stack(E2, empty), nocalls) 890.77/291.60 push(E1, E2, calls(E3, S1, CS1)) -> push1(E1, E2, E3, S1, CS1, eqt(E1, E3)) 890.77/291.60 push1(E1, E2, E3, S1, CS1, T) -> calls(E3, pushs(E2, S1), CS1) 890.77/291.60 890.77/291.60 S is empty. 890.77/291.60 Rewrite Strategy: FULL 890.77/291.60 ---------------------------------------- 890.77/291.60 890.77/291.60 (1) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) 890.77/291.60 Transformed a relative TRS into a decreasing-loop problem. 890.77/291.60 ---------------------------------------- 890.77/291.60 890.77/291.60 (2) 890.77/291.60 Obligation: 890.77/291.60 Analyzing the following TRS for decreasing loops: 890.77/291.60 890.77/291.60 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 890.77/291.60 890.77/291.60 890.77/291.60 The TRS R consists of the following rules: 890.77/291.60 890.77/291.60 or(T, T) -> T 890.77/291.60 or(F, T) -> T 890.77/291.60 or(T, F) -> T 890.77/291.60 or(F, F) -> F 890.77/291.60 and(T, B) -> B 890.77/291.60 and(B, T) -> B 890.77/291.60 and(F, B) -> F 890.77/291.60 and(B, F) -> F 890.77/291.60 imp(T, B) -> B 890.77/291.60 imp(F, B) -> T 890.77/291.60 not(T) -> F 890.77/291.60 not(F) -> T 890.77/291.60 if(T, B1, B2) -> B1 890.77/291.60 if(F, B1, B2) -> B2 890.77/291.60 eq(T, T) -> T 890.77/291.60 eq(F, F) -> T 890.77/291.60 eq(T, F) -> F 890.77/291.60 eq(F, T) -> F 890.77/291.60 eqt(nil, undefined) -> F 890.77/291.60 eqt(nil, pid(N2)) -> F 890.77/291.60 eqt(nil, int(N2)) -> F 890.77/291.60 eqt(nil, cons(H2, T2)) -> F 890.77/291.60 eqt(nil, tuple(H2, T2)) -> F 890.77/291.60 eqt(nil, tuplenil(H2)) -> F 890.77/291.60 eqt(a, nil) -> F 890.77/291.60 eqt(a, a) -> T 890.77/291.60 eqt(a, excl) -> F 890.77/291.60 eqt(a, false) -> F 890.77/291.60 eqt(a, lock) -> F 890.77/291.60 eqt(a, locker) -> F 890.77/291.60 eqt(a, mcrlrecord) -> F 890.77/291.60 eqt(a, ok) -> F 890.77/291.60 eqt(a, pending) -> F 890.77/291.60 eqt(a, release) -> F 890.77/291.60 eqt(a, request) -> F 890.77/291.60 eqt(a, resource) -> F 890.77/291.60 eqt(a, tag) -> F 890.77/291.60 eqt(a, true) -> F 890.77/291.60 eqt(a, undefined) -> F 890.77/291.60 eqt(a, pid(N2)) -> F 890.77/291.60 eqt(a, int(N2)) -> F 890.77/291.60 eqt(a, cons(H2, T2)) -> F 890.77/291.60 eqt(a, tuple(H2, T2)) -> F 890.77/291.60 eqt(a, tuplenil(H2)) -> F 890.77/291.60 eqt(excl, nil) -> F 890.77/291.60 eqt(excl, a) -> F 890.77/291.60 eqt(excl, excl) -> T 890.77/291.60 eqt(excl, false) -> F 890.77/291.60 eqt(excl, lock) -> F 890.77/291.60 eqt(excl, locker) -> F 890.77/291.60 eqt(excl, mcrlrecord) -> F 890.77/291.60 eqt(excl, ok) -> F 890.77/291.60 eqt(excl, pending) -> F 890.77/291.60 eqt(excl, release) -> F 890.77/291.60 eqt(excl, request) -> F 890.77/291.60 eqt(excl, resource) -> F 890.77/291.60 eqt(excl, tag) -> F 890.77/291.60 eqt(excl, true) -> F 890.77/291.60 eqt(excl, undefined) -> F 890.77/291.60 eqt(excl, pid(N2)) -> F 890.77/291.60 eqt(excl, eqt(false, int(N2))) -> F 890.77/291.60 eqt(false, cons(H2, T2)) -> F 890.77/291.60 eqt(false, tuple(H2, T2)) -> F 890.77/291.60 eqt(false, tuplenil(H2)) -> F 890.77/291.60 eqt(lock, nil) -> F 890.77/291.60 eqt(lock, a) -> F 890.77/291.60 eqt(lock, excl) -> F 890.77/291.60 eqt(lock, false) -> F 890.77/291.60 eqt(lock, lock) -> T 890.77/291.60 eqt(lock, locker) -> F 890.77/291.60 eqt(lock, mcrlrecord) -> F 890.77/291.60 eqt(lock, ok) -> F 890.77/291.60 eqt(lock, pending) -> F 890.77/291.60 eqt(lock, release) -> F 890.77/291.60 eqt(lock, request) -> F 890.77/291.60 eqt(lock, resource) -> F 890.77/291.60 eqt(lock, tag) -> F 890.77/291.60 eqt(lock, true) -> F 890.77/291.60 eqt(lock, undefined) -> F 890.77/291.60 eqt(lock, pid(N2)) -> F 890.77/291.60 eqt(lock, int(N2)) -> F 890.77/291.60 eqt(lock, cons(H2, T2)) -> F 890.77/291.60 eqt(lock, tuple(H2, T2)) -> F 890.77/291.60 eqt(lock, tuplenil(H2)) -> F 890.77/291.60 eqt(locker, nil) -> F 890.77/291.60 eqt(locker, a) -> F 890.77/291.60 eqt(locker, excl) -> F 890.77/291.60 eqt(locker, false) -> F 890.77/291.60 eqt(locker, lock) -> F 890.77/291.60 eqt(locker, locker) -> T 890.77/291.60 eqt(locker, mcrlrecord) -> F 890.77/291.60 eqt(locker, ok) -> F 890.77/291.60 eqt(locker, pending) -> F 890.77/291.60 eqt(locker, release) -> F 890.77/291.60 eqt(locker, request) -> F 890.77/291.60 eqt(locker, resource) -> F 890.77/291.60 eqt(locker, tag) -> F 890.77/291.60 eqt(locker, true) -> F 890.77/291.60 eqt(locker, undefined) -> F 890.77/291.60 eqt(locker, pid(N2)) -> F 890.77/291.60 eqt(locker, int(N2)) -> F 890.77/291.60 eqt(locker, cons(H2, T2)) -> F 890.77/291.60 eqt(locker, tuple(H2, T2)) -> F 890.77/291.60 eqt(locker, tuplenil(H2)) -> F 890.77/291.60 eqt(mcrlrecord, nil) -> F 890.77/291.60 eqt(mcrlrecord, a) -> F 890.77/291.60 eqt(mcrlrecord, excl) -> F 890.77/291.60 eqt(mcrlrecord, false) -> F 890.77/291.60 eqt(mcrlrecord, lock) -> F 890.77/291.60 eqt(mcrlrecord, locker) -> F 890.77/291.60 eqt(mcrlrecord, mcrlrecord) -> T 890.77/291.60 eqt(mcrlrecord, ok) -> F 890.77/291.60 eqt(mcrlrecord, pending) -> F 890.77/291.60 eqt(mcrlrecord, release) -> F 890.77/291.60 eqt(mcrlrecord, request) -> F 890.77/291.60 eqt(mcrlrecord, resource) -> F 890.77/291.60 eqt(ok, resource) -> F 890.77/291.60 eqt(ok, tag) -> F 890.77/291.60 eqt(ok, true) -> F 890.77/291.60 eqt(ok, undefined) -> F 890.77/291.60 eqt(ok, pid(N2)) -> F 890.77/291.60 eqt(ok, int(N2)) -> F 890.77/291.60 eqt(ok, cons(H2, T2)) -> F 890.77/291.60 eqt(ok, tuple(H2, T2)) -> F 890.77/291.60 eqt(ok, tuplenil(H2)) -> F 890.77/291.60 eqt(pending, nil) -> F 890.77/291.60 eqt(pending, a) -> F 890.77/291.60 eqt(pending, excl) -> F 890.77/291.60 eqt(pending, false) -> F 890.77/291.60 eqt(pending, lock) -> F 890.77/291.60 eqt(pending, locker) -> F 890.77/291.60 eqt(pending, mcrlrecord) -> F 890.77/291.60 eqt(pending, ok) -> F 890.77/291.60 eqt(pending, pending) -> T 890.77/291.60 eqt(pending, release) -> F 890.77/291.60 eqt(pending, request) -> F 890.77/291.60 eqt(pending, resource) -> F 890.77/291.60 eqt(pending, tag) -> F 890.77/291.60 eqt(pending, true) -> F 890.77/291.60 eqt(pending, undefined) -> F 890.77/291.60 eqt(pending, pid(N2)) -> F 890.77/291.60 eqt(pending, int(N2)) -> F 890.77/291.60 eqt(pending, cons(H2, T2)) -> F 890.77/291.60 eqt(pending, tuple(H2, T2)) -> F 890.77/291.60 eqt(pending, tuplenil(H2)) -> F 890.77/291.60 eqt(release, nil) -> F 890.77/291.60 eqt(release, a) -> F 890.77/291.60 eqt(release, excl) -> F 890.77/291.60 eqt(release, false) -> F 890.77/291.60 eqt(release, lock) -> F 890.77/291.60 eqt(release, locker) -> F 890.77/291.60 eqt(release, mcrlrecord) -> F 890.77/291.60 eqt(release, ok) -> F 890.77/291.60 eqt(request, mcrlrecord) -> F 890.77/291.60 eqt(request, ok) -> F 890.77/291.60 eqt(request, pending) -> F 890.77/291.60 eqt(request, release) -> F 890.77/291.60 eqt(request, request) -> T 890.77/291.60 eqt(request, resource) -> F 890.77/291.60 eqt(request, tag) -> F 890.77/291.60 eqt(request, true) -> F 890.77/291.60 eqt(request, undefined) -> F 890.77/291.60 eqt(request, pid(N2)) -> F 890.77/291.60 eqt(request, int(N2)) -> F 890.77/291.60 eqt(request, cons(H2, T2)) -> F 890.77/291.60 eqt(request, tuple(H2, T2)) -> F 890.77/291.60 eqt(request, tuplenil(H2)) -> F 890.77/291.60 eqt(resource, nil) -> F 890.77/291.60 eqt(resource, a) -> F 890.77/291.60 eqt(resource, excl) -> F 890.77/291.60 eqt(resource, false) -> F 890.77/291.60 eqt(resource, lock) -> F 890.77/291.60 eqt(resource, locker) -> F 890.77/291.60 eqt(resource, mcrlrecord) -> F 890.77/291.60 eqt(resource, ok) -> F 890.77/291.60 eqt(resource, pending) -> F 890.77/291.60 eqt(resource, release) -> F 890.77/291.60 eqt(resource, request) -> F 890.77/291.60 eqt(resource, resource) -> T 890.77/291.60 eqt(resource, tag) -> F 890.77/291.60 eqt(resource, true) -> F 890.77/291.60 eqt(resource, undefined) -> F 890.77/291.60 eqt(resource, pid(N2)) -> F 890.77/291.60 eqt(resource, int(N2)) -> F 890.77/291.60 eqt(resource, cons(H2, T2)) -> F 890.77/291.60 eqt(resource, tuple(H2, T2)) -> F 890.77/291.60 eqt(resource, tuplenil(H2)) -> F 890.77/291.60 eqt(tag, nil) -> F 890.77/291.60 eqt(tag, a) -> F 890.77/291.60 eqt(tag, excl) -> F 890.77/291.60 eqt(tag, false) -> F 890.77/291.60 eqt(tag, lock) -> F 890.77/291.60 eqt(tag, locker) -> F 890.77/291.60 eqt(tag, mcrlrecord) -> F 890.77/291.60 eqt(tag, ok) -> F 890.77/291.60 eqt(tag, pending) -> F 890.77/291.60 eqt(tag, release) -> F 890.77/291.60 eqt(tag, request) -> F 890.77/291.60 eqt(tag, resource) -> F 890.77/291.60 eqt(tag, tag) -> T 890.77/291.60 eqt(tag, true) -> F 890.77/291.60 eqt(tag, undefined) -> F 890.77/291.60 eqt(tag, pid(N2)) -> F 890.77/291.60 eqt(tag, int(N2)) -> F 890.77/291.60 eqt(tag, cons(H2, T2)) -> F 890.77/291.60 eqt(tag, tuple(H2, T2)) -> F 890.77/291.60 eqt(tag, tuplenil(H2)) -> F 890.77/291.60 eqt(true, nil) -> F 890.77/291.60 eqt(true, a) -> F 890.77/291.60 eqt(true, excl) -> F 890.77/291.60 eqt(true, false) -> F 890.77/291.60 eqt(true, lock) -> F 890.77/291.60 eqt(true, locker) -> F 890.77/291.60 eqt(true, mcrlrecord) -> F 890.77/291.60 eqt(true, ok) -> F 890.77/291.60 eqt(true, pending) -> F 890.77/291.60 eqt(true, release) -> F 890.77/291.60 eqt(true, request) -> F 890.77/291.60 eqt(true, resource) -> F 890.77/291.60 eqt(true, tag) -> F 890.77/291.60 eqt(true, true) -> T 890.77/291.60 eqt(true, undefined) -> F 890.77/291.60 eqt(true, pid(N2)) -> F 890.77/291.60 eqt(true, int(N2)) -> F 890.77/291.60 eqt(true, cons(H2, T2)) -> F 890.77/291.60 eqt(true, tuple(H2, T2)) -> F 890.77/291.60 eqt(true, tuplenil(H2)) -> F 890.77/291.60 eqt(undefined, nil) -> F 890.77/291.60 eqt(undefined, a) -> F 890.77/291.60 eqt(undefined, tuplenil(H2)) -> F 890.77/291.60 eqt(pid(N1), nil) -> F 890.77/291.60 eqt(pid(N1), a) -> F 890.77/291.60 eqt(pid(N1), excl) -> F 890.77/291.60 eqt(pid(N1), false) -> F 890.77/291.60 eqt(pid(N1), lock) -> F 890.77/291.60 eqt(pid(N1), locker) -> F 890.77/291.60 eqt(pid(N1), mcrlrecord) -> F 890.77/291.60 eqt(pid(N1), ok) -> F 890.77/291.60 eqt(pid(N1), pending) -> F 890.77/291.60 eqt(pid(N1), release) -> F 890.77/291.60 eqt(pid(N1), request) -> F 890.77/291.60 eqt(pid(N1), resource) -> F 890.77/291.60 eqt(pid(N1), tag) -> F 890.77/291.60 eqt(pid(N1), true) -> F 890.77/291.60 eqt(pid(N1), undefined) -> F 890.77/291.60 eqt(pid(N1), pid(N2)) -> eqt(N1, N2) 890.77/291.60 eqt(pid(N1), int(N2)) -> F 890.77/291.60 eqt(pid(N1), cons(H2, T2)) -> F 890.77/291.60 eqt(pid(N1), tuple(H2, T2)) -> F 890.77/291.60 eqt(pid(N1), tuplenil(H2)) -> F 890.77/291.60 eqt(int(N1), nil) -> F 890.77/291.60 eqt(int(N1), a) -> F 890.77/291.60 eqt(int(N1), excl) -> F 890.77/291.60 eqt(int(N1), false) -> F 890.77/291.60 eqt(int(N1), lock) -> F 890.77/291.60 eqt(int(N1), locker) -> F 890.77/291.60 eqt(int(N1), mcrlrecord) -> F 890.77/291.60 eqt(int(N1), ok) -> F 890.77/291.60 eqt(int(N1), pending) -> F 890.77/291.60 eqt(int(N1), release) -> F 890.77/291.60 eqt(int(N1), request) -> F 890.77/291.60 eqt(int(N1), resource) -> F 890.77/291.60 eqt(int(N1), tag) -> F 890.77/291.60 eqt(int(N1), true) -> F 890.77/291.60 eqt(int(N1), undefined) -> F 890.77/291.60 eqt(cons(H1, T1), resource) -> F 890.77/291.60 eqt(cons(H1, T1), tag) -> F 890.77/291.60 eqt(cons(H1, T1), true) -> F 890.77/291.60 eqt(cons(H1, T1), undefined) -> F 890.77/291.60 eqt(cons(H1, T1), pid(N2)) -> F 890.77/291.60 eqt(cons(H1, T1), int(N2)) -> F 890.77/291.60 eqt(cons(H1, T1), cons(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.60 eqt(cons(H1, T1), tuple(H2, T2)) -> F 890.77/291.60 eqt(cons(H1, T1), tuplenil(H2)) -> F 890.77/291.60 eqt(tuple(H1, T1), nil) -> F 890.77/291.60 eqt(tuple(H1, T1), a) -> F 890.77/291.60 eqt(tuple(H1, T1), excl) -> F 890.77/291.60 eqt(tuple(H1, T1), false) -> F 890.77/291.60 eqt(tuple(H1, T1), lock) -> F 890.77/291.60 eqt(tuple(H1, T1), locker) -> F 890.77/291.60 eqt(tuple(H1, T1), mcrlrecord) -> F 890.77/291.60 eqt(tuple(H1, T1), ok) -> F 890.77/291.60 eqt(tuple(H1, T1), pending) -> F 890.77/291.60 eqt(tuple(H1, T1), release) -> F 890.77/291.60 eqt(tuple(H1, T1), request) -> F 890.77/291.60 eqt(tuple(H1, T1), resource) -> F 890.77/291.60 eqt(tuple(H1, T1), tag) -> F 890.77/291.60 eqt(tuple(H1, T1), true) -> F 890.77/291.60 eqt(tuple(H1, T1), undefined) -> F 890.77/291.60 eqt(tuple(H1, T1), pid(N2)) -> F 890.77/291.60 eqt(tuple(H1, T1), int(N2)) -> F 890.77/291.60 eqt(tuple(H1, T1), cons(H2, T2)) -> F 890.77/291.60 eqt(tuple(H1, T1), tuple(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.60 eqt(tuple(H1, T1), tuplenil(H2)) -> F 890.77/291.60 eqt(tuplenil(H1), nil) -> F 890.77/291.60 eqt(tuplenil(H1), a) -> F 890.77/291.60 eqt(tuplenil(H1), excl) -> F 890.77/291.60 eqt(tuplenil(H1), false) -> F 890.77/291.60 eqt(tuplenil(H1), lock) -> F 890.77/291.60 eqt(tuplenil(H1), locker) -> F 890.77/291.60 eqt(tuplenil(H1), mcrlrecord) -> F 890.77/291.60 eqt(tuplenil(H1), ok) -> F 890.77/291.60 eqt(tuplenil(H1), pending) -> F 890.77/291.60 eqt(tuplenil(H1), release) -> F 890.77/291.60 eqt(tuplenil(H1), request) -> F 890.77/291.60 eqt(tuplenil(H1), resource) -> F 890.77/291.60 eqt(tuplenil(H1), tag) -> F 890.77/291.60 eqt(tuplenil(H1), true) -> F 890.77/291.60 eqt(tuplenil(H1), undefined) -> F 890.77/291.60 eqt(tuplenil(H1), pid(N2)) -> F 890.77/291.60 eqt(tuplenil(H1), int(N2)) -> F 890.77/291.60 eqt(tuplenil(H1), cons(H2, T2)) -> F 890.77/291.60 eqt(tuplenil(H1), tuple(H2, T2)) -> F 890.77/291.60 eqt(tuplenil(H1), tuplenil(H2)) -> eqt(H1, H2) 890.77/291.60 element(int(s(0)), tuplenil(T1)) -> T1 890.77/291.60 element(int(s(0)), tuple(T1, T2)) -> T1 890.77/291.60 element(int(s(s(N1))), tuple(T1, T2)) -> element(int(s(N1)), T2) 890.77/291.60 record_new(lock) -> tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) 890.77/291.60 record_extract(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, resource) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))) 890.77/291.60 record_update(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, pending, NewF) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(NewF))))) 890.77/291.60 record_updates(Record, Name, nil) -> Record 890.77/291.60 record_updates(Record, Name, cons(tuple(Field, tuplenil(NewF)), Fields)) -> record_updates(record_update(Record, Name, Field, NewF), Name, Fields) 890.77/291.60 locker2_map_promote_pending(nil, Pending) -> nil 890.77/291.60 locker2_map_promote_pending(cons(Lock, Locks), Pending) -> cons(locker2_promote_pending(Lock, Pending), locker2_map_promote_pending(Locks, Pending)) 890.77/291.60 locker2_map_claim_lock(nil, Resources, Client) -> nil 890.77/291.60 locker2_map_claim_lock(cons(Lock, Locks), Resources, Client) -> cons(locker2_claim_lock(Lock, Resources, Client), locker2_map_claim_lock(Locks, Resources, Client)) 890.77/291.60 locker2_map_add_pending(nil, Resources, Client) -> nil 890.77/291.60 locker2_promote_pending(Lock, Client) -> case0(Client, Lock, record_extract(Lock, lock, pending)) 890.77/291.60 case0(Client, Lock, cons(Client, Pendings)) -> record_updates(Lock, lock, cons(tuple(excl, tuplenil(Client)), cons(tuple(pending, tuplenil(Pendings)), nil))) 890.77/291.60 case0(Client, Lock, MCRLFree0) -> Lock 890.77/291.60 locker2_remove_pending(Lock, Client) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(subtract(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.60 locker2_add_pending(Lock, Resources, Client) -> case1(Client, Resources, Lock, member(record_extract(Lock, lock, resource), Resources)) 890.77/291.60 case1(Client, Resources, Lock, true) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(append(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.60 case1(Client, Resources, Lock, false) -> Lock 890.77/291.60 locker2_release_lock(Lock, Client) -> case2(Client, Lock, gen_modtageq(Client, record_extract(Lock, lock, excl))) 890.77/291.60 case2(Client, Lock, true) -> record_updates(Lock, lock, cons(tuple(excllock, excl), nil)) 890.77/291.60 case4(Client, Lock, MCRLFree1) -> false 890.77/291.60 locker2_obtainables(nil, Client) -> true 890.77/291.60 locker2_obtainables(cons(Lock, Locks), Client) -> case5(Client, Locks, Lock, member(Client, record_extract(Lock, lock, pending))) 890.77/291.60 case5(Client, Locks, Lock, true) -> andt(locker2_obtainable(Lock, Client), locker2_obtainables(Locks, Client)) 890.77/291.60 case5(Client, Locks, Lock, false) -> locker2_obtainables(Locks, Client) 890.77/291.60 locker2_check_available(Resource, nil) -> false 890.77/291.60 locker2_check_available(Resource, cons(Lock, Locks)) -> case6(Locks, Lock, Resource, equal(Resource, record_extract(Lock, lock, resource))) 890.77/291.60 case6(Locks, Lock, Resource, true) -> andt(equal(record_extract(Lock, lock, excl), nil), equal(record_extract(Lock, lock, pending), nil)) 890.77/291.60 case6(Locks, Lock, Resource, false) -> locker2_check_available(Resource, Locks) 890.77/291.60 locker2_check_availables(nil, Locks) -> true 890.77/291.60 locker2_check_availables(cons(Resource, Resources), Locks) -> andt(locker2_check_available(Resource, Locks), locker2_check_availables(Resources, Locks)) 890.77/291.60 locker2_adduniq(nil, List) -> List 890.77/291.60 append(cons(Head, Tail), List) -> cons(Head, append(Tail, List)) 890.77/291.60 subtract(List, nil) -> List 890.77/291.60 subtract(List, cons(Head, Tail)) -> subtract(delete(Head, List), Tail) 890.77/291.60 delete(E, nil) -> nil 890.77/291.60 delete(E, cons(Head, Tail)) -> case8(Tail, Head, E, equal(E, Head)) 890.77/291.60 case8(Tail, Head, E, true) -> Tail 890.77/291.60 case8(Tail, Head, E, false) -> cons(Head, delete(E, Tail)) 890.77/291.60 gen_tag(Pid) -> tuple(Pid, tuplenil(tag)) 890.77/291.60 gen_modtageq(Client1, Client2) -> equal(Client1, Client2) 890.77/291.60 member(E, nil) -> false 890.77/291.60 member(E, cons(Head, Tail)) -> case9(Tail, Head, E, equal(E, Head)) 890.77/291.60 case9(Tail, Head, E, true) -> true 890.77/291.60 case9(Tail, Head, E, false) -> member(E, Tail) 890.77/291.60 eqs(empty, empty) -> T 890.77/291.60 eqs(empty, stack(E2, S2)) -> F 890.77/291.60 eqs(stack(E1, S1), empty) -> F 890.77/291.60 eqs(stack(E1, S1), stack(E2, S2)) -> and(eqt(E1, E2), eqs(S1, S2)) 890.77/291.60 pushs(E1, S1) -> stack(E1, S1) 890.77/291.60 pops(stack(E1, S1)) -> S1 890.77/291.60 tops(stack(E1, S1)) -> E1 890.77/291.60 istops(E1, empty) -> F 890.77/291.60 istops(E1, stack(E2, S1)) -> eqt(E1, E2) 890.77/291.60 eqc(nocalls, nocalls) -> T 890.77/291.60 eqc(nocalls, calls(E2, S2, CS2)) -> F 890.77/291.60 eqc(calls(E1, S1, CS1), nocalls) -> F 890.77/291.60 eqc(calls(E1, S1, CS1), calls(E2, S2, CS2)) -> and(eqt(E1, E2), and(eqs(S1, S2), eqc(CS1, CS2))) 890.77/291.60 push(E1, E2, nocalls) -> calls(E1, stack(E2, empty), nocalls) 890.77/291.60 push(E1, E2, calls(E3, S1, CS1)) -> push1(E1, E2, E3, S1, CS1, eqt(E1, E3)) 890.77/291.60 push1(E1, E2, E3, S1, CS1, T) -> calls(E3, pushs(E2, S1), CS1) 890.77/291.60 890.77/291.60 S is empty. 890.77/291.60 Rewrite Strategy: FULL 890.77/291.60 ---------------------------------------- 890.77/291.60 890.77/291.60 (3) DecreasingLoopProof (LOWER BOUND(ID)) 890.77/291.60 The following loop(s) give(s) rise to the lower bound Omega(n^1): 890.77/291.60 890.77/291.60 The rewrite sequence 890.77/291.60 890.77/291.60 eqt(tuple(H1, T1), tuple(H2, T2)) ->^+ and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.60 890.77/291.60 gives rise to a decreasing loop by considering the right hand sides subterm at position [0]. 890.77/291.60 890.77/291.60 The pumping substitution is [H1 / tuple(H1, T1), H2 / tuple(H2, T2)]. 890.77/291.60 890.77/291.60 The result substitution is [ ]. 890.77/291.60 890.77/291.60 890.77/291.60 890.77/291.60 890.77/291.60 ---------------------------------------- 890.77/291.60 890.77/291.60 (4) 890.77/291.60 Complex Obligation (BEST) 890.77/291.60 890.77/291.60 ---------------------------------------- 890.77/291.60 890.77/291.60 (5) 890.77/291.60 Obligation: 890.77/291.60 Proved the lower bound n^1 for the following obligation: 890.77/291.60 890.77/291.60 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 890.77/291.60 890.77/291.60 890.77/291.60 The TRS R consists of the following rules: 890.77/291.60 890.77/291.60 or(T, T) -> T 890.77/291.60 or(F, T) -> T 890.77/291.60 or(T, F) -> T 890.77/291.60 or(F, F) -> F 890.77/291.60 and(T, B) -> B 890.77/291.60 and(B, T) -> B 890.77/291.60 and(F, B) -> F 890.77/291.60 and(B, F) -> F 890.77/291.60 imp(T, B) -> B 890.77/291.60 imp(F, B) -> T 890.77/291.60 not(T) -> F 890.77/291.60 not(F) -> T 890.77/291.60 if(T, B1, B2) -> B1 890.77/291.60 if(F, B1, B2) -> B2 890.77/291.60 eq(T, T) -> T 890.77/291.60 eq(F, F) -> T 890.77/291.60 eq(T, F) -> F 890.77/291.60 eq(F, T) -> F 890.77/291.60 eqt(nil, undefined) -> F 890.77/291.60 eqt(nil, pid(N2)) -> F 890.77/291.60 eqt(nil, int(N2)) -> F 890.77/291.60 eqt(nil, cons(H2, T2)) -> F 890.77/291.60 eqt(nil, tuple(H2, T2)) -> F 890.77/291.60 eqt(nil, tuplenil(H2)) -> F 890.77/291.60 eqt(a, nil) -> F 890.77/291.60 eqt(a, a) -> T 890.77/291.60 eqt(a, excl) -> F 890.77/291.60 eqt(a, false) -> F 890.77/291.60 eqt(a, lock) -> F 890.77/291.60 eqt(a, locker) -> F 890.77/291.60 eqt(a, mcrlrecord) -> F 890.77/291.60 eqt(a, ok) -> F 890.77/291.60 eqt(a, pending) -> F 890.77/291.60 eqt(a, release) -> F 890.77/291.60 eqt(a, request) -> F 890.77/291.60 eqt(a, resource) -> F 890.77/291.60 eqt(a, tag) -> F 890.77/291.60 eqt(a, true) -> F 890.77/291.60 eqt(a, undefined) -> F 890.77/291.60 eqt(a, pid(N2)) -> F 890.77/291.60 eqt(a, int(N2)) -> F 890.77/291.60 eqt(a, cons(H2, T2)) -> F 890.77/291.60 eqt(a, tuple(H2, T2)) -> F 890.77/291.60 eqt(a, tuplenil(H2)) -> F 890.77/291.60 eqt(excl, nil) -> F 890.77/291.60 eqt(excl, a) -> F 890.77/291.60 eqt(excl, excl) -> T 890.77/291.60 eqt(excl, false) -> F 890.77/291.60 eqt(excl, lock) -> F 890.77/291.60 eqt(excl, locker) -> F 890.77/291.60 eqt(excl, mcrlrecord) -> F 890.77/291.60 eqt(excl, ok) -> F 890.77/291.60 eqt(excl, pending) -> F 890.77/291.60 eqt(excl, release) -> F 890.77/291.60 eqt(excl, request) -> F 890.77/291.60 eqt(excl, resource) -> F 890.77/291.60 eqt(excl, tag) -> F 890.77/291.60 eqt(excl, true) -> F 890.77/291.60 eqt(excl, undefined) -> F 890.77/291.60 eqt(excl, pid(N2)) -> F 890.77/291.60 eqt(excl, eqt(false, int(N2))) -> F 890.77/291.60 eqt(false, cons(H2, T2)) -> F 890.77/291.60 eqt(false, tuple(H2, T2)) -> F 890.77/291.60 eqt(false, tuplenil(H2)) -> F 890.77/291.60 eqt(lock, nil) -> F 890.77/291.60 eqt(lock, a) -> F 890.77/291.60 eqt(lock, excl) -> F 890.77/291.60 eqt(lock, false) -> F 890.77/291.60 eqt(lock, lock) -> T 890.77/291.60 eqt(lock, locker) -> F 890.77/291.60 eqt(lock, mcrlrecord) -> F 890.77/291.60 eqt(lock, ok) -> F 890.77/291.60 eqt(lock, pending) -> F 890.77/291.60 eqt(lock, release) -> F 890.77/291.60 eqt(lock, request) -> F 890.77/291.60 eqt(lock, resource) -> F 890.77/291.60 eqt(lock, tag) -> F 890.77/291.60 eqt(lock, true) -> F 890.77/291.60 eqt(lock, undefined) -> F 890.77/291.60 eqt(lock, pid(N2)) -> F 890.77/291.60 eqt(lock, int(N2)) -> F 890.77/291.60 eqt(lock, cons(H2, T2)) -> F 890.77/291.60 eqt(lock, tuple(H2, T2)) -> F 890.77/291.60 eqt(lock, tuplenil(H2)) -> F 890.77/291.60 eqt(locker, nil) -> F 890.77/291.60 eqt(locker, a) -> F 890.77/291.60 eqt(locker, excl) -> F 890.77/291.60 eqt(locker, false) -> F 890.77/291.60 eqt(locker, lock) -> F 890.77/291.60 eqt(locker, locker) -> T 890.77/291.60 eqt(locker, mcrlrecord) -> F 890.77/291.60 eqt(locker, ok) -> F 890.77/291.60 eqt(locker, pending) -> F 890.77/291.60 eqt(locker, release) -> F 890.77/291.60 eqt(locker, request) -> F 890.77/291.60 eqt(locker, resource) -> F 890.77/291.60 eqt(locker, tag) -> F 890.77/291.60 eqt(locker, true) -> F 890.77/291.60 eqt(locker, undefined) -> F 890.77/291.60 eqt(locker, pid(N2)) -> F 890.77/291.60 eqt(locker, int(N2)) -> F 890.77/291.60 eqt(locker, cons(H2, T2)) -> F 890.77/291.60 eqt(locker, tuple(H2, T2)) -> F 890.77/291.60 eqt(locker, tuplenil(H2)) -> F 890.77/291.60 eqt(mcrlrecord, nil) -> F 890.77/291.60 eqt(mcrlrecord, a) -> F 890.77/291.60 eqt(mcrlrecord, excl) -> F 890.77/291.60 eqt(mcrlrecord, false) -> F 890.77/291.60 eqt(mcrlrecord, lock) -> F 890.77/291.60 eqt(mcrlrecord, locker) -> F 890.77/291.60 eqt(mcrlrecord, mcrlrecord) -> T 890.77/291.60 eqt(mcrlrecord, ok) -> F 890.77/291.60 eqt(mcrlrecord, pending) -> F 890.77/291.60 eqt(mcrlrecord, release) -> F 890.77/291.60 eqt(mcrlrecord, request) -> F 890.77/291.60 eqt(mcrlrecord, resource) -> F 890.77/291.60 eqt(ok, resource) -> F 890.77/291.60 eqt(ok, tag) -> F 890.77/291.60 eqt(ok, true) -> F 890.77/291.60 eqt(ok, undefined) -> F 890.77/291.60 eqt(ok, pid(N2)) -> F 890.77/291.62 eqt(ok, int(N2)) -> F 890.77/291.62 eqt(ok, cons(H2, T2)) -> F 890.77/291.62 eqt(ok, tuple(H2, T2)) -> F 890.77/291.62 eqt(ok, tuplenil(H2)) -> F 890.77/291.62 eqt(pending, nil) -> F 890.77/291.62 eqt(pending, a) -> F 890.77/291.62 eqt(pending, excl) -> F 890.77/291.62 eqt(pending, false) -> F 890.77/291.62 eqt(pending, lock) -> F 890.77/291.62 eqt(pending, locker) -> F 890.77/291.62 eqt(pending, mcrlrecord) -> F 890.77/291.62 eqt(pending, ok) -> F 890.77/291.62 eqt(pending, pending) -> T 890.77/291.62 eqt(pending, release) -> F 890.77/291.62 eqt(pending, request) -> F 890.77/291.62 eqt(pending, resource) -> F 890.77/291.62 eqt(pending, tag) -> F 890.77/291.62 eqt(pending, true) -> F 890.77/291.62 eqt(pending, undefined) -> F 890.77/291.62 eqt(pending, pid(N2)) -> F 890.77/291.62 eqt(pending, int(N2)) -> F 890.77/291.62 eqt(pending, cons(H2, T2)) -> F 890.77/291.62 eqt(pending, tuple(H2, T2)) -> F 890.77/291.62 eqt(pending, tuplenil(H2)) -> F 890.77/291.62 eqt(release, nil) -> F 890.77/291.62 eqt(release, a) -> F 890.77/291.62 eqt(release, excl) -> F 890.77/291.62 eqt(release, false) -> F 890.77/291.62 eqt(release, lock) -> F 890.77/291.62 eqt(release, locker) -> F 890.77/291.62 eqt(release, mcrlrecord) -> F 890.77/291.62 eqt(release, ok) -> F 890.77/291.62 eqt(request, mcrlrecord) -> F 890.77/291.62 eqt(request, ok) -> F 890.77/291.62 eqt(request, pending) -> F 890.77/291.62 eqt(request, release) -> F 890.77/291.62 eqt(request, request) -> T 890.77/291.62 eqt(request, resource) -> F 890.77/291.62 eqt(request, tag) -> F 890.77/291.62 eqt(request, true) -> F 890.77/291.62 eqt(request, undefined) -> F 890.77/291.62 eqt(request, pid(N2)) -> F 890.77/291.62 eqt(request, int(N2)) -> F 890.77/291.62 eqt(request, cons(H2, T2)) -> F 890.77/291.62 eqt(request, tuple(H2, T2)) -> F 890.77/291.62 eqt(request, tuplenil(H2)) -> F 890.77/291.62 eqt(resource, nil) -> F 890.77/291.62 eqt(resource, a) -> F 890.77/291.62 eqt(resource, excl) -> F 890.77/291.62 eqt(resource, false) -> F 890.77/291.62 eqt(resource, lock) -> F 890.77/291.62 eqt(resource, locker) -> F 890.77/291.62 eqt(resource, mcrlrecord) -> F 890.77/291.62 eqt(resource, ok) -> F 890.77/291.62 eqt(resource, pending) -> F 890.77/291.62 eqt(resource, release) -> F 890.77/291.62 eqt(resource, request) -> F 890.77/291.62 eqt(resource, resource) -> T 890.77/291.62 eqt(resource, tag) -> F 890.77/291.62 eqt(resource, true) -> F 890.77/291.62 eqt(resource, undefined) -> F 890.77/291.62 eqt(resource, pid(N2)) -> F 890.77/291.62 eqt(resource, int(N2)) -> F 890.77/291.62 eqt(resource, cons(H2, T2)) -> F 890.77/291.62 eqt(resource, tuple(H2, T2)) -> F 890.77/291.62 eqt(resource, tuplenil(H2)) -> F 890.77/291.62 eqt(tag, nil) -> F 890.77/291.62 eqt(tag, a) -> F 890.77/291.62 eqt(tag, excl) -> F 890.77/291.62 eqt(tag, false) -> F 890.77/291.62 eqt(tag, lock) -> F 890.77/291.62 eqt(tag, locker) -> F 890.77/291.62 eqt(tag, mcrlrecord) -> F 890.77/291.62 eqt(tag, ok) -> F 890.77/291.62 eqt(tag, pending) -> F 890.77/291.62 eqt(tag, release) -> F 890.77/291.62 eqt(tag, request) -> F 890.77/291.62 eqt(tag, resource) -> F 890.77/291.62 eqt(tag, tag) -> T 890.77/291.62 eqt(tag, true) -> F 890.77/291.62 eqt(tag, undefined) -> F 890.77/291.62 eqt(tag, pid(N2)) -> F 890.77/291.62 eqt(tag, int(N2)) -> F 890.77/291.62 eqt(tag, cons(H2, T2)) -> F 890.77/291.62 eqt(tag, tuple(H2, T2)) -> F 890.77/291.62 eqt(tag, tuplenil(H2)) -> F 890.77/291.62 eqt(true, nil) -> F 890.77/291.62 eqt(true, a) -> F 890.77/291.62 eqt(true, excl) -> F 890.77/291.62 eqt(true, false) -> F 890.77/291.62 eqt(true, lock) -> F 890.77/291.62 eqt(true, locker) -> F 890.77/291.62 eqt(true, mcrlrecord) -> F 890.77/291.62 eqt(true, ok) -> F 890.77/291.62 eqt(true, pending) -> F 890.77/291.62 eqt(true, release) -> F 890.77/291.62 eqt(true, request) -> F 890.77/291.62 eqt(true, resource) -> F 890.77/291.62 eqt(true, tag) -> F 890.77/291.62 eqt(true, true) -> T 890.77/291.62 eqt(true, undefined) -> F 890.77/291.62 eqt(true, pid(N2)) -> F 890.77/291.62 eqt(true, int(N2)) -> F 890.77/291.62 eqt(true, cons(H2, T2)) -> F 890.77/291.62 eqt(true, tuple(H2, T2)) -> F 890.77/291.62 eqt(true, tuplenil(H2)) -> F 890.77/291.62 eqt(undefined, nil) -> F 890.77/291.62 eqt(undefined, a) -> F 890.77/291.62 eqt(undefined, tuplenil(H2)) -> F 890.77/291.62 eqt(pid(N1), nil) -> F 890.77/291.62 eqt(pid(N1), a) -> F 890.77/291.62 eqt(pid(N1), excl) -> F 890.77/291.62 eqt(pid(N1), false) -> F 890.77/291.62 eqt(pid(N1), lock) -> F 890.77/291.62 eqt(pid(N1), locker) -> F 890.77/291.62 eqt(pid(N1), mcrlrecord) -> F 890.77/291.62 eqt(pid(N1), ok) -> F 890.77/291.62 eqt(pid(N1), pending) -> F 890.77/291.62 eqt(pid(N1), release) -> F 890.77/291.62 eqt(pid(N1), request) -> F 890.77/291.62 eqt(pid(N1), resource) -> F 890.77/291.62 eqt(pid(N1), tag) -> F 890.77/291.62 eqt(pid(N1), true) -> F 890.77/291.62 eqt(pid(N1), undefined) -> F 890.77/291.62 eqt(pid(N1), pid(N2)) -> eqt(N1, N2) 890.77/291.62 eqt(pid(N1), int(N2)) -> F 890.77/291.62 eqt(pid(N1), cons(H2, T2)) -> F 890.77/291.62 eqt(pid(N1), tuple(H2, T2)) -> F 890.77/291.62 eqt(pid(N1), tuplenil(H2)) -> F 890.77/291.62 eqt(int(N1), nil) -> F 890.77/291.62 eqt(int(N1), a) -> F 890.77/291.62 eqt(int(N1), excl) -> F 890.77/291.62 eqt(int(N1), false) -> F 890.77/291.62 eqt(int(N1), lock) -> F 890.77/291.62 eqt(int(N1), locker) -> F 890.77/291.62 eqt(int(N1), mcrlrecord) -> F 890.77/291.62 eqt(int(N1), ok) -> F 890.77/291.62 eqt(int(N1), pending) -> F 890.77/291.62 eqt(int(N1), release) -> F 890.77/291.62 eqt(int(N1), request) -> F 890.77/291.62 eqt(int(N1), resource) -> F 890.77/291.62 eqt(int(N1), tag) -> F 890.77/291.62 eqt(int(N1), true) -> F 890.77/291.62 eqt(int(N1), undefined) -> F 890.77/291.62 eqt(cons(H1, T1), resource) -> F 890.77/291.62 eqt(cons(H1, T1), tag) -> F 890.77/291.62 eqt(cons(H1, T1), true) -> F 890.77/291.62 eqt(cons(H1, T1), undefined) -> F 890.77/291.62 eqt(cons(H1, T1), pid(N2)) -> F 890.77/291.62 eqt(cons(H1, T1), int(N2)) -> F 890.77/291.62 eqt(cons(H1, T1), cons(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.62 eqt(cons(H1, T1), tuple(H2, T2)) -> F 890.77/291.62 eqt(cons(H1, T1), tuplenil(H2)) -> F 890.77/291.62 eqt(tuple(H1, T1), nil) -> F 890.77/291.62 eqt(tuple(H1, T1), a) -> F 890.77/291.62 eqt(tuple(H1, T1), excl) -> F 890.77/291.62 eqt(tuple(H1, T1), false) -> F 890.77/291.62 eqt(tuple(H1, T1), lock) -> F 890.77/291.62 eqt(tuple(H1, T1), locker) -> F 890.77/291.62 eqt(tuple(H1, T1), mcrlrecord) -> F 890.77/291.62 eqt(tuple(H1, T1), ok) -> F 890.77/291.62 eqt(tuple(H1, T1), pending) -> F 890.77/291.62 eqt(tuple(H1, T1), release) -> F 890.77/291.62 eqt(tuple(H1, T1), request) -> F 890.77/291.62 eqt(tuple(H1, T1), resource) -> F 890.77/291.62 eqt(tuple(H1, T1), tag) -> F 890.77/291.62 eqt(tuple(H1, T1), true) -> F 890.77/291.62 eqt(tuple(H1, T1), undefined) -> F 890.77/291.62 eqt(tuple(H1, T1), pid(N2)) -> F 890.77/291.62 eqt(tuple(H1, T1), int(N2)) -> F 890.77/291.62 eqt(tuple(H1, T1), cons(H2, T2)) -> F 890.77/291.62 eqt(tuple(H1, T1), tuple(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.62 eqt(tuple(H1, T1), tuplenil(H2)) -> F 890.77/291.62 eqt(tuplenil(H1), nil) -> F 890.77/291.62 eqt(tuplenil(H1), a) -> F 890.77/291.62 eqt(tuplenil(H1), excl) -> F 890.77/291.62 eqt(tuplenil(H1), false) -> F 890.77/291.62 eqt(tuplenil(H1), lock) -> F 890.77/291.62 eqt(tuplenil(H1), locker) -> F 890.77/291.62 eqt(tuplenil(H1), mcrlrecord) -> F 890.77/291.62 eqt(tuplenil(H1), ok) -> F 890.77/291.62 eqt(tuplenil(H1), pending) -> F 890.77/291.62 eqt(tuplenil(H1), release) -> F 890.77/291.62 eqt(tuplenil(H1), request) -> F 890.77/291.62 eqt(tuplenil(H1), resource) -> F 890.77/291.62 eqt(tuplenil(H1), tag) -> F 890.77/291.62 eqt(tuplenil(H1), true) -> F 890.77/291.62 eqt(tuplenil(H1), undefined) -> F 890.77/291.62 eqt(tuplenil(H1), pid(N2)) -> F 890.77/291.62 eqt(tuplenil(H1), int(N2)) -> F 890.77/291.62 eqt(tuplenil(H1), cons(H2, T2)) -> F 890.77/291.62 eqt(tuplenil(H1), tuple(H2, T2)) -> F 890.77/291.62 eqt(tuplenil(H1), tuplenil(H2)) -> eqt(H1, H2) 890.77/291.62 element(int(s(0)), tuplenil(T1)) -> T1 890.77/291.62 element(int(s(0)), tuple(T1, T2)) -> T1 890.77/291.62 element(int(s(s(N1))), tuple(T1, T2)) -> element(int(s(N1)), T2) 890.77/291.62 record_new(lock) -> tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) 890.77/291.62 record_extract(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, resource) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))) 890.77/291.62 record_update(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, pending, NewF) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(NewF))))) 890.77/291.62 record_updates(Record, Name, nil) -> Record 890.77/291.62 record_updates(Record, Name, cons(tuple(Field, tuplenil(NewF)), Fields)) -> record_updates(record_update(Record, Name, Field, NewF), Name, Fields) 890.77/291.62 locker2_map_promote_pending(nil, Pending) -> nil 890.77/291.62 locker2_map_promote_pending(cons(Lock, Locks), Pending) -> cons(locker2_promote_pending(Lock, Pending), locker2_map_promote_pending(Locks, Pending)) 890.77/291.62 locker2_map_claim_lock(nil, Resources, Client) -> nil 890.77/291.62 locker2_map_claim_lock(cons(Lock, Locks), Resources, Client) -> cons(locker2_claim_lock(Lock, Resources, Client), locker2_map_claim_lock(Locks, Resources, Client)) 890.77/291.62 locker2_map_add_pending(nil, Resources, Client) -> nil 890.77/291.62 locker2_promote_pending(Lock, Client) -> case0(Client, Lock, record_extract(Lock, lock, pending)) 890.77/291.62 case0(Client, Lock, cons(Client, Pendings)) -> record_updates(Lock, lock, cons(tuple(excl, tuplenil(Client)), cons(tuple(pending, tuplenil(Pendings)), nil))) 890.77/291.62 case0(Client, Lock, MCRLFree0) -> Lock 890.77/291.62 locker2_remove_pending(Lock, Client) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(subtract(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.62 locker2_add_pending(Lock, Resources, Client) -> case1(Client, Resources, Lock, member(record_extract(Lock, lock, resource), Resources)) 890.77/291.62 case1(Client, Resources, Lock, true) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(append(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.62 case1(Client, Resources, Lock, false) -> Lock 890.77/291.62 locker2_release_lock(Lock, Client) -> case2(Client, Lock, gen_modtageq(Client, record_extract(Lock, lock, excl))) 890.77/291.62 case2(Client, Lock, true) -> record_updates(Lock, lock, cons(tuple(excllock, excl), nil)) 890.77/291.62 case4(Client, Lock, MCRLFree1) -> false 890.77/291.62 locker2_obtainables(nil, Client) -> true 890.77/291.62 locker2_obtainables(cons(Lock, Locks), Client) -> case5(Client, Locks, Lock, member(Client, record_extract(Lock, lock, pending))) 890.77/291.62 case5(Client, Locks, Lock, true) -> andt(locker2_obtainable(Lock, Client), locker2_obtainables(Locks, Client)) 890.77/291.62 case5(Client, Locks, Lock, false) -> locker2_obtainables(Locks, Client) 890.77/291.62 locker2_check_available(Resource, nil) -> false 890.77/291.62 locker2_check_available(Resource, cons(Lock, Locks)) -> case6(Locks, Lock, Resource, equal(Resource, record_extract(Lock, lock, resource))) 890.77/291.62 case6(Locks, Lock, Resource, true) -> andt(equal(record_extract(Lock, lock, excl), nil), equal(record_extract(Lock, lock, pending), nil)) 890.77/291.62 case6(Locks, Lock, Resource, false) -> locker2_check_available(Resource, Locks) 890.77/291.62 locker2_check_availables(nil, Locks) -> true 890.77/291.62 locker2_check_availables(cons(Resource, Resources), Locks) -> andt(locker2_check_available(Resource, Locks), locker2_check_availables(Resources, Locks)) 890.77/291.62 locker2_adduniq(nil, List) -> List 890.77/291.62 append(cons(Head, Tail), List) -> cons(Head, append(Tail, List)) 890.77/291.62 subtract(List, nil) -> List 890.77/291.62 subtract(List, cons(Head, Tail)) -> subtract(delete(Head, List), Tail) 890.77/291.62 delete(E, nil) -> nil 890.77/291.62 delete(E, cons(Head, Tail)) -> case8(Tail, Head, E, equal(E, Head)) 890.77/291.62 case8(Tail, Head, E, true) -> Tail 890.77/291.62 case8(Tail, Head, E, false) -> cons(Head, delete(E, Tail)) 890.77/291.62 gen_tag(Pid) -> tuple(Pid, tuplenil(tag)) 890.77/291.62 gen_modtageq(Client1, Client2) -> equal(Client1, Client2) 890.77/291.62 member(E, nil) -> false 890.77/291.62 member(E, cons(Head, Tail)) -> case9(Tail, Head, E, equal(E, Head)) 890.77/291.62 case9(Tail, Head, E, true) -> true 890.77/291.62 case9(Tail, Head, E, false) -> member(E, Tail) 890.77/291.62 eqs(empty, empty) -> T 890.77/291.62 eqs(empty, stack(E2, S2)) -> F 890.77/291.62 eqs(stack(E1, S1), empty) -> F 890.77/291.62 eqs(stack(E1, S1), stack(E2, S2)) -> and(eqt(E1, E2), eqs(S1, S2)) 890.77/291.62 pushs(E1, S1) -> stack(E1, S1) 890.77/291.62 pops(stack(E1, S1)) -> S1 890.77/291.62 tops(stack(E1, S1)) -> E1 890.77/291.62 istops(E1, empty) -> F 890.77/291.62 istops(E1, stack(E2, S1)) -> eqt(E1, E2) 890.77/291.62 eqc(nocalls, nocalls) -> T 890.77/291.62 eqc(nocalls, calls(E2, S2, CS2)) -> F 890.77/291.62 eqc(calls(E1, S1, CS1), nocalls) -> F 890.77/291.62 eqc(calls(E1, S1, CS1), calls(E2, S2, CS2)) -> and(eqt(E1, E2), and(eqs(S1, S2), eqc(CS1, CS2))) 890.77/291.62 push(E1, E2, nocalls) -> calls(E1, stack(E2, empty), nocalls) 890.77/291.62 push(E1, E2, calls(E3, S1, CS1)) -> push1(E1, E2, E3, S1, CS1, eqt(E1, E3)) 890.77/291.62 push1(E1, E2, E3, S1, CS1, T) -> calls(E3, pushs(E2, S1), CS1) 890.77/291.62 890.77/291.62 S is empty. 890.77/291.62 Rewrite Strategy: FULL 890.77/291.62 ---------------------------------------- 890.77/291.62 890.77/291.62 (6) LowerBoundPropagationProof (FINISHED) 890.77/291.62 Propagated lower bound. 890.77/291.62 ---------------------------------------- 890.77/291.62 890.77/291.62 (7) 890.77/291.62 BOUNDS(n^1, INF) 890.77/291.62 890.77/291.62 ---------------------------------------- 890.77/291.62 890.77/291.62 (8) 890.77/291.62 Obligation: 890.77/291.62 Analyzing the following TRS for decreasing loops: 890.77/291.62 890.77/291.62 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 890.77/291.62 890.77/291.62 890.77/291.62 The TRS R consists of the following rules: 890.77/291.62 890.77/291.62 or(T, T) -> T 890.77/291.62 or(F, T) -> T 890.77/291.62 or(T, F) -> T 890.77/291.62 or(F, F) -> F 890.77/291.62 and(T, B) -> B 890.77/291.62 and(B, T) -> B 890.77/291.62 and(F, B) -> F 890.77/291.62 and(B, F) -> F 890.77/291.62 imp(T, B) -> B 890.77/291.62 imp(F, B) -> T 890.77/291.62 not(T) -> F 890.77/291.62 not(F) -> T 890.77/291.62 if(T, B1, B2) -> B1 890.77/291.62 if(F, B1, B2) -> B2 890.77/291.62 eq(T, T) -> T 890.77/291.62 eq(F, F) -> T 890.77/291.62 eq(T, F) -> F 890.77/291.62 eq(F, T) -> F 890.77/291.62 eqt(nil, undefined) -> F 890.77/291.62 eqt(nil, pid(N2)) -> F 890.77/291.62 eqt(nil, int(N2)) -> F 890.77/291.62 eqt(nil, cons(H2, T2)) -> F 890.77/291.62 eqt(nil, tuple(H2, T2)) -> F 890.77/291.62 eqt(nil, tuplenil(H2)) -> F 890.77/291.62 eqt(a, nil) -> F 890.77/291.62 eqt(a, a) -> T 890.77/291.62 eqt(a, excl) -> F 890.77/291.62 eqt(a, false) -> F 890.77/291.62 eqt(a, lock) -> F 890.77/291.62 eqt(a, locker) -> F 890.77/291.62 eqt(a, mcrlrecord) -> F 890.77/291.62 eqt(a, ok) -> F 890.77/291.62 eqt(a, pending) -> F 890.77/291.62 eqt(a, release) -> F 890.77/291.62 eqt(a, request) -> F 890.77/291.62 eqt(a, resource) -> F 890.77/291.62 eqt(a, tag) -> F 890.77/291.62 eqt(a, true) -> F 890.77/291.62 eqt(a, undefined) -> F 890.77/291.62 eqt(a, pid(N2)) -> F 890.77/291.62 eqt(a, int(N2)) -> F 890.77/291.62 eqt(a, cons(H2, T2)) -> F 890.77/291.62 eqt(a, tuple(H2, T2)) -> F 890.77/291.62 eqt(a, tuplenil(H2)) -> F 890.77/291.62 eqt(excl, nil) -> F 890.77/291.62 eqt(excl, a) -> F 890.77/291.62 eqt(excl, excl) -> T 890.77/291.62 eqt(excl, false) -> F 890.77/291.62 eqt(excl, lock) -> F 890.77/291.62 eqt(excl, locker) -> F 890.77/291.62 eqt(excl, mcrlrecord) -> F 890.77/291.62 eqt(excl, ok) -> F 890.77/291.62 eqt(excl, pending) -> F 890.77/291.62 eqt(excl, release) -> F 890.77/291.62 eqt(excl, request) -> F 890.77/291.62 eqt(excl, resource) -> F 890.77/291.62 eqt(excl, tag) -> F 890.77/291.62 eqt(excl, true) -> F 890.77/291.62 eqt(excl, undefined) -> F 890.77/291.62 eqt(excl, pid(N2)) -> F 890.77/291.62 eqt(excl, eqt(false, int(N2))) -> F 890.77/291.62 eqt(false, cons(H2, T2)) -> F 890.77/291.62 eqt(false, tuple(H2, T2)) -> F 890.77/291.62 eqt(false, tuplenil(H2)) -> F 890.77/291.62 eqt(lock, nil) -> F 890.77/291.62 eqt(lock, a) -> F 890.77/291.62 eqt(lock, excl) -> F 890.77/291.62 eqt(lock, false) -> F 890.77/291.62 eqt(lock, lock) -> T 890.77/291.62 eqt(lock, locker) -> F 890.77/291.62 eqt(lock, mcrlrecord) -> F 890.77/291.62 eqt(lock, ok) -> F 890.77/291.62 eqt(lock, pending) -> F 890.77/291.62 eqt(lock, release) -> F 890.77/291.62 eqt(lock, request) -> F 890.77/291.62 eqt(lock, resource) -> F 890.77/291.62 eqt(lock, tag) -> F 890.77/291.62 eqt(lock, true) -> F 890.77/291.62 eqt(lock, undefined) -> F 890.77/291.62 eqt(lock, pid(N2)) -> F 890.77/291.62 eqt(lock, int(N2)) -> F 890.77/291.62 eqt(lock, cons(H2, T2)) -> F 890.77/291.62 eqt(lock, tuple(H2, T2)) -> F 890.77/291.62 eqt(lock, tuplenil(H2)) -> F 890.77/291.62 eqt(locker, nil) -> F 890.77/291.62 eqt(locker, a) -> F 890.77/291.62 eqt(locker, excl) -> F 890.77/291.62 eqt(locker, false) -> F 890.77/291.62 eqt(locker, lock) -> F 890.77/291.62 eqt(locker, locker) -> T 890.77/291.62 eqt(locker, mcrlrecord) -> F 890.77/291.62 eqt(locker, ok) -> F 890.77/291.62 eqt(locker, pending) -> F 890.77/291.62 eqt(locker, release) -> F 890.77/291.62 eqt(locker, request) -> F 890.77/291.62 eqt(locker, resource) -> F 890.77/291.62 eqt(locker, tag) -> F 890.77/291.62 eqt(locker, true) -> F 890.77/291.62 eqt(locker, undefined) -> F 890.77/291.62 eqt(locker, pid(N2)) -> F 890.77/291.62 eqt(locker, int(N2)) -> F 890.77/291.62 eqt(locker, cons(H2, T2)) -> F 890.77/291.62 eqt(locker, tuple(H2, T2)) -> F 890.77/291.62 eqt(locker, tuplenil(H2)) -> F 890.77/291.62 eqt(mcrlrecord, nil) -> F 890.77/291.62 eqt(mcrlrecord, a) -> F 890.77/291.62 eqt(mcrlrecord, excl) -> F 890.77/291.62 eqt(mcrlrecord, false) -> F 890.77/291.62 eqt(mcrlrecord, lock) -> F 890.77/291.62 eqt(mcrlrecord, locker) -> F 890.77/291.62 eqt(mcrlrecord, mcrlrecord) -> T 890.77/291.62 eqt(mcrlrecord, ok) -> F 890.77/291.62 eqt(mcrlrecord, pending) -> F 890.77/291.62 eqt(mcrlrecord, release) -> F 890.77/291.62 eqt(mcrlrecord, request) -> F 890.77/291.62 eqt(mcrlrecord, resource) -> F 890.77/291.62 eqt(ok, resource) -> F 890.77/291.62 eqt(ok, tag) -> F 890.77/291.62 eqt(ok, true) -> F 890.77/291.62 eqt(ok, undefined) -> F 890.77/291.62 eqt(ok, pid(N2)) -> F 890.77/291.62 eqt(ok, int(N2)) -> F 890.77/291.62 eqt(ok, cons(H2, T2)) -> F 890.77/291.62 eqt(ok, tuple(H2, T2)) -> F 890.77/291.62 eqt(ok, tuplenil(H2)) -> F 890.77/291.62 eqt(pending, nil) -> F 890.77/291.62 eqt(pending, a) -> F 890.77/291.62 eqt(pending, excl) -> F 890.77/291.62 eqt(pending, false) -> F 890.77/291.62 eqt(pending, lock) -> F 890.77/291.62 eqt(pending, locker) -> F 890.77/291.62 eqt(pending, mcrlrecord) -> F 890.77/291.62 eqt(pending, ok) -> F 890.77/291.62 eqt(pending, pending) -> T 890.77/291.62 eqt(pending, release) -> F 890.77/291.62 eqt(pending, request) -> F 890.77/291.62 eqt(pending, resource) -> F 890.77/291.62 eqt(pending, tag) -> F 890.77/291.62 eqt(pending, true) -> F 890.77/291.62 eqt(pending, undefined) -> F 890.77/291.62 eqt(pending, pid(N2)) -> F 890.77/291.62 eqt(pending, int(N2)) -> F 890.77/291.62 eqt(pending, cons(H2, T2)) -> F 890.77/291.62 eqt(pending, tuple(H2, T2)) -> F 890.77/291.62 eqt(pending, tuplenil(H2)) -> F 890.77/291.62 eqt(release, nil) -> F 890.77/291.62 eqt(release, a) -> F 890.77/291.62 eqt(release, excl) -> F 890.77/291.62 eqt(release, false) -> F 890.77/291.62 eqt(release, lock) -> F 890.77/291.62 eqt(release, locker) -> F 890.77/291.62 eqt(release, mcrlrecord) -> F 890.77/291.62 eqt(release, ok) -> F 890.77/291.62 eqt(request, mcrlrecord) -> F 890.77/291.62 eqt(request, ok) -> F 890.77/291.62 eqt(request, pending) -> F 890.77/291.62 eqt(request, release) -> F 890.77/291.62 eqt(request, request) -> T 890.77/291.62 eqt(request, resource) -> F 890.77/291.62 eqt(request, tag) -> F 890.77/291.62 eqt(request, true) -> F 890.77/291.62 eqt(request, undefined) -> F 890.77/291.62 eqt(request, pid(N2)) -> F 890.77/291.62 eqt(request, int(N2)) -> F 890.77/291.62 eqt(request, cons(H2, T2)) -> F 890.77/291.62 eqt(request, tuple(H2, T2)) -> F 890.77/291.62 eqt(request, tuplenil(H2)) -> F 890.77/291.62 eqt(resource, nil) -> F 890.77/291.62 eqt(resource, a) -> F 890.77/291.62 eqt(resource, excl) -> F 890.77/291.62 eqt(resource, false) -> F 890.77/291.62 eqt(resource, lock) -> F 890.77/291.62 eqt(resource, locker) -> F 890.77/291.62 eqt(resource, mcrlrecord) -> F 890.77/291.62 eqt(resource, ok) -> F 890.77/291.62 eqt(resource, pending) -> F 890.77/291.62 eqt(resource, release) -> F 890.77/291.62 eqt(resource, request) -> F 890.77/291.62 eqt(resource, resource) -> T 890.77/291.62 eqt(resource, tag) -> F 890.77/291.62 eqt(resource, true) -> F 890.77/291.62 eqt(resource, undefined) -> F 890.77/291.62 eqt(resource, pid(N2)) -> F 890.77/291.62 eqt(resource, int(N2)) -> F 890.77/291.62 eqt(resource, cons(H2, T2)) -> F 890.77/291.62 eqt(resource, tuple(H2, T2)) -> F 890.77/291.62 eqt(resource, tuplenil(H2)) -> F 890.77/291.62 eqt(tag, nil) -> F 890.77/291.62 eqt(tag, a) -> F 890.77/291.62 eqt(tag, excl) -> F 890.77/291.62 eqt(tag, false) -> F 890.77/291.62 eqt(tag, lock) -> F 890.77/291.62 eqt(tag, locker) -> F 890.77/291.62 eqt(tag, mcrlrecord) -> F 890.77/291.62 eqt(tag, ok) -> F 890.77/291.62 eqt(tag, pending) -> F 890.77/291.62 eqt(tag, release) -> F 890.77/291.62 eqt(tag, request) -> F 890.77/291.62 eqt(tag, resource) -> F 890.77/291.62 eqt(tag, tag) -> T 890.77/291.62 eqt(tag, true) -> F 890.77/291.62 eqt(tag, undefined) -> F 890.77/291.62 eqt(tag, pid(N2)) -> F 890.77/291.62 eqt(tag, int(N2)) -> F 890.77/291.62 eqt(tag, cons(H2, T2)) -> F 890.77/291.62 eqt(tag, tuple(H2, T2)) -> F 890.77/291.62 eqt(tag, tuplenil(H2)) -> F 890.77/291.62 eqt(true, nil) -> F 890.77/291.62 eqt(true, a) -> F 890.77/291.62 eqt(true, excl) -> F 890.77/291.62 eqt(true, false) -> F 890.77/291.62 eqt(true, lock) -> F 890.77/291.62 eqt(true, locker) -> F 890.77/291.62 eqt(true, mcrlrecord) -> F 890.77/291.62 eqt(true, ok) -> F 890.77/291.62 eqt(true, pending) -> F 890.77/291.62 eqt(true, release) -> F 890.77/291.62 eqt(true, request) -> F 890.77/291.62 eqt(true, resource) -> F 890.77/291.62 eqt(true, tag) -> F 890.77/291.62 eqt(true, true) -> T 890.77/291.62 eqt(true, undefined) -> F 890.77/291.62 eqt(true, pid(N2)) -> F 890.77/291.62 eqt(true, int(N2)) -> F 890.77/291.62 eqt(true, cons(H2, T2)) -> F 890.77/291.62 eqt(true, tuple(H2, T2)) -> F 890.77/291.62 eqt(true, tuplenil(H2)) -> F 890.77/291.62 eqt(undefined, nil) -> F 890.77/291.62 eqt(undefined, a) -> F 890.77/291.62 eqt(undefined, tuplenil(H2)) -> F 890.77/291.62 eqt(pid(N1), nil) -> F 890.77/291.62 eqt(pid(N1), a) -> F 890.77/291.62 eqt(pid(N1), excl) -> F 890.77/291.62 eqt(pid(N1), false) -> F 890.77/291.62 eqt(pid(N1), lock) -> F 890.77/291.62 eqt(pid(N1), locker) -> F 890.77/291.62 eqt(pid(N1), mcrlrecord) -> F 890.77/291.62 eqt(pid(N1), ok) -> F 890.77/291.62 eqt(pid(N1), pending) -> F 890.77/291.62 eqt(pid(N1), release) -> F 890.77/291.62 eqt(pid(N1), request) -> F 890.77/291.62 eqt(pid(N1), resource) -> F 890.77/291.62 eqt(pid(N1), tag) -> F 890.77/291.62 eqt(pid(N1), true) -> F 890.77/291.62 eqt(pid(N1), undefined) -> F 890.77/291.62 eqt(pid(N1), pid(N2)) -> eqt(N1, N2) 890.77/291.62 eqt(pid(N1), int(N2)) -> F 890.77/291.62 eqt(pid(N1), cons(H2, T2)) -> F 890.77/291.62 eqt(pid(N1), tuple(H2, T2)) -> F 890.77/291.62 eqt(pid(N1), tuplenil(H2)) -> F 890.77/291.62 eqt(int(N1), nil) -> F 890.77/291.62 eqt(int(N1), a) -> F 890.77/291.62 eqt(int(N1), excl) -> F 890.77/291.62 eqt(int(N1), false) -> F 890.77/291.62 eqt(int(N1), lock) -> F 890.77/291.62 eqt(int(N1), locker) -> F 890.77/291.62 eqt(int(N1), mcrlrecord) -> F 890.77/291.62 eqt(int(N1), ok) -> F 890.77/291.62 eqt(int(N1), pending) -> F 890.77/291.62 eqt(int(N1), release) -> F 890.77/291.62 eqt(int(N1), request) -> F 890.77/291.62 eqt(int(N1), resource) -> F 890.77/291.62 eqt(int(N1), tag) -> F 890.77/291.62 eqt(int(N1), true) -> F 890.77/291.62 eqt(int(N1), undefined) -> F 890.77/291.62 eqt(cons(H1, T1), resource) -> F 890.77/291.62 eqt(cons(H1, T1), tag) -> F 890.77/291.62 eqt(cons(H1, T1), true) -> F 890.77/291.62 eqt(cons(H1, T1), undefined) -> F 890.77/291.62 eqt(cons(H1, T1), pid(N2)) -> F 890.77/291.62 eqt(cons(H1, T1), int(N2)) -> F 890.77/291.62 eqt(cons(H1, T1), cons(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.62 eqt(cons(H1, T1), tuple(H2, T2)) -> F 890.77/291.62 eqt(cons(H1, T1), tuplenil(H2)) -> F 890.77/291.62 eqt(tuple(H1, T1), nil) -> F 890.77/291.62 eqt(tuple(H1, T1), a) -> F 890.77/291.62 eqt(tuple(H1, T1), excl) -> F 890.77/291.62 eqt(tuple(H1, T1), false) -> F 890.77/291.62 eqt(tuple(H1, T1), lock) -> F 890.77/291.62 eqt(tuple(H1, T1), locker) -> F 890.77/291.62 eqt(tuple(H1, T1), mcrlrecord) -> F 890.77/291.62 eqt(tuple(H1, T1), ok) -> F 890.77/291.62 eqt(tuple(H1, T1), pending) -> F 890.77/291.62 eqt(tuple(H1, T1), release) -> F 890.77/291.62 eqt(tuple(H1, T1), request) -> F 890.77/291.62 eqt(tuple(H1, T1), resource) -> F 890.77/291.62 eqt(tuple(H1, T1), tag) -> F 890.77/291.62 eqt(tuple(H1, T1), true) -> F 890.77/291.62 eqt(tuple(H1, T1), undefined) -> F 890.77/291.62 eqt(tuple(H1, T1), pid(N2)) -> F 890.77/291.62 eqt(tuple(H1, T1), int(N2)) -> F 890.77/291.62 eqt(tuple(H1, T1), cons(H2, T2)) -> F 890.77/291.62 eqt(tuple(H1, T1), tuple(H2, T2)) -> and(eqt(H1, H2), eqt(T1, T2)) 890.77/291.62 eqt(tuple(H1, T1), tuplenil(H2)) -> F 890.77/291.62 eqt(tuplenil(H1), nil) -> F 890.77/291.62 eqt(tuplenil(H1), a) -> F 890.77/291.62 eqt(tuplenil(H1), excl) -> F 890.77/291.62 eqt(tuplenil(H1), false) -> F 890.77/291.62 eqt(tuplenil(H1), lock) -> F 890.77/291.62 eqt(tuplenil(H1), locker) -> F 890.77/291.62 eqt(tuplenil(H1), mcrlrecord) -> F 890.77/291.62 eqt(tuplenil(H1), ok) -> F 890.77/291.62 eqt(tuplenil(H1), pending) -> F 890.77/291.62 eqt(tuplenil(H1), release) -> F 890.77/291.62 eqt(tuplenil(H1), request) -> F 890.77/291.62 eqt(tuplenil(H1), resource) -> F 890.77/291.62 eqt(tuplenil(H1), tag) -> F 890.77/291.62 eqt(tuplenil(H1), true) -> F 890.77/291.62 eqt(tuplenil(H1), undefined) -> F 890.77/291.62 eqt(tuplenil(H1), pid(N2)) -> F 890.77/291.62 eqt(tuplenil(H1), int(N2)) -> F 890.77/291.62 eqt(tuplenil(H1), cons(H2, T2)) -> F 890.77/291.62 eqt(tuplenil(H1), tuple(H2, T2)) -> F 890.77/291.62 eqt(tuplenil(H1), tuplenil(H2)) -> eqt(H1, H2) 890.77/291.62 element(int(s(0)), tuplenil(T1)) -> T1 890.77/291.62 element(int(s(0)), tuple(T1, T2)) -> T1 890.77/291.62 element(int(s(s(N1))), tuple(T1, T2)) -> element(int(s(N1)), T2) 890.77/291.62 record_new(lock) -> tuple(mcrlrecord, tuple(lock, tuple(undefined, tuple(nil, tuplenil(nil))))) 890.77/291.62 record_extract(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, resource) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))) 890.77/291.62 record_update(tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(F2))))), lock, pending, NewF) -> tuple(mcrlrecord, tuple(lock, tuple(F0, tuple(F1, tuplenil(NewF))))) 890.77/291.62 record_updates(Record, Name, nil) -> Record 890.77/291.62 record_updates(Record, Name, cons(tuple(Field, tuplenil(NewF)), Fields)) -> record_updates(record_update(Record, Name, Field, NewF), Name, Fields) 890.77/291.62 locker2_map_promote_pending(nil, Pending) -> nil 890.77/291.62 locker2_map_promote_pending(cons(Lock, Locks), Pending) -> cons(locker2_promote_pending(Lock, Pending), locker2_map_promote_pending(Locks, Pending)) 890.77/291.62 locker2_map_claim_lock(nil, Resources, Client) -> nil 890.77/291.62 locker2_map_claim_lock(cons(Lock, Locks), Resources, Client) -> cons(locker2_claim_lock(Lock, Resources, Client), locker2_map_claim_lock(Locks, Resources, Client)) 890.77/291.62 locker2_map_add_pending(nil, Resources, Client) -> nil 890.77/291.62 locker2_promote_pending(Lock, Client) -> case0(Client, Lock, record_extract(Lock, lock, pending)) 890.77/291.62 case0(Client, Lock, cons(Client, Pendings)) -> record_updates(Lock, lock, cons(tuple(excl, tuplenil(Client)), cons(tuple(pending, tuplenil(Pendings)), nil))) 890.77/291.62 case0(Client, Lock, MCRLFree0) -> Lock 890.77/291.62 locker2_remove_pending(Lock, Client) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(subtract(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.62 locker2_add_pending(Lock, Resources, Client) -> case1(Client, Resources, Lock, member(record_extract(Lock, lock, resource), Resources)) 890.77/291.62 case1(Client, Resources, Lock, true) -> record_updates(Lock, lock, cons(tuple(pending, tuplenil(append(record_extract(Lock, lock, pending), cons(Client, nil)))), nil)) 890.77/291.62 case1(Client, Resources, Lock, false) -> Lock 890.77/291.62 locker2_release_lock(Lock, Client) -> case2(Client, Lock, gen_modtageq(Client, record_extract(Lock, lock, excl))) 890.77/291.62 case2(Client, Lock, true) -> record_updates(Lock, lock, cons(tuple(excllock, excl), nil)) 890.77/291.62 case4(Client, Lock, MCRLFree1) -> false 890.77/291.62 locker2_obtainables(nil, Client) -> true 890.77/291.62 locker2_obtainables(cons(Lock, Locks), Client) -> case5(Client, Locks, Lock, member(Client, record_extract(Lock, lock, pending))) 890.77/291.62 case5(Client, Locks, Lock, true) -> andt(locker2_obtainable(Lock, Client), locker2_obtainables(Locks, Client)) 890.77/291.62 case5(Client, Locks, Lock, false) -> locker2_obtainables(Locks, Client) 890.77/291.62 locker2_check_available(Resource, nil) -> false 890.77/291.62 locker2_check_available(Resource, cons(Lock, Locks)) -> case6(Locks, Lock, Resource, equal(Resource, record_extract(Lock, lock, resource))) 890.77/291.62 case6(Locks, Lock, Resource, true) -> andt(equal(record_extract(Lock, lock, excl), nil), equal(record_extract(Lock, lock, pending), nil)) 890.77/291.62 case6(Locks, Lock, Resource, false) -> locker2_check_available(Resource, Locks) 890.77/291.62 locker2_check_availables(nil, Locks) -> true 890.77/291.62 locker2_check_availables(cons(Resource, Resources), Locks) -> andt(locker2_check_available(Resource, Locks), locker2_check_availables(Resources, Locks)) 890.77/291.62 locker2_adduniq(nil, List) -> List 890.77/291.62 append(cons(Head, Tail), List) -> cons(Head, append(Tail, List)) 890.77/291.62 subtract(List, nil) -> List 890.77/291.62 subtract(List, cons(Head, Tail)) -> subtract(delete(Head, List), Tail) 890.77/291.62 delete(E, nil) -> nil 890.77/291.62 delete(E, cons(Head, Tail)) -> case8(Tail, Head, E, equal(E, Head)) 890.77/291.62 case8(Tail, Head, E, true) -> Tail 890.77/291.62 case8(Tail, Head, E, false) -> cons(Head, delete(E, Tail)) 890.77/291.62 gen_tag(Pid) -> tuple(Pid, tuplenil(tag)) 890.77/291.62 gen_modtageq(Client1, Client2) -> equal(Client1, Client2) 890.77/291.62 member(E, nil) -> false 890.77/291.62 member(E, cons(Head, Tail)) -> case9(Tail, Head, E, equal(E, Head)) 890.77/291.62 case9(Tail, Head, E, true) -> true 890.77/291.62 case9(Tail, Head, E, false) -> member(E, Tail) 890.77/291.62 eqs(empty, empty) -> T 890.77/291.62 eqs(empty, stack(E2, S2)) -> F 890.77/291.62 eqs(stack(E1, S1), empty) -> F 890.77/291.62 eqs(stack(E1, S1), stack(E2, S2)) -> and(eqt(E1, E2), eqs(S1, S2)) 890.77/291.62 pushs(E1, S1) -> stack(E1, S1) 890.77/291.62 pops(stack(E1, S1)) -> S1 890.77/291.62 tops(stack(E1, S1)) -> E1 890.77/291.62 istops(E1, empty) -> F 890.77/291.62 istops(E1, stack(E2, S1)) -> eqt(E1, E2) 890.77/291.62 eqc(nocalls, nocalls) -> T 890.77/291.62 eqc(nocalls, calls(E2, S2, CS2)) -> F 890.77/291.62 eqc(calls(E1, S1, CS1), nocalls) -> F 890.77/291.62 eqc(calls(E1, S1, CS1), calls(E2, S2, CS2)) -> and(eqt(E1, E2), and(eqs(S1, S2), eqc(CS1, CS2))) 890.77/291.62 push(E1, E2, nocalls) -> calls(E1, stack(E2, empty), nocalls) 890.77/291.62 push(E1, E2, calls(E3, S1, CS1)) -> push1(E1, E2, E3, S1, CS1, eqt(E1, E3)) 890.77/291.62 push1(E1, E2, E3, S1, CS1, T) -> calls(E3, pushs(E2, S1), CS1) 890.77/291.62 890.77/291.62 S is empty. 890.77/291.62 Rewrite Strategy: FULL 890.90/291.67 EOF