0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 3 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳12 CpxRNTS
↳13 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 IntTrsBoundProof (UPPER BOUND(ID), 567 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 115 ms)
↳18 CpxRNTS
↳19 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 669 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 327 ms)
↳24 CpxRNTS
↳25 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 874 ms)
↳28 CpxRNTS
↳29 IntTrsBoundProof (UPPER BOUND(ID), 48 ms)
↳30 CpxRNTS
↳31 FinalProof (⇔, 0 ms)
↳32 BOUNDS(1, n^2)
selects(x', revprefix, Cons(x, xs)) → Cons(Cons(x', revapp(revprefix, Cons(x, xs))), selects(x, Cons(x', revprefix), xs))
select(Cons(x, xs)) → selects(x, Nil, xs)
revapp(Cons(x, xs), rest) → revapp(xs, Cons(x, rest))
selects(x, revprefix, Nil) → Cons(Cons(x, revapp(revprefix, Nil)), Nil)
select(Nil) → Nil
revapp(Nil, rest) → rest
selects(x', revprefix, Cons(x, xs)) → Cons(Cons(x', revapp(revprefix, Cons(x, xs))), selects(x, Cons(x', revprefix), xs)) [1]
select(Cons(x, xs)) → selects(x, Nil, xs) [1]
revapp(Cons(x, xs), rest) → revapp(xs, Cons(x, rest)) [1]
selects(x, revprefix, Nil) → Cons(Cons(x, revapp(revprefix, Nil)), Nil) [1]
select(Nil) → Nil [1]
revapp(Nil, rest) → rest [1]
selects(x', revprefix, Cons(x, xs)) → Cons(Cons(x', revapp(revprefix, Cons(x, xs))), selects(x, Cons(x', revprefix), xs)) [1]
select(Cons(x, xs)) → selects(x, Nil, xs) [1]
revapp(Cons(x, xs), rest) → revapp(xs, Cons(x, rest)) [1]
selects(x, revprefix, Nil) → Cons(Cons(x, revapp(revprefix, Nil)), Nil) [1]
select(Nil) → Nil [1]
revapp(Nil, rest) → rest [1]
selects :: Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil Cons :: Cons:Nil → Cons:Nil → Cons:Nil revapp :: Cons:Nil → Cons:Nil → Cons:Nil select :: Cons:Nil → Cons:Nil Nil :: Cons:Nil |
(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:
selects
select
revapp
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Nil => 0
revapp(z, z') -{ 1 }→ rest :|: z' = rest, rest >= 0, z = 0
revapp(z, z') -{ 1 }→ revapp(xs, 1 + x + rest) :|: z = 1 + x + xs, xs >= 0, z' = rest, x >= 0, rest >= 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + x + revapp(revprefix, 0)) + 0 :|: z'' = 0, z' = revprefix, x >= 0, revprefix >= 0, z = x
selects(z, z', z'') -{ 1 }→ 1 + (1 + x' + revapp(revprefix, 1 + x + xs)) + selects(x, 1 + x' + revprefix, xs) :|: xs >= 0, z' = revprefix, x' >= 0, x >= 0, z'' = 1 + x + xs, revprefix >= 0, z = x'
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
revapp(z, z') -{ 1 }→ revapp(xs, 1 + x + z') :|: z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 0)) + 0 :|: z'' = 0, z >= 0, z' >= 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 1 + x + xs)) + selects(x, 1 + z + z', xs) :|: xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
{ revapp } { selects } { select } |
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
revapp(z, z') -{ 1 }→ revapp(xs, 1 + x + z') :|: z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 0)) + 0 :|: z'' = 0, z >= 0, z' >= 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 1 + x + xs)) + selects(x, 1 + z + z', xs) :|: xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
revapp(z, z') -{ 1 }→ revapp(xs, 1 + x + z') :|: z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 0)) + 0 :|: z'' = 0, z >= 0, z' >= 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 1 + x + xs)) + selects(x, 1 + z + z', xs) :|: xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
revapp: runtime: ?, size: O(n1) [z + z'] |
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
revapp(z, z') -{ 1 }→ revapp(xs, 1 + x + z') :|: z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 0)) + 0 :|: z'' = 0, z >= 0, z' >= 0
selects(z, z', z'') -{ 1 }→ 1 + (1 + z + revapp(z', 1 + x + xs)) + selects(x, 1 + z + z', xs) :|: xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
revapp(z, z') -{ 2 + xs }→ s' :|: s' >= 0, s' <= 1 * xs + 1 * (1 + x + z'), z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s) + selects(x, 1 + z + z', xs) :|: s >= 0, s <= 1 * z' + 1 * (1 + x + xs), xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s'') + 0 :|: s'' >= 0, s'' <= 1 * z' + 1 * 0, z'' = 0, z >= 0, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
revapp(z, z') -{ 2 + xs }→ s' :|: s' >= 0, s' <= 1 * xs + 1 * (1 + x + z'), z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s) + selects(x, 1 + z + z', xs) :|: s >= 0, s <= 1 * z' + 1 * (1 + x + xs), xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s'') + 0 :|: s'' >= 0, s'' <= 1 * z' + 1 * 0, z'' = 0, z >= 0, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] selects: runtime: ?, size: O(n2) [2 + z + z·z'' + z' + z'·z'' + 3·z'' + z''2] |
revapp(z, z') -{ 2 + xs }→ s' :|: s' >= 0, s' <= 1 * xs + 1 * (1 + x + z'), z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
select(z) -{ 1 }→ selects(x, 0, xs) :|: z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s) + selects(x, 1 + z + z', xs) :|: s >= 0, s <= 1 * z' + 1 * (1 + x + xs), xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s'') + 0 :|: s'' >= 0, s'' <= 1 * z' + 1 * 0, z'' = 0, z >= 0, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] selects: runtime: O(n2) [2 + z + z·z'' + z' + z'·z'' + 2·z'' + z''2], size: O(n2) [2 + z + z·z'' + z' + z'·z'' + 3·z'' + z''2] |
revapp(z, z') -{ 2 + xs }→ s' :|: s' >= 0, s' <= 1 * xs + 1 * (1 + x + z'), z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
select(z) -{ 3 + x + x·xs + 2·xs + xs2 }→ s2 :|: s2 >= 0, s2 <= 1 * x + 1 * 0 + 2 + 3 * xs + 1 * (x * xs) + 1 * (0 * xs) + 1 * (xs * xs), z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 5 + x + x·xs + 3·xs + xs·z + xs·z' + xs2 + z + 2·z' }→ 1 + (1 + z + s) + s1 :|: s1 >= 0, s1 <= 1 * x + 1 * (1 + z + z') + 2 + 3 * xs + 1 * (x * xs) + 1 * ((1 + z + z') * xs) + 1 * (xs * xs), s >= 0, s <= 1 * z' + 1 * (1 + x + xs), xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s'') + 0 :|: s'' >= 0, s'' <= 1 * z' + 1 * 0, z'' = 0, z >= 0, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] selects: runtime: O(n2) [2 + z + z·z'' + z' + z'·z'' + 2·z'' + z''2], size: O(n2) [2 + z + z·z'' + z' + z'·z'' + 3·z'' + z''2] |
revapp(z, z') -{ 2 + xs }→ s' :|: s' >= 0, s' <= 1 * xs + 1 * (1 + x + z'), z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
select(z) -{ 3 + x + x·xs + 2·xs + xs2 }→ s2 :|: s2 >= 0, s2 <= 1 * x + 1 * 0 + 2 + 3 * xs + 1 * (x * xs) + 1 * (0 * xs) + 1 * (xs * xs), z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 5 + x + x·xs + 3·xs + xs·z + xs·z' + xs2 + z + 2·z' }→ 1 + (1 + z + s) + s1 :|: s1 >= 0, s1 <= 1 * x + 1 * (1 + z + z') + 2 + 3 * xs + 1 * (x * xs) + 1 * ((1 + z + z') * xs) + 1 * (xs * xs), s >= 0, s <= 1 * z' + 1 * (1 + x + xs), xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s'') + 0 :|: s'' >= 0, s'' <= 1 * z' + 1 * 0, z'' = 0, z >= 0, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] selects: runtime: O(n2) [2 + z + z·z'' + z' + z'·z'' + 2·z'' + z''2], size: O(n2) [2 + z + z·z'' + z' + z'·z'' + 3·z'' + z''2] select: runtime: ?, size: INF |
revapp(z, z') -{ 2 + xs }→ s' :|: s' >= 0, s' <= 1 * xs + 1 * (1 + x + z'), z = 1 + x + xs, xs >= 0, x >= 0, z' >= 0
revapp(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
select(z) -{ 3 + x + x·xs + 2·xs + xs2 }→ s2 :|: s2 >= 0, s2 <= 1 * x + 1 * 0 + 2 + 3 * xs + 1 * (x * xs) + 1 * (0 * xs) + 1 * (xs * xs), z = 1 + x + xs, xs >= 0, x >= 0
select(z) -{ 1 }→ 0 :|: z = 0
selects(z, z', z'') -{ 5 + x + x·xs + 3·xs + xs·z + xs·z' + xs2 + z + 2·z' }→ 1 + (1 + z + s) + s1 :|: s1 >= 0, s1 <= 1 * x + 1 * (1 + z + z') + 2 + 3 * xs + 1 * (x * xs) + 1 * ((1 + z + z') * xs) + 1 * (xs * xs), s >= 0, s <= 1 * z' + 1 * (1 + x + xs), xs >= 0, z >= 0, x >= 0, z'' = 1 + x + xs, z' >= 0
selects(z, z', z'') -{ 2 + z' }→ 1 + (1 + z + s'') + 0 :|: s'' >= 0, s'' <= 1 * z' + 1 * 0, z'' = 0, z >= 0, z' >= 0
revapp: runtime: O(n1) [1 + z], size: O(n1) [z + z'] selects: runtime: O(n2) [2 + z + z·z'' + z' + z'·z'' + 2·z'' + z''2], size: O(n2) [2 + z + z·z'' + z' + z'·z'' + 3·z'' + z''2] select: runtime: O(n2) [4 + 3·z + 2·z2], size: INF |