Initial Problem

Start: start
Program_Vars: X₀, X₁
Temp_Vars:
Locations: eval, start
Transitions:
t₀: eval(X₀, X₁) → eval(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁
t₁: eval(X₀, X₁) → eval(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁
t₂: start(X₀, X₁) → eval(X₀, X₁)

Preprocessing

Problem after Preprocessing

Start: start
Program_Vars: X₀, X₁
Temp_Vars:
Locations: eval, start
Transitions:
t₀: eval(X₀, X₁) → eval(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁
t₁: eval(X₀, X₁) → eval(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁
t₂: start(X₀, X₁) → eval(X₀, X₁)

Found invariant X₁ ≤ 1+X₀ ∧ 2 ≤ X₁ ∧ 3 ≤ X₀+X₁ ∧ 1+X₀ ≤ X₁ ∧ 1 ≤ X₀ for location eval_v4

Found invariant 2 ≤ X₁ ∧ 1 ≤ X₀+X₁ ∧ 0 ≤ 1+X₀ for location eval_v1

Found invariant 2 ≤ X₁ ∧ 2 ≤ X₀+X₁ ∧ 0 ≤ X₀ for location eval_v5

Found invariant X₁ ≤ 1+X₀ ∧ 1 ≤ X₁ ∧ 1 ≤ X₀+X₁ ∧ 1+X₀ ≤ X₁ ∧ 0 ≤ X₀ for location eval_v2

Found invariant X₁ ≤ 2+X₀ ∧ 2 ≤ X₁ ∧ 2 ≤ X₀+X₁ ∧ 2+X₀ ≤ X₁ ∧ 0 ≤ X₀ for location eval_v3

Analysing control-flow refined program

MPRF for transition t₂₄: eval_v5(X₀, X₁) → eval_v5(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ 2 ≤ X₀+X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

X₀+X₁+2 {O(n)}

MPRF:

• eval_v5: [X₀+X₁]

MPRF for transition t₁₆: eval_v2(X₀, X₁) → eval_v3(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1 ≤ X₀+X₁ ∧ 1+X₀ ≤ X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

3⋅X₁+4⋅X₀+8 {O(n)}

MPRF:

• eval_v2: [1+X₀]
• eval_v3: [1+X₀]
• eval_v4: [X₀]

MPRF for transition t₁₇: eval_v2(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1 ≤ X₀+X₁ ∧ 1+X₀ ≤ X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

3⋅X₁+4⋅X₀+8 {O(n)}

MPRF:

• eval_v2: [1+X₀]
• eval_v3: [X₁]
• eval_v4: [1+X₀]

MPRF for transition t₁₈: eval_v3(X₀, X₁) → eval_v4(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ X₁ ≤ 2+X₀ ∧ 0 ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₀+X₁ ∧ 2+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

3⋅X₁+4⋅X₀+5 {O(n)}

MPRF:

• eval_v2: [X₀]
• eval_v3: [X₁-1]
• eval_v4: [X₀]

MPRF for transition t₁₉: eval_v3(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ X₁ ≤ 2+X₀ ∧ 0 ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₀+X₁ ∧ 2+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

3⋅X₁+4⋅X₀+8 {O(n)}

MPRF:

• eval_v2: [X₁-1]
• eval_v3: [1+X₀]
• eval_v4: [X₀]

MPRF for transition t₂₀: eval_v4(X₀, X₁) → eval_v3(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 3 ≤ X₀+X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

3⋅X₁+4⋅X₀+5 {O(n)}

MPRF:

• eval_v2: [X₀]
• eval_v3: [X₁-1]
• eval_v4: [1+X₀]

MPRF for transition t₂₁: eval_v4(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 3 ≤ X₀+X₁ ∧ 0 ≤ X₀ of depth 1:

new bound:

3⋅X₁+4⋅X₀+5 {O(n)}

MPRF:

• eval_v2: [X₁]
• eval_v3: [2+X₀]
• eval_v4: [1+X₀]

CFR: Improvement to new bound with the following program:

method: PartialEvaluation new bound:

O(n)

cfr-program:

Start: start
Program_Vars: X₀, X₁
Temp_Vars:
Locations: eval, eval_v1, eval_v2, eval_v3, eval_v4, eval_v5, start
Transitions:
t₁₄: eval(X₀, X₁) → eval_v1(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁
t₁₅: eval(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁
t₂₃: eval_v1(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ 1 ≤ X₀+X₁ ∧ 2 ≤ X₁
t₂₂: eval_v1(X₀, X₁) → eval_v5(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ 1 ≤ X₀+X₁ ∧ 2 ≤ X₁
t₁₇: eval_v2(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1 ≤ X₀+X₁ ∧ 1+X₀ ≤ X₁ ∧ 0 ≤ X₀
t₁₆: eval_v2(X₀, X₁) → eval_v3(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1 ≤ X₀+X₁ ∧ 1+X₀ ≤ X₁ ∧ 0 ≤ X₀
t₁₉: eval_v3(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ X₁ ≤ 2+X₀ ∧ 0 ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₀+X₁ ∧ 2+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀
t₁₈: eval_v3(X₀, X₁) → eval_v4(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ X₁ ≤ 2+X₀ ∧ 0 ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₀+X₁ ∧ 2+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀
t₂₁: eval_v4(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 3 ≤ X₀+X₁ ∧ 0 ≤ X₀
t₂₀: eval_v4(X₀, X₁) → eval_v3(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ X₁ ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ ∧ 2 ≤ X₁ ∧ 3 ≤ X₀+X₁ ∧ 0 ≤ X₀
t₂₅: eval_v5(X₀, X₁) → eval_v2(X₀-1, X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ 2 ≤ X₀+X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀
t₂₄: eval_v5(X₀, X₁) → eval_v5(X₁-2, 1+X₀) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀ ∧ 2 ≤ X₀+X₁ ∧ 2 ≤ X₁ ∧ 0 ≤ X₀
t₂: start(X₀, X₁) → eval(X₀, X₁)

All Bounds

Timebounds

Overall timebound:19⋅X₁+25⋅X₀+47 {O(n)}
t₂: 1 {O(1)}
t₁₄: 1 {O(1)}
t₁₅: 1 {O(1)}
t₁₆: 3⋅X₁+4⋅X₀+8 {O(n)}
t₁₇: 3⋅X₁+4⋅X₀+8 {O(n)}
t₁₈: 3⋅X₁+4⋅X₀+5 {O(n)}
t₁₉: 3⋅X₁+4⋅X₀+8 {O(n)}
t₂₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₁: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₂: 1 {O(1)}
t₂₃: 1 {O(1)}
t₂₄: X₀+X₁+2 {O(n)}
t₂₅: 1 {O(1)}

Costbounds

Overall costbound: 19⋅X₁+25⋅X₀+47 {O(n)}
t₂: 1 {O(1)}
t₁₄: 1 {O(1)}
t₁₅: 1 {O(1)}
t₁₆: 3⋅X₁+4⋅X₀+8 {O(n)}
t₁₇: 3⋅X₁+4⋅X₀+8 {O(n)}
t₁₈: 3⋅X₁+4⋅X₀+5 {O(n)}
t₁₉: 3⋅X₁+4⋅X₀+8 {O(n)}
t₂₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₁: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₂: 1 {O(1)}
t₂₃: 1 {O(1)}
t₂₄: X₀+X₁+2 {O(n)}
t₂₅: 1 {O(1)}

Sizebounds

t₂, X₀: X₀ {O(n)}
t₂, X₁: X₁ {O(n)}
t₁₄, X₀: X₁ {O(n)}
t₁₄, X₁: X₀+1 {O(n)}
t₁₅, X₀: X₀ {O(n)}
t₁₅, X₁: X₀ {O(n)}
t₁₆, X₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₁₆, X₁: 12⋅X₁+16⋅X₀+26 {O(n)}
t₁₇, X₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₁₇, X₁: 12⋅X₁+16⋅X₀+20 {O(n)}
t₁₈, X₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₁₈, X₁: 6⋅X₁+8⋅X₀+12 {O(n)}
t₁₉, X₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₁₉, X₁: 6⋅X₁+8⋅X₀+10 {O(n)}
t₂₀, X₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₀, X₁: 3⋅X₁+4⋅X₀+6 {O(n)}
t₂₁, X₀: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₁, X₁: 3⋅X₁+4⋅X₀+5 {O(n)}
t₂₂, X₀: X₀+1 {O(n)}
t₂₂, X₁: X₁+1 {O(n)}
t₂₃, X₀: X₁ {O(n)}
t₂₃, X₁: X₁ {O(n)}
t₂₄, X₀: 2⋅X₀+2⋅X₁+4 {O(n)}
t₂₄, X₁: 2⋅X₀+2⋅X₁+4 {O(n)}
t₂₅, X₀: 2⋅X₁+3⋅X₀+5 {O(n)}
t₂₅, X₁: 2⋅X₁+3⋅X₀+5 {O(n)}