/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: 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) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 65 ms] (8) CdtProblem (9) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 21 ms] (10) CdtProblem (11) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CdtProblem (13) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (14) CdtProblem (15) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CdtProblem (17) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CdtProblem (19) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (20) CdtProblem (21) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (22) CdtProblem (23) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CdtProblem (25) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (26) CdtProblem (27) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (28) CdtProblem (29) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (30) CdtProblem (31) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (32) CdtProblem (33) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 1352 ms] (34) CdtProblem (35) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (36) BOUNDS(1, 1) (37) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (38) CpxTRS (39) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (40) typed CpxTrs (41) OrderProof [LOWER BOUND(ID), 0 ms] (42) typed CpxTrs (43) RewriteLemmaProof [LOWER BOUND(ID), 209 ms] (44) BEST (45) proven lower bound (46) LowerBoundPropagationProof [FINISHED, 0 ms] (47) BOUNDS(n^1, INF) (48) 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: f(0) -> true f(1) -> false f(s(x)) -> f(x) if(true, x, y) -> x if(false, x, y) -> y g(s(x), s(y)) -> if(f(x), s(x), s(y)) g(x, c(y)) -> g(x, g(s(c(y)), y)) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(0) -> c1 F(1) -> c2 F(s(z0)) -> c3(F(z0)) IF(true, z0, z1) -> c4 IF(false, z0, z1) -> c5 G(s(z0), s(z1)) -> c6(IF(f(z0), s(z0), s(z1)), F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) S tuples: F(0) -> c1 F(1) -> c2 F(s(z0)) -> c3(F(z0)) IF(true, z0, z1) -> c4 IF(false, z0, z1) -> c5 G(s(z0), s(z1)) -> c6(IF(f(z0), s(z0), s(z1)), F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) K tuples:none Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, IF_3, G_2 Compound Symbols: c1, c2, c3_1, c4, c5, c6_2, c7_2 ---------------------------------------- (3) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 4 trailing nodes: IF(false, z0, z1) -> c5 F(1) -> c2 IF(true, z0, z1) -> c4 F(0) -> c1 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(s(z0), s(z1)) -> c6(IF(f(z0), s(z0), s(z1)), F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) S tuples: F(s(z0)) -> c3(F(z0)) G(s(z0), s(z1)) -> c6(IF(f(z0), s(z0), s(z1)), F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) K tuples:none Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c6_2, c7_2 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(z0), s(z1)) -> c6(F(z0)) S tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(z0), s(z1)) -> c6(F(z0)) K tuples:none Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c7_2, c6_1 ---------------------------------------- (7) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. G(s(z0), s(z1)) -> c6(F(z0)) We considered the (Usable) Rules: g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) if(true, z0, z1) -> z0 g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) if(false, z0, z1) -> z1 And the Tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(z0), s(z1)) -> c6(F(z0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(1) = [1] POL(F(x_1)) = 0 POL(G(x_1, x_2)) = [1] + x_1 + x_2 POL(c(x_1)) = [1] + x_1 POL(c3(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(c7(x_1, x_2)) = x_1 + x_2 POL(f(x_1)) = [1] POL(false) = [1] POL(g(x_1, x_2)) = 0 POL(if(x_1, x_2, x_3)) = x_2 + x_3 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(z0), s(z1)) -> c6(F(z0)) S tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c7_2, c6_1 ---------------------------------------- (9) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) We considered the (Usable) Rules: g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) if(true, z0, z1) -> z0 g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) if(false, z0, z1) -> z1 And the Tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(z0), s(z1)) -> c6(F(z0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [1] POL(1) = [1] POL(F(x_1)) = 0 POL(G(x_1, x_2)) = x_1 + x_2 POL(c(x_1)) = [1] + x_1 POL(c3(x_1)) = x_1 POL(c6(x_1)) = x_1 POL(c7(x_1, x_2)) = x_1 + x_2 POL(f(x_1)) = [1] POL(false) = [1] POL(g(x_1, x_2)) = 0 POL(if(x_1, x_2, x_3)) = x_2 + x_3 POL(s(x_1)) = 0 POL(true) = [1] ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(z0), s(z1)) -> c6(F(z0)) S tuples: F(s(z0)) -> c3(F(z0)) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c7_2, c6_1 ---------------------------------------- (11) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) by G(x0, c(s(z1))) -> c7(G(x0, if(f(c(s(z1))), s(c(s(z1))), s(z1))), G(s(c(s(z1))), s(z1))) G(x0, c(c(z1))) -> c7(G(x0, g(s(c(c(z1))), g(s(c(z1)), z1))), G(s(c(c(z1))), c(z1))) ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(s(z0), s(z1)) -> c6(F(z0)) G(x0, c(s(z1))) -> c7(G(x0, if(f(c(s(z1))), s(c(s(z1))), s(z1))), G(s(c(s(z1))), s(z1))) G(x0, c(c(z1))) -> c7(G(x0, g(s(c(c(z1))), g(s(c(z1)), z1))), G(s(c(c(z1))), c(z1))) S tuples: F(s(z0)) -> c3(F(z0)) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c6_1, c7_2 ---------------------------------------- (13) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (14) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(s(z0), s(z1)) -> c6(F(z0)) G(x0, c(c(z1))) -> c7(G(x0, g(s(c(c(z1))), g(s(c(z1)), z1))), G(s(c(c(z1))), c(z1))) G(x0, c(s(z1))) -> c7(G(s(c(s(z1))), s(z1))) S tuples: F(s(z0)) -> c3(F(z0)) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c6_1, c7_2, c7_1 ---------------------------------------- (15) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace G(x0, c(c(z1))) -> c7(G(x0, g(s(c(c(z1))), g(s(c(z1)), z1))), G(s(c(c(z1))), c(z1))) by G(x0, c(c(s(z1)))) -> c7(G(x0, g(s(c(c(s(z1)))), if(f(c(s(z1))), s(c(s(z1))), s(z1)))), G(s(c(c(s(z1)))), c(s(z1)))) G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) ---------------------------------------- (16) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(s(z0), s(z1)) -> c6(F(z0)) G(x0, c(s(z1))) -> c7(G(s(c(s(z1))), s(z1))) G(x0, c(c(s(z1)))) -> c7(G(x0, g(s(c(c(s(z1)))), if(f(c(s(z1))), s(c(s(z1))), s(z1)))), G(s(c(c(s(z1)))), c(s(z1)))) G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) S tuples: F(s(z0)) -> c3(F(z0)) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c6_1, c7_1, c7_2 ---------------------------------------- (17) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (18) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: F(s(z0)) -> c3(F(z0)) G(s(z0), s(z1)) -> c6(F(z0)) G(x0, c(s(z1))) -> c7(G(s(c(s(z1))), s(z1))) G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) G(x0, c(c(s(z1)))) -> c7(G(s(c(c(s(z1)))), c(s(z1)))) S tuples: F(s(z0)) -> c3(F(z0)) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: F_1, G_2 Compound Symbols: c3_1, c6_1, c7_1, c7_2 ---------------------------------------- (19) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace F(s(z0)) -> c3(F(z0)) by F(s(s(y0))) -> c3(F(s(y0))) ---------------------------------------- (20) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(x0, c(s(z1))) -> c7(G(s(c(s(z1))), s(z1))) G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) G(x0, c(c(s(z1)))) -> c7(G(s(c(c(s(z1)))), c(s(z1)))) F(s(s(y0))) -> c3(F(s(y0))) S tuples: F(s(s(y0))) -> c3(F(s(y0))) K tuples: G(s(z0), s(z1)) -> c6(F(z0)) G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c6_1, c7_1, c7_2, c3_1 ---------------------------------------- (21) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace G(s(z0), s(z1)) -> c6(F(z0)) by G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) ---------------------------------------- (22) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(s(z1))) -> c7(G(s(c(s(z1))), s(z1))) G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) G(x0, c(c(s(z1)))) -> c7(G(s(c(c(s(z1)))), c(s(z1)))) F(s(s(y0))) -> c3(F(s(y0))) G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) S tuples: F(s(s(y0))) -> c3(F(s(y0))) K tuples: G(z0, c(z1)) -> c7(G(z0, g(s(c(z1)), z1)), G(s(c(z1)), z1)) G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_1, c7_2, c3_1, c6_1 ---------------------------------------- (23) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: G(x0, c(s(z1))) -> c7(G(s(c(s(z1))), s(z1))) G(x0, c(c(s(z1)))) -> c7(G(s(c(c(s(z1)))), c(s(z1)))) ---------------------------------------- (24) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) F(s(s(y0))) -> c3(F(s(y0))) G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) S tuples: F(s(s(y0))) -> c3(F(s(y0))) K tuples: G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_2, c7_1, c3_1, c6_1 ---------------------------------------- (25) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace G(x0, c(c(x1))) -> c7(G(s(c(c(x1))), c(x1))) by G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) G(z0, c(c(c(y1)))) -> c7(G(s(c(c(c(y1)))), c(c(y1)))) ---------------------------------------- (26) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) F(s(s(y0))) -> c3(F(s(y0))) G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) G(z0, c(c(c(y1)))) -> c7(G(s(c(c(c(y1)))), c(c(y1)))) S tuples: F(s(s(y0))) -> c3(F(s(y0))) K tuples: G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_2, c3_1, c6_1, c7_1 ---------------------------------------- (27) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace F(s(s(y0))) -> c3(F(s(y0))) by F(s(s(s(y0)))) -> c3(F(s(s(y0)))) ---------------------------------------- (28) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) G(z0, c(c(c(y1)))) -> c7(G(s(c(c(c(y1)))), c(c(y1)))) F(s(s(s(y0)))) -> c3(F(s(s(y0)))) S tuples: F(s(s(s(y0)))) -> c3(F(s(s(y0)))) K tuples: G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_2, c6_1, c7_1, c3_1 ---------------------------------------- (29) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace G(s(s(s(y0))), s(z1)) -> c6(F(s(s(y0)))) by G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) ---------------------------------------- (30) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) G(z0, c(c(c(y1)))) -> c7(G(s(c(c(c(y1)))), c(c(y1)))) F(s(s(s(y0)))) -> c3(F(s(s(y0)))) G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) S tuples: F(s(s(s(y0)))) -> c3(F(s(s(y0)))) K tuples: G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_2, c7_1, c3_1, c6_1 ---------------------------------------- (31) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace G(z0, c(c(c(y1)))) -> c7(G(s(c(c(c(y1)))), c(c(y1)))) by G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) G(z0, c(c(c(c(c(y1)))))) -> c7(G(s(c(c(c(c(c(y1)))))), c(c(c(c(y1)))))) ---------------------------------------- (32) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) F(s(s(s(y0)))) -> c3(F(s(s(y0)))) G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) G(z0, c(c(c(c(c(y1)))))) -> c7(G(s(c(c(c(c(c(y1)))))), c(c(c(c(y1)))))) S tuples: F(s(s(s(y0)))) -> c3(F(s(s(y0)))) K tuples: G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_2, c7_1, c3_1, c6_1 ---------------------------------------- (33) CdtRuleRemovalProof (UPPER BOUND(ADD(n^2))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. F(s(s(s(y0)))) -> c3(F(s(s(y0)))) We considered the (Usable) Rules:none And the Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) F(s(s(s(y0)))) -> c3(F(s(s(y0)))) G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) G(z0, c(c(c(c(c(y1)))))) -> c7(G(s(c(c(c(c(c(y1)))))), c(c(c(c(y1)))))) The order we found is given by the following interpretation: Matrix interpretation [MATRO]: Non-tuple symbols: <<< M( s_1(x_1) ) = [[0], [2]] + [[1, 4], [0, 1]] * x_1 >>> <<< M( true ) = [[0], [0]] >>> <<< M( c_1(x_1) ) = [[0], [0]] + [[0, 0], [0, 0]] * x_1 >>> <<< M( f_1(x_1) ) = [[4], [0]] + [[0, 0], [0, 4]] * x_1 >>> <<< M( if_3(x_1, ..., x_3) ) = [[0], [0]] + [[0, 0], [0, 0]] * x_1 + [[0, 0], [0, 0]] * x_2 + [[0, 0], [0, 0]] * x_3 >>> <<< M( 0 ) = [[0], [2]] >>> <<< M( 1 ) = [[0], [4]] >>> <<< M( g_2(x_1, x_2) ) = [[0], [0]] + [[0, 0], [0, 0]] * x_1 + [[0, 0], [0, 0]] * x_2 >>> <<< M( false ) = [[1], [4]] >>> Tuple symbols: <<< M( G_2(x_1, x_2) ) = [[0], [0]] + [[1, 0], [0, 0]] * x_1 + [[0, 0], [0, 0]] * x_2 >>> <<< M( c6_1(x_1) ) = [[0], [0]] + [[1, 0], [0, 0]] * x_1 >>> <<< M( c3_1(x_1) ) = [[0], [2]] + [[1, 2], [0, 1]] * x_1 >>> <<< M( F_1(x_1) ) = [[0], [0]] + [[1, 0], [0, 1]] * x_1 >>> <<< M( c7_2(x_1, x_2) ) = [[0], [0]] + [[1, 0], [0, 0]] * x_1 + [[1, 0], [0, 0]] * x_2 >>> <<< M( c7_1(x_1) ) = [[0], [0]] + [[1, 0], [0, 0]] * x_1 >>> Matrix type: We used a basic matrix type which is not further parametrizeable. As matrix orders are CE-compatible, we used usable rules w.r.t. argument filtering in the order. ---------------------------------------- (34) Obligation: Complexity Dependency Tuples Problem Rules: f(0) -> true f(1) -> false f(s(z0)) -> f(z0) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 g(s(z0), s(z1)) -> if(f(z0), s(z0), s(z1)) g(z0, c(z1)) -> g(z0, g(s(c(z1)), z1)) Tuples: G(x0, c(c(c(z1)))) -> c7(G(x0, g(s(c(c(c(z1)))), g(s(c(c(z1))), g(s(c(z1)), z1)))), G(s(c(c(c(z1)))), c(c(z1)))) G(z0, c(c(c(c(y1))))) -> c7(G(s(c(c(c(c(y1))))), c(c(c(y1))))) F(s(s(s(y0)))) -> c3(F(s(s(y0)))) G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) G(z0, c(c(c(c(c(y1)))))) -> c7(G(s(c(c(c(c(c(y1)))))), c(c(c(c(y1)))))) S tuples:none K tuples: G(s(s(s(s(y0)))), s(z1)) -> c6(F(s(s(s(y0))))) F(s(s(s(y0)))) -> c3(F(s(s(y0)))) Defined Rule Symbols: f_1, if_3, g_2 Defined Pair Symbols: G_2, F_1 Compound Symbols: c7_2, c7_1, c3_1, c6_1 ---------------------------------------- (35) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (36) BOUNDS(1, 1) ---------------------------------------- (37) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (38) 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: f(0') -> true f(1') -> false f(s(x)) -> f(x) if(true, x, y) -> x if(false, x, y) -> y g(s(x), s(y)) -> if(f(x), s(x), s(y)) g(x, c(y)) -> g(x, g(s(c(y)), y)) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (39) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (40) Obligation: Innermost TRS: Rules: f(0') -> true f(1') -> false f(s(x)) -> f(x) if(true, x, y) -> x if(false, x, y) -> y g(s(x), s(y)) -> if(f(x), s(x), s(y)) g(x, c(y)) -> g(x, g(s(c(y)), y)) Types: f :: 0':1':s:c -> true:false 0' :: 0':1':s:c true :: true:false 1' :: 0':1':s:c false :: true:false s :: 0':1':s:c -> 0':1':s:c if :: true:false -> 0':1':s:c -> 0':1':s:c -> 0':1':s:c g :: 0':1':s:c -> 0':1':s:c -> 0':1':s:c c :: 0':1':s:c -> 0':1':s:c hole_true:false1_0 :: true:false hole_0':1':s:c2_0 :: 0':1':s:c gen_0':1':s:c3_0 :: Nat -> 0':1':s:c ---------------------------------------- (41) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: f, g They will be analysed ascendingly in the following order: f < g ---------------------------------------- (42) Obligation: Innermost TRS: Rules: f(0') -> true f(1') -> false f(s(x)) -> f(x) if(true, x, y) -> x if(false, x, y) -> y g(s(x), s(y)) -> if(f(x), s(x), s(y)) g(x, c(y)) -> g(x, g(s(c(y)), y)) Types: f :: 0':1':s:c -> true:false 0' :: 0':1':s:c true :: true:false 1' :: 0':1':s:c false :: true:false s :: 0':1':s:c -> 0':1':s:c if :: true:false -> 0':1':s:c -> 0':1':s:c -> 0':1':s:c g :: 0':1':s:c -> 0':1':s:c -> 0':1':s:c c :: 0':1':s:c -> 0':1':s:c hole_true:false1_0 :: true:false hole_0':1':s:c2_0 :: 0':1':s:c gen_0':1':s:c3_0 :: Nat -> 0':1':s:c Generator Equations: gen_0':1':s:c3_0(0) <=> 0' gen_0':1':s:c3_0(+(x, 1)) <=> s(gen_0':1':s:c3_0(x)) The following defined symbols remain to be analysed: f, g They will be analysed ascendingly in the following order: f < g ---------------------------------------- (43) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: f(gen_0':1':s:c3_0(n5_0)) -> true, rt in Omega(1 + n5_0) Induction Base: f(gen_0':1':s:c3_0(0)) ->_R^Omega(1) true Induction Step: f(gen_0':1':s:c3_0(+(n5_0, 1))) ->_R^Omega(1) f(gen_0':1':s:c3_0(n5_0)) ->_IH true We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (44) Complex Obligation (BEST) ---------------------------------------- (45) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: f(0') -> true f(1') -> false f(s(x)) -> f(x) if(true, x, y) -> x if(false, x, y) -> y g(s(x), s(y)) -> if(f(x), s(x), s(y)) g(x, c(y)) -> g(x, g(s(c(y)), y)) Types: f :: 0':1':s:c -> true:false 0' :: 0':1':s:c true :: true:false 1' :: 0':1':s:c false :: true:false s :: 0':1':s:c -> 0':1':s:c if :: true:false -> 0':1':s:c -> 0':1':s:c -> 0':1':s:c g :: 0':1':s:c -> 0':1':s:c -> 0':1':s:c c :: 0':1':s:c -> 0':1':s:c hole_true:false1_0 :: true:false hole_0':1':s:c2_0 :: 0':1':s:c gen_0':1':s:c3_0 :: Nat -> 0':1':s:c Generator Equations: gen_0':1':s:c3_0(0) <=> 0' gen_0':1':s:c3_0(+(x, 1)) <=> s(gen_0':1':s:c3_0(x)) The following defined symbols remain to be analysed: f, g They will be analysed ascendingly in the following order: f < g ---------------------------------------- (46) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (47) BOUNDS(n^1, INF) ---------------------------------------- (48) Obligation: Innermost TRS: Rules: f(0') -> true f(1') -> false f(s(x)) -> f(x) if(true, x, y) -> x if(false, x, y) -> y g(s(x), s(y)) -> if(f(x), s(x), s(y)) g(x, c(y)) -> g(x, g(s(c(y)), y)) Types: f :: 0':1':s:c -> true:false 0' :: 0':1':s:c true :: true:false 1' :: 0':1':s:c false :: true:false s :: 0':1':s:c -> 0':1':s:c if :: true:false -> 0':1':s:c -> 0':1':s:c -> 0':1':s:c g :: 0':1':s:c -> 0':1':s:c -> 0':1':s:c c :: 0':1':s:c -> 0':1':s:c hole_true:false1_0 :: true:false hole_0':1':s:c2_0 :: 0':1':s:c gen_0':1':s:c3_0 :: Nat -> 0':1':s:c Lemmas: f(gen_0':1':s:c3_0(n5_0)) -> true, rt in Omega(1 + n5_0) Generator Equations: gen_0':1':s:c3_0(0) <=> 0' gen_0':1':s:c3_0(+(x, 1)) <=> s(gen_0':1':s:c3_0(x)) The following defined symbols remain to be analysed: g