WORST_CASE(?,O(n^3)) proof of input_ZGnQ1Ype8W.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^3). (0) CpxTRS (1) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (2) CdtProblem (3) CdtLeafRemovalProof [ComplexityIfPolyImplication, 0 ms] (4) CdtProblem (5) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 100 ms] (10) CdtProblem (11) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 61 ms] (12) CdtProblem (13) CdtRuleRemovalProof [UPPER BOUND(ADD(n^3)), 603 ms] (14) CdtProblem (15) SIsEmptyProof [BOTH BOUNDS(ID, ID), 0 ms] (16) BOUNDS(1, 1) ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, n^3). The TRS R consists of the following rules: -(x, 0) -> x -(s(x), s(y)) -> -(x, y) <=(0, y) -> true <=(s(x), 0) -> false <=(s(x), s(y)) -> <=(x, y) if(true, x, y) -> x if(false, x, y) -> y perfectp(0) -> false perfectp(s(x)) -> f(x, s(0), s(x), s(x)) f(0, y, 0, u) -> true f(0, y, s(z), u) -> false f(s(x), 0, z, u) -> f(x, u, -(z, s(x)), u) f(s(x), s(y), z, u) -> if(<=(x, y), f(s(x), -(y, x), z, u), f(x, u, z, u)) S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (2) Obligation: Complexity Dependency Tuples Problem Rules: -(z0, 0) -> z0 -(s(z0), s(z1)) -> -(z0, z1) <=(0, z0) -> true <=(s(z0), 0) -> false <=(s(z0), s(z1)) -> <=(z0, z1) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 perfectp(0) -> false perfectp(s(z0)) -> f(z0, s(0), s(z0), s(z0)) f(0, z0, 0, z1) -> true f(0, z0, s(z1), z2) -> false f(s(z0), 0, z1, z2) -> f(z0, z2, -(z1, s(z0)), z2) f(s(z0), s(z1), z2, z3) -> if(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)) Tuples: -'(z0, 0) -> c -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(0, z0) -> c2 <='(s(z0), 0) -> c3 <='(s(z0), s(z1)) -> c4(<='(z0, z1)) IF(true, z0, z1) -> c5 IF(false, z0, z1) -> c6 PERFECTP(0) -> c7 PERFECTP(s(z0)) -> c8(F(z0, s(0), s(z0), s(z0))) F(0, z0, 0, z1) -> c9 F(0, z0, s(z1), z2) -> c10 F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), <='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(z0, z3, z2, z3)) S tuples: -'(z0, 0) -> c -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(0, z0) -> c2 <='(s(z0), 0) -> c3 <='(s(z0), s(z1)) -> c4(<='(z0, z1)) IF(true, z0, z1) -> c5 IF(false, z0, z1) -> c6 PERFECTP(0) -> c7 PERFECTP(s(z0)) -> c8(F(z0, s(0), s(z0), s(z0))) F(0, z0, 0, z1) -> c9 F(0, z0, s(z1), z2) -> c10 F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), <='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(z0, z3, z2, z3)) K tuples:none Defined Rule Symbols: -_2, <=_2, if_3, perfectp_1, f_4 Defined Pair Symbols: -'_2, <='_2, IF_3, PERFECTP_1, F_4 Compound Symbols: c, c1_1, c2, c3, c4_1, c5, c6, c7, c8_1, c9, c10, c11_2, c12_2, c13_3, c14_2 ---------------------------------------- (3) CdtLeafRemovalProof (ComplexityIfPolyImplication) Removed 1 leading nodes: PERFECTP(s(z0)) -> c8(F(z0, s(0), s(z0), s(z0))) Removed 8 trailing nodes: IF(false, z0, z1) -> c6 PERFECTP(0) -> c7 <='(0, z0) -> c2 <='(s(z0), 0) -> c3 -'(z0, 0) -> c F(0, z0, s(z1), z2) -> c10 F(0, z0, 0, z1) -> c9 IF(true, z0, z1) -> c5 ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: -(z0, 0) -> z0 -(s(z0), s(z1)) -> -(z0, z1) <=(0, z0) -> true <=(s(z0), 0) -> false <=(s(z0), s(z1)) -> <=(z0, z1) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 perfectp(0) -> false perfectp(s(z0)) -> f(z0, s(0), s(z0), s(z0)) f(0, z0, 0, z1) -> true f(0, z0, s(z1), z2) -> false f(s(z0), 0, z1, z2) -> f(z0, z2, -(z1, s(z0)), z2) f(s(z0), s(z1), z2, z3) -> if(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)) Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), <='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(z0, z3, z2, z3)) S tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), <='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(IF(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)), F(z0, z3, z2, z3)) K tuples:none Defined Rule Symbols: -_2, <=_2, if_3, perfectp_1, f_4 Defined Pair Symbols: -'_2, <='_2, F_4 Compound Symbols: c1_1, c4_1, c11_2, c12_2, c13_3, c14_2 ---------------------------------------- (5) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing tuple parts ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: -(z0, 0) -> z0 -(s(z0), s(z1)) -> -(z0, z1) <=(0, z0) -> true <=(s(z0), 0) -> false <=(s(z0), s(z1)) -> <=(z0, z1) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 perfectp(0) -> false perfectp(s(z0)) -> f(z0, s(0), s(z0), s(z0)) f(0, z0, 0, z1) -> true f(0, z0, s(z1), z2) -> false f(s(z0), 0, z1, z2) -> f(z0, z2, -(z1, s(z0)), z2) f(s(z0), s(z1), z2, z3) -> if(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)) Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) S tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) K tuples:none Defined Rule Symbols: -_2, <=_2, if_3, perfectp_1, f_4 Defined Pair Symbols: -'_2, <='_2, F_4 Compound Symbols: c1_1, c4_1, c11_2, c12_1, c13_2, c14_1 ---------------------------------------- (7) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: <=(0, z0) -> true <=(s(z0), 0) -> false <=(s(z0), s(z1)) -> <=(z0, z1) if(true, z0, z1) -> z0 if(false, z0, z1) -> z1 perfectp(0) -> false perfectp(s(z0)) -> f(z0, s(0), s(z0), s(z0)) f(0, z0, 0, z1) -> true f(0, z0, s(z1), z2) -> false f(s(z0), 0, z1, z2) -> f(z0, z2, -(z1, s(z0)), z2) f(s(z0), s(z1), z2, z3) -> if(<=(z0, z1), f(s(z0), -(z1, z0), z2, z3), f(z0, z3, z2, z3)) ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) S tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) K tuples:none Defined Rule Symbols: -_2 Defined Pair Symbols: -'_2, <='_2, F_4 Compound Symbols: c1_1, c4_1, c11_2, c12_1, c13_2, c14_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. <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) We considered the (Usable) Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 And the Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(-(x_1, x_2)) = x_1 POL(-'(x_1, x_2)) = 0 POL(0) = 0 POL(<='(x_1, x_2)) = [1] + x_1 POL(F(x_1, x_2, x_3, x_4)) = [1] + x_1 + x_3 POL(c1(x_1)) = x_1 POL(c11(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c14(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(s(x_1)) = [1] + x_1 ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) S tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) K tuples: <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) Defined Rule Symbols: -_2 Defined Pair Symbols: -'_2, <='_2, F_4 Compound Symbols: c1_1, c4_1, c11_2, c12_1, c13_2, c14_1 ---------------------------------------- (11) 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(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) We considered the (Usable) Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 And the Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(-(x_1, x_2)) = x_1 POL(-'(x_1, x_2)) = 0 POL(0) = [2] POL(<='(x_1, x_2)) = [1] + x_2 POL(F(x_1, x_2, x_3, x_4)) = [2] + x_2 + x_1*x_4 POL(c1(x_1)) = x_1 POL(c11(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c14(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(s(x_1)) = [2] + x_1 ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) S tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) K tuples: <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) Defined Rule Symbols: -_2 Defined Pair Symbols: -'_2, <='_2, F_4 Compound Symbols: c1_1, c4_1, c11_2, c12_1, c13_2, c14_1 ---------------------------------------- (13) CdtRuleRemovalProof (UPPER BOUND(ADD(n^3))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. -'(s(z0), s(z1)) -> c1(-'(z0, z1)) We considered the (Usable) Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 And the Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) The order we found is given by the following interpretation: Polynomial interpretation : POL(-(x_1, x_2)) = x_1 POL(-'(x_1, x_2)) = [1] + x_2 POL(0) = [1] POL(<='(x_1, x_2)) = x_1 + x_2 + x_1*x_2 + x_1^2 + x_1^3 POL(F(x_1, x_2, x_3, x_4)) = x_1 + x_2 + x_2*x_4 + x_1*x_4 + x_1*x_2 + x_2*x_3 + x_1^3 + x_1^2*x_3 + x_1^2*x_4 + x_1*x_4^2 + x_1*x_3*x_4 POL(c1(x_1)) = x_1 POL(c11(x_1, x_2)) = x_1 + x_2 POL(c12(x_1)) = x_1 POL(c13(x_1, x_2)) = x_1 + x_2 POL(c14(x_1)) = x_1 POL(c4(x_1)) = x_1 POL(s(x_1)) = [1] + x_1 ---------------------------------------- (14) Obligation: Complexity Dependency Tuples Problem Rules: -(s(z0), s(z1)) -> -(z0, z1) -(z0, 0) -> z0 Tuples: -'(s(z0), s(z1)) -> c1(-'(z0, z1)) <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) S tuples:none K tuples: <='(s(z0), s(z1)) -> c4(<='(z0, z1)) F(s(z0), 0, z1, z2) -> c11(F(z0, z2, -(z1, s(z0)), z2), -'(z1, s(z0))) F(s(z0), s(z1), z2, z3) -> c12(<='(z0, z1)) F(s(z0), s(z1), z2, z3) -> c14(F(z0, z3, z2, z3)) F(s(z0), s(z1), z2, z3) -> c13(F(s(z0), -(z1, z0), z2, z3), -'(z1, z0)) -'(s(z0), s(z1)) -> c1(-'(z0, z1)) Defined Rule Symbols: -_2 Defined Pair Symbols: -'_2, <='_2, F_4 Compound Symbols: c1_1, c4_1, c11_2, c12_1, c13_2, c14_1 ---------------------------------------- (15) SIsEmptyProof (BOTH BOUNDS(ID, ID)) The set S is empty ---------------------------------------- (16) BOUNDS(1, 1)