WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 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), 0 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), 0 ms] (14) CdtProblem (15) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 77 ms] (16) CdtProblem (17) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 40 ms] (18) CdtProblem (19) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 28 ms] (20) CdtProblem (21) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 1 ms] (22) CdtProblem (23) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (24) BOUNDS(1, 1) (25) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (26) CpxTRS (27) SlicingProof [LOWER BOUND(ID), 0 ms] (28) CpxTRS (29) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (30) typed CpxTrs (31) OrderProof [LOWER BOUND(ID), 0 ms] (32) typed CpxTrs (33) RewriteLemmaProof [LOWER BOUND(ID), 1235 ms] (34) BEST (35) proven lower bound (36) LowerBoundPropagationProof [FINISHED, 0 ms] (37) BOUNDS(n^1, INF) (38) typed CpxTrs (39) RewriteLemmaProof [LOWER BOUND(ID), 80 ms] (40) typed CpxTrs (41) RewriteLemmaProof [LOWER BOUND(ID), 408 ms] (42) typed CpxTrs ---------------------------------------- (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: EQ(1(z0), 0(z1)) -> c7 MEMBER(z0, nil) -> c2 EQ(nil, nil) -> c4 VERIFY(nil) -> c15 IF(false, z0, z1) -> c1 CHOICE(cons(z0, z1)) -> c11 NEGATE(0(z0)) -> c9 EQ(0(z0), 1(z1)) -> c6 IF(true, z0, z1) -> c GUESS(nil) -> c13 NEGATE(1(z0)) -> c10 ---------------------------------------- (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) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (26) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 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) SlicingProof (LOWER BOUND(ID)) Sliced the following arguments: satck/0 ---------------------------------------- (28) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (29) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (30) Obligation: Innermost TRS: 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) Types: if :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat true :: true:false:nil:cons:O:0:1:unsat false :: true:false:nil:cons:O:0:1:unsat member :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat nil :: true:false:nil:cons:O:0:1:unsat cons :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat eq :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat O :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 0 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 1 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat negate :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat choice :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat guess :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat verify :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat sat :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat satck :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat unsat :: true:false:nil:cons:O:0:1:unsat hole_true:false:nil:cons:O:0:1:unsat1_2 :: true:false:nil:cons:O:0:1:unsat gen_true:false:nil:cons:O:0:1:unsat2_2 :: Nat -> true:false:nil:cons:O:0:1:unsat ---------------------------------------- (31) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: member, eq, choice, guess, verify They will be analysed ascendingly in the following order: eq < member member < verify choice < guess ---------------------------------------- (32) Obligation: Innermost TRS: 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) Types: if :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat true :: true:false:nil:cons:O:0:1:unsat false :: true:false:nil:cons:O:0:1:unsat member :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat nil :: true:false:nil:cons:O:0:1:unsat cons :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat eq :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat O :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 0 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 1 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat negate :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat choice :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat guess :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat verify :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat sat :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat satck :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat unsat :: true:false:nil:cons:O:0:1:unsat hole_true:false:nil:cons:O:0:1:unsat1_2 :: true:false:nil:cons:O:0:1:unsat gen_true:false:nil:cons:O:0:1:unsat2_2 :: Nat -> true:false:nil:cons:O:0:1:unsat Generator Equations: gen_true:false:nil:cons:O:0:1:unsat2_2(0) <=> true gen_true:false:nil:cons:O:0:1:unsat2_2(+(x, 1)) <=> cons(true, gen_true:false:nil:cons:O:0:1:unsat2_2(x)) The following defined symbols remain to be analysed: eq, member, choice, guess, verify They will be analysed ascendingly in the following order: eq < member member < verify choice < guess ---------------------------------------- (33) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n117_2))) -> *3_2, rt in Omega(n117_2) Induction Base: member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, 0))) Induction Step: member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, +(n117_2, 1)))) ->_R^Omega(1) if(eq(gen_true:false:nil:cons:O:0:1:unsat2_2(a), true), true, member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n117_2)))) ->_IH if(eq(gen_true:false:nil:cons:O:0:1:unsat2_2(a), true), true, *3_2) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (34) Complex Obligation (BEST) ---------------------------------------- (35) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) Types: if :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat true :: true:false:nil:cons:O:0:1:unsat false :: true:false:nil:cons:O:0:1:unsat member :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat nil :: true:false:nil:cons:O:0:1:unsat cons :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat eq :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat O :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 0 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 1 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat negate :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat choice :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat guess :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat verify :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat sat :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat satck :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat unsat :: true:false:nil:cons:O:0:1:unsat hole_true:false:nil:cons:O:0:1:unsat1_2 :: true:false:nil:cons:O:0:1:unsat gen_true:false:nil:cons:O:0:1:unsat2_2 :: Nat -> true:false:nil:cons:O:0:1:unsat Generator Equations: gen_true:false:nil:cons:O:0:1:unsat2_2(0) <=> true gen_true:false:nil:cons:O:0:1:unsat2_2(+(x, 1)) <=> cons(true, gen_true:false:nil:cons:O:0:1:unsat2_2(x)) The following defined symbols remain to be analysed: member, choice, guess, verify They will be analysed ascendingly in the following order: member < verify choice < guess ---------------------------------------- (36) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (37) BOUNDS(n^1, INF) ---------------------------------------- (38) Obligation: Innermost TRS: 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) Types: if :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat true :: true:false:nil:cons:O:0:1:unsat false :: true:false:nil:cons:O:0:1:unsat member :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat nil :: true:false:nil:cons:O:0:1:unsat cons :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat eq :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat O :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 0 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 1 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat negate :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat choice :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat guess :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat verify :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat sat :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat satck :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat unsat :: true:false:nil:cons:O:0:1:unsat hole_true:false:nil:cons:O:0:1:unsat1_2 :: true:false:nil:cons:O:0:1:unsat gen_true:false:nil:cons:O:0:1:unsat2_2 :: Nat -> true:false:nil:cons:O:0:1:unsat Lemmas: member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n117_2))) -> *3_2, rt in Omega(n117_2) Generator Equations: gen_true:false:nil:cons:O:0:1:unsat2_2(0) <=> true gen_true:false:nil:cons:O:0:1:unsat2_2(+(x, 1)) <=> cons(true, gen_true:false:nil:cons:O:0:1:unsat2_2(x)) The following defined symbols remain to be analysed: choice, guess, verify They will be analysed ascendingly in the following order: choice < guess ---------------------------------------- (39) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: choice(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126010_2))) -> *3_2, rt in Omega(n126010_2) Induction Base: choice(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, 0))) Induction Step: choice(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, +(n126010_2, 1)))) ->_R^Omega(1) choice(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126010_2))) ->_IH *3_2 We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (40) Obligation: Innermost TRS: 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) Types: if :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat true :: true:false:nil:cons:O:0:1:unsat false :: true:false:nil:cons:O:0:1:unsat member :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat nil :: true:false:nil:cons:O:0:1:unsat cons :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat eq :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat O :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 0 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 1 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat negate :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat choice :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat guess :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat verify :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat sat :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat satck :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat unsat :: true:false:nil:cons:O:0:1:unsat hole_true:false:nil:cons:O:0:1:unsat1_2 :: true:false:nil:cons:O:0:1:unsat gen_true:false:nil:cons:O:0:1:unsat2_2 :: Nat -> true:false:nil:cons:O:0:1:unsat Lemmas: member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n117_2))) -> *3_2, rt in Omega(n117_2) choice(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126010_2))) -> *3_2, rt in Omega(n126010_2) Generator Equations: gen_true:false:nil:cons:O:0:1:unsat2_2(0) <=> true gen_true:false:nil:cons:O:0:1:unsat2_2(+(x, 1)) <=> cons(true, gen_true:false:nil:cons:O:0:1:unsat2_2(x)) The following defined symbols remain to be analysed: guess, verify ---------------------------------------- (41) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: guess(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126540_2))) -> *3_2, rt in Omega(n126540_2) Induction Base: guess(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, 0))) Induction Step: guess(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, +(n126540_2, 1)))) ->_R^Omega(1) cons(choice(true), guess(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126540_2)))) ->_IH cons(choice(true), *3_2) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (42) Obligation: Innermost TRS: 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(guess(cnf)) satck(assign) -> if(verify(assign), assign, unsat) Types: if :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat true :: true:false:nil:cons:O:0:1:unsat false :: true:false:nil:cons:O:0:1:unsat member :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat nil :: true:false:nil:cons:O:0:1:unsat cons :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat eq :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat O :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 0 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat 1 :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat negate :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat choice :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat guess :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat verify :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat sat :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat satck :: true:false:nil:cons:O:0:1:unsat -> true:false:nil:cons:O:0:1:unsat unsat :: true:false:nil:cons:O:0:1:unsat hole_true:false:nil:cons:O:0:1:unsat1_2 :: true:false:nil:cons:O:0:1:unsat gen_true:false:nil:cons:O:0:1:unsat2_2 :: Nat -> true:false:nil:cons:O:0:1:unsat Lemmas: member(gen_true:false:nil:cons:O:0:1:unsat2_2(a), gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n117_2))) -> *3_2, rt in Omega(n117_2) choice(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126010_2))) -> *3_2, rt in Omega(n126010_2) guess(gen_true:false:nil:cons:O:0:1:unsat2_2(+(1, n126540_2))) -> *3_2, rt in Omega(n126540_2) Generator Equations: gen_true:false:nil:cons:O:0:1:unsat2_2(0) <=> true gen_true:false:nil:cons:O:0:1:unsat2_2(+(x, 1)) <=> cons(true, gen_true:false:nil:cons:O:0:1:unsat2_2(x)) The following defined symbols remain to be analysed: verify