Initial Problem

Start: eval_foo_start
Program_Vars: X₀, X₁, X₂
Temp_Vars:
Locations: eval_foo_bb0_in, eval_foo_bb1_in, eval_foo_bb2_in, eval_foo_bb3_in, eval_foo_start, eval_foo_stop
Transitions:
t₁: eval_foo_bb0_in(X₀, X₁, X₂) → eval_foo_bb1_in(X₂, X₁, X₂)
t₂: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in(X₀, X₁, X₂) :|: 1+X₀ ≤ X₁
t₃: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in(X₀, X₁, X₂) :|: 1+X₁ ≤ X₀
t₄: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb3_in(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₅: eval_foo_bb2_in(X₀, X₁, X₂) → eval_foo_bb1_in(X₀-1, X₁, X₂) :|: 1+X₁ ≤ X₀
t₆: eval_foo_bb2_in(X₀, X₁, X₂) → eval_foo_bb1_in(1+X₀, X₁, X₂) :|: X₀ ≤ X₁
t₇: eval_foo_bb3_in(X₀, X₁, X₂) → eval_foo_stop(X₀, X₁, X₂)
t₀: eval_foo_start(X₀, X₁, X₂) → eval_foo_bb0_in(X₀, X₁, X₂)

Preprocessing

Found invariant X₁ ≤ X₀ ∧ X₀ ≤ X₁ for location eval_foo_stop

Found invariant X₁ ≤ X₀ ∧ X₀ ≤ X₁ for location eval_foo_bb3_in

Problem after Preprocessing

Start: eval_foo_start
Program_Vars: X₀, X₁, X₂
Temp_Vars:
Locations: eval_foo_bb0_in, eval_foo_bb1_in, eval_foo_bb2_in, eval_foo_bb3_in, eval_foo_start, eval_foo_stop
Transitions:
t₁: eval_foo_bb0_in(X₀, X₁, X₂) → eval_foo_bb1_in(X₂, X₁, X₂)
t₂: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in(X₀, X₁, X₂) :|: 1+X₀ ≤ X₁
t₃: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in(X₀, X₁, X₂) :|: 1+X₁ ≤ X₀
t₄: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb3_in(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₅: eval_foo_bb2_in(X₀, X₁, X₂) → eval_foo_bb1_in(X₀-1, X₁, X₂) :|: 1+X₁ ≤ X₀
t₆: eval_foo_bb2_in(X₀, X₁, X₂) → eval_foo_bb1_in(1+X₀, X₁, X₂) :|: X₀ ≤ X₁
t₇: eval_foo_bb3_in(X₀, X₁, X₂) → eval_foo_stop(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₀: eval_foo_start(X₀, X₁, X₂) → eval_foo_bb0_in(X₀, X₁, X₂)

MPRF for transition t₂: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in(X₀, X₁, X₂) :|: 1+X₀ ≤ X₁ of depth 1:

new bound:

X₁+X₂ {O(n)}

MPRF:

• eval_foo_bb1_in: [X₁-X₀]
• eval_foo_bb2_in: [X₁-1-X₀]

MPRF for transition t₆: eval_foo_bb2_in(X₀, X₁, X₂) → eval_foo_bb1_in(1+X₀, X₁, X₂) :|: X₀ ≤ X₁ of depth 1:

new bound:

X₁+X₂+1 {O(n)}

MPRF:

• eval_foo_bb1_in: [1+X₁-X₀]
• eval_foo_bb2_in: [1+X₁-X₀]

MPRF for transition t₃: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in(X₀, X₁, X₂) :|: 1+X₁ ≤ X₀ of depth 1:

new bound:

2⋅X₁⋅X₁+2⋅X₂⋅X₂+4⋅X₁⋅X₂+6⋅X₁+6⋅X₂+5 {O(n^2)}

MPRF:

• eval_foo_bb1_in: [2+X₀-X₁]
• eval_foo_bb2_in: [1+X₀-X₁]

MPRF for transition t₅: eval_foo_bb2_in(X₀, X₁, X₂) → eval_foo_bb1_in(X₀-1, X₁, X₂) :|: 1+X₁ ≤ X₀ of depth 1:

new bound:

2⋅X₁⋅X₁+2⋅X₂⋅X₂+4⋅X₁⋅X₂+5⋅X₁+5⋅X₂+3 {O(n^2)}

MPRF:

• eval_foo_bb1_in: [1+X₀-X₁]
• eval_foo_bb2_in: [1+X₀-X₁]

Found invariant 1+X₂ ≤ X₁ ∧ 1+X₂ ≤ X₀ ∧ X₀ ≤ X₁ for location eval_foo_bb1_in_v1

Found invariant 1+X₁ ≤ X₂ ∧ 1+X₀ ≤ X₂ ∧ X₁ ≤ X₀ for location eval_foo_bb1_in_v2

Found invariant X₁ ≤ X₀ ∧ X₀ ≤ X₁ for location eval_foo_stop

Found invariant X₁ ≤ X₀ ∧ X₀ ≤ X₁ for location eval_foo_bb3_in

Found invariant 1+X₂ ≤ X₁ ∧ X₂ ≤ X₀ ∧ 1+X₀ ≤ X₁ for location eval_foo_bb2_in_v2

Found invariant X₂ ≤ X₀ ∧ X₀ ≤ X₂ for location eval_foo_bb1_in

Found invariant 1+X₁ ≤ X₂ ∧ X₀ ≤ X₂ ∧ 1+X₁ ≤ X₀ for location eval_foo_bb2_in_v1

Analysing control-flow refined program

MPRF for transition t₅₂: eval_foo_bb2_in_v1(X₀, X₁, X₂) → eval_foo_bb1_in_v2(X₀-1, X₁, X₂) :|: 1+X₁ ≤ X₀ ∧ 1+X₁ ≤ X₂ ∧ X₀ ≤ X₂ of depth 1:

new bound:

X₁+X₂ {O(n)}

MPRF:

• eval_foo_bb1_in_v2: [X₀-X₁]
• eval_foo_bb2_in_v1: [X₀-X₁]

MPRF for transition t₅₄: eval_foo_bb1_in_v2(X₀, X₁, X₂) → eval_foo_bb2_in_v1(X₀, X₁, X₂) :|: 1+X₁ ≤ X₀ ∧ 0 ≤ 0 ∧ 1+X₀ ≤ X₂ ∧ 1+X₁ ≤ X₂ ∧ X₁ ≤ X₀ of depth 1:

new bound:

X₁+X₂ {O(n)}

MPRF:

• eval_foo_bb1_in_v2: [1+X₀-X₁]
• eval_foo_bb2_in_v1: [X₀-X₁]

MPRF for transition t₄₉: eval_foo_bb2_in_v2(X₀, X₁, X₂) → eval_foo_bb1_in_v1(1+X₀, X₁, X₂) :|: X₀ ≤ X₁ ∧ 1+X₀ ≤ X₁ ∧ 1+X₂ ≤ X₁ ∧ X₂ ≤ X₀ of depth 1:

new bound:

X₁+X₂+1 {O(n)}

MPRF:

• eval_foo_bb1_in_v1: [1+X₁-X₀]
• eval_foo_bb2_in_v2: [1+X₁-X₀]

MPRF for transition t₅₁: eval_foo_bb1_in_v1(X₀, X₁, X₂) → eval_foo_bb2_in_v2(X₀, X₁, X₂) :|: 1+X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₀ ≤ 1+X₁ ∧ 1+X₂ ≤ X₀ ∧ 1+X₂ ≤ X₁ ∧ X₀ ≤ X₁ of depth 1:

new bound:

X₁+X₂ {O(n)}

MPRF:

• eval_foo_bb1_in_v1: [1+X₁-X₀]
• eval_foo_bb2_in_v2: [X₁-X₀]

CFR: Improvement to new bound with the following program:

method: PartialEvaluation new bound:

O(n)

cfr-program:

Start: eval_foo_start
Program_Vars: X₀, X₁, X₂
Temp_Vars:
Locations: eval_foo_bb0_in, eval_foo_bb1_in, eval_foo_bb1_in_v1, eval_foo_bb1_in_v2, eval_foo_bb2_in_v1, eval_foo_bb2_in_v2, eval_foo_bb3_in, eval_foo_start, eval_foo_stop
Transitions:
t₁: eval_foo_bb0_in(X₀, X₁, X₂) → eval_foo_bb1_in(X₂, X₁, X₂)
t₄₇: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in_v1(X₀, X₁, X₂) :|: 1+X₁ ≤ X₀ ∧ X₂ ≤ X₀ ∧ X₀ ≤ X₂
t₄₈: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb2_in_v2(X₀, X₁, X₂) :|: 1+X₀ ≤ X₁ ∧ X₂ ≤ X₀ ∧ X₀ ≤ X₂
t₄: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb3_in(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ X₂ ≤ X₀ ∧ X₀ ≤ X₂
t₄₆: eval_foo_bb1_in(X₀, X₁, X₂) → eval_foo_bb3_in(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ X₂ ≤ X₀ ∧ X₀ ≤ X₂
t₅₁: eval_foo_bb1_in_v1(X₀, X₁, X₂) → eval_foo_bb2_in_v2(X₀, X₁, X₂) :|: 1+X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₀ ≤ 1+X₁ ∧ 1+X₂ ≤ X₀ ∧ 1+X₂ ≤ X₁ ∧ X₀ ≤ X₁
t₅₀: eval_foo_bb1_in_v1(X₀, X₁, X₂) → eval_foo_bb3_in(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₀ ≤ 1+X₁ ∧ 1+X₂ ≤ X₀ ∧ 1+X₂ ≤ X₁
t₅₄: eval_foo_bb1_in_v2(X₀, X₁, X₂) → eval_foo_bb2_in_v1(X₀, X₁, X₂) :|: 1+X₁ ≤ X₀ ∧ 0 ≤ 0 ∧ 1+X₀ ≤ X₂ ∧ 1+X₁ ≤ X₂ ∧ X₁ ≤ X₀
t₅₃: eval_foo_bb1_in_v2(X₀, X₁, X₂) → eval_foo_bb3_in(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ 1+X₀ ≤ X₂ ∧ 1+X₁ ≤ X₂
t₅₂: eval_foo_bb2_in_v1(X₀, X₁, X₂) → eval_foo_bb1_in_v2(X₀-1, X₁, X₂) :|: 1+X₁ ≤ X₀ ∧ 1+X₁ ≤ X₂ ∧ X₀ ≤ X₂
t₄₉: eval_foo_bb2_in_v2(X₀, X₁, X₂) → eval_foo_bb1_in_v1(1+X₀, X₁, X₂) :|: X₀ ≤ X₁ ∧ 1+X₀ ≤ X₁ ∧ 1+X₂ ≤ X₁ ∧ X₂ ≤ X₀
t₇: eval_foo_bb3_in(X₀, X₁, X₂) → eval_foo_stop(X₀, X₁, X₂) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₀: eval_foo_start(X₀, X₁, X₂) → eval_foo_bb0_in(X₀, X₁, X₂)

All Bounds

Timebounds

Overall timebound:4⋅X₁+4⋅X₂+10 {O(n)}
t₀: 1 {O(1)}
t₁: 1 {O(1)}
t₄: 1 {O(1)}
t₇: 1 {O(1)}
t₄₆: 1 {O(1)}
t₄₇: 1 {O(1)}
t₄₈: 1 {O(1)}
t₄₉: X₁+X₂+1 {O(n)}
t₅₀: 1 {O(1)}
t₅₁: X₁+X₂ {O(n)}
t₅₂: X₁+X₂ {O(n)}
t₅₃: 1 {O(1)}
t₅₄: X₁+X₂ {O(n)}

Costbounds

Overall costbound: 4⋅X₁+4⋅X₂+10 {O(n)}
t₀: 1 {O(1)}
t₁: 1 {O(1)}
t₄: 1 {O(1)}
t₇: 1 {O(1)}
t₄₆: 1 {O(1)}
t₄₇: 1 {O(1)}
t₄₈: 1 {O(1)}
t₄₉: X₁+X₂+1 {O(n)}
t₅₀: 1 {O(1)}
t₅₁: X₁+X₂ {O(n)}
t₅₂: X₁+X₂ {O(n)}
t₅₃: 1 {O(1)}
t₅₄: X₁+X₂ {O(n)}

Sizebounds

t₀, X₀: X₀ {O(n)}
t₀, X₁: X₁ {O(n)}
t₀, X₂: X₂ {O(n)}
t₁, X₀: X₂ {O(n)}
t₁, X₁: X₁ {O(n)}
t₁, X₂: X₂ {O(n)}
t₄, X₀: X₂ {O(n)}
t₄, X₁: X₁ {O(n)}
t₄, X₂: X₂ {O(n)}
t₇, X₀: 2⋅X₁+6⋅X₂+2 {O(n)}
t₇, X₁: 4⋅X₁ {O(n)}
t₇, X₂: 4⋅X₂ {O(n)}
t₄₆, X₀: X₂ {O(n)}
t₄₆, X₁: X₁ {O(n)}
t₄₆, X₂: X₂ {O(n)}
t₄₇, X₀: X₂ {O(n)}
t₄₇, X₁: X₁ {O(n)}
t₄₇, X₂: X₂ {O(n)}
t₄₈, X₀: X₂ {O(n)}
t₄₈, X₁: X₁ {O(n)}
t₄₈, X₂: X₂ {O(n)}
t₄₉, X₀: 2⋅X₂+X₁+2 {O(n)}
t₄₉, X₁: X₁ {O(n)}
t₄₉, X₂: X₂ {O(n)}
t₅₀, X₀: 2⋅X₂+X₁+2 {O(n)}
t₅₀, X₁: X₁ {O(n)}
t₅₀, X₂: X₂ {O(n)}
t₅₁, X₀: 2⋅X₂+X₁+2 {O(n)}
t₅₁, X₁: X₁ {O(n)}
t₅₁, X₂: X₂ {O(n)}
t₅₂, X₀: 2⋅X₂+X₁ {O(n)}
t₅₂, X₁: X₁ {O(n)}
t₅₂, X₂: X₂ {O(n)}
t₅₃, X₀: 2⋅X₂+X₁ {O(n)}
t₅₃, X₁: X₁ {O(n)}
t₅₃, X₂: X₂ {O(n)}
t₅₄, X₀: 2⋅X₂+X₁ {O(n)}
t₅₄, X₁: X₁ {O(n)}
t₅₄, X₂: X₂ {O(n)}