KILLED proof of input_8DZDj2Z71a.trs # AProVE Commit ID: aff8ecad908e01718a4c36e68d2e55d5e0f16e15 fuhs 20220216 unpublished The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (4) CpxTRS (5) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (6) CdtProblem (7) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (8) CpxRelTRS (9) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (10) CpxRelTRS (11) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (12) typed CpxTrs (13) OrderProof [LOWER BOUND(ID), 12 ms] (14) typed CpxTrs (15) RewriteLemmaProof [LOWER BOUND(ID), 267 ms] (16) typed CpxTrs (17) RewriteLemmaProof [LOWER BOUND(ID), 8385 ms] (18) BEST (19) proven lower bound (20) LowerBoundPropagationProof [FINISHED, 0 ms] (21) BOUNDS(n^1, INF) (22) typed CpxTrs (23) CpxTrsToCdtProof [UPPER BOUND(ID), 0 ms] (24) CdtProblem (25) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (26) CdtProblem (27) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (28) CdtProblem (29) CdtToCpxRelTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (30) CpxRelTRS (31) RelTrsToTrsProof [UPPER BOUND(ID), 0 ms] (32) CpxTRS (33) RelTrsToWeightedTrsProof [BOTH BOUNDS(ID, ID), 0 ms] (34) CpxWeightedTrs (35) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (36) CpxTypedWeightedTrs (37) CompletionProof [UPPER BOUND(ID), 0 ms] (38) CpxTypedWeightedCompleteTrs (39) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (40) CpxTypedWeightedCompleteTrs (41) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (42) CpxRNTS (43) InliningProof [UPPER BOUND(ID), 278 ms] (44) CpxRNTS (45) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (46) CpxRNTS (47) CompletionProof [UPPER BOUND(ID), 0 ms] (48) CpxTypedWeightedCompleteTrs (49) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (50) CpxRNTS (51) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (52) CdtProblem (53) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (54) CdtProblem (55) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (56) CdtProblem (57) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (58) CdtProblem (59) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (60) CdtProblem (61) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (62) CdtProblem (63) CdtNarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (64) CdtProblem (65) CdtLeafRemovalProof [BOTH BOUNDS(ID, ID), 0 ms] (66) CdtProblem (67) CdtRhsSimplificationProcessorProof [BOTH BOUNDS(ID, ID), 0 ms] (68) CdtProblem (69) CdtForwardInstantiationProof [BOTH BOUNDS(ID, ID), 0 ms] (70) CdtProblem (71) RelTrsToWeightedTrsProof [UPPER BOUND(ID), 0 ms] (72) CpxWeightedTrs (73) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (74) CpxTypedWeightedTrs (75) CompletionProof [UPPER BOUND(ID), 0 ms] (76) CpxTypedWeightedCompleteTrs (77) NarrowingProof [BOTH BOUNDS(ID, ID), 0 ms] (78) CpxTypedWeightedCompleteTrs (79) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (80) CpxRNTS (81) InliningProof [UPPER BOUND(ID), 236 ms] (82) CpxRNTS (83) SimplificationProof [BOTH BOUNDS(ID, ID), 0 ms] (84) CpxRNTS (85) CompletionProof [UPPER BOUND(ID), 0 ms] (86) CpxTypedWeightedCompleteTrs (87) CpxTypedWeightedTrsToRntsProof [UPPER BOUND(ID), 0 ms] (88) CpxRNTS ---------------------------------------- (0) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) a__c -> a a__c -> b mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) mark(c) -> a__c mark(a) -> a mark(b) -> b a__f(X1, X2, X3) -> f(X1, X2, X3) a__c -> c S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (1) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (2) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) a__c -> a a__c -> b mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) mark(c) -> a__c mark(a) -> a mark(b) -> b a__f(X1, X2, X3) -> f(X1, X2, X3) a__c -> c S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (3) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (4) Obligation: The Runtime Complexity (parallel-innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) a__c -> a a__c -> b mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) mark(c) -> a__c mark(a) -> a mark(b) -> b a__f(X1, X2, X3) -> f(X1, X2, X3) a__c -> c S is empty. Rewrite Strategy: PARALLEL_INNERMOST ---------------------------------------- (5) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (6) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 S tuples: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, A__C, MARK_1 Compound Symbols: c1_2, c2, c3, c4, c5, c6_2, c7_1, c8, c9 ---------------------------------------- (7) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (8) 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: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 The (relative) TRS S consists of the following rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Rewrite Strategy: INNERMOST ---------------------------------------- (9) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (10) 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: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 The (relative) TRS S consists of the following rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Rewrite Strategy: INNERMOST ---------------------------------------- (11) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Inferred types. ---------------------------------------- (12) Obligation: Innermost TRS: Rules: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Types: A__F :: a:b:f:c -> a:b:f:c -> a:b:f:c -> c1:c2 a :: a:b:f:c b :: a:b:f:c c1 :: c1:c2 -> c6:c7:c8:c9 -> c1:c2 mark :: a:b:f:c -> a:b:f:c MARK :: a:b:f:c -> c6:c7:c8:c9 c2 :: c1:c2 A__C :: c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c6 :: c1:c2 -> c6:c7:c8:c9 -> c6:c7:c8:c9 c :: a:b:f:c c7 :: c3:c4:c5 -> c6:c7:c8:c9 c8 :: c6:c7:c8:c9 c9 :: c6:c7:c8:c9 a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a__c :: a:b:f:c hole_c1:c21_10 :: c1:c2 hole_a:b:f:c2_10 :: a:b:f:c hole_c6:c7:c8:c93_10 :: c6:c7:c8:c9 hole_c3:c4:c54_10 :: c3:c4:c5 gen_c1:c25_10 :: Nat -> c1:c2 gen_a:b:f:c6_10 :: Nat -> a:b:f:c gen_c6:c7:c8:c97_10 :: Nat -> c6:c7:c8:c9 ---------------------------------------- (13) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: A__F, mark, MARK, a__f They will be analysed ascendingly in the following order: mark < A__F A__F = MARK mark < MARK mark = a__f ---------------------------------------- (14) Obligation: Innermost TRS: Rules: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Types: A__F :: a:b:f:c -> a:b:f:c -> a:b:f:c -> c1:c2 a :: a:b:f:c b :: a:b:f:c c1 :: c1:c2 -> c6:c7:c8:c9 -> c1:c2 mark :: a:b:f:c -> a:b:f:c MARK :: a:b:f:c -> c6:c7:c8:c9 c2 :: c1:c2 A__C :: c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c6 :: c1:c2 -> c6:c7:c8:c9 -> c6:c7:c8:c9 c :: a:b:f:c c7 :: c3:c4:c5 -> c6:c7:c8:c9 c8 :: c6:c7:c8:c9 c9 :: c6:c7:c8:c9 a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a__c :: a:b:f:c hole_c1:c21_10 :: c1:c2 hole_a:b:f:c2_10 :: a:b:f:c hole_c6:c7:c8:c93_10 :: c6:c7:c8:c9 hole_c3:c4:c54_10 :: c3:c4:c5 gen_c1:c25_10 :: Nat -> c1:c2 gen_a:b:f:c6_10 :: Nat -> a:b:f:c gen_c6:c7:c8:c97_10 :: Nat -> c6:c7:c8:c9 Generator Equations: gen_c1:c25_10(0) <=> c2 gen_c1:c25_10(+(x, 1)) <=> c1(gen_c1:c25_10(x), c7(c3)) gen_a:b:f:c6_10(0) <=> a gen_a:b:f:c6_10(+(x, 1)) <=> f(a, a, gen_a:b:f:c6_10(x)) gen_c6:c7:c8:c97_10(0) <=> c7(c3) gen_c6:c7:c8:c97_10(+(x, 1)) <=> c6(c2, gen_c6:c7:c8:c97_10(x)) The following defined symbols remain to be analysed: a__f, A__F, mark, MARK They will be analysed ascendingly in the following order: mark < A__F A__F = MARK mark < MARK mark = a__f ---------------------------------------- (15) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: mark(gen_a:b:f:c6_10(n20_10)) -> gen_a:b:f:c6_10(n20_10), rt in Omega(0) Induction Base: mark(gen_a:b:f:c6_10(0)) ->_R^Omega(0) a Induction Step: mark(gen_a:b:f:c6_10(+(n20_10, 1))) ->_R^Omega(0) a__f(a, a, mark(gen_a:b:f:c6_10(n20_10))) ->_IH a__f(a, a, gen_a:b:f:c6_10(c21_10)) ->_R^Omega(0) f(a, a, gen_a:b:f:c6_10(n20_10)) We have rt in Omega(1) and sz in O(n). Thus, we have irc_R in Omega(n^0). ---------------------------------------- (16) Obligation: Innermost TRS: Rules: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Types: A__F :: a:b:f:c -> a:b:f:c -> a:b:f:c -> c1:c2 a :: a:b:f:c b :: a:b:f:c c1 :: c1:c2 -> c6:c7:c8:c9 -> c1:c2 mark :: a:b:f:c -> a:b:f:c MARK :: a:b:f:c -> c6:c7:c8:c9 c2 :: c1:c2 A__C :: c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c6 :: c1:c2 -> c6:c7:c8:c9 -> c6:c7:c8:c9 c :: a:b:f:c c7 :: c3:c4:c5 -> c6:c7:c8:c9 c8 :: c6:c7:c8:c9 c9 :: c6:c7:c8:c9 a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a__c :: a:b:f:c hole_c1:c21_10 :: c1:c2 hole_a:b:f:c2_10 :: a:b:f:c hole_c6:c7:c8:c93_10 :: c6:c7:c8:c9 hole_c3:c4:c54_10 :: c3:c4:c5 gen_c1:c25_10 :: Nat -> c1:c2 gen_a:b:f:c6_10 :: Nat -> a:b:f:c gen_c6:c7:c8:c97_10 :: Nat -> c6:c7:c8:c9 Lemmas: mark(gen_a:b:f:c6_10(n20_10)) -> gen_a:b:f:c6_10(n20_10), rt in Omega(0) Generator Equations: gen_c1:c25_10(0) <=> c2 gen_c1:c25_10(+(x, 1)) <=> c1(gen_c1:c25_10(x), c7(c3)) gen_a:b:f:c6_10(0) <=> a gen_a:b:f:c6_10(+(x, 1)) <=> f(a, a, gen_a:b:f:c6_10(x)) gen_c6:c7:c8:c97_10(0) <=> c7(c3) gen_c6:c7:c8:c97_10(+(x, 1)) <=> c6(c2, gen_c6:c7:c8:c97_10(x)) The following defined symbols remain to be analysed: a__f, A__F, MARK They will be analysed ascendingly in the following order: mark < A__F A__F = MARK mark < MARK mark = a__f ---------------------------------------- (17) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: MARK(gen_a:b:f:c6_10(+(1, n432_10))) -> *8_10, rt in Omega(n432_10) Induction Base: MARK(gen_a:b:f:c6_10(+(1, 0))) Induction Step: MARK(gen_a:b:f:c6_10(+(1, +(n432_10, 1)))) ->_R^Omega(1) c6(A__F(a, a, mark(gen_a:b:f:c6_10(+(1, n432_10)))), MARK(gen_a:b:f:c6_10(+(1, n432_10)))) ->_L^Omega(0) c6(A__F(a, a, gen_a:b:f:c6_10(+(1, n432_10))), MARK(gen_a:b:f:c6_10(+(1, n432_10)))) ->_R^Omega(1) c6(c2, MARK(gen_a:b:f:c6_10(+(1, n432_10)))) ->_IH c6(c2, *8_10) We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (18) Complex Obligation (BEST) ---------------------------------------- (19) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Types: A__F :: a:b:f:c -> a:b:f:c -> a:b:f:c -> c1:c2 a :: a:b:f:c b :: a:b:f:c c1 :: c1:c2 -> c6:c7:c8:c9 -> c1:c2 mark :: a:b:f:c -> a:b:f:c MARK :: a:b:f:c -> c6:c7:c8:c9 c2 :: c1:c2 A__C :: c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c6 :: c1:c2 -> c6:c7:c8:c9 -> c6:c7:c8:c9 c :: a:b:f:c c7 :: c3:c4:c5 -> c6:c7:c8:c9 c8 :: c6:c7:c8:c9 c9 :: c6:c7:c8:c9 a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a__c :: a:b:f:c hole_c1:c21_10 :: c1:c2 hole_a:b:f:c2_10 :: a:b:f:c hole_c6:c7:c8:c93_10 :: c6:c7:c8:c9 hole_c3:c4:c54_10 :: c3:c4:c5 gen_c1:c25_10 :: Nat -> c1:c2 gen_a:b:f:c6_10 :: Nat -> a:b:f:c gen_c6:c7:c8:c97_10 :: Nat -> c6:c7:c8:c9 Lemmas: mark(gen_a:b:f:c6_10(n20_10)) -> gen_a:b:f:c6_10(n20_10), rt in Omega(0) Generator Equations: gen_c1:c25_10(0) <=> c2 gen_c1:c25_10(+(x, 1)) <=> c1(gen_c1:c25_10(x), c7(c3)) gen_a:b:f:c6_10(0) <=> a gen_a:b:f:c6_10(+(x, 1)) <=> f(a, a, gen_a:b:f:c6_10(x)) gen_c6:c7:c8:c97_10(0) <=> c7(c3) gen_c6:c7:c8:c97_10(+(x, 1)) <=> c6(c2, gen_c6:c7:c8:c97_10(x)) The following defined symbols remain to be analysed: MARK, A__F They will be analysed ascendingly in the following order: A__F = MARK ---------------------------------------- (20) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (21) BOUNDS(n^1, INF) ---------------------------------------- (22) Obligation: Innermost TRS: Rules: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Types: A__F :: a:b:f:c -> a:b:f:c -> a:b:f:c -> c1:c2 a :: a:b:f:c b :: a:b:f:c c1 :: c1:c2 -> c6:c7:c8:c9 -> c1:c2 mark :: a:b:f:c -> a:b:f:c MARK :: a:b:f:c -> c6:c7:c8:c9 c2 :: c1:c2 A__C :: c3:c4:c5 c3 :: c3:c4:c5 c4 :: c3:c4:c5 c5 :: c3:c4:c5 f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c6 :: c1:c2 -> c6:c7:c8:c9 -> c6:c7:c8:c9 c :: a:b:f:c c7 :: c3:c4:c5 -> c6:c7:c8:c9 c8 :: c6:c7:c8:c9 c9 :: c6:c7:c8:c9 a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a__c :: a:b:f:c hole_c1:c21_10 :: c1:c2 hole_a:b:f:c2_10 :: a:b:f:c hole_c6:c7:c8:c93_10 :: c6:c7:c8:c9 hole_c3:c4:c54_10 :: c3:c4:c5 gen_c1:c25_10 :: Nat -> c1:c2 gen_a:b:f:c6_10 :: Nat -> a:b:f:c gen_c6:c7:c8:c97_10 :: Nat -> c6:c7:c8:c9 Lemmas: mark(gen_a:b:f:c6_10(n20_10)) -> gen_a:b:f:c6_10(n20_10), rt in Omega(0) MARK(gen_a:b:f:c6_10(+(1, n432_10))) -> *8_10, rt in Omega(n432_10) Generator Equations: gen_c1:c25_10(0) <=> c2 gen_c1:c25_10(+(x, 1)) <=> c1(gen_c1:c25_10(x), c7(c3)) gen_a:b:f:c6_10(0) <=> a gen_a:b:f:c6_10(+(x, 1)) <=> f(a, a, gen_a:b:f:c6_10(x)) gen_c6:c7:c8:c97_10(0) <=> c7(c3) gen_c6:c7:c8:c97_10(+(x, 1)) <=> c6(c2, gen_c6:c7:c8:c97_10(x)) The following defined symbols remain to be analysed: A__F They will be analysed ascendingly in the following order: A__F = MARK ---------------------------------------- (23) CpxTrsToCdtProof (UPPER BOUND(ID)) Converted Cpx (relative) TRS with rewrite strategy PARALLEL_INNERMOST to CDT ---------------------------------------- (24) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 S tuples: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 A__C -> c5 MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) MARK(c) -> c7(A__C) MARK(a) -> c8 MARK(b) -> c9 K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, A__C, MARK_1 Compound Symbols: c1_2, c2, c3, c4, c5, c6_2, c7_1, c8, c9 ---------------------------------------- (25) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 7 trailing nodes: A__F(z0, z1, z2) -> c2 A__C -> c3 A__C -> c4 MARK(a) -> c8 A__C -> c5 MARK(c) -> c7(A__C) MARK(b) -> c9 ---------------------------------------- (26) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) S tuples: A__F(a, b, z0) -> c1(A__F(z0, z0, mark(z0)), MARK(z0)) MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_2, c6_2 ---------------------------------------- (27) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (28) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) A__F(a, b, z0) -> c1(MARK(z0)) S tuples: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) A__F(a, b, z0) -> c1(MARK(z0)) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: MARK_1, A__F_3 Compound Symbols: c6_2, c1_1 ---------------------------------------- (29) CdtToCpxRelTrsProof (BOTH BOUNDS(ID, ID)) Converted S to standard rules, and D \ S as well as R to relative rules. ---------------------------------------- (30) Obligation: The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) A__F(a, b, z0) -> c1(MARK(z0)) The (relative) TRS S consists of the following rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Rewrite Strategy: INNERMOST ---------------------------------------- (31) RelTrsToTrsProof (UPPER BOUND(ID)) transformed relative TRS to TRS ---------------------------------------- (32) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) A__F(a, b, z0) -> c1(MARK(z0)) a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (33) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (34) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) [1] A__F(a, b, z0) -> c1(MARK(z0)) [1] a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) [0] a__f(z0, z1, z2) -> f(z0, z1, z2) [0] a__c -> a [0] a__c -> b [0] a__c -> c [0] mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) [0] mark(c) -> a__c [0] mark(a) -> a [0] mark(b) -> b [0] Rewrite Strategy: INNERMOST ---------------------------------------- (35) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (36) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) [1] A__F(a, b, z0) -> c1(MARK(z0)) [1] a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) [0] a__f(z0, z1, z2) -> f(z0, z1, z2) [0] a__c -> a [0] a__c -> b [0] a__c -> c [0] mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) [0] mark(c) -> a__c [0] mark(a) -> a [0] mark(b) -> b [0] The TRS has the following type information: MARK :: f:a:b:c -> c6 f :: f:a:b:c -> f:a:b:c -> f:a:b:c -> f:a:b:c c6 :: c1 -> c6 -> c6 A__F :: f:a:b:c -> f:a:b:c -> f:a:b:c -> c1 mark :: f:a:b:c -> f:a:b:c a :: f:a:b:c b :: f:a:b:c c1 :: c6 -> c1 a__f :: f:a:b:c -> f:a:b:c -> f:a:b:c -> f:a:b:c a__c :: f:a:b:c c :: f:a:b:c Rewrite Strategy: INNERMOST ---------------------------------------- (37) CompletionProof (UPPER BOUND(ID)) The transformation into a RNTS is sound, since: (a) The obligation is a constructor system where every type has a constant constructor, (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: MARK_1 A__F_3 (c) The following functions are completely defined: a__f_3 a__c mark_1 Due to the following rules being added: a__f(v0, v1, v2) -> null_a__f [0] a__c -> null_a__c [0] mark(v0) -> null_mark [0] And the following fresh constants: null_a__f, null_a__c, null_mark, const, const1 ---------------------------------------- (38) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) [1] A__F(a, b, z0) -> c1(MARK(z0)) [1] a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) [0] a__f(z0, z1, z2) -> f(z0, z1, z2) [0] a__c -> a [0] a__c -> b [0] a__c -> c [0] mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) [0] mark(c) -> a__c [0] mark(a) -> a [0] mark(b) -> b [0] a__f(v0, v1, v2) -> null_a__f [0] a__c -> null_a__c [0] mark(v0) -> null_mark [0] The TRS has the following type information: MARK :: f:a:b:c:null_a__f:null_a__c:null_mark -> c6 f :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark c6 :: c1 -> c6 -> c6 A__F :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> c1 mark :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark a :: f:a:b:c:null_a__f:null_a__c:null_mark b :: f:a:b:c:null_a__f:null_a__c:null_mark c1 :: c6 -> c1 a__f :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark a__c :: f:a:b:c:null_a__f:null_a__c:null_mark c :: f:a:b:c:null_a__f:null_a__c:null_mark null_a__f :: f:a:b:c:null_a__f:null_a__c:null_mark null_a__c :: f:a:b:c:null_a__f:null_a__c:null_mark null_mark :: f:a:b:c:null_a__f:null_a__c:null_mark const :: c6 const1 :: c1 Rewrite Strategy: INNERMOST ---------------------------------------- (39) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (40) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: MARK(f(z0, z1, f(z0', z1', z2'))) -> c6(A__F(z0, z1, a__f(z0', z1', mark(z2'))), MARK(f(z0', z1', z2'))) [1] MARK(f(z0, z1, c)) -> c6(A__F(z0, z1, a__c), MARK(c)) [1] MARK(f(z0, z1, a)) -> c6(A__F(z0, z1, a), MARK(a)) [1] MARK(f(z0, z1, b)) -> c6(A__F(z0, z1, b), MARK(b)) [1] MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, null_mark), MARK(z2)) [1] A__F(a, b, z0) -> c1(MARK(z0)) [1] a__f(a, b, f(z0'', z1'', z2'')) -> a__f(f(z0'', z1'', z2''), f(z0'', z1'', z2''), a__f(z0'', z1'', mark(z2''))) [0] a__f(a, b, c) -> a__f(c, c, a__c) [0] a__f(a, b, a) -> a__f(a, a, a) [0] a__f(a, b, b) -> a__f(b, b, b) [0] a__f(a, b, z0) -> a__f(z0, z0, null_mark) [0] a__f(z0, z1, z2) -> f(z0, z1, z2) [0] a__c -> a [0] a__c -> b [0] a__c -> c [0] mark(f(z0, z1, f(z01, z11, z21))) -> a__f(z0, z1, a__f(z01, z11, mark(z21))) [0] mark(f(z0, z1, c)) -> a__f(z0, z1, a__c) [0] mark(f(z0, z1, a)) -> a__f(z0, z1, a) [0] mark(f(z0, z1, b)) -> a__f(z0, z1, b) [0] mark(f(z0, z1, z2)) -> a__f(z0, z1, null_mark) [0] mark(c) -> a__c [0] mark(a) -> a [0] mark(b) -> b [0] a__f(v0, v1, v2) -> null_a__f [0] a__c -> null_a__c [0] mark(v0) -> null_mark [0] The TRS has the following type information: MARK :: f:a:b:c:null_a__f:null_a__c:null_mark -> c6 f :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark c6 :: c1 -> c6 -> c6 A__F :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> c1 mark :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark a :: f:a:b:c:null_a__f:null_a__c:null_mark b :: f:a:b:c:null_a__f:null_a__c:null_mark c1 :: c6 -> c1 a__f :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark a__c :: f:a:b:c:null_a__f:null_a__c:null_mark c :: f:a:b:c:null_a__f:null_a__c:null_mark null_a__f :: f:a:b:c:null_a__f:null_a__c:null_mark null_a__c :: f:a:b:c:null_a__f:null_a__c:null_mark null_mark :: f:a:b:c:null_a__f:null_a__c:null_mark const :: c6 const1 :: c1 Rewrite Strategy: INNERMOST ---------------------------------------- (41) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: a => 0 b => 1 c => 2 null_a__f => 0 null_a__c => 0 null_mark => 0 const => 0 const1 => 0 ---------------------------------------- (42) Obligation: Complexity RNTS consisting of the following rules: A__F(z, z', z'') -{ 1 }-> 1 + MARK(z0) :|: z'' = z0, z0 >= 0, z' = 1, z = 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, a__f(z0', z1', mark(z2'))) + MARK(1 + z0' + z1' + z2') :|: z1 >= 0, z = 1 + z0 + z1 + (1 + z0' + z1' + z2'), z0' >= 0, z1' >= 0, z2' >= 0, z0 >= 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, a__c) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 1) + MARK(1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 1 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(z2) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 0 a__c -{ 0 }-> 2 :|: a__c -{ 0 }-> 1 :|: a__c -{ 0 }-> 0 :|: a__f(z, z', z'') -{ 0 }-> a__f(z0, z0, 0) :|: z'' = z0, z0 >= 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, a__c) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(1, 1, 1) :|: z' = 1, z = 0, z'' = 1 a__f(z, z', z'') -{ 0 }-> a__f(0, 0, 0) :|: z'' = 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(1 + z0'' + z1'' + z2'', 1 + z0'' + z1'' + z2'', a__f(z0'', z1'', mark(z2''))) :|: z'' = 1 + z0'' + z1'' + z2'', z' = 1, z0'' >= 0, z = 0, z2'' >= 0, z1'' >= 0 a__f(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 a__f(z, z', z'') -{ 0 }-> 1 + z0 + z1 + z2 :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, a__f(z01, z11, mark(z21))) :|: z = 1 + z0 + z1 + (1 + z01 + z11 + z21), z21 >= 0, z1 >= 0, z11 >= 0, z01 >= 0, z0 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, a__c) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> a__f(z0, z1, 1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 1 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 0 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__c :|: z = 2 mark(z) -{ 0 }-> 1 :|: z = 1 mark(z) -{ 0 }-> 0 :|: z = 0 mark(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 ---------------------------------------- (43) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: a__c -{ 0 }-> 0 :|: a__c -{ 0 }-> 1 :|: a__c -{ 0 }-> 2 :|: ---------------------------------------- (44) Obligation: Complexity RNTS consisting of the following rules: A__F(z, z', z'') -{ 1 }-> 1 + MARK(z0) :|: z'' = z0, z0 >= 0, z' = 1, z = 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, a__f(z0', z1', mark(z2'))) + MARK(1 + z0' + z1' + z2') :|: z1 >= 0, z = 1 + z0 + z1 + (1 + z0' + z1' + z2'), z0' >= 0, z1' >= 0, z2' >= 0, z0 >= 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 2) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 1) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 1) + MARK(1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 1 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(z2) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 0 a__c -{ 0 }-> 2 :|: a__c -{ 0 }-> 1 :|: a__c -{ 0 }-> 0 :|: a__f(z, z', z'') -{ 0 }-> a__f(z0, z0, 0) :|: z'' = z0, z0 >= 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, 2) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, 1) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, 0) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(1, 1, 1) :|: z' = 1, z = 0, z'' = 1 a__f(z, z', z'') -{ 0 }-> a__f(0, 0, 0) :|: z'' = 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(1 + z0'' + z1'' + z2'', 1 + z0'' + z1'' + z2'', a__f(z0'', z1'', mark(z2''))) :|: z'' = 1 + z0'' + z1'' + z2'', z' = 1, z0'' >= 0, z = 0, z2'' >= 0, z1'' >= 0 a__f(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 a__f(z, z', z'') -{ 0 }-> 1 + z0 + z1 + z2 :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, a__f(z01, z11, mark(z21))) :|: z = 1 + z0 + z1 + (1 + z01 + z11 + z21), z21 >= 0, z1 >= 0, z11 >= 0, z01 >= 0, z0 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, 2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> a__f(z0, z1, 1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 1 mark(z) -{ 0 }-> a__f(z0, z1, 1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 0 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> 2 :|: z = 2 mark(z) -{ 0 }-> 1 :|: z = 1 mark(z) -{ 0 }-> 1 :|: z = 2 mark(z) -{ 0 }-> 0 :|: z = 0 mark(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 mark(z) -{ 0 }-> 0 :|: z = 2 ---------------------------------------- (45) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (46) Obligation: Complexity RNTS consisting of the following rules: A__F(z, z', z'') -{ 1 }-> 1 + MARK(z'') :|: z'' >= 0, z' = 1, z = 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, a__f(z0', z1', mark(z2'))) + MARK(1 + z0' + z1' + z2') :|: z1 >= 0, z = 1 + z0 + z1 + (1 + z0' + z1' + z2'), z0' >= 0, z1' >= 0, z2' >= 0, z0 >= 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 2) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 1) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 1) + MARK(1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 1 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(z2) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, 0) + MARK(0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 0 a__c -{ 0 }-> 2 :|: a__c -{ 0 }-> 1 :|: a__c -{ 0 }-> 0 :|: a__f(z, z', z'') -{ 0 }-> a__f(z'', z'', 0) :|: z'' >= 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, 2) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, 1) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(2, 2, 0) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(1, 1, 1) :|: z' = 1, z = 0, z'' = 1 a__f(z, z', z'') -{ 0 }-> a__f(0, 0, 0) :|: z'' = 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> a__f(1 + z0'' + z1'' + z2'', 1 + z0'' + z1'' + z2'', a__f(z0'', z1'', mark(z2''))) :|: z'' = 1 + z0'' + z1'' + z2'', z' = 1, z0'' >= 0, z = 0, z2'' >= 0, z1'' >= 0 a__f(z, z', z'') -{ 0 }-> 0 :|: z >= 0, z' >= 0, z'' >= 0 a__f(z, z', z'') -{ 0 }-> 1 + z + z' + z'' :|: z' >= 0, z >= 0, z'' >= 0 mark(z) -{ 0 }-> a__f(z0, z1, a__f(z01, z11, mark(z21))) :|: z = 1 + z0 + z1 + (1 + z01 + z11 + z21), z21 >= 0, z1 >= 0, z11 >= 0, z01 >= 0, z0 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, 2) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> a__f(z0, z1, 1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 1 mark(z) -{ 0 }-> a__f(z0, z1, 1) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 0 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, 0) :|: z1 >= 0, z0 >= 0, z = 1 + z0 + z1 + 2 mark(z) -{ 0 }-> 2 :|: z = 2 mark(z) -{ 0 }-> 1 :|: z = 1 mark(z) -{ 0 }-> 1 :|: z = 2 mark(z) -{ 0 }-> 0 :|: z = 0 mark(z) -{ 0 }-> 0 :|: z >= 0 mark(z) -{ 0 }-> 0 :|: z = 2 ---------------------------------------- (47) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: a__f(v0, v1, v2) -> null_a__f [0] a__c -> null_a__c [0] mark(v0) -> null_mark [0] MARK(v0) -> null_MARK [0] A__F(v0, v1, v2) -> null_A__F [0] And the following fresh constants: null_a__f, null_a__c, null_mark, null_MARK, null_A__F ---------------------------------------- (48) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) [1] A__F(a, b, z0) -> c1(MARK(z0)) [1] a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) [0] a__f(z0, z1, z2) -> f(z0, z1, z2) [0] a__c -> a [0] a__c -> b [0] a__c -> c [0] mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) [0] mark(c) -> a__c [0] mark(a) -> a [0] mark(b) -> b [0] a__f(v0, v1, v2) -> null_a__f [0] a__c -> null_a__c [0] mark(v0) -> null_mark [0] MARK(v0) -> null_MARK [0] A__F(v0, v1, v2) -> null_A__F [0] The TRS has the following type information: MARK :: f:a:b:c:null_a__f:null_a__c:null_mark -> c6:null_MARK f :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark c6 :: c1:null_A__F -> c6:null_MARK -> c6:null_MARK A__F :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> c1:null_A__F mark :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark a :: f:a:b:c:null_a__f:null_a__c:null_mark b :: f:a:b:c:null_a__f:null_a__c:null_mark c1 :: c6:null_MARK -> c1:null_A__F a__f :: f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark -> f:a:b:c:null_a__f:null_a__c:null_mark a__c :: f:a:b:c:null_a__f:null_a__c:null_mark c :: f:a:b:c:null_a__f:null_a__c:null_mark null_a__f :: f:a:b:c:null_a__f:null_a__c:null_mark null_a__c :: f:a:b:c:null_a__f:null_a__c:null_mark null_mark :: f:a:b:c:null_a__f:null_a__c:null_mark null_MARK :: c6:null_MARK null_A__F :: c1:null_A__F Rewrite Strategy: INNERMOST ---------------------------------------- (49) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: a => 0 b => 1 c => 2 null_a__f => 0 null_a__c => 0 null_mark => 0 null_MARK => 0 null_A__F => 0 ---------------------------------------- (50) Obligation: Complexity RNTS consisting of the following rules: A__F(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 A__F(z, z', z'') -{ 1 }-> 1 + MARK(z0) :|: z'' = z0, z0 >= 0, z' = 1, z = 0 MARK(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 MARK(z) -{ 1 }-> 1 + A__F(z0, z1, mark(z2)) + MARK(z2) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 a__c -{ 0 }-> 2 :|: a__c -{ 0 }-> 1 :|: a__c -{ 0 }-> 0 :|: a__f(z, z', z'') -{ 0 }-> a__f(z0, z0, mark(z0)) :|: z'' = z0, z0 >= 0, z' = 1, z = 0 a__f(z, z', z'') -{ 0 }-> 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0 a__f(z, z', z'') -{ 0 }-> 1 + z0 + z1 + z2 :|: z'' = z2, z = z0, z1 >= 0, z' = z1, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__f(z0, z1, mark(z2)) :|: z1 >= 0, z = 1 + z0 + z1 + z2, z0 >= 0, z2 >= 0 mark(z) -{ 0 }-> a__c :|: z = 2 mark(z) -{ 0 }-> 1 :|: z = 1 mark(z) -{ 0 }-> 0 :|: z = 0 mark(z) -{ 0 }-> 0 :|: v0 >= 0, z = v0 Only complete derivations are relevant for the runtime complexity. ---------------------------------------- (51) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace A__F(a, b, z0) -> c1(MARK(z0)) by A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) ---------------------------------------- (52) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) S tuples: MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: MARK_1, A__F_3 Compound Symbols: c6_2, c1_1 ---------------------------------------- (53) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MARK(f(z0, z1, z2)) -> c6(A__F(z0, z1, mark(z2)), MARK(z2)) by MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c), MARK(c)) MARK(f(x0, x1, a)) -> c6(A__F(x0, x1, a), MARK(a)) MARK(f(x0, x1, b)) -> c6(A__F(x0, x1, b), MARK(b)) ---------------------------------------- (54) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c), MARK(c)) MARK(f(x0, x1, a)) -> c6(A__F(x0, x1, a), MARK(a)) MARK(f(x0, x1, b)) -> c6(A__F(x0, x1, b), MARK(b)) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c), MARK(c)) MARK(f(x0, x1, a)) -> c6(A__F(x0, x1, a), MARK(a)) MARK(f(x0, x1, b)) -> c6(A__F(x0, x1, b), MARK(b)) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_2 ---------------------------------------- (55) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing nodes: MARK(f(x0, x1, b)) -> c6(A__F(x0, x1, b), MARK(b)) MARK(f(x0, x1, a)) -> c6(A__F(x0, x1, a), MARK(a)) ---------------------------------------- (56) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c), MARK(c)) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c), MARK(c)) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_2 ---------------------------------------- (57) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (58) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_2, c6_1 ---------------------------------------- (59) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MARK(f(x0, x1, f(z0, z1, z2))) -> c6(A__F(x0, x1, a__f(z0, z1, mark(z2))), MARK(f(z0, z1, z2))) by MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a)), MARK(f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b)), MARK(f(x2, x3, b))) ---------------------------------------- (60) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a)), MARK(f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b)), MARK(f(x2, x3, b))) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a)), MARK(f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b)), MARK(f(x2, x3, b))) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_1, c6_2 ---------------------------------------- (61) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 2 trailing tuple parts ---------------------------------------- (62) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_1, c6_2 ---------------------------------------- (63) CdtNarrowingProof (BOTH BOUNDS(ID, ID)) Use narrowing to replace MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a__c)) by MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, b)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, c)) ---------------------------------------- (64) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, b)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, c)) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, b)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, c)) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_2, c6_1 ---------------------------------------- (65) CdtLeafRemovalProof (BOTH BOUNDS(ID, ID)) Removed 3 trailing nodes: MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, a)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, b)) MARK(f(x0, x1, c)) -> c6(A__F(x0, x1, c)) ---------------------------------------- (66) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c)), MARK(f(x2, x3, c))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_2, c6_1 ---------------------------------------- (67) CdtRhsSimplificationProcessorProof (BOTH BOUNDS(ID, ID)) Removed 1 trailing tuple parts ---------------------------------------- (68) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c))) S tuples: A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c))) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: A__F_3, MARK_1 Compound Symbols: c1_1, c6_2, c6_1 ---------------------------------------- (69) CdtForwardInstantiationProof (BOTH BOUNDS(ID, ID)) Use forward instantiation to replace A__F(a, b, f(y0, y1, y2)) -> c1(MARK(f(y0, y1, y2))) by A__F(a, b, f(z0, z1, f(a, b, y2))) -> c1(MARK(f(z0, z1, f(a, b, y2)))) A__F(a, b, f(z0, z1, f(y2, y3, y4))) -> c1(MARK(f(z0, z1, f(y2, y3, y4)))) A__F(a, b, f(z0, z1, f(y2, y3, f(y4, y5, y6)))) -> c1(MARK(f(z0, z1, f(y2, y3, f(y4, y5, y6))))) A__F(a, b, f(z0, z1, f(y2, y3, a))) -> c1(MARK(f(z0, z1, f(y2, y3, a)))) A__F(a, b, f(z0, z1, f(y2, y3, b))) -> c1(MARK(f(z0, z1, f(y2, y3, b)))) A__F(a, b, f(z0, z1, f(y2, y3, c))) -> c1(MARK(f(z0, z1, f(y2, y3, c)))) ---------------------------------------- (70) Obligation: Complexity Dependency Tuples Problem Rules: a__f(a, b, z0) -> a__f(z0, z0, mark(z0)) a__f(z0, z1, z2) -> f(z0, z1, z2) a__c -> a a__c -> b a__c -> c mark(f(z0, z1, z2)) -> a__f(z0, z1, mark(z2)) mark(c) -> a__c mark(a) -> a mark(b) -> b Tuples: MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c))) A__F(a, b, f(z0, z1, f(a, b, y2))) -> c1(MARK(f(z0, z1, f(a, b, y2)))) A__F(a, b, f(z0, z1, f(y2, y3, y4))) -> c1(MARK(f(z0, z1, f(y2, y3, y4)))) A__F(a, b, f(z0, z1, f(y2, y3, f(y4, y5, y6)))) -> c1(MARK(f(z0, z1, f(y2, y3, f(y4, y5, y6))))) A__F(a, b, f(z0, z1, f(y2, y3, a))) -> c1(MARK(f(z0, z1, f(y2, y3, a)))) A__F(a, b, f(z0, z1, f(y2, y3, b))) -> c1(MARK(f(z0, z1, f(y2, y3, b)))) A__F(a, b, f(z0, z1, f(y2, y3, c))) -> c1(MARK(f(z0, z1, f(y2, y3, c)))) S tuples: MARK(f(x0, x1, f(a, b, x4))) -> c6(A__F(x0, x1, a__f(mark(x4), mark(x4), mark(mark(x4)))), MARK(f(a, b, x4))) MARK(f(x0, x1, f(z0, z1, x4))) -> c6(A__F(x0, x1, f(z0, z1, mark(x4))), MARK(f(z0, z1, x4))) MARK(f(x0, x1, f(x2, x3, f(z0, z1, z2)))) -> c6(A__F(x0, x1, a__f(x2, x3, a__f(z0, z1, mark(z2)))), MARK(f(x2, x3, f(z0, z1, z2)))) MARK(f(x0, x1, f(x2, x3, a))) -> c6(A__F(x0, x1, a__f(x2, x3, a))) MARK(f(x0, x1, f(x2, x3, b))) -> c6(A__F(x0, x1, a__f(x2, x3, b))) MARK(f(x0, x1, f(x2, x3, c))) -> c6(A__F(x0, x1, a__f(x2, x3, a__c))) A__F(a, b, f(z0, z1, f(a, b, y2))) -> c1(MARK(f(z0, z1, f(a, b, y2)))) A__F(a, b, f(z0, z1, f(y2, y3, y4))) -> c1(MARK(f(z0, z1, f(y2, y3, y4)))) A__F(a, b, f(z0, z1, f(y2, y3, f(y4, y5, y6)))) -> c1(MARK(f(z0, z1, f(y2, y3, f(y4, y5, y6))))) A__F(a, b, f(z0, z1, f(y2, y3, a))) -> c1(MARK(f(z0, z1, f(y2, y3, a)))) A__F(a, b, f(z0, z1, f(y2, y3, b))) -> c1(MARK(f(z0, z1, f(y2, y3, b)))) A__F(a, b, f(z0, z1, f(y2, y3, c))) -> c1(MARK(f(z0, z1, f(y2, y3, c)))) K tuples:none Defined Rule Symbols: a__f_3, a__c, mark_1 Defined Pair Symbols: MARK_1, A__F_3 Compound Symbols: c6_2, c6_1, c1_1 ---------------------------------------- (71) RelTrsToWeightedTrsProof (UPPER BOUND(ID)) Transformed relative TRS to weighted TRS ---------------------------------------- (72) Obligation: The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, INF). The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) [1] a__c -> a [1] a__c -> b [1] mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) [1] mark(c) -> a__c [1] mark(a) -> a [1] mark(b) -> b [1] a__f(X1, X2, X3) -> f(X1, X2, X3) [1] a__c -> c [1] Rewrite Strategy: INNERMOST ---------------------------------------- (73) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (74) Obligation: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) [1] a__c -> a [1] a__c -> b [1] mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) [1] mark(c) -> a__c [1] mark(a) -> a [1] mark(b) -> b [1] a__f(X1, X2, X3) -> f(X1, X2, X3) [1] a__c -> c [1] The TRS has the following type information: a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a :: a:b:f:c b :: a:b:f:c mark :: a:b:f:c -> a:b:f:c a__c :: a:b:f:c f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c :: a:b:f:c Rewrite Strategy: INNERMOST ---------------------------------------- (75) CompletionProof (UPPER BOUND(ID)) The transformation into a RNTS is sound, since: (a) The obligation is a constructor system where every type has a constant constructor, (b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols: none (c) The following functions are completely defined: mark_1 a__c a__f_3 Due to the following rules being added: none And the following fresh constants: none ---------------------------------------- (76) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) [1] a__c -> a [1] a__c -> b [1] mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) [1] mark(c) -> a__c [1] mark(a) -> a [1] mark(b) -> b [1] a__f(X1, X2, X3) -> f(X1, X2, X3) [1] a__c -> c [1] The TRS has the following type information: a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a :: a:b:f:c b :: a:b:f:c mark :: a:b:f:c -> a:b:f:c a__c :: a:b:f:c f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c :: a:b:f:c Rewrite Strategy: INNERMOST ---------------------------------------- (77) NarrowingProof (BOTH BOUNDS(ID, ID)) Narrowed the inner basic terms of all right-hand sides by a single narrowing step. ---------------------------------------- (78) Obligation: Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: a__f(a, b, f(X1', X2', X3')) -> a__f(f(X1', X2', X3'), f(X1', X2', X3'), a__f(X1', X2', mark(X3'))) [2] a__f(a, b, c) -> a__f(c, c, a__c) [2] a__f(a, b, a) -> a__f(a, a, a) [2] a__f(a, b, b) -> a__f(b, b, b) [2] a__c -> a [1] a__c -> b [1] mark(f(X1, X2, f(X1'', X2'', X3''))) -> a__f(X1, X2, a__f(X1'', X2'', mark(X3''))) [2] mark(f(X1, X2, c)) -> a__f(X1, X2, a__c) [2] mark(f(X1, X2, a)) -> a__f(X1, X2, a) [2] mark(f(X1, X2, b)) -> a__f(X1, X2, b) [2] mark(c) -> a__c [1] mark(a) -> a [1] mark(b) -> b [1] a__f(X1, X2, X3) -> f(X1, X2, X3) [1] a__c -> c [1] The TRS has the following type information: a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a :: a:b:f:c b :: a:b:f:c mark :: a:b:f:c -> a:b:f:c a__c :: a:b:f:c f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c :: a:b:f:c Rewrite Strategy: INNERMOST ---------------------------------------- (79) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: a => 0 b => 1 c => 2 ---------------------------------------- (80) Obligation: Complexity RNTS consisting of the following rules: a__c -{ 1 }-> 2 :|: a__c -{ 1 }-> 1 :|: a__c -{ 1 }-> 0 :|: a__f(z, z', z'') -{ 2 }-> a__f(2, 2, a__c) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 2 }-> a__f(1, 1, 1) :|: z' = 1, z = 0, z'' = 1 a__f(z, z', z'') -{ 2 }-> a__f(0, 0, 0) :|: z'' = 0, z' = 1, z = 0 a__f(z, z', z'') -{ 2 }-> a__f(1 + X1' + X2' + X3', 1 + X1' + X2' + X3', a__f(X1', X2', mark(X3'))) :|: X3' >= 0, X2' >= 0, X1' >= 0, z'' = 1 + X1' + X2' + X3', z' = 1, z = 0 a__f(z, z', z'') -{ 1 }-> 1 + X1 + X2 + X3 :|: X1 >= 0, X3 >= 0, X2 >= 0, z = X1, z' = X2, z'' = X3 mark(z) -{ 2 }-> a__f(X1, X2, a__f(X1'', X2'', mark(X3''))) :|: X1 >= 0, X1'' >= 0, z = 1 + X1 + X2 + (1 + X1'' + X2'' + X3''), X3'' >= 0, X2 >= 0, X2'' >= 0 mark(z) -{ 2 }-> a__f(X1, X2, a__c) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> a__f(X1, X2, 1) :|: X1 >= 0, X2 >= 0, z = 1 + X1 + X2 + 1 mark(z) -{ 2 }-> a__f(X1, X2, 0) :|: X1 >= 0, X2 >= 0, z = 1 + X1 + X2 + 0 mark(z) -{ 1 }-> a__c :|: z = 2 mark(z) -{ 1 }-> 1 :|: z = 1 mark(z) -{ 1 }-> 0 :|: z = 0 ---------------------------------------- (81) InliningProof (UPPER BOUND(ID)) Inlined the following terminating rules on right-hand sides where appropriate: a__c -{ 1 }-> 0 :|: a__c -{ 1 }-> 1 :|: a__c -{ 1 }-> 2 :|: ---------------------------------------- (82) Obligation: Complexity RNTS consisting of the following rules: a__c -{ 1 }-> 2 :|: a__c -{ 1 }-> 1 :|: a__c -{ 1 }-> 0 :|: a__f(z, z', z'') -{ 3 }-> a__f(2, 2, 2) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 3 }-> a__f(2, 2, 1) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 3 }-> a__f(2, 2, 0) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 2 }-> a__f(1, 1, 1) :|: z' = 1, z = 0, z'' = 1 a__f(z, z', z'') -{ 2 }-> a__f(0, 0, 0) :|: z'' = 0, z' = 1, z = 0 a__f(z, z', z'') -{ 2 }-> a__f(1 + X1' + X2' + X3', 1 + X1' + X2' + X3', a__f(X1', X2', mark(X3'))) :|: X3' >= 0, X2' >= 0, X1' >= 0, z'' = 1 + X1' + X2' + X3', z' = 1, z = 0 a__f(z, z', z'') -{ 1 }-> 1 + X1 + X2 + X3 :|: X1 >= 0, X3 >= 0, X2 >= 0, z = X1, z' = X2, z'' = X3 mark(z) -{ 2 }-> a__f(X1, X2, a__f(X1'', X2'', mark(X3''))) :|: X1 >= 0, X1'' >= 0, z = 1 + X1 + X2 + (1 + X1'' + X2'' + X3''), X3'' >= 0, X2 >= 0, X2'' >= 0 mark(z) -{ 3 }-> a__f(X1, X2, 2) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> a__f(X1, X2, 1) :|: X1 >= 0, X2 >= 0, z = 1 + X1 + X2 + 1 mark(z) -{ 3 }-> a__f(X1, X2, 1) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> a__f(X1, X2, 0) :|: X1 >= 0, X2 >= 0, z = 1 + X1 + X2 + 0 mark(z) -{ 3 }-> a__f(X1, X2, 0) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> 2 :|: z = 2 mark(z) -{ 1 }-> 1 :|: z = 1 mark(z) -{ 2 }-> 1 :|: z = 2 mark(z) -{ 1 }-> 0 :|: z = 0 mark(z) -{ 2 }-> 0 :|: z = 2 ---------------------------------------- (83) SimplificationProof (BOTH BOUNDS(ID, ID)) Simplified the RNTS by moving equalities from the constraints into the right-hand sides. ---------------------------------------- (84) Obligation: Complexity RNTS consisting of the following rules: a__c -{ 1 }-> 2 :|: a__c -{ 1 }-> 1 :|: a__c -{ 1 }-> 0 :|: a__f(z, z', z'') -{ 3 }-> a__f(2, 2, 2) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 3 }-> a__f(2, 2, 1) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 3 }-> a__f(2, 2, 0) :|: z' = 1, z'' = 2, z = 0 a__f(z, z', z'') -{ 2 }-> a__f(1, 1, 1) :|: z' = 1, z = 0, z'' = 1 a__f(z, z', z'') -{ 2 }-> a__f(0, 0, 0) :|: z'' = 0, z' = 1, z = 0 a__f(z, z', z'') -{ 2 }-> a__f(1 + X1' + X2' + X3', 1 + X1' + X2' + X3', a__f(X1', X2', mark(X3'))) :|: X3' >= 0, X2' >= 0, X1' >= 0, z'' = 1 + X1' + X2' + X3', z' = 1, z = 0 a__f(z, z', z'') -{ 1 }-> 1 + z + z' + z'' :|: z >= 0, z'' >= 0, z' >= 0 mark(z) -{ 2 }-> a__f(X1, X2, a__f(X1'', X2'', mark(X3''))) :|: X1 >= 0, X1'' >= 0, z = 1 + X1 + X2 + (1 + X1'' + X2'' + X3''), X3'' >= 0, X2 >= 0, X2'' >= 0 mark(z) -{ 3 }-> a__f(X1, X2, 2) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> a__f(X1, X2, 1) :|: X1 >= 0, X2 >= 0, z = 1 + X1 + X2 + 1 mark(z) -{ 3 }-> a__f(X1, X2, 1) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> a__f(X1, X2, 0) :|: X1 >= 0, X2 >= 0, z = 1 + X1 + X2 + 0 mark(z) -{ 3 }-> a__f(X1, X2, 0) :|: X1 >= 0, z = 1 + X1 + X2 + 2, X2 >= 0 mark(z) -{ 2 }-> 2 :|: z = 2 mark(z) -{ 1 }-> 1 :|: z = 1 mark(z) -{ 2 }-> 1 :|: z = 2 mark(z) -{ 1 }-> 0 :|: z = 0 mark(z) -{ 2 }-> 0 :|: z = 2 ---------------------------------------- (85) CompletionProof (UPPER BOUND(ID)) The TRS is a completely defined constructor system, as every type has a constant constructor and the following rules were added: none And the following fresh constants: none ---------------------------------------- (86) Obligation: Runtime Complexity Weighted TRS where all functions are completely defined. The underlying TRS is: Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules: a__f(a, b, X) -> a__f(X, X, mark(X)) [1] a__c -> a [1] a__c -> b [1] mark(f(X1, X2, X3)) -> a__f(X1, X2, mark(X3)) [1] mark(c) -> a__c [1] mark(a) -> a [1] mark(b) -> b [1] a__f(X1, X2, X3) -> f(X1, X2, X3) [1] a__c -> c [1] The TRS has the following type information: a__f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c a :: a:b:f:c b :: a:b:f:c mark :: a:b:f:c -> a:b:f:c a__c :: a:b:f:c f :: a:b:f:c -> a:b:f:c -> a:b:f:c -> a:b:f:c c :: a:b:f:c Rewrite Strategy: INNERMOST ---------------------------------------- (87) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID)) Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction. The constant constructors are abstracted as follows: a => 0 b => 1 c => 2 ---------------------------------------- (88) Obligation: Complexity RNTS consisting of the following rules: a__c -{ 1 }-> 2 :|: a__c -{ 1 }-> 1 :|: a__c -{ 1 }-> 0 :|: a__f(z, z', z'') -{ 1 }-> a__f(X, X, mark(X)) :|: z'' = X, X >= 0, z' = 1, z = 0 a__f(z, z', z'') -{ 1 }-> 1 + X1 + X2 + X3 :|: X1 >= 0, X3 >= 0, X2 >= 0, z = X1, z' = X2, z'' = X3 mark(z) -{ 1 }-> a__f(X1, X2, mark(X3)) :|: X1 >= 0, X3 >= 0, z = 1 + X1 + X2 + X3, X2 >= 0 mark(z) -{ 1 }-> a__c :|: z = 2 mark(z) -{ 1 }-> 1 :|: z = 1 mark(z) -{ 1 }-> 0 :|: z = 0 Only complete derivations are relevant for the runtime complexity.