WORST_CASE(Omega(n^1),O(n^2)) proof of input_f1muAch4nB.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, n^2). (0) CpxRelTRS (1) SInnermostTerminationProof [BOTH CONCRETE BOUNDS(ID, ID), 318 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)), 87 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)), 231 ms] (20) CdtProblem (21) CdtKnowledgeProof [FINISHED, 0 ms] (22) BOUNDS(1, 1) (23) CpxTrsToCdtProof [BOTH BOUNDS(ID, ID), 0 ms] (24) CdtProblem (25) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (26) CpxRelTRS (27) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (28) CpxRelTRS (29) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (30) typed CpxTrs (31) OrderProof [LOWER BOUND(ID), 0 ms] (32) typed CpxTrs (33) RewriteLemmaProof [LOWER BOUND(ID), 590 ms] (34) BEST (35) proven lower bound (36) LowerBoundPropagationProof [FINISHED, 0 ms] (37) BOUNDS(n^1, INF) (38) typed CpxTrs (39) RewriteLemmaProof [LOWER BOUND(ID), 42 ms] (40) typed CpxTrs (41) RewriteLemmaProof [LOWER BOUND(ID), 56 ms] (42) typed CpxTrs (43) RewriteLemmaProof [LOWER BOUND(ID), 175 ms] (44) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-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: PARALLEL_INNERMOST ---------------------------------------- (1) SInnermostTerminationProof (BOTH CONCRETE BOUNDS(ID, ID)) proved innermost termination of relative rules ---------------------------------------- (2) Obligation: The Runtime Complexity (parallel-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: PARALLEL_INNERMOST ---------------------------------------- (3) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST 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: EQUAL0[ITE](False, z0, z1) -> c7 <'(z0, 0) -> c2 GCD[ITE](True, z0, z1) -> c4 <'(0, S(z0)) -> c1 EQUAL0[TRUE][ITE](True, z0, z1) -> c10 EQUAL0[TRUE][ITE](False, z0, z1) -> c9 ---------------------------------------- (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) CpxTrsToCdtProof (BOTH BOUNDS(ID, ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (24) 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 ---------------------------------------- (25) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (26) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: 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)) The (relative) TRS S consists of the following rules: <'(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 <(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) Rewrite Strategy: INNERMOST ---------------------------------------- (27) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (28) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: 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)) The (relative) TRS S consists of the following rules: <'(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 <(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) Rewrite Strategy: INNERMOST ---------------------------------------- (29) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (30) Obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 ---------------------------------------- (31) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: MONUS, GCD, <, <', monus, gcd They will be analysed ascendingly in the following order: MONUS < GCD < < GCD <' < GCD monus < GCD < < gcd monus < gcd ---------------------------------------- (32) Obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 Generator Equations: gen_c1111_14(0) <=> hole_c111_14 gen_c1111_14(+(x, 1)) <=> c11(gen_c1111_14(x)) gen_S:0'12_14(0) <=> 0' gen_S:0'12_14(+(x, 1)) <=> S(gen_S:0'12_14(x)) gen_c:c1:c213_14(0) <=> c1 gen_c:c1:c213_14(+(x, 1)) <=> c(gen_c:c1:c213_14(x)) The following defined symbols remain to be analysed: MONUS, GCD, <, <', monus, gcd They will be analysed ascendingly in the following order: MONUS < GCD < < GCD <' < GCD monus < GCD < < gcd monus < gcd ---------------------------------------- (33) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MONUS(gen_S:0'12_14(+(1, n15_14)), gen_S:0'12_14(+(1, n15_14))) -> *14_14, rt in Omega(n15_14) Induction Base: MONUS(gen_S:0'12_14(+(1, 0)), gen_S:0'12_14(+(1, 0))) Induction Step: MONUS(gen_S:0'12_14(+(1, +(n15_14, 1))), gen_S:0'12_14(+(1, +(n15_14, 1)))) ->_R^Omega(1) c11(MONUS(gen_S:0'12_14(+(1, n15_14)), gen_S:0'12_14(+(1, n15_14)))) ->_IH c11(*14_14) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (34) Complex Obligation (BEST) ---------------------------------------- (35) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 Generator Equations: gen_c1111_14(0) <=> hole_c111_14 gen_c1111_14(+(x, 1)) <=> c11(gen_c1111_14(x)) gen_S:0'12_14(0) <=> 0' gen_S:0'12_14(+(x, 1)) <=> S(gen_S:0'12_14(x)) gen_c:c1:c213_14(0) <=> c1 gen_c:c1:c213_14(+(x, 1)) <=> c(gen_c:c1:c213_14(x)) The following defined symbols remain to be analysed: MONUS, GCD, <, <', monus, gcd They will be analysed ascendingly in the following order: MONUS < GCD < < GCD <' < GCD monus < GCD < < gcd monus < gcd ---------------------------------------- (36) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (37) BOUNDS(n^1, INF) ---------------------------------------- (38) Obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 Lemmas: MONUS(gen_S:0'12_14(+(1, n15_14)), gen_S:0'12_14(+(1, n15_14))) -> *14_14, rt in Omega(n15_14) Generator Equations: gen_c1111_14(0) <=> hole_c111_14 gen_c1111_14(+(x, 1)) <=> c11(gen_c1111_14(x)) gen_S:0'12_14(0) <=> 0' gen_S:0'12_14(+(x, 1)) <=> S(gen_S:0'12_14(x)) gen_c:c1:c213_14(0) <=> c1 gen_c:c1:c213_14(+(x, 1)) <=> c(gen_c:c1:c213_14(x)) The following defined symbols remain to be analysed: <, GCD, <', monus, gcd They will be analysed ascendingly in the following order: < < GCD <' < GCD monus < GCD < < gcd monus < gcd ---------------------------------------- (39) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: <(gen_S:0'12_14(n492_14), gen_S:0'12_14(+(1, n492_14))) -> True, rt in Omega(0) Induction Base: <(gen_S:0'12_14(0), gen_S:0'12_14(+(1, 0))) ->_R^Omega(0) True Induction Step: <(gen_S:0'12_14(+(n492_14, 1)), gen_S:0'12_14(+(1, +(n492_14, 1)))) ->_R^Omega(0) <(gen_S:0'12_14(n492_14), gen_S:0'12_14(+(1, n492_14))) ->_IH True We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (40) Obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 Lemmas: MONUS(gen_S:0'12_14(+(1, n15_14)), gen_S:0'12_14(+(1, n15_14))) -> *14_14, rt in Omega(n15_14) <(gen_S:0'12_14(n492_14), gen_S:0'12_14(+(1, n492_14))) -> True, rt in Omega(0) Generator Equations: gen_c1111_14(0) <=> hole_c111_14 gen_c1111_14(+(x, 1)) <=> c11(gen_c1111_14(x)) gen_S:0'12_14(0) <=> 0' gen_S:0'12_14(+(x, 1)) <=> S(gen_S:0'12_14(x)) gen_c:c1:c213_14(0) <=> c1 gen_c:c1:c213_14(+(x, 1)) <=> c(gen_c:c1:c213_14(x)) The following defined symbols remain to be analysed: <', GCD, monus, gcd They will be analysed ascendingly in the following order: <' < GCD monus < GCD monus < gcd ---------------------------------------- (41) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: <'(gen_S:0'12_14(n910_14), gen_S:0'12_14(+(1, n910_14))) -> gen_c:c1:c213_14(n910_14), rt in Omega(0) Induction Base: <'(gen_S:0'12_14(0), gen_S:0'12_14(+(1, 0))) ->_R^Omega(0) c1 Induction Step: <'(gen_S:0'12_14(+(n910_14, 1)), gen_S:0'12_14(+(1, +(n910_14, 1)))) ->_R^Omega(0) c(<'(gen_S:0'12_14(n910_14), gen_S:0'12_14(+(1, n910_14)))) ->_IH c(gen_c:c1:c213_14(c911_14)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (42) Obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 Lemmas: MONUS(gen_S:0'12_14(+(1, n15_14)), gen_S:0'12_14(+(1, n15_14))) -> *14_14, rt in Omega(n15_14) <(gen_S:0'12_14(n492_14), gen_S:0'12_14(+(1, n492_14))) -> True, rt in Omega(0) <'(gen_S:0'12_14(n910_14), gen_S:0'12_14(+(1, n910_14))) -> gen_c:c1:c213_14(n910_14), rt in Omega(0) Generator Equations: gen_c1111_14(0) <=> hole_c111_14 gen_c1111_14(+(x, 1)) <=> c11(gen_c1111_14(x)) gen_S:0'12_14(0) <=> 0' gen_S:0'12_14(+(x, 1)) <=> S(gen_S:0'12_14(x)) gen_c:c1:c213_14(0) <=> c1 gen_c:c1:c213_14(+(x, 1)) <=> c(gen_c:c1:c213_14(x)) The following defined symbols remain to be analysed: monus, GCD, gcd They will be analysed ascendingly in the following order: monus < GCD monus < gcd ---------------------------------------- (43) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: monus(gen_S:0'12_14(+(1, n1689_14)), gen_S:0'12_14(+(1, n1689_14))) -> *14_14, rt in Omega(0) Induction Base: monus(gen_S:0'12_14(+(1, 0)), gen_S:0'12_14(+(1, 0))) Induction Step: monus(gen_S:0'12_14(+(1, +(n1689_14, 1))), gen_S:0'12_14(+(1, +(n1689_14, 1)))) ->_R^Omega(0) monus(gen_S:0'12_14(+(1, n1689_14)), gen_S:0'12_14(+(1, n1689_14))) ->_IH *14_14 We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (44) Obligation: Innermost TRS: Rules: 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(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 <(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) Types: MONUS :: S:0' -> S:0' -> c11 S :: S:0' -> S:0' c11 :: c11 -> c11 GCD :: S:0' -> S:0' -> c12 c12 :: c3:c4 -> c13 -> c12 GCD[ITE] :: False:True -> S:0' -> S:0' -> c3:c4 equal0 :: S:0' -> S:0' -> False:True EQUAL0 :: S:0' -> S:0' -> c13 c13 :: c7:c8 -> c:c1:c2 -> c13 EQUAL0[ITE] :: False:True -> S:0' -> S:0' -> c7:c8 < :: S:0' -> S:0' -> False:True <' :: S:0' -> S:0' -> c:c1:c2 c :: c:c1:c2 -> c:c1:c2 0' :: S:0' c1 :: c:c1:c2 c2 :: c:c1:c2 False :: False:True c3 :: c5:c6 -> c:c1:c2 -> c3:c4 GCD[FALSE][ITE] :: False:True -> S:0' -> S:0' -> c5:c6 True :: False:True c4 :: c3:c4 c5 :: c12 -> c11 -> c5:c6 monus :: S:0' -> S:0' -> S:0' c6 :: c12 -> c11 -> c5:c6 c7 :: c7:c8 c8 :: c9:c10 -> c:c1:c2 -> c7:c8 EQUAL0[TRUE][ITE] :: False:True -> S:0' -> S:0' -> c9:c10 c9 :: c9:c10 c10 :: c9:c10 gcd[Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd[False][Ite] :: False:True -> S:0' -> S:0' -> S:0' gcd :: S:0' -> S:0' -> S:0' equal0[Ite] :: False:True -> S:0' -> S:0' -> False:True equal0[True][Ite] :: False:True -> S:0' -> S:0' -> False:True hole_c111_14 :: c11 hole_S:0'2_14 :: S:0' hole_c123_14 :: c12 hole_c3:c44_14 :: c3:c4 hole_c135_14 :: c13 hole_False:True6_14 :: False:True hole_c7:c87_14 :: c7:c8 hole_c:c1:c28_14 :: c:c1:c2 hole_c5:c69_14 :: c5:c6 hole_c9:c1010_14 :: c9:c10 gen_c1111_14 :: Nat -> c11 gen_S:0'12_14 :: Nat -> S:0' gen_c:c1:c213_14 :: Nat -> c:c1:c2 Lemmas: MONUS(gen_S:0'12_14(+(1, n15_14)), gen_S:0'12_14(+(1, n15_14))) -> *14_14, rt in Omega(n15_14) <(gen_S:0'12_14(n492_14), gen_S:0'12_14(+(1, n492_14))) -> True, rt in Omega(0) <'(gen_S:0'12_14(n910_14), gen_S:0'12_14(+(1, n910_14))) -> gen_c:c1:c213_14(n910_14), rt in Omega(0) monus(gen_S:0'12_14(+(1, n1689_14)), gen_S:0'12_14(+(1, n1689_14))) -> *14_14, rt in Omega(0) Generator Equations: gen_c1111_14(0) <=> hole_c111_14 gen_c1111_14(+(x, 1)) <=> c11(gen_c1111_14(x)) gen_S:0'12_14(0) <=> 0' gen_S:0'12_14(+(x, 1)) <=> S(gen_S:0'12_14(x)) gen_c:c1:c213_14(0) <=> c1 gen_c:c1:c213_14(+(x, 1)) <=> c(gen_c:c1:c213_14(x)) The following defined symbols remain to be analysed: GCD, gcd