Initial Problem

Start: f2
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars: E
Locations: f1, f2, f300
Transitions:
t₀: f2(X₀, X₁, X₂, X₃) → f300(X₀, X₁, X₂, X₃)
t₄: f300(X₀, X₁, X₂, X₃) → f1(X₀, X₁, X₂, E) :|: 1 ≤ X₀ ∧ 1 ≤ X₁ ∧ X₀+X₁ ≤ 0
t₅: f300(X₀, X₁, X₂, X₃) → f1(X₀, X₁, X₂, E) :|: 1 ≤ X₁ ∧ X₀ ≤ 0
t₆: f300(X₀, X₁, X₂, X₃) → f1(X₀, X₁, X₂, E) :|: X₁ ≤ 0
t₁: f300(X₀, X₁, X₂, X₃) → f300(X₁-1, X₁-1, E, X₃) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₂: f300(X₀, X₁, X₂, X₃) → f300(X₁-1, X₁-1, E, X₃) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₃: f300(X₀, X₁, X₂, X₃) → f300(X₀-1, X₀-2, 0, X₃) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁

Preprocessing

Cut unsatisfiable transition [t₄: f300→f1]

Eliminate variables [X₂; X₃] that do not contribute to the problem

Problem after Preprocessing

Start: f2
Program_Vars: X₀, X₁
Temp_Vars: E
Locations: f1, f2, f300
Transitions:
t₂₀: f2(X₀, X₁) → f300(X₀, X₁)
t₂₁: f300(X₀, X₁) → f1(X₀, X₁) :|: 1 ≤ X₁ ∧ X₀ ≤ 0
t₂₂: f300(X₀, X₁) → f1(X₀, X₁) :|: X₁ ≤ 0
t₂₃: f300(X₀, X₁) → f300(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₂₄: f300(X₀, X₁) → f300(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₂₅: f300(X₀, X₁) → f300(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁

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

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

Found invariant X₁ ≤ X₀ ∧ 0 ≤ X₁ ∧ 0 ≤ X₀+X₁ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₀ for location f300_v2

Analysing control-flow refined program

MPRF for transition t₅₁: f300_v2(X₀, X₁) → f300_v1(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ X₀ ∧ 0 ≤ X₀+X₁ ∧ X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₁ of depth 1:

new bound:

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

MPRF:

• f300_v1: [X₁]
• f300_v2: [1+X₁]
• f300_v3: [X₁]

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

new bound:

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

MPRF:

• f300_v1: [X₀]
• f300_v2: [1+X₁]
• f300_v3: [X₀]

MPRF for transition t₅₃: f300_v2(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ X₀ ∧ 0 ≤ X₀+X₁ ∧ X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₁ of depth 1:

new bound:

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

MPRF:

• f300_v1: [X₀]
• f300_v2: [1+X₁]
• f300_v3: [X₀]

MPRF for transition t₅₅: f300_v1(X₀, X₁) → f300_v3(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀+X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ of depth 1:

new bound:

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

MPRF:

• f300_v1: [X₁]
• f300_v2: [X₁-2]
• f300_v3: [X₁]

MPRF for transition t₅₆: f300_v1(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀+X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ of depth 1:

new bound:

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

MPRF:

• f300_v1: [1+X₀]
• f300_v2: [X₀]
• f300_v3: [X₀]

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

new bound:

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

MPRF:

• f300_v1: [1+X₀]
• f300_v2: [X₀]
• f300_v3: [X₀]

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

new bound:

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

MPRF:

• f300_v1: [X₀]
• f300_v2: [X₁]
• f300_v3: [1+X₀]

MPRF for transition t₆₀: f300_v3(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ ∧ 0 ≤ X₁ of depth 1:

new bound:

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

MPRF:

• f300_v1: [2⋅X₀-X₁]
• f300_v2: [X₀]
• f300_v3: [X₁]

MPRF for transition t₆₁: f300_v3(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ ∧ 0 ≤ X₁ of depth 1:

new bound:

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

MPRF:

• f300_v1: [X₀-2]
• f300_v2: [X₀]
• f300_v3: [X₁]

CFR: Improvement to new bound with the following program:

method: PartialEvaluation new bound:

O(n)

cfr-program:

Start: f2
Program_Vars: X₀, X₁
Temp_Vars: E
Locations: f1, f2, f300, f300_v1, f300_v2, f300_v3
Transitions:
t₂₀: f2(X₀, X₁) → f300(X₀, X₁)
t₂₁: f300(X₀, X₁) → f1(X₀, X₁) :|: 1 ≤ X₁ ∧ X₀ ≤ 0
t₂₂: f300(X₀, X₁) → f1(X₀, X₁) :|: X₁ ≤ 0
t₄₉: f300(X₀, X₁) → f1(X₀, X₁) :|: X₁ ≤ 0
t₅₀: f300(X₀, X₁) → f1(X₀, X₁) :|: 1 ≤ X₁ ∧ X₀ ≤ 0
t₄₆: f300(X₀, X₁) → f300_v1(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₄₇: f300(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₄₈: f300(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁
t₅₈: f300_v1(X₀, X₁) → f1(X₀, X₁) :|: X₁ ≤ 0 ∧ 0 ≤ 1+X₀+X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀
t₅₆: f300_v1(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀+X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀
t₅₇: f300_v1(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀+X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀
t₅₅: f300_v1(X₀, X₁) → f300_v3(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ 0 ≤ 1+X₀+X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀
t₅₄: f300_v2(X₀, X₁) → f1(X₀, X₁) :|: X₁ ≤ 0 ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ X₀ ∧ 0 ≤ X₀+X₁ ∧ X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₁
t₅₁: f300_v2(X₀, X₁) → f300_v1(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ X₀ ∧ 0 ≤ X₀+X₁ ∧ X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₁
t₅₂: f300_v2(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ X₀ ∧ 0 ≤ X₀+X₁ ∧ X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₁
t₅₃: f300_v2(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 0 ≤ X₀ ∧ 0 ≤ X₀+X₁ ∧ X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ X₁
t₆₂: f300_v3(X₀, X₁) → f1(X₀, X₁) :|: X₁ ≤ 0 ∧ X₀ ≤ 1+X₁ ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ ∧ 0 ≤ X₁
t₆₀: f300_v3(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1+E ≤ 0 ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ ∧ 0 ≤ X₁
t₆₁: f300_v3(X₀, X₁) → f300_v2(X₁-1, X₁-1) :|: 1 ≤ E ∧ 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ ∧ 0 ≤ X₁
t₅₉: f300_v3(X₀, X₁) → f300_v3(X₀-1, X₀-2) :|: 1 ≤ X₀ ∧ 1 ≤ X₀+X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 1+X₁ ∧ 1+X₁ ≤ X₀ ∧ 0 ≤ X₀ ∧ X₁ ≤ X₀ ∧ 0 ≤ X₁

All Bounds

Timebounds

Overall timebound:11⋅X₀+18⋅X₁+25 {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₅₀: 1 {O(1)}
t₅₁: 2⋅X₁+X₀+2 {O(n)}
t₅₂: 2⋅X₁+X₀+2 {O(n)}
t₅₃: 2⋅X₁+X₀+2 {O(n)}
t₅₄: 1 {O(1)}
t₅₅: 2⋅X₁+X₀+4 {O(n)}
t₅₆: 2⋅X₁+X₀+1 {O(n)}
t₅₇: 2⋅X₁+X₀+1 {O(n)}
t₅₈: 1 {O(1)}
t₅₉: 2⋅X₁+X₀ {O(n)}
t₆₀: 2⋅X₁+3⋅X₀ {O(n)}
t₆₁: 2⋅X₁+X₀+2 {O(n)}
t₆₂: 1 {O(1)}

Costbounds

Overall costbound: 11⋅X₀+18⋅X₁+25 {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₅₀: 1 {O(1)}
t₅₁: 2⋅X₁+X₀+2 {O(n)}
t₅₂: 2⋅X₁+X₀+2 {O(n)}
t₅₃: 2⋅X₁+X₀+2 {O(n)}
t₅₄: 1 {O(1)}
t₅₅: 2⋅X₁+X₀+4 {O(n)}
t₅₆: 2⋅X₁+X₀+1 {O(n)}
t₅₇: 2⋅X₁+X₀+1 {O(n)}
t₅₈: 1 {O(1)}
t₅₉: 2⋅X₁+X₀ {O(n)}
t₆₀: 2⋅X₁+3⋅X₀ {O(n)}
t₆₁: 2⋅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₁ {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₁: X₁ {O(n)}
t₅₀, X₀: X₀ {O(n)}
t₅₀, X₁: X₁ {O(n)}
t₅₁, X₀: 2⋅X₁+X₀ {O(n)}
t₅₁, X₁: 14⋅X₁+6⋅X₀ {O(n)}
t₅₂, X₀: 2⋅X₁+X₀ {O(n)}
t₅₂, X₁: 22⋅X₀+42⋅X₁ {O(n)}
t₅₃, X₀: 2⋅X₁+X₀ {O(n)}
t₅₃, X₁: 22⋅X₀+42⋅X₁ {O(n)}
t₅₄, X₀: 0 {O(1)}
t₅₄, X₁: 0 {O(1)}
t₅₅, X₀: 2⋅X₁+X₀ {O(n)}
t₅₅, X₁: 2⋅X₀+2⋅X₁ {O(n)}
t₅₆, X₀: 2⋅X₁+X₀ {O(n)}
t₅₆, X₁: 14⋅X₁+7⋅X₀ {O(n)}
t₅₇, X₀: 2⋅X₁+X₀ {O(n)}
t₅₇, X₁: 14⋅X₁+7⋅X₀ {O(n)}
t₅₈, X₀: 1 {O(1)}
t₅₈, X₁: 1 {O(1)}
t₅₉, X₀: 2⋅X₁+X₀ {O(n)}
t₅₉, X₁: 2⋅X₀+4⋅X₁ {O(n)}
t₆₀, X₀: 2⋅X₁+X₀ {O(n)}
t₆₀, X₁: 4⋅X₀+6⋅X₁ {O(n)}
t₆₁, X₀: 2⋅X₁+X₀ {O(n)}
t₆₁, X₁: 4⋅X₀+6⋅X₁ {O(n)}
t₆₂, X₀: 1 {O(1)}
t₆₂, X₁: 0 {O(1)}