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)}