/export/starexec/sandbox2/solver/bin/starexec_run_complexity /export/starexec/sandbox2/benchmark/theBenchmark.xml /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- WORST_CASE(Omega(n^1), ?) proof of /export/starexec/sandbox2/benchmark/theBenchmark.xml # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). (0) CpxTRS (1) RenamingProof [BOTH BOUNDS(ID, ID), 0 ms] (2) CpxTRS (3) TypeInferenceProof [BOTH BOUNDS(ID, ID), 0 ms] (4) typed CpxTrs (5) OrderProof [LOWER BOUND(ID), 0 ms] (6) typed CpxTrs (7) RewriteLemmaProof [LOWER BOUND(ID), 6053 ms] (8) BEST (9) proven lower bound (10) LowerBoundPropagationProof [FINISHED, 0 ms] (11) BOUNDS(n^1, INF) (12) typed CpxTrs ---------------------------------------- (0) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: and(false, false) -> false and(true, false) -> false and(false, true) -> false and(true, true) -> true eq(nil, nil) -> true eq(cons(T, L), nil) -> false eq(nil, cons(T, L)) -> false eq(cons(T, L), cons(Tp, Lp)) -> and(eq(T, Tp), eq(L, Lp)) eq(var(L), var(Lp)) -> eq(L, Lp) eq(var(L), apply(T, S)) -> false eq(var(L), lambda(X, T)) -> false eq(apply(T, S), var(L)) -> false eq(apply(T, S), apply(Tp, Sp)) -> and(eq(T, Tp), eq(S, Sp)) eq(apply(T, S), lambda(X, Tp)) -> false eq(lambda(X, T), var(L)) -> false eq(lambda(X, T), apply(Tp, Sp)) -> false eq(lambda(X, T), lambda(Xp, Tp)) -> and(eq(T, Tp), eq(X, Xp)) if(true, var(K), var(L)) -> var(K) if(false, var(K), var(L)) -> var(L) ren(var(L), var(K), var(Lp)) -> if(eq(L, Lp), var(K), var(Lp)) ren(X, Y, apply(T, S)) -> apply(ren(X, Y, T), ren(X, Y, S)) ren(X, Y, lambda(Z, T)) -> lambda(var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), ren(X, Y, ren(Z, var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), T))) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (1) RenamingProof (BOTH BOUNDS(ID, ID)) Renamed function symbols to avoid clashes with predefined symbol. ---------------------------------------- (2) Obligation: The Runtime Complexity (innermost) of the given CpxTRS could be proven to be BOUNDS(n^1, INF). The TRS R consists of the following rules: and(false, false) -> false and(true, false) -> false and(false, true) -> false and(true, true) -> true eq(nil, nil) -> true eq(cons(T, L), nil) -> false eq(nil, cons(T, L)) -> false eq(cons(T, L), cons(Tp, Lp)) -> and(eq(T, Tp), eq(L, Lp)) eq(var(L), var(Lp)) -> eq(L, Lp) eq(var(L), apply(T, S)) -> false eq(var(L), lambda(X, T)) -> false eq(apply(T, S), var(L)) -> false eq(apply(T, S), apply(Tp, Sp)) -> and(eq(T, Tp), eq(S, Sp)) eq(apply(T, S), lambda(X, Tp)) -> false eq(lambda(X, T), var(L)) -> false eq(lambda(X, T), apply(Tp, Sp)) -> false eq(lambda(X, T), lambda(Xp, Tp)) -> and(eq(T, Tp), eq(X, Xp)) if(true, var(K), var(L)) -> var(K) if(false, var(K), var(L)) -> var(L) ren(var(L), var(K), var(Lp)) -> if(eq(L, Lp), var(K), var(Lp)) ren(X, Y, apply(T, S)) -> apply(ren(X, Y, T), ren(X, Y, S)) ren(X, Y, lambda(Z, T)) -> lambda(var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), ren(X, Y, ren(Z, var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), T))) S is empty. Rewrite Strategy: INNERMOST ---------------------------------------- (3) TypeInferenceProof (BOTH BOUNDS(ID, ID)) Infered types. ---------------------------------------- (4) Obligation: Innermost TRS: Rules: and(false, false) -> false and(true, false) -> false and(false, true) -> false and(true, true) -> true eq(nil, nil) -> true eq(cons(T, L), nil) -> false eq(nil, cons(T, L)) -> false eq(cons(T, L), cons(Tp, Lp)) -> and(eq(T, Tp), eq(L, Lp)) eq(var(L), var(Lp)) -> eq(L, Lp) eq(var(L), apply(T, S)) -> false eq(var(L), lambda(X, T)) -> false eq(apply(T, S), var(L)) -> false eq(apply(T, S), apply(Tp, Sp)) -> and(eq(T, Tp), eq(S, Sp)) eq(apply(T, S), lambda(X, Tp)) -> false eq(lambda(X, T), var(L)) -> false eq(lambda(X, T), apply(Tp, Sp)) -> false eq(lambda(X, T), lambda(Xp, Tp)) -> and(eq(T, Tp), eq(X, Xp)) if(true, var(K), var(L)) -> var(K) if(false, var(K), var(L)) -> var(L) ren(var(L), var(K), var(Lp)) -> if(eq(L, Lp), var(K), var(Lp)) ren(X, Y, apply(T, S)) -> apply(ren(X, Y, T), ren(X, Y, S)) ren(X, Y, lambda(Z, T)) -> lambda(var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), ren(X, Y, ren(Z, var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), T))) Types: and :: false:true -> false:true -> false:true false :: false:true true :: false:true eq :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> false:true nil :: nil:cons:var:apply:lambda cons :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda var :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda apply :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda lambda :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda if :: false:true -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda ren :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda hole_false:true1_0 :: false:true hole_nil:cons:var:apply:lambda2_0 :: nil:cons:var:apply:lambda gen_nil:cons:var:apply:lambda3_0 :: Nat -> nil:cons:var:apply:lambda ---------------------------------------- (5) OrderProof (LOWER BOUND(ID)) Heuristically decided to analyse the following defined symbols: eq, ren They will be analysed ascendingly in the following order: eq < ren ---------------------------------------- (6) Obligation: Innermost TRS: Rules: and(false, false) -> false and(true, false) -> false and(false, true) -> false and(true, true) -> true eq(nil, nil) -> true eq(cons(T, L), nil) -> false eq(nil, cons(T, L)) -> false eq(cons(T, L), cons(Tp, Lp)) -> and(eq(T, Tp), eq(L, Lp)) eq(var(L), var(Lp)) -> eq(L, Lp) eq(var(L), apply(T, S)) -> false eq(var(L), lambda(X, T)) -> false eq(apply(T, S), var(L)) -> false eq(apply(T, S), apply(Tp, Sp)) -> and(eq(T, Tp), eq(S, Sp)) eq(apply(T, S), lambda(X, Tp)) -> false eq(lambda(X, T), var(L)) -> false eq(lambda(X, T), apply(Tp, Sp)) -> false eq(lambda(X, T), lambda(Xp, Tp)) -> and(eq(T, Tp), eq(X, Xp)) if(true, var(K), var(L)) -> var(K) if(false, var(K), var(L)) -> var(L) ren(var(L), var(K), var(Lp)) -> if(eq(L, Lp), var(K), var(Lp)) ren(X, Y, apply(T, S)) -> apply(ren(X, Y, T), ren(X, Y, S)) ren(X, Y, lambda(Z, T)) -> lambda(var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), ren(X, Y, ren(Z, var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), T))) Types: and :: false:true -> false:true -> false:true false :: false:true true :: false:true eq :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> false:true nil :: nil:cons:var:apply:lambda cons :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda var :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda apply :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda lambda :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda if :: false:true -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda ren :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda hole_false:true1_0 :: false:true hole_nil:cons:var:apply:lambda2_0 :: nil:cons:var:apply:lambda gen_nil:cons:var:apply:lambda3_0 :: Nat -> nil:cons:var:apply:lambda Generator Equations: gen_nil:cons:var:apply:lambda3_0(0) <=> nil gen_nil:cons:var:apply:lambda3_0(+(x, 1)) <=> cons(nil, gen_nil:cons:var:apply:lambda3_0(x)) The following defined symbols remain to be analysed: eq, ren They will be analysed ascendingly in the following order: eq < ren ---------------------------------------- (7) RewriteLemmaProof (LOWER BOUND(ID)) Proved the following rewrite lemma: eq(gen_nil:cons:var:apply:lambda3_0(n5_0), gen_nil:cons:var:apply:lambda3_0(n5_0)) -> true, rt in Omega(1 + n5_0) Induction Base: eq(gen_nil:cons:var:apply:lambda3_0(0), gen_nil:cons:var:apply:lambda3_0(0)) ->_R^Omega(1) true Induction Step: eq(gen_nil:cons:var:apply:lambda3_0(+(n5_0, 1)), gen_nil:cons:var:apply:lambda3_0(+(n5_0, 1))) ->_R^Omega(1) and(eq(nil, nil), eq(gen_nil:cons:var:apply:lambda3_0(n5_0), gen_nil:cons:var:apply:lambda3_0(n5_0))) ->_R^Omega(1) and(true, eq(gen_nil:cons:var:apply:lambda3_0(n5_0), gen_nil:cons:var:apply:lambda3_0(n5_0))) ->_IH and(true, true) ->_R^Omega(1) true We have rt in Omega(n^1) and sz in O(n). Thus, we have irc_R in Omega(n). ---------------------------------------- (8) Complex Obligation (BEST) ---------------------------------------- (9) Obligation: Proved the lower bound n^1 for the following obligation: Innermost TRS: Rules: and(false, false) -> false and(true, false) -> false and(false, true) -> false and(true, true) -> true eq(nil, nil) -> true eq(cons(T, L), nil) -> false eq(nil, cons(T, L)) -> false eq(cons(T, L), cons(Tp, Lp)) -> and(eq(T, Tp), eq(L, Lp)) eq(var(L), var(Lp)) -> eq(L, Lp) eq(var(L), apply(T, S)) -> false eq(var(L), lambda(X, T)) -> false eq(apply(T, S), var(L)) -> false eq(apply(T, S), apply(Tp, Sp)) -> and(eq(T, Tp), eq(S, Sp)) eq(apply(T, S), lambda(X, Tp)) -> false eq(lambda(X, T), var(L)) -> false eq(lambda(X, T), apply(Tp, Sp)) -> false eq(lambda(X, T), lambda(Xp, Tp)) -> and(eq(T, Tp), eq(X, Xp)) if(true, var(K), var(L)) -> var(K) if(false, var(K), var(L)) -> var(L) ren(var(L), var(K), var(Lp)) -> if(eq(L, Lp), var(K), var(Lp)) ren(X, Y, apply(T, S)) -> apply(ren(X, Y, T), ren(X, Y, S)) ren(X, Y, lambda(Z, T)) -> lambda(var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), ren(X, Y, ren(Z, var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), T))) Types: and :: false:true -> false:true -> false:true false :: false:true true :: false:true eq :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> false:true nil :: nil:cons:var:apply:lambda cons :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda var :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda apply :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda lambda :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda if :: false:true -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda ren :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda hole_false:true1_0 :: false:true hole_nil:cons:var:apply:lambda2_0 :: nil:cons:var:apply:lambda gen_nil:cons:var:apply:lambda3_0 :: Nat -> nil:cons:var:apply:lambda Generator Equations: gen_nil:cons:var:apply:lambda3_0(0) <=> nil gen_nil:cons:var:apply:lambda3_0(+(x, 1)) <=> cons(nil, gen_nil:cons:var:apply:lambda3_0(x)) The following defined symbols remain to be analysed: eq, ren They will be analysed ascendingly in the following order: eq < ren ---------------------------------------- (10) LowerBoundPropagationProof (FINISHED) Propagated lower bound. ---------------------------------------- (11) BOUNDS(n^1, INF) ---------------------------------------- (12) Obligation: Innermost TRS: Rules: and(false, false) -> false and(true, false) -> false and(false, true) -> false and(true, true) -> true eq(nil, nil) -> true eq(cons(T, L), nil) -> false eq(nil, cons(T, L)) -> false eq(cons(T, L), cons(Tp, Lp)) -> and(eq(T, Tp), eq(L, Lp)) eq(var(L), var(Lp)) -> eq(L, Lp) eq(var(L), apply(T, S)) -> false eq(var(L), lambda(X, T)) -> false eq(apply(T, S), var(L)) -> false eq(apply(T, S), apply(Tp, Sp)) -> and(eq(T, Tp), eq(S, Sp)) eq(apply(T, S), lambda(X, Tp)) -> false eq(lambda(X, T), var(L)) -> false eq(lambda(X, T), apply(Tp, Sp)) -> false eq(lambda(X, T), lambda(Xp, Tp)) -> and(eq(T, Tp), eq(X, Xp)) if(true, var(K), var(L)) -> var(K) if(false, var(K), var(L)) -> var(L) ren(var(L), var(K), var(Lp)) -> if(eq(L, Lp), var(K), var(Lp)) ren(X, Y, apply(T, S)) -> apply(ren(X, Y, T), ren(X, Y, S)) ren(X, Y, lambda(Z, T)) -> lambda(var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), ren(X, Y, ren(Z, var(cons(X, cons(Y, cons(lambda(Z, T), nil)))), T))) Types: and :: false:true -> false:true -> false:true false :: false:true true :: false:true eq :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> false:true nil :: nil:cons:var:apply:lambda cons :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda var :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda apply :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda lambda :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda if :: false:true -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda ren :: nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda -> nil:cons:var:apply:lambda hole_false:true1_0 :: false:true hole_nil:cons:var:apply:lambda2_0 :: nil:cons:var:apply:lambda gen_nil:cons:var:apply:lambda3_0 :: Nat -> nil:cons:var:apply:lambda Lemmas: eq(gen_nil:cons:var:apply:lambda3_0(n5_0), gen_nil:cons:var:apply:lambda3_0(n5_0)) -> true, rt in Omega(1 + n5_0) Generator Equations: gen_nil:cons:var:apply:lambda3_0(0) <=> nil gen_nil:cons:var:apply:lambda3_0(+(x, 1)) <=> cons(nil, gen_nil:cons:var:apply:lambda3_0(x)) The following defined symbols remain to be analysed: ren