/export/starexec/sandbox/solver/bin/starexec_run_complexity /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), O(n^2)) proof of /export/starexec/sandbox/benchmark/theBenchmark.xml # AProVE Commit ID: 794c25de1cacf0d048858bcd21c9a779e1221865 marcel 20200619 unpublished dirty The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 251 ms] (2) CpxRelTRS (3) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (4) CdtProblem (5) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (6) CdtProblem (7) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CdtProblem (9) CdtGraphSplitRhsProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CdtProblem (11) CdtUsableRulesProof [BOTH BOUNDS(ID, ID), 0 ms] (12) CdtProblem (13) CdtRuleRemovalProof [UPPER BOUND(ADD(n^1)), 62 ms] (14) CdtProblem (15) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (16) CdtProblem (17) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (18) CdtProblem (19) CdtRuleRemovalProof [UPPER BOUND(ADD(n^2)), 167 ms] (20) CdtProblem (21) CdtKnowledgeProof [FINISHED, 0 ms] (22) BOUNDS(1, 1) (23) RelTrsToDecreasingLoopProblemProof [LOWER BOUND(ID), 0 ms] (24) TRS for Loop Detection (25) DecreasingLoopProof [LOWER BOUND(ID), 0 ms] (26) BEST (27) proven lower bound (28) LowerBoundPropagationProof [FINISHED, 0 ms] (29) BOUNDS(n^1, INF) (30) TRS for Loop Detection ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: monus(S(x'), S(x)) -> monus(x', x) gcd(x, y) -> gcd[Ite](equal0(x, y), x, y) equal0(a, b) -> equal0[Ite](<(a, b), a, b) The (relative) TRS S consists of the following rules: <(S(x), S(y)) -> <(x, y) <(0, S(y)) -> True <(x, 0) -> False gcd[Ite](False, x, y) -> gcd[False][Ite](<(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(y, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) equal0[Ite](False, a, b) -> False equal0[Ite](True, a, b) -> equal0[True][Ite](<(b, a), a, b) equal0[True][Ite](False, a, b) -> False equal0[True][Ite](True, a, b) -> True Rewrite Strategy: INNERMOST ---------------------------------------- (1) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (2) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: monus(S(x'), S(x)) -> monus(x', x) gcd(x, y) -> gcd[Ite](equal0(x, y), x, y) equal0(a, b) -> equal0[Ite](<(a, b), a, b) The (relative) TRS S consists of the following rules: <(S(x), S(y)) -> <(x, y) <(0, S(y)) -> True <(x, 0) -> False gcd[Ite](False, x, y) -> gcd[False][Ite](<(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(y, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) equal0[Ite](False, a, b) -> False equal0[Ite](True, a, b) -> equal0[True][Ite](<(b, a), a, b) equal0[True][Ite](False, a, b) -> False equal0[True][Ite](True, a, b) -> True Rewrite Strategy: INNERMOST ---------------------------------------- (3) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS to CDT ---------------------------------------- (4) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False gcd[Ite](False, z0, z1) -> gcd[False][Ite](<(z0, z1), z0, z1) gcd[Ite](True, z0, z1) -> z0 gcd[False][Ite](False, z0, z1) -> gcd(z1, monus(z1, z0)) gcd[False][Ite](True, z0, z1) -> gcd(monus(z0, z1), z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True monus(S(z0), S(z1)) -> monus(z0, z1) gcd(z0, z1) -> gcd[Ite](equal0(z0, z1), z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) <'(0, S(z0)) -> c1 <'(z0, 0) -> c2 GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[ITE](True, z0, z1) -> c4 GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) EQUAL0[ITE](False, z0, z1) -> c7 EQUAL0[ITE](True, z0, z1) -> c8(EQUAL0[TRUE][ITE](<(z1, z0), z0, z1), <'(z1, z0)) EQUAL0[TRUE][ITE](False, z0, z1) -> c9 EQUAL0[TRUE][ITE](True, z0, z1) -> c10 MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c13(EQUAL0[ITE](<(z0, z1), z0, z1), <'(z0, z1)) S tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c13(EQUAL0[ITE](<(z0, z1), z0, z1), <'(z0, z1)) K tuples:none Defined Rule Symbols: monus_2, gcd_2, equal0_2, <_2, gcd[Ite]_3, gcd[False][Ite]_3, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[ITE]_3, GCD[FALSE][ITE]_3, EQUAL0[ITE]_3, EQUAL0[TRUE][ITE]_3, MONUS_2, GCD_2, EQUAL0_2 Compound Symbols: c_1, c1, c2, c3_2, c4, c5_2, c6_2, c7, c8_2, c9, c10, c11_1, c12_2, c13_2 ---------------------------------------- (5) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 6 trailing nodes: <'(z0, 0) -> c2 <'(0, S(z0)) -> c1 EQUAL0[TRUE][ITE](False, z0, z1) -> c9 EQUAL0[ITE](False, z0, z1) -> c7 GCD[ITE](True, z0, z1) -> c4 EQUAL0[TRUE][ITE](True, z0, z1) -> c10 ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False gcd[Ite](False, z0, z1) -> gcd[False][Ite](<(z0, z1), z0, z1) gcd[Ite](True, z0, z1) -> z0 gcd[False][Ite](False, z0, z1) -> gcd(z1, monus(z1, z0)) gcd[False][Ite](True, z0, z1) -> gcd(monus(z0, z1), z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True monus(S(z0), S(z1)) -> monus(z0, z1) gcd(z0, z1) -> gcd[Ite](equal0(z0, z1), z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(EQUAL0[TRUE][ITE](<(z1, z0), z0, z1), <'(z1, z0)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c13(EQUAL0[ITE](<(z0, z1), z0, z1), <'(z0, z1)) S tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c13(EQUAL0[ITE](<(z0, z1), z0, z1), <'(z0, z1)) K tuples:none Defined Rule Symbols: monus_2, gcd_2, equal0_2, <_2, gcd[Ite]_3, gcd[False][Ite]_3, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[ITE]_3, GCD[FALSE][ITE]_3, EQUAL0[ITE]_3, MONUS_2, GCD_2, EQUAL0_2 Compound Symbols: c_1, c3_2, c5_2, c6_2, c8_2, c11_1, c12_2, c13_2 ---------------------------------------- (7) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (8) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False gcd[Ite](False, z0, z1) -> gcd[False][Ite](<(z0, z1), z0, z1) gcd[Ite](True, z0, z1) -> z0 gcd[False][Ite](False, z0, z1) -> gcd(z1, monus(z1, z0)) gcd[False][Ite](True, z0, z1) -> gcd(monus(z0, z1), z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True monus(S(z0), S(z1)) -> monus(z0, z1) gcd(z0, z1) -> gcd[Ite](equal0(z0, z1), z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c13(EQUAL0[ITE](<(z0, z1), z0, z1), <'(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) S tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c13(EQUAL0[ITE](<(z0, z1), z0, z1), <'(z0, z1)) K tuples:none Defined Rule Symbols: monus_2, gcd_2, equal0_2, <_2, gcd[Ite]_3, gcd[False][Ite]_3, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[ITE]_3, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0_2, EQUAL0[ITE]_3 Compound Symbols: c_1, c3_2, c5_2, c6_2, c11_1, c12_2, c13_2, c8_1 ---------------------------------------- (9) CdtGraphSplitRhsProof (BOTH BOUNDS(ID, ID)) Split RHS of tuples not part of any SCC ---------------------------------------- (10) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False gcd[Ite](False, z0, z1) -> gcd[False][Ite](<(z0, z1), z0, z1) gcd[Ite](True, z0, z1) -> z0 gcd[False][Ite](False, z0, z1) -> gcd(z1, monus(z1, z0)) gcd[False][Ite](True, z0, z1) -> gcd(monus(z0, z1), z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True monus(S(z0), S(z1)) -> monus(z0, z1) gcd(z0, z1) -> gcd[Ite](equal0(z0, z1), z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) S tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) K tuples:none Defined Rule Symbols: monus_2, gcd_2, equal0_2, <_2, gcd[Ite]_3, gcd[False][Ite]_3, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[ITE]_3, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0[ITE]_3, EQUAL0_2 Compound Symbols: c_1, c3_2, c5_2, c6_2, c11_1, c12_2, c8_1, c1_1 ---------------------------------------- (11) CdtUsableRulesProof (BOTH BOUNDS(ID, ID)) The following rules are not usable and were removed: gcd[Ite](False, z0, z1) -> gcd[False][Ite](<(z0, z1), z0, z1) gcd[Ite](True, z0, z1) -> z0 gcd[False][Ite](False, z0, z1) -> gcd(z1, monus(z1, z0)) gcd[False][Ite](True, z0, z1) -> gcd(monus(z0, z1), z1) gcd(z0, z1) -> gcd[Ite](equal0(z0, z1), z0, z1) ---------------------------------------- (12) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False monus(S(z0), S(z1)) -> monus(z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) S tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) K tuples:none Defined Rule Symbols: <_2, monus_2, equal0_2, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[ITE]_3, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0[ITE]_3, EQUAL0_2 Compound Symbols: c_1, c3_2, c5_2, c6_2, c11_1, c12_2, c8_1, c1_1 ---------------------------------------- (13) CdtRuleRemovalProof (UPPER BOUND(ADD(n^1))) Found a reduction pair which oriented the following tuples strictly. Hence they can be removed from S. MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) We considered the (Usable) Rules: monus(S(z0), S(z1)) -> monus(z0, z1) And the Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = 0 POL(<(x_1, x_2)) = 0 POL(<'(x_1, x_2)) = 0 POL(EQUAL0(x_1, x_2)) = 0 POL(EQUAL0[ITE](x_1, x_2, x_3)) = 0 POL(False) = 0 POL(GCD(x_1, x_2)) = x_1 + [2]x_2 POL(GCD[FALSE][ITE](x_1, x_2, x_3)) = x_2 + [2]x_3 POL(GCD[ITE](x_1, x_2, x_3)) = x_2 + [2]x_3 POL(MONUS(x_1, x_2)) = x_1 POL(S(x_1)) = [2] + x_1 POL(True) = 0 POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c6(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(equal0(x_1, x_2)) = [1] + x_1 + [3]x_2 POL(equal0[Ite](x_1, x_2, x_3)) = [3] + [3]x_2 + [3]x_3 POL(equal0[True][Ite](x_1, x_2, x_3)) = [3] + [3]x_2 + [3]x_3 POL(monus(x_1, x_2)) = 0 ---------------------------------------- (14) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False monus(S(z0), S(z1)) -> monus(z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) S tuples: GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) K tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) Defined Rule Symbols: <_2, monus_2, equal0_2, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[ITE]_3, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0[ITE]_3, EQUAL0_2 Compound Symbols: c_1, c3_2, c5_2, c6_2, c11_1, c12_2, c8_1, c1_1 ---------------------------------------- (15) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace GCD[ITE](False, z0, z1) -> c3(GCD[FALSE][ITE](<(z0, z1), z0, z1), <'(z0, z1)) by GCD[ITE](False, S(z0), S(z1)) -> c3(GCD[FALSE][ITE](<(z0, z1), S(z0), S(z1)), <'(S(z0), S(z1))) GCD[ITE](False, 0, S(z0)) -> c3(GCD[FALSE][ITE](True, 0, S(z0)), <'(0, S(z0))) GCD[ITE](False, z0, 0) -> c3(GCD[FALSE][ITE](False, z0, 0), <'(z0, 0)) ---------------------------------------- (16) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False monus(S(z0), S(z1)) -> monus(z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) GCD[ITE](False, S(z0), S(z1)) -> c3(GCD[FALSE][ITE](<(z0, z1), S(z0), S(z1)), <'(S(z0), S(z1))) GCD[ITE](False, 0, S(z0)) -> c3(GCD[FALSE][ITE](True, 0, S(z0)), <'(0, S(z0))) GCD[ITE](False, z0, 0) -> c3(GCD[FALSE][ITE](False, z0, 0), <'(z0, 0)) S tuples: GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) K tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) Defined Rule Symbols: <_2, monus_2, equal0_2, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0[ITE]_3, EQUAL0_2, GCD[ITE]_3 Compound Symbols: c_1, c5_2, c6_2, c11_1, c12_2, c8_1, c1_1, c3_2 ---------------------------------------- (17) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (18) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False monus(S(z0), S(z1)) -> monus(z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) GCD[ITE](False, S(z0), S(z1)) -> c3(GCD[FALSE][ITE](<(z0, z1), S(z0), S(z1)), <'(S(z0), S(z1))) GCD[ITE](False, 0, S(z0)) -> c3(GCD[FALSE][ITE](True, 0, S(z0))) GCD[ITE](False, z0, 0) -> c3(GCD[FALSE][ITE](False, z0, 0)) S tuples: GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) K tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) Defined Rule Symbols: <_2, monus_2, equal0_2, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0[ITE]_3, EQUAL0_2, GCD[ITE]_3 Compound Symbols: c_1, c5_2, c6_2, c11_1, c12_2, c8_1, c1_1, c3_2, c3_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. GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) We considered the (Usable) Rules: monus(S(z0), S(z1)) -> monus(z0, z1) <(z0, 0) -> False <(0, S(z0)) -> True <(S(z0), S(z1)) -> <(z0, z1) And the Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) GCD[ITE](False, S(z0), S(z1)) -> c3(GCD[FALSE][ITE](<(z0, z1), S(z0), S(z1)), <'(S(z0), S(z1))) GCD[ITE](False, 0, S(z0)) -> c3(GCD[FALSE][ITE](True, 0, S(z0))) GCD[ITE](False, z0, 0) -> c3(GCD[FALSE][ITE](False, z0, 0)) The order we found is given by the following interpretation: Polynomial interpretation : POL(0) = [2] POL(<(x_1, x_2)) = x_1 POL(<'(x_1, x_2)) = 0 POL(EQUAL0(x_1, x_2)) = 0 POL(EQUAL0[ITE](x_1, x_2, x_3)) = 0 POL(False) = 0 POL(GCD(x_1, x_2)) = [1] + x_2 + [2]x_1*x_2 POL(GCD[FALSE][ITE](x_1, x_2, x_3)) = [1] + [2]x_1*x_3 POL(GCD[ITE](x_1, x_2, x_3)) = x_3 + [2]x_2*x_3 POL(MONUS(x_1, x_2)) = 0 POL(S(x_1)) = [1] + x_1 POL(True) = [1] POL(c(x_1)) = x_1 POL(c1(x_1)) = x_1 POL(c11(x_1)) = x_1 POL(c12(x_1, x_2)) = x_1 + x_2 POL(c3(x_1)) = x_1 POL(c3(x_1, x_2)) = x_1 + x_2 POL(c5(x_1, x_2)) = x_1 + x_2 POL(c6(x_1, x_2)) = x_1 + x_2 POL(c8(x_1)) = x_1 POL(equal0(x_1, x_2)) = 0 POL(equal0[Ite](x_1, x_2, x_3)) = [1] + x_2 + x_3 + x_3^2 + x_2*x_3 + x_2^2 POL(equal0[True][Ite](x_1, x_2, x_3)) = [1] + x_2 + x_3 + x_3^2 + x_2*x_3 + x_2^2 POL(monus(x_1, x_2)) = 0 ---------------------------------------- (20) Obligation: Complexity Dependency Tuples Problem Rules: <(S(z0), S(z1)) -> <(z0, z1) <(0, S(z0)) -> True <(z0, 0) -> False monus(S(z0), S(z1)) -> monus(z0, z1) equal0(z0, z1) -> equal0[Ite](<(z0, z1), z0, z1) equal0[Ite](False, z0, z1) -> False equal0[Ite](True, z0, z1) -> equal0[True][Ite](<(z1, z0), z0, z1) equal0[True][Ite](False, z0, z1) -> False equal0[True][Ite](True, z0, z1) -> True Tuples: <'(S(z0), S(z1)) -> c(<'(z0, z1)) GCD[FALSE][ITE](False, z0, z1) -> c5(GCD(z1, monus(z1, z0)), MONUS(z1, z0)) GCD[FALSE][ITE](True, z0, z1) -> c6(GCD(monus(z0, z1), z1), MONUS(z0, z1)) MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) GCD[ITE](False, S(z0), S(z1)) -> c3(GCD[FALSE][ITE](<(z0, z1), S(z0), S(z1)), <'(S(z0), S(z1))) GCD[ITE](False, 0, S(z0)) -> c3(GCD[FALSE][ITE](True, 0, S(z0))) GCD[ITE](False, z0, 0) -> c3(GCD[FALSE][ITE](False, z0, 0)) S tuples: EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) K tuples: MONUS(S(z0), S(z1)) -> c11(MONUS(z0, z1)) GCD(z0, z1) -> c12(GCD[ITE](equal0(z0, z1), z0, z1), EQUAL0(z0, z1)) Defined Rule Symbols: <_2, monus_2, equal0_2, equal0[Ite]_3, equal0[True][Ite]_3 Defined Pair Symbols: <'_2, GCD[FALSE][ITE]_3, MONUS_2, GCD_2, EQUAL0[ITE]_3, EQUAL0_2, GCD[ITE]_3 Compound Symbols: c_1, c5_2, c6_2, c11_1, c12_2, c8_1, c1_1, c3_2, c3_1 ---------------------------------------- (21) CdtKnowledgeProof (FINISHED) The following tuples could be moved from S to K by knowledge propagation: EQUAL0(z0, z1) -> c1(EQUAL0[ITE](<(z0, z1), z0, z1)) EQUAL0(z0, z1) -> c1(<'(z0, z1)) EQUAL0[ITE](True, z0, z1) -> c8(<'(z1, z0)) Now S is empty ---------------------------------------- (22) BOUNDS(1, 1) ---------------------------------------- (23) RelTrsToDecreasingLoopProblemProof (LOWER BOUND(ID)) Transformed a relative TRS into a decreasing-loop problem. ---------------------------------------- (24) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: monus(S(x'), S(x)) -> monus(x', x) gcd(x, y) -> gcd[Ite](equal0(x, y), x, y) equal0(a, b) -> equal0[Ite](<(a, b), a, b) The (relative) TRS S consists of the following rules: <(S(x), S(y)) -> <(x, y) <(0, S(y)) -> True <(x, 0) -> False gcd[Ite](False, x, y) -> gcd[False][Ite](<(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(y, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) equal0[Ite](False, a, b) -> False equal0[Ite](True, a, b) -> equal0[True][Ite](<(b, a), a, b) equal0[True][Ite](False, a, b) -> False equal0[True][Ite](True, a, b) -> True Rewrite Strategy: INNERMOST ---------------------------------------- (25) DecreasingLoopProof (LOWER BOUND(ID)) The following loop(s) give(s) rise to the lower bound Omega(n^1): The rewrite sequence monus(S(x'), S(x)) ->^+ monus(x', x) gives rise to a decreasing loop by considering the right hand sides subterm at position []. The pumping substitution is [x' / S(x'), x / S(x)]. The result substitution is [ ]. ---------------------------------------- (26) Complex Obligation (BEST) ---------------------------------------- (27) Obligation: Proved the lower bound n^1 for the following obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: monus(S(x'), S(x)) -> monus(x', x) gcd(x, y) -> gcd[Ite](equal0(x, y), x, y) equal0(a, b) -> equal0[Ite](<(a, b), a, b) The (relative) TRS S consists of the following rules: <(S(x), S(y)) -> <(x, y) <(0, S(y)) -> True <(x, 0) -> False gcd[Ite](False, x, y) -> gcd[False][Ite](<(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(y, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) equal0[Ite](False, a, b) -> False equal0[Ite](True, a, b) -> equal0[True][Ite](<(b, a), a, b) equal0[True][Ite](False, a, b) -> False equal0[True][Ite](True, a, b) -> True Rewrite Strategy: INNERMOST ---------------------------------------- (28) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (29) BOUNDS(n^1, INF) ---------------------------------------- (30) Obligation: Analyzing the following TRS for decreasing loops: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). The TRS R consists of the following rules: monus(S(x'), S(x)) -> monus(x', x) gcd(x, y) -> gcd[Ite](equal0(x, y), x, y) equal0(a, b) -> equal0[Ite](<(a, b), a, b) The (relative) TRS S consists of the following rules: <(S(x), S(y)) -> <(x, y) <(0, S(y)) -> True <(x, 0) -> False gcd[Ite](False, x, y) -> gcd[False][Ite](<(x, y), x, y) gcd[Ite](True, x, y) -> x gcd[False][Ite](False, x, y) -> gcd(y, monus(y, x)) gcd[False][Ite](True, x, y) -> gcd(monus(x, y), y) equal0[Ite](False, a, b) -> False equal0[Ite](True, a, b) -> equal0[True][Ite](<(b, a), a, b) equal0[True][Ite](False, a, b) -> False equal0[True][Ite](True, a, b) -> True Rewrite Strategy: INNERMOST