/export/starexec/sandbox/solver/bin/starexec_run_complexity /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox/benchmark/theBenchmark.xml # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). (0) CpxTRS (1) CpxTrsToCdtProof [UPPER BOUND(ID), 2 ms] (2) CdtProblem (3) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CdtProblem (5) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (10) CdtProblem (11) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CdtProblem (13) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 3 ms] (14) CdtProblem (15) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 86 ms] (16) CdtProblem (17) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 55 ms] (18) CdtProblem (19) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 38 ms] (20) CdtProblem (21) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 28 ms] (22) CdtProblem (23) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (24) BOUNDS(1, 1) (25) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] (26) TRS for Loop Detection (27) DecreasingLoopProof [LOWER BOUND(ID), 0 ms] (28) BEST (29) proven lower bound (30) LowerBoundPropagationProof [FINISHED, 0 ms] (31) BOUNDS(n^1, INF) (32) TRS for Loop Detection ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: if(true, t, e) -> t if(false, t, e) -> e member(x, nil) -> false member(x, cons(y, ys)) -> if(eq(x, y), true, member(x, ys)) eq(nil, nil) -> true eq(O(x), 0(y)) -> eq(x, y) eq(0(x), 1(y)) -> false eq(1(x), 0(y)) -> false eq(1(x), 1(y)) -> eq(x, y) negate(0(x)) -> 1(x) negate(1(x)) -> 0(x) choice(cons(x, xs)) -> x choice(cons(x, xs)) -> choice(xs) guess(nil) -> nil guess(cons(clause, cnf)) -> cons(choice(clause), guess(cnf)) verify(nil) -> true verify(cons(l, ls)) -> if(member(negate(l), ls), false, verify(ls)) sat(cnf) -> satck(cnf, guess(cnf)) satck(cnf, assign) -> if(verify(assign), assign, unsat) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) Tuples: IF(true, z0, z1) -> c IF(false, z0, z1) -> c1 MEMBER(z0, nil) -> c2 MEMBER(z0, cons(z1, z2)) -> c3(IF(eq(z0, z1), true, member(z0, z2)), EQ(z0, z1), MEMBER(z0, z2)) EQ(nil, nil) -> c4 EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(0(z0), 1(z1)) -> c6 EQ(1(z0), 0(z1)) -> c7 EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) NEGATE(0(z0)) -> c9 NEGATE(1(z0)) -> c10 CHOICE(cons(z0, z1)) -> c11 CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(nil) -> c13 GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(nil) -> c15 VERIFY(cons(z0, z1)) -> c16(IF(member(negate(z0), z1), false, verify(z1)), MEMBER(negate(z0), z1), NEGATE(z0), VERIFY(z1)) SAT(z0) -> c17(SATCK(z0, guess(z0)), GUESS(z0)) SATCK(z0, z1) -> c18(IF(verify(z1), z1, unsat), VERIFY(z1)) S tuples: IF(true, z0, z1) -> c IF(false, z0, z1) -> c1 MEMBER(z0, nil) -> c2 MEMBER(z0, cons(z1, z2)) -> c3(IF(eq(z0, z1), true, member(z0, z2)), EQ(z0, z1), MEMBER(z0, z2)) EQ(nil, nil) -> c4 EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(0(z0), 1(z1)) -> c6 EQ(1(z0), 0(z1)) -> c7 EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) NEGATE(0(z0)) -> c9 NEGATE(1(z0)) -> c10 CHOICE(cons(z0, z1)) -> c11 CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(nil) -> c13 GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(nil) -> c15 VERIFY(cons(z0, z1)) -> c16(IF(member(negate(z0), z1), false, verify(z1)), MEMBER(negate(z0), z1), NEGATE(z0), VERIFY(z1)) SAT(z0) -> c17(SATCK(z0, guess(z0)), GUESS(z0)) SATCK(z0, z1) -> c18(IF(verify(z1), z1, unsat), VERIFY(z1)) K tuples:none Defined Rule Symbols: if_3, member_2, eq_2, negate_1, choice_1, guess_1, verify_1, sat_1, satck_2 Defined Pair Symbols: IF_3, MEMBER_2, EQ_2, NEGATE_1, CHOICE_1, GUESS_1, VERIFY_1, SAT_1, SATCK_2 Compound Symbols: c, c1, c2, c3_3, c4, c5_1, c6, c7, c8_1, c9, c10, c11, c12_1, c13, c14_2, c15, c16_4, c17_2, c18_2 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 11 trailing nodes: IF(true, z0, z1) -> c NEGATE(0(z0)) -> c9 GUESS(nil) -> c13 CHOICE(cons(z0, z1)) -> c11 IF(false, z0, z1) -> c1 EQ(nil, nil) -> c4 EQ(1(z0), 0(z1)) -> c7 NEGATE(1(z0)) -> c10 EQ(0(z0), 1(z1)) -> c6 MEMBER(z0, nil) -> c2 VERIFY(nil) -> c15 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) Tuples: MEMBER(z0, cons(z1, z2)) -> c3(IF(eq(z0, z1), true, member(z0, z2)), EQ(z0, z1), MEMBER(z0, z2)) EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(IF(member(negate(z0), z1), false, verify(z1)), MEMBER(negate(z0), z1), NEGATE(z0), VERIFY(z1)) SAT(z0) -> c17(SATCK(z0, guess(z0)), GUESS(z0)) SATCK(z0, z1) -> c18(IF(verify(z1), z1, unsat), VERIFY(z1)) S tuples: MEMBER(z0, cons(z1, z2)) -> c3(IF(eq(z0, z1), true, member(z0, z2)), EQ(z0, z1), MEMBER(z0, z2)) EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(IF(member(negate(z0), z1), false, verify(z1)), MEMBER(negate(z0), z1), NEGATE(z0), VERIFY(z1)) SAT(z0) -> c17(SATCK(z0, guess(z0)), GUESS(z0)) SATCK(z0, z1) -> c18(IF(verify(z1), z1, unsat), VERIFY(z1)) K tuples:none Defined Rule Symbols: if_3, member_2, eq_2, negate_1, choice_1, guess_1, verify_1, sat_1, satck_2 Defined Pair Symbols: MEMBER_2, EQ_2, CHOICE_1, GUESS_1, VERIFY_1, SAT_1, SATCK_2 Compound Symbols: c3_3, c5_1, c8_1, c12_1, c14_2, c16_4, c17_2, c18_2 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing tuple parts ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) SAT(z0) -> c17(SATCK(z0, guess(z0)), GUESS(z0)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) SAT(z0) -> c17(SATCK(z0, guess(z0)), GUESS(z0)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) K tuples:none Defined Rule Symbols: if_3, member_2, eq_2, negate_1, choice_1, guess_1, verify_1, sat_1, satck_2 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, SAT_1, MEMBER_2, VERIFY_1, SATCK_2 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c17_2, c3_2, c16_2, c18_1 ---------------------------------------- (7) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) SAT(z0) -> c(GUESS(z0)) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) SAT(z0) -> c(GUESS(z0)) K tuples:none Defined Rule Symbols: if_3, member_2, eq_2, negate_1, choice_1, guess_1, verify_1, sat_1, satck_2 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (9) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: SAT(z0) -> c(GUESS(z0)) ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) K tuples:none Defined Rule Symbols: if_3, member_2, eq_2, negate_1, choice_1, guess_1, verify_1, sat_1, satck_2 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (11) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) K tuples: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) Defined Rule Symbols: if_3, member_2, eq_2, negate_1, choice_1, guess_1, verify_1, sat_1, satck_2 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (13) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 member(z0, nil) -> false member(z0, cons(z1, z2)) -> if(eq(z0, z1), true, member(z0, z2)) eq(nil, nil) -> true eq(O(z0), 0(z1)) -> eq(z0, z1) eq(0(z0), 1(z1)) -> false eq(1(z0), 0(z1)) -> false eq(1(z0), 1(z1)) -> eq(z0, z1) verify(nil) -> true verify(cons(z0, z1)) -> if(member(negate(z0), z1), false, verify(z1)) sat(z0) -> satck(z0, guess(z0)) satck(z0, z1) -> if(verify(z1), z1, unsat) ---------------------------------------- (14) Obligation: Complexity Dependency Tuples Problem Rules: negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) K tuples: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) Defined Rule Symbols: negate_1, guess_1, choice_1 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (15) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) We considered the (Usable) Rules: negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> choice(z1) choice(cons(z0, z1)) -> z0 negate(0(z0)) -> 1(z0) And the Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0(x_1)) = [1] + x_1 POL(1(x_1)) = [1] + x_1 POL(CHOICE(x_1)) = x_1 POL(EQ(x_1, x_2)) = 0 POL(GUESS(x_1)) = x_1 POL(MEMBER(x_1, x_2)) = x_1 POL(O(x_1)) = 0 POL(SAT(x_1)) = [1] + x_1 POL(SATCK(x_1, x_2)) = x_2 POL(VERIFY(x_1)) = x_1 POL(c(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c18(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c5(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(choice(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] + x_1 + x_2 POL(guess(x_1)) = [1] + x_1 POL(negate(x_1)) = x_1 POL(nil) = [1] ---------------------------------------- (16) Obligation: Complexity Dependency Tuples Problem Rules: negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) K tuples: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) Defined Rule Symbols: negate_1, guess_1, choice_1 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (17) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) We considered the (Usable) Rules: guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) And the Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0(x_1)) = 0 POL(1(x_1)) = 0 POL(CHOICE(x_1)) = [1] POL(EQ(x_1, x_2)) = 0 POL(GUESS(x_1)) = [2]x_1 + [2]x_1^2 POL(MEMBER(x_1, x_2)) = [1] + x_2 POL(O(x_1)) = 0 POL(SAT(x_1)) = [2] + x_1 + [2]x_1^2 POL(SATCK(x_1, x_2)) = x_2 + x_2^2 + x_1^2 POL(VERIFY(x_1)) = x_1^2 POL(c(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c18(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c5(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(choice(x_1)) = [1] + x_1 + [2]x_1^2 POL(cons(x_1, x_2)) = [1] + x_2 POL(guess(x_1)) = x_1 POL(negate(x_1)) = 0 POL(nil) = 0 ---------------------------------------- (18) Obligation: Complexity Dependency Tuples Problem Rules: negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) K tuples: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) Defined Rule Symbols: negate_1, guess_1, choice_1 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (19) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) We considered the (Usable) Rules: guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> choice(z1) choice(cons(z0, z1)) -> z0 And the Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0(x_1)) = [1] + x_1 POL(1(x_1)) = x_1 POL(CHOICE(x_1)) = [1] + [2]x_1 + [2]x_1^2 POL(EQ(x_1, x_2)) = [2] + [2]x_2 POL(GUESS(x_1)) = [2]x_1 + [2]x_1^2 POL(MEMBER(x_1, x_2)) = [2]x_2 POL(O(x_1)) = 0 POL(SAT(x_1)) = [2] + [2]x_1 + [2]x_1^2 POL(SATCK(x_1, x_2)) = [2]x_2^2 POL(VERIFY(x_1)) = x_1^2 POL(c(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c18(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c5(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(choice(x_1)) = x_1 POL(cons(x_1, x_2)) = [1] + x_1 + x_2 POL(guess(x_1)) = x_1 POL(negate(x_1)) = 0 POL(nil) = 0 ---------------------------------------- (20) Obligation: Complexity Dependency Tuples Problem Rules: negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples: EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) K tuples: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) Defined Rule Symbols: negate_1, guess_1, choice_1 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (21) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) We considered the (Usable) Rules: negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> choice(z1) choice(cons(z0, z1)) -> z0 negate(0(z0)) -> 1(z0) And the Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) The order we found is given by the following interpretation: Polynomial interpretation : POL(0(x_1)) = [1] + x_1 POL(1(x_1)) = [1] + x_1 POL(CHOICE(x_1)) = [2]x_1 + [2]x_1^2 POL(EQ(x_1, x_2)) = x_1*x_2 POL(GUESS(x_1)) = [2]x_1 + [2]x_1^2 POL(MEMBER(x_1, x_2)) = x_1*x_2 POL(O(x_1)) = x_1 POL(SAT(x_1)) = [1] + [2]x_1 + [2]x_1^2 POL(SATCK(x_1, x_2)) = x_2^2 + x_1^2 POL(VERIFY(x_1)) = x_1^2 POL(c(x_1)) = x_1 POL(c12(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c16(x_1, x_2)) = x_1 + x_2 POL(c18(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c5(x_1)) = x_1 POL(c8(x_1)) = x_1 POL(choice(x_1)) = x_1 POL(cons(x_1, x_2)) = x_1 + x_2 POL(guess(x_1)) = x_1 POL(negate(x_1)) = x_1 POL(nil) = 0 ---------------------------------------- (22) Obligation: Complexity Dependency Tuples Problem Rules: negate(0(z0)) -> 1(z0) negate(1(z0)) -> 0(z0) guess(nil) -> nil guess(cons(z0, z1)) -> cons(choice(z0), guess(z1)) choice(cons(z0, z1)) -> z0 choice(cons(z0, z1)) -> choice(z1) Tuples: EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) SATCK(z0, z1) -> c18(VERIFY(z1)) SAT(z0) -> c(SATCK(z0, guess(z0))) S tuples:none K tuples: SAT(z0) -> c(SATCK(z0, guess(z0))) SATCK(z0, z1) -> c18(VERIFY(z1)) CHOICE(cons(z0, z1)) -> c12(CHOICE(z1)) GUESS(cons(z0, z1)) -> c14(CHOICE(z0), GUESS(z1)) VERIFY(cons(z0, z1)) -> c16(MEMBER(negate(z0), z1), VERIFY(z1)) MEMBER(z0, cons(z1, z2)) -> c3(EQ(z0, z1), MEMBER(z0, z2)) EQ(O(z0), 0(z1)) -> c5(EQ(z0, z1)) EQ(1(z0), 1(z1)) -> c8(EQ(z0, z1)) Defined Rule Symbols: negate_1, guess_1, choice_1 Defined Pair Symbols: EQ_2, CHOICE_1, GUESS_1, MEMBER_2, VERIFY_1, SATCK_2, SAT_1 Compound Symbols: c5_1, c8_1, c12_1, c14_2, c3_2, c16_2, c18_1, c_1 ---------------------------------------- (23) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (24) BOUNDS(1, 1) ---------------------------------------- (25) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) Transformed a relative TRS into a decreasing-loop problem. ---------------------------------------- (26) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: if(true, t, e) -> t if(false, t, e) -> e member(x, nil) -> false member(x, cons(y, ys)) -> if(eq(x, y), true, member(x, ys)) eq(nil, nil) -> true eq(O(x), 0(y)) -> eq(x, y) eq(0(x), 1(y)) -> false eq(1(x), 0(y)) -> false eq(1(x), 1(y)) -> eq(x, y) negate(0(x)) -> 1(x) negate(1(x)) -> 0(x) choice(cons(x, xs)) -> x choice(cons(x, xs)) -> choice(xs) guess(nil) -> nil guess(cons(clause, cnf)) -> cons(choice(clause), guess(cnf)) verify(nil) -> true verify(cons(l, ls)) -> if(member(negate(l), ls), false, verify(ls)) sat(cnf) -> satck(cnf, guess(cnf)) satck(cnf, assign) -> if(verify(assign), assign, unsat) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (27) DecreasingLoopProof (LOWER BOUND(ID)) The following loop(s) give(s) rise to the lower bound Omega(n^1): The rewrite sequence member(x, cons(y, ys)) ->^+ if(eq(x, y), true, member(x, ys)) gives rise to a decreasing loop by considering the right hand sides subterm at position [2]. The pumping substitution is [ys / cons(y, ys)]. The result substitution is [ ]. ---------------------------------------- (28) Complex Obligation (BEST) ---------------------------------------- (29) Obligation: Proved the lower bound n^1 for the following obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: if(true, t, e) -> t if(false, t, e) -> e member(x, nil) -> false member(x, cons(y, ys)) -> if(eq(x, y), true, member(x, ys)) eq(nil, nil) -> true eq(O(x), 0(y)) -> eq(x, y) eq(0(x), 1(y)) -> false eq(1(x), 0(y)) -> false eq(1(x), 1(y)) -> eq(x, y) negate(0(x)) -> 1(x) negate(1(x)) -> 0(x) choice(cons(x, xs)) -> x choice(cons(x, xs)) -> choice(xs) guess(nil) -> nil guess(cons(clause, cnf)) -> cons(choice(clause), guess(cnf)) verify(nil) -> true verify(cons(l, ls)) -> if(member(negate(l), ls), false, verify(ls)) sat(cnf) -> satck(cnf, guess(cnf)) satck(cnf, assign) -> if(verify(assign), assign, unsat) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (30) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (31) BOUNDS(n^1, INF) ---------------------------------------- (32) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: if(true, t, e) -> t if(false, t, e) -> e member(x, nil) -> false member(x, cons(y, ys)) -> if(eq(x, y), true, member(x, ys)) eq(nil, nil) -> true eq(O(x), 0(y)) -> eq(x, y) eq(0(x), 1(y)) -> false eq(1(x), 0(y)) -> false eq(1(x), 1(y)) -> eq(x, y) negate(0(x)) -> 1(x) negate(1(x)) -> 0(x) choice(cons(x, xs)) -> x choice(cons(x, xs)) -> choice(xs) guess(nil) -> nil guess(cons(clause, cnf)) -> cons(choice(clause), guess(cnf)) verify(nil) -> true verify(cons(l, ls)) -> if(member(negate(l), ls), false, verify(ls)) sat(cnf) -> satck(cnf, guess(cnf)) satck(cnf, assign) -> if(verify(assign), assign, unsat) S is empty. Rewrite Strategy: INNERMOST