/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). (0) CpxTRS (1) NestedDefinedSymbolProof [UPPER BOUND(ID), 0 ms] (2) CpxTRS (3) RcToIrcProof [BOTH BOUNDS(ID, ID), 0 ms] (4) CpxTRS (5) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (6) CdtProblem (7) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CdtProblem (11) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 107 ms] (12) CdtProblem (13) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (14) CdtProblem (15) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 94 ms] (16) CdtProblem (17) CdtKnowledgeProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CdtProblem (19) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 115 ms] (20) CdtProblem (21) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (22) BOUNDS(1, 1) (23) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CpxTRS (25) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (26) typed CpxTrs (27) OrderProof [LOWER BOUND(ID), 0 ms] (28) typed CpxTrs (29) RewriteLemmaProof [LOWER BOUND(ID), 306 ms] (30) BEST (31) proven lower bound (32) LowerBoundPropagationProof [FINISHED, 0 ms] (33) BOUNDS(n^1, INF) (34) typed CpxTrs (35) RewriteLemmaProof [LOWER BOUND(ID), 77 ms] (36) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: if(true, x, y) -> x if(false, x, y) -> y eq(0, 0) -> true eq(0, s(x)) -> false eq(s(x), 0) -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) S is empty. Rewrite Strategy: FULL ---------------------------------------- (1) NestedDefinedSymbolProof (UPPER BOUND(ID)) The following defined symbols can occur below the 0th argument of ifinter: ifmem, eq, mem The following defined symbols can occur below the 0th argument of ifmem: eq Hence, the left-hand sides of the following rules are not basic-reachable and can be removed: app(app(l1, l2), l3) -> app(l1, app(l2, l3)) inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) ---------------------------------------- (2) Obligation: The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(1, n^2). The TRS R consists of the following rules: if(true, x, y) -> x if(false, x, y) -> y eq(0, 0) -> true eq(0, s(x)) -> false eq(s(x), 0) -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) S is empty. Rewrite Strategy: FULL ---------------------------------------- (3) RcToIrcProof (BOTH BOUNDS(ID, ID)) Converted rc-obligation to irc-obligation. The duplicating contexts are: mem([], cons(y, l)) inter(cons([], l1), l2) inter(cons(x, l1), []) inter(l1, cons([], l2)) inter([], cons(x, l2)) The defined contexts are: ifinter([], x1, x2, x3) ifmem([], x1, x2) [] just represents basic- or constructor-terms in the following defined contexts: ifmem([], x1, x2) As the TRS is an overlay system and the defined contexts and the duplicating contexts don't overlap, we have rc = irc. ---------------------------------------- (4) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^2). The TRS R consists of the following rules: if(true, x, y) -> x if(false, x, y) -> y eq(0, 0) -> true eq(0, s(x)) -> false eq(s(x), 0) -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (5) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS to CDT ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) inter(z0, nil) -> nil inter(nil, z0) -> nil inter(cons(z0, z1), z2) -> ifinter(mem(z0, z2), z0, z1, z2) inter(z0, cons(z1, z2)) -> ifinter(mem(z1, z0), z1, z2, z0) ifinter(true, z0, z1, z2) -> cons(z0, inter(z1, z2)) ifinter(false, z0, z1, z2) -> inter(z1, z2) Tuples: IF(true, z0, z1) -> c IF(false, z0, z1) -> c1 EQ(0, 0) -> c2 EQ(0, s(z0)) -> c3 EQ(s(z0), 0) -> c4 EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(nil, z0) -> c6 APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, nil) -> c8 MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(true, z0, z1) -> c10 IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(z0, nil) -> c12 INTER(nil, z0) -> c13 INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: IF(true, z0, z1) -> c IF(false, z0, z1) -> c1 EQ(0, 0) -> c2 EQ(0, s(z0)) -> c3 EQ(s(z0), 0) -> c4 EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(nil, z0) -> c6 APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, nil) -> c8 MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(true, z0, z1) -> c10 IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(z0, nil) -> c12 INTER(nil, z0) -> c13 INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) K tuples:none Defined Rule Symbols: if_3, eq_2, app_2, mem_2, ifmem_3, inter_2, ifinter_4 Defined Pair Symbols: IF_3, EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c, c1, c2, c3, c4, c5_1, c6, c7_1, c8, c9_2, c10, c11_1, c12, c13, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (7) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 10 trailing nodes: INTER(nil, z0) -> c13 APP(nil, z0) -> c6 IF(true, z0, z1) -> c INTER(z0, nil) -> c12 IFMEM(true, z0, z1) -> c10 EQ(0, 0) -> c2 MEM(z0, nil) -> c8 EQ(0, s(z0)) -> c3 EQ(s(z0), 0) -> c4 IF(false, z0, z1) -> c1 ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) inter(z0, nil) -> nil inter(nil, z0) -> nil inter(cons(z0, z1), z2) -> ifinter(mem(z0, z2), z0, z1, z2) inter(z0, cons(z1, z2)) -> ifinter(mem(z1, z0), z1, z2, z0) ifinter(true, z0, z1, z2) -> cons(z0, inter(z1, z2)) ifinter(false, z0, z1, z2) -> inter(z1, z2) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) K tuples:none Defined Rule Symbols: if_3, eq_2, app_2, mem_2, ifmem_3, inter_2, ifinter_4 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (9) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 app(nil, z0) -> z0 app(cons(z0, z1), z2) -> cons(z0, app(z1, z2)) inter(z0, nil) -> nil inter(nil, z0) -> nil inter(cons(z0, z1), z2) -> ifinter(mem(z0, z2), z0, z1, z2) inter(z0, cons(z1, z2)) -> ifinter(mem(z1, z0), z1, z2, z0) ifinter(true, z0, z1, z2) -> cons(z0, inter(z1, z2)) ifinter(false, z0, z1, z2) -> inter(z1, z2) ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) K tuples:none Defined Rule Symbols: eq_2, mem_2, ifmem_3 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (11) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) We considered the (Usable) Rules: mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) mem(z0, nil) -> false And the Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(APP(x_1, x_2)) = x_1 POL(EQ(x_1, x_2)) = 0 POL(IFINTER(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_3 + x_4 POL(IFMEM(x_1, x_2, x_3)) = 0 POL(INTER(x_1, x_2)) = [1] + x_1 + x_2 POL(MEM(x_1, x_2)) = 0 POL(c11(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c16(x_1)) = x_1 POL(c17(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c9(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_1 + x_2 POL(eq(x_1, x_2)) = [1] + x_1 + x_2 POL(false) = [1] POL(ifmem(x_1, x_2, x_3)) = [1] + x_2 POL(mem(x_1, x_2)) = [1] + x_1 POL(nil) = [1] POL(s(x_1)) = [1] + x_1 POL(true) = [1] ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) K tuples: APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) Defined Rule Symbols: eq_2, mem_2, ifmem_3 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (13) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) ---------------------------------------- (14) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) K tuples: APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) Defined Rule Symbols: eq_2, mem_2, ifmem_3 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (15) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) We considered the (Usable) Rules:none And the Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = [2]x_1 + [2]x_1*x_2 + x_1^2 POL(EQ(x_1, x_2)) = 0 POL(IFINTER(x_1, x_2, x_3, x_4)) = x_4 + [2]x_3*x_4 POL(IFMEM(x_1, x_2, x_3)) = x_3 POL(INTER(x_1, x_2)) = [2]x_1*x_2 POL(MEM(x_1, x_2)) = x_2 POL(c11(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c16(x_1)) = x_1 POL(c17(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c9(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [2] + x_2 POL(eq(x_1, x_2)) = [2] POL(false) = 0 POL(ifmem(x_1, x_2, x_3)) = [2]x_1 + x_3 + [2]x_3^2 POL(mem(x_1, x_2)) = x_2 + [2]x_2^2 POL(nil) = 0 POL(s(x_1)) = 0 POL(true) = 0 ---------------------------------------- (16) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) K tuples: APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) Defined Rule Symbols: eq_2, mem_2, ifmem_3 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (17) CdtKnowledgeProof (BOTH BOUNDS(ID, ID)) The following tuples could be moved from S to K by knowledge propagation: IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) ---------------------------------------- (18) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) K tuples: APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) Defined Rule Symbols: eq_2, mem_2, ifmem_3 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_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(s(z0), s(z1)) -> c5(EQ(z0, z1)) We considered the (Usable) Rules:none And the Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(APP(x_1, x_2)) = [2]x_1 + [2]x_1*x_2 + [2]x_1^2 POL(EQ(x_1, x_2)) = x_1*x_2 POL(IFINTER(x_1, x_2, x_3, x_4)) = [2]x_4 + [2]x_3*x_4 POL(IFMEM(x_1, x_2, x_3)) = [2]x_2*x_3 POL(INTER(x_1, x_2)) = [2]x_2 + [2]x_1*x_2 POL(MEM(x_1, x_2)) = [2]x_1*x_2 POL(c11(x_1)) = x_1 POL(c14(x_1, x_2)) = x_1 + x_2 POL(c15(x_1, x_2)) = x_1 + x_2 POL(c16(x_1)) = x_1 POL(c17(x_1)) = x_1 POL(c5(x_1)) = x_1 POL(c7(x_1)) = x_1 POL(c9(x_1, x_2)) = x_1 + x_2 POL(cons(x_1, x_2)) = [1] + x_1 + x_2 POL(eq(x_1, x_2)) = [1] POL(false) = [2] POL(ifmem(x_1, x_2, x_3)) = [2]x_1 + [2]x_3^2 POL(mem(x_1, x_2)) = [2] + [2]x_2^2 POL(nil) = 0 POL(s(x_1)) = [1] + x_1 POL(true) = 0 ---------------------------------------- (20) Obligation: Complexity Dependency Tuples Problem Rules: eq(0, 0) -> true eq(0, s(z0)) -> false eq(s(z0), 0) -> false eq(s(z0), s(z1)) -> eq(z0, z1) mem(z0, nil) -> false mem(z0, cons(z1, z2)) -> ifmem(eq(z0, z1), z0, z2) ifmem(true, z0, z1) -> true ifmem(false, z0, z1) -> mem(z0, z1) Tuples: EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) S tuples:none K tuples: APP(cons(z0, z1), z2) -> c7(APP(z1, z2)) IFINTER(true, z0, z1, z2) -> c16(INTER(z1, z2)) IFINTER(false, z0, z1, z2) -> c17(INTER(z1, z2)) INTER(cons(z0, z1), z2) -> c14(IFINTER(mem(z0, z2), z0, z1, z2), MEM(z0, z2)) INTER(z0, cons(z1, z2)) -> c15(IFINTER(mem(z1, z0), z1, z2, z0), MEM(z1, z0)) MEM(z0, cons(z1, z2)) -> c9(IFMEM(eq(z0, z1), z0, z2), EQ(z0, z1)) IFMEM(false, z0, z1) -> c11(MEM(z0, z1)) EQ(s(z0), s(z1)) -> c5(EQ(z0, z1)) Defined Rule Symbols: eq_2, mem_2, ifmem_3 Defined Pair Symbols: EQ_2, APP_2, MEM_2, IFMEM_3, INTER_2, IFINTER_4 Compound Symbols: c5_1, c7_1, c9_2, c11_1, c14_2, c15_2, c16_1, c17_1 ---------------------------------------- (21) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (22) BOUNDS(1, 1) ---------------------------------------- (23) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (24) Obligation: The Runtime Complexity (full) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: if(true, x, y) -> x if(false, x, y) -> y eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) S is empty. Rewrite Strategy: FULL ---------------------------------------- (25) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (26) Obligation: TRS: Rules: if(true, x, y) -> x if(false, x, y) -> y eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) Types: if :: true:false -> if -> if -> if true :: true:false false :: true:false eq :: 0':s -> 0':s -> true:false 0' :: 0':s s :: 0':s -> 0':s app :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons cons :: 0':s -> nil:cons -> nil:cons mem :: 0':s -> nil:cons -> true:false ifmem :: true:false -> 0':s -> nil:cons -> true:false inter :: nil:cons -> nil:cons -> nil:cons ifinter :: true:false -> 0':s -> nil:cons -> nil:cons -> nil:cons hole_if1_0 :: if hole_true:false2_0 :: true:false hole_0':s3_0 :: 0':s hole_nil:cons4_0 :: nil:cons gen_0':s5_0 :: Nat -> 0':s gen_nil:cons6_0 :: Nat -> nil:cons ---------------------------------------- (27) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: eq, app, mem, inter They will be analysed ascendingly in the following order: eq < mem app < inter mem < inter ---------------------------------------- (28) Obligation: TRS: Rules: if(true, x, y) -> x if(false, x, y) -> y eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) Types: if :: true:false -> if -> if -> if true :: true:false false :: true:false eq :: 0':s -> 0':s -> true:false 0' :: 0':s s :: 0':s -> 0':s app :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons cons :: 0':s -> nil:cons -> nil:cons mem :: 0':s -> nil:cons -> true:false ifmem :: true:false -> 0':s -> nil:cons -> true:false inter :: nil:cons -> nil:cons -> nil:cons ifinter :: true:false -> 0':s -> nil:cons -> nil:cons -> nil:cons hole_if1_0 :: if hole_true:false2_0 :: true:false hole_0':s3_0 :: 0':s hole_nil:cons4_0 :: nil:cons gen_0':s5_0 :: Nat -> 0':s gen_nil:cons6_0 :: Nat -> nil:cons Generator Equations: gen_0':s5_0(0) <=> 0' gen_0':s5_0(+(x, 1)) <=> s(gen_0':s5_0(x)) gen_nil:cons6_0(0) <=> nil gen_nil:cons6_0(+(x, 1)) <=> cons(0', gen_nil:cons6_0(x)) The following defined symbols remain to be analysed: eq, app, mem, inter They will be analysed ascendingly in the following order: eq < mem app < inter mem < inter ---------------------------------------- (29) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: eq(gen_0':s5_0(n8_0), gen_0':s5_0(n8_0)) -> true, rt in Omega(1 + n8_0) Induction Base: eq(gen_0':s5_0(0), gen_0':s5_0(0)) ->_R^Omega(1) true Induction Step: eq(gen_0':s5_0(+(n8_0, 1)), gen_0':s5_0(+(n8_0, 1))) ->_R^Omega(1) eq(gen_0':s5_0(n8_0), gen_0':s5_0(n8_0)) ->_IH true We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (30) Complex Obligation (BEST) ---------------------------------------- (31) Obligation: Proved the lower bound n^1 for the following obligation: TRS: Rules: if(true, x, y) -> x if(false, x, y) -> y eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) Types: if :: true:false -> if -> if -> if true :: true:false false :: true:false eq :: 0':s -> 0':s -> true:false 0' :: 0':s s :: 0':s -> 0':s app :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons cons :: 0':s -> nil:cons -> nil:cons mem :: 0':s -> nil:cons -> true:false ifmem :: true:false -> 0':s -> nil:cons -> true:false inter :: nil:cons -> nil:cons -> nil:cons ifinter :: true:false -> 0':s -> nil:cons -> nil:cons -> nil:cons hole_if1_0 :: if hole_true:false2_0 :: true:false hole_0':s3_0 :: 0':s hole_nil:cons4_0 :: nil:cons gen_0':s5_0 :: Nat -> 0':s gen_nil:cons6_0 :: Nat -> nil:cons Generator Equations: gen_0':s5_0(0) <=> 0' gen_0':s5_0(+(x, 1)) <=> s(gen_0':s5_0(x)) gen_nil:cons6_0(0) <=> nil gen_nil:cons6_0(+(x, 1)) <=> cons(0', gen_nil:cons6_0(x)) The following defined symbols remain to be analysed: eq, app, mem, inter They will be analysed ascendingly in the following order: eq < mem app < inter mem < inter ---------------------------------------- (32) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (33) BOUNDS(n^1, INF) ---------------------------------------- (34) Obligation: TRS: Rules: if(true, x, y) -> x if(false, x, y) -> y eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) Types: if :: true:false -> if -> if -> if true :: true:false false :: true:false eq :: 0':s -> 0':s -> true:false 0' :: 0':s s :: 0':s -> 0':s app :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons cons :: 0':s -> nil:cons -> nil:cons mem :: 0':s -> nil:cons -> true:false ifmem :: true:false -> 0':s -> nil:cons -> true:false inter :: nil:cons -> nil:cons -> nil:cons ifinter :: true:false -> 0':s -> nil:cons -> nil:cons -> nil:cons hole_if1_0 :: if hole_true:false2_0 :: true:false hole_0':s3_0 :: 0':s hole_nil:cons4_0 :: nil:cons gen_0':s5_0 :: Nat -> 0':s gen_nil:cons6_0 :: Nat -> nil:cons Lemmas: eq(gen_0':s5_0(n8_0), gen_0':s5_0(n8_0)) -> true, rt in Omega(1 + n8_0) Generator Equations: gen_0':s5_0(0) <=> 0' gen_0':s5_0(+(x, 1)) <=> s(gen_0':s5_0(x)) gen_nil:cons6_0(0) <=> nil gen_nil:cons6_0(+(x, 1)) <=> cons(0', gen_nil:cons6_0(x)) The following defined symbols remain to be analysed: app, mem, inter They will be analysed ascendingly in the following order: app < inter mem < inter ---------------------------------------- (35) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: app(gen_nil:cons6_0(n537_0), gen_nil:cons6_0(b)) -> gen_nil:cons6_0(+(n537_0, b)), rt in Omega(1 + n537_0) Induction Base: app(gen_nil:cons6_0(0), gen_nil:cons6_0(b)) ->_R^Omega(1) gen_nil:cons6_0(b) Induction Step: app(gen_nil:cons6_0(+(n537_0, 1)), gen_nil:cons6_0(b)) ->_R^Omega(1) cons(0', app(gen_nil:cons6_0(n537_0), gen_nil:cons6_0(b))) ->_IH cons(0', gen_nil:cons6_0(+(b, c538_0))) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (36) Obligation: TRS: Rules: if(true, x, y) -> x if(false, x, y) -> y eq(0', 0') -> true eq(0', s(x)) -> false eq(s(x), 0') -> false eq(s(x), s(y)) -> eq(x, y) app(nil, l) -> l app(cons(x, l1), l2) -> cons(x, app(l1, l2)) app(app(l1, l2), l3) -> app(l1, app(l2, l3)) mem(x, nil) -> false mem(x, cons(y, l)) -> ifmem(eq(x, y), x, l) ifmem(true, x, l) -> true ifmem(false, x, l) -> mem(x, l) inter(x, nil) -> nil inter(nil, x) -> nil inter(app(l1, l2), l3) -> app(inter(l1, l3), inter(l2, l3)) inter(l1, app(l2, l3)) -> app(inter(l1, l2), inter(l1, l3)) inter(cons(x, l1), l2) -> ifinter(mem(x, l2), x, l1, l2) inter(l1, cons(x, l2)) -> ifinter(mem(x, l1), x, l2, l1) ifinter(true, x, l1, l2) -> cons(x, inter(l1, l2)) ifinter(false, x, l1, l2) -> inter(l1, l2) Types: if :: true:false -> if -> if -> if true :: true:false false :: true:false eq :: 0':s -> 0':s -> true:false 0' :: 0':s s :: 0':s -> 0':s app :: nil:cons -> nil:cons -> nil:cons nil :: nil:cons cons :: 0':s -> nil:cons -> nil:cons mem :: 0':s -> nil:cons -> true:false ifmem :: true:false -> 0':s -> nil:cons -> true:false inter :: nil:cons -> nil:cons -> nil:cons ifinter :: true:false -> 0':s -> nil:cons -> nil:cons -> nil:cons hole_if1_0 :: if hole_true:false2_0 :: true:false hole_0':s3_0 :: 0':s hole_nil:cons4_0 :: nil:cons gen_0':s5_0 :: Nat -> 0':s gen_nil:cons6_0 :: Nat -> nil:cons Lemmas: eq(gen_0':s5_0(n8_0), gen_0':s5_0(n8_0)) -> true, rt in Omega(1 + n8_0) app(gen_nil:cons6_0(n537_0), gen_nil:cons6_0(b)) -> gen_nil:cons6_0(+(n537_0, b)), rt in Omega(1 + n537_0) Generator Equations: gen_0':s5_0(0) <=> 0' gen_0':s5_0(+(x, 1)) <=> s(gen_0':s5_0(x)) gen_nil:cons6_0(0) <=> nil gen_nil:cons6_0(+(x, 1)) <=> cons(0', gen_nil:cons6_0(x)) The following defined symbols remain to be analysed: mem, inter They will be analysed ascendingly in the following order: mem < inter