310.67/291.53 WORST_CASE(Omega(n^1), ?) 310.73/291.54 proof of /export/starexec/sandbox/benchmark/theBenchmark.xml 310.73/291.54 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 310.73/291.54 310.73/291.54 310.73/291.54 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 310.73/291.54 310.73/291.54 (0) CpxTRS 310.73/291.54 (1) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] 310.73/291.54 (2) TRS for Loop Detection 310.73/291.54 (3) DecreasingLoopProof [LOWER BOUND(ID), 0 ms] 310.73/291.54 (4) BEST 310.73/291.54 (5) proven lower bound 310.73/291.54 (6) LowerBoundPropagationProof [FINISHED, 0 ms] 310.73/291.54 (7) BOUNDS(n^1, INF) 310.73/291.54 (8) TRS for Loop Detection 310.73/291.54 310.73/291.54 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (0) 310.73/291.54 Obligation: 310.73/291.54 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 310.73/291.54 310.73/291.54 310.73/291.54 The TRS R consists of the following rules: 310.73/291.54 310.73/291.54 eq(0, 0) -> true 310.73/291.54 eq(0, s(m)) -> false 310.73/291.54 eq(s(n), 0) -> false 310.73/291.54 eq(s(n), s(m)) -> eq(n, m) 310.73/291.54 le(0, m) -> true 310.73/291.54 le(s(n), 0) -> false 310.73/291.54 le(s(n), s(m)) -> le(n, m) 310.73/291.54 min(cons(x, nil)) -> x 310.73/291.54 min(cons(n, cons(m, x))) -> if_min(le(n, m), cons(n, cons(m, x))) 310.73/291.54 if_min(true, cons(n, cons(m, x))) -> min(cons(n, x)) 310.73/291.54 if_min(false, cons(n, cons(m, x))) -> min(cons(m, x)) 310.73/291.54 replace(n, m, nil) -> nil 310.73/291.54 replace(n, m, cons(k, x)) -> if_replace(eq(n, k), n, m, cons(k, x)) 310.73/291.54 if_replace(true, n, m, cons(k, x)) -> cons(m, x) 310.73/291.54 if_replace(false, n, m, cons(k, x)) -> cons(k, replace(n, m, x)) 310.73/291.54 empty(nil) -> true 310.73/291.54 empty(cons(n, x)) -> false 310.73/291.54 head(cons(n, x)) -> n 310.73/291.54 tail(nil) -> nil 310.73/291.54 tail(cons(n, x)) -> x 310.73/291.54 sort(x) -> sortIter(x, nil) 310.73/291.54 sortIter(x, y) -> if(empty(x), x, y, append(y, cons(min(x), nil))) 310.73/291.54 if(true, x, y, z) -> y 310.73/291.54 if(false, x, y, z) -> sortIter(replace(min(x), head(x), tail(x)), z) 310.73/291.54 310.73/291.54 S is empty. 310.73/291.54 Rewrite Strategy: FULL 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (1) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) 310.73/291.54 Transformed a relative TRS into a decreasing-loop problem. 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (2) 310.73/291.54 Obligation: 310.73/291.54 Analyzing the following TRS for decreasing loops: 310.73/291.54 310.73/291.54 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 310.73/291.54 310.73/291.54 310.73/291.54 The TRS R consists of the following rules: 310.73/291.54 310.73/291.54 eq(0, 0) -> true 310.73/291.54 eq(0, s(m)) -> false 310.73/291.54 eq(s(n), 0) -> false 310.73/291.54 eq(s(n), s(m)) -> eq(n, m) 310.73/291.54 le(0, m) -> true 310.73/291.54 le(s(n), 0) -> false 310.73/291.54 le(s(n), s(m)) -> le(n, m) 310.73/291.54 min(cons(x, nil)) -> x 310.73/291.54 min(cons(n, cons(m, x))) -> if_min(le(n, m), cons(n, cons(m, x))) 310.73/291.54 if_min(true, cons(n, cons(m, x))) -> min(cons(n, x)) 310.73/291.54 if_min(false, cons(n, cons(m, x))) -> min(cons(m, x)) 310.73/291.54 replace(n, m, nil) -> nil 310.73/291.54 replace(n, m, cons(k, x)) -> if_replace(eq(n, k), n, m, cons(k, x)) 310.73/291.54 if_replace(true, n, m, cons(k, x)) -> cons(m, x) 310.73/291.54 if_replace(false, n, m, cons(k, x)) -> cons(k, replace(n, m, x)) 310.73/291.54 empty(nil) -> true 310.73/291.54 empty(cons(n, x)) -> false 310.73/291.54 head(cons(n, x)) -> n 310.73/291.54 tail(nil) -> nil 310.73/291.54 tail(cons(n, x)) -> x 310.73/291.54 sort(x) -> sortIter(x, nil) 310.73/291.54 sortIter(x, y) -> if(empty(x), x, y, append(y, cons(min(x), nil))) 310.73/291.54 if(true, x, y, z) -> y 310.73/291.54 if(false, x, y, z) -> sortIter(replace(min(x), head(x), tail(x)), z) 310.73/291.54 310.73/291.54 S is empty. 310.73/291.54 Rewrite Strategy: FULL 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (3) DecreasingLoopProof (LOWER BOUND(ID)) 310.73/291.54 The following loop(s) give(s) rise to the lower bound Omega(n^1): 310.73/291.54 310.73/291.54 The rewrite sequence 310.73/291.54 310.73/291.54 eq(s(n), s(m)) ->^+ eq(n, m) 310.73/291.54 310.73/291.54 gives rise to a decreasing loop by considering the right hand sides subterm at position []. 310.73/291.54 310.73/291.54 The pumping substitution is [n / s(n), m / s(m)]. 310.73/291.54 310.73/291.54 The result substitution is [ ]. 310.73/291.54 310.73/291.54 310.73/291.54 310.73/291.54 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (4) 310.73/291.54 Complex Obligation (BEST) 310.73/291.54 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (5) 310.73/291.54 Obligation: 310.73/291.54 Proved the lower bound n^1 for the following obligation: 310.73/291.54 310.73/291.54 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 310.73/291.54 310.73/291.54 310.73/291.54 The TRS R consists of the following rules: 310.73/291.54 310.73/291.54 eq(0, 0) -> true 310.73/291.54 eq(0, s(m)) -> false 310.73/291.54 eq(s(n), 0) -> false 310.73/291.54 eq(s(n), s(m)) -> eq(n, m) 310.73/291.54 le(0, m) -> true 310.73/291.54 le(s(n), 0) -> false 310.73/291.54 le(s(n), s(m)) -> le(n, m) 310.73/291.54 min(cons(x, nil)) -> x 310.73/291.54 min(cons(n, cons(m, x))) -> if_min(le(n, m), cons(n, cons(m, x))) 310.73/291.54 if_min(true, cons(n, cons(m, x))) -> min(cons(n, x)) 310.73/291.54 if_min(false, cons(n, cons(m, x))) -> min(cons(m, x)) 310.73/291.54 replace(n, m, nil) -> nil 310.73/291.54 replace(n, m, cons(k, x)) -> if_replace(eq(n, k), n, m, cons(k, x)) 310.73/291.54 if_replace(true, n, m, cons(k, x)) -> cons(m, x) 310.73/291.54 if_replace(false, n, m, cons(k, x)) -> cons(k, replace(n, m, x)) 310.73/291.54 empty(nil) -> true 310.73/291.54 empty(cons(n, x)) -> false 310.73/291.54 head(cons(n, x)) -> n 310.73/291.54 tail(nil) -> nil 310.73/291.54 tail(cons(n, x)) -> x 310.73/291.54 sort(x) -> sortIter(x, nil) 310.73/291.54 sortIter(x, y) -> if(empty(x), x, y, append(y, cons(min(x), nil))) 310.73/291.54 if(true, x, y, z) -> y 310.73/291.54 if(false, x, y, z) -> sortIter(replace(min(x), head(x), tail(x)), z) 310.73/291.54 310.73/291.54 S is empty. 310.73/291.54 Rewrite Strategy: FULL 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (6) LowerBoundPropagationProof (FINISHED) 310.73/291.54 Propagated lower bound. 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (7) 310.73/291.54 BOUNDS(n^1, INF) 310.73/291.54 310.73/291.54 ---------------------------------------- 310.73/291.54 310.73/291.54 (8) 310.73/291.54 Obligation: 310.73/291.54 Analyzing the following TRS for decreasing loops: 310.73/291.54 310.73/291.54 The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 310.73/291.54 310.73/291.54 310.73/291.54 The TRS R consists of the following rules: 310.73/291.54 310.73/291.54 eq(0, 0) -> true 310.73/291.54 eq(0, s(m)) -> false 310.73/291.54 eq(s(n), 0) -> false 310.73/291.54 eq(s(n), s(m)) -> eq(n, m) 310.73/291.54 le(0, m) -> true 310.73/291.54 le(s(n), 0) -> false 310.73/291.54 le(s(n), s(m)) -> le(n, m) 310.73/291.54 min(cons(x, nil)) -> x 310.73/291.54 min(cons(n, cons(m, x))) -> if_min(le(n, m), cons(n, cons(m, x))) 310.73/291.54 if_min(true, cons(n, cons(m, x))) -> min(cons(n, x)) 310.73/291.54 if_min(false, cons(n, cons(m, x))) -> min(cons(m, x)) 310.73/291.54 replace(n, m, nil) -> nil 310.73/291.54 replace(n, m, cons(k, x)) -> if_replace(eq(n, k), n, m, cons(k, x)) 310.73/291.54 if_replace(true, n, m, cons(k, x)) -> cons(m, x) 310.73/291.54 if_replace(false, n, m, cons(k, x)) -> cons(k, replace(n, m, x)) 310.73/291.54 empty(nil) -> true 310.73/291.54 empty(cons(n, x)) -> false 310.73/291.54 head(cons(n, x)) -> n 310.73/291.54 tail(nil) -> nil 310.73/291.54 tail(cons(n, x)) -> x 310.73/291.54 sort(x) -> sortIter(x, nil) 310.73/291.54 sortIter(x, y) -> if(empty(x), x, y, append(y, cons(min(x), nil))) 310.73/291.54 if(true, x, y, z) -> y 310.73/291.54 if(false, x, y, z) -> sortIter(replace(min(x), head(x), tail(x)), z) 310.73/291.54 310.73/291.54 S is empty. 310.73/291.54 Rewrite Strategy: FULL 310.77/291.56 EOF