Initial Problem

Start: f0
Program_Vars: X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁
Temp_Vars: M, N, O, P
Locations: f0, f3, f4, f8
Transitions:
t₀: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁)
t₅: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(X₅, X₃, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁)
t₆: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(X₅, X₃, X₃, X₃, X₅, X₅, M, N, M, N, X₁₀, X₁₁)
t₉: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(1+X₀, X₁, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁)
t₁₁: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(X₀, 1+X₁, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁)
t₁: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f4(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁)
t₂: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f8(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁)
t₇: f0(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f8(O, P, X₃, M, X₅, N, X₀, X₁, M, N, O, P)
t₃: f3(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f4(X₀, X₁, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁) :|: 1+X₁ ≤ X₀
t₄: f3(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f4(X₀, X₁, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁) :|: 1+X₀ ≤ X₁
t₈: f3(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f8(O, P, X₃, M, X₅, N, X₀, X₀, M, N, O, P) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₁₀: f4(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(1+X₀, X₁, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁) :|: 1+X₀ ≤ X₁
t₁₂: f4(X₀, X₁, X₂, X₃, X₄, X₅, X₆, X₇, X₈, X₉, X₁₀, X₁₁) → f3(X₀, 1+X₁, X₃, X₃, X₅, X₅, X₀, X₁, X₈, X₉, X₁₀, X₁₁) :|: X₁ ≤ X₀

Preprocessing

Eliminate variables [X₂; X₄; X₆; X₇; X₈; X₉; X₁₀; X₁₁] that do not contribute to the problem

Problem after Preprocessing

Start: f0
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars: M, N, O, P
Locations: f0, f3, f4, f8
Transitions:
t₁₉: f0(X₀, X₁, X₂, X₃) → f3(X₀, X₁, X₂, X₃)
t₂₀: f0(X₀, X₁, X₂, X₃) → f3(X₃, X₂, X₂, X₃)
t₂₁: f0(X₀, X₁, X₂, X₃) → f3(X₃, X₂, X₂, X₃)
t₂₂: f0(X₀, X₁, X₂, X₃) → f3(1+X₀, X₁, X₂, X₃)
t₂₃: f0(X₀, X₁, X₂, X₃) → f3(X₀, 1+X₁, X₂, X₃)
t₂₄: f0(X₀, X₁, X₂, X₃) → f4(X₀, X₁, X₂, X₃)
t₂₅: f0(X₀, X₁, X₂, X₃) → f8(X₀, X₁, X₂, X₃)
t₂₆: f0(X₀, X₁, X₂, X₃) → f8(O, P, M, N)
t₂₇: f3(X₀, X₁, X₂, X₃) → f4(X₀, X₁, X₂, X₃) :|: 1+X₁ ≤ X₀
t₂₈: f3(X₀, X₁, X₂, X₃) → f4(X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁
t₂₉: f3(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₃₀: f4(X₀, X₁, X₂, X₃) → f3(1+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁
t₃₁: f4(X₀, X₁, X₂, X₃) → f3(X₀, 1+X₁, X₂, X₃) :|: X₁ ≤ X₀

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

new bound:

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

MPRF:

• f3: [X₀-X₁]
• f4: [X₀-1-X₁]

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

new bound:

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

MPRF:

• f3: [1+X₀-X₁]
• f4: [1+X₀-X₁]

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

new bound:

16⋅X₂⋅X₃+32⋅X₀⋅X₀+32⋅X₀⋅X₂+32⋅X₀⋅X₃+32⋅X₁⋅X₁+32⋅X₁⋅X₂+32⋅X₁⋅X₃+64⋅X₀⋅X₁+8⋅X₂⋅X₂+8⋅X₃⋅X₃+116⋅X₀+116⋅X₁+58⋅X₂+58⋅X₃+109 {O(n^2)}

MPRF:

• f3: [2+X₁-X₀]
• f4: [1+X₁-X₀]

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

new bound:

16⋅X₂⋅X₃+32⋅X₀⋅X₀+32⋅X₀⋅X₂+32⋅X₀⋅X₃+32⋅X₁⋅X₁+32⋅X₁⋅X₂+32⋅X₁⋅X₃+64⋅X₀⋅X₁+8⋅X₂⋅X₂+8⋅X₃⋅X₃+112⋅X₀+112⋅X₁+56⋅X₂+56⋅X₃+96 {O(n^2)}

MPRF:

• f3: [1+X₁-X₀]
• f4: [1+X₁-X₀]

Found invariant X₁ ≤ 1+X₀ for location f3_v3

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

Found invariant 1+X₁ ≤ X₀ for location f4_v2

Found invariant X₁ ≤ X₀ for location f3_v1

Found invariant X₁ ≤ 1+X₀ ∧ 1+X₀ ≤ X₁ for location f4_v3

Found invariant X₀ ≤ X₁ for location f3_v2

Found invariant 1+X₀ ≤ X₁ for location f4_v1

Analysing control-flow refined program

MPRF for transition t₆₅: f4_v1(X₀, X₁, X₂, X₃) → f3_v2(1+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁ of depth 1:

new bound:

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

MPRF:

• f3_v2: [X₁-X₀]
• f4_v1: [X₁-X₀]

MPRF for transition t₆₇: f3_v2(X₀, X₁, X₂, X₃) → f4_v1(X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₀ ≤ X₁ of depth 1:

new bound:

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

MPRF:

• f3_v2: [1+X₁-X₀]
• f4_v1: [X₁-X₀]

MPRF for transition t₆₂: f4_v2(X₀, X₁, X₂, X₃) → f3_v1(X₀, 1+X₁, X₂, X₃) :|: X₁ ≤ X₀ ∧ 1+X₁ ≤ X₀ of depth 1:

new bound:

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

MPRF:

• f3_v1: [1+X₀-X₁]
• f4_v2: [1+X₀-X₁]

MPRF for transition t₆₄: f3_v1(X₀, X₁, X₂, X₃) → f4_v2(X₀, X₁, X₂, X₃) :|: 1+X₁ ≤ X₀ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀ ∧ X₁ ≤ X₀ of depth 1:

new bound:

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

MPRF:

• f3_v1: [1+X₀-X₁]
• f4_v2: [X₀-X₁]

CFR: Improvement to new bound with the following program:

method: PartialEvaluation new bound:

O(n)

cfr-program:

Start: f0
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars: M, N, O, P
Locations: f0, f3, f3_v1, f3_v2, f3_v3, f3_v4, f4, f4_v1, f4_v2, f4_v3, f8
Transitions:
t₁₉: f0(X₀, X₁, X₂, X₃) → f3(X₀, X₁, X₂, X₃)
t₂₀: f0(X₀, X₁, X₂, X₃) → f3(X₃, X₂, X₂, X₃)
t₂₁: f0(X₀, X₁, X₂, X₃) → f3(X₃, X₂, X₂, X₃)
t₂₂: f0(X₀, X₁, X₂, X₃) → f3(1+X₀, X₁, X₂, X₃)
t₂₃: f0(X₀, X₁, X₂, X₃) → f3(X₀, 1+X₁, X₂, X₃)
t₂₄: f0(X₀, X₁, X₂, X₃) → f4(X₀, X₁, X₂, X₃)
t₂₅: f0(X₀, X₁, X₂, X₃) → f8(X₀, X₁, X₂, X₃)
t₂₆: f0(X₀, X₁, X₂, X₃) → f8(O, P, M, N)
t₆₀: f3(X₀, X₁, X₂, X₃) → f4_v1(X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁
t₆₁: f3(X₀, X₁, X₂, X₃) → f4_v2(X₀, X₁, X₂, X₃) :|: 1+X₁ ≤ X₀
t₂₉: f3(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₅₉: f3(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁
t₆₄: f3_v1(X₀, X₁, X₂, X₃) → f4_v2(X₀, X₁, X₂, X₃) :|: 1+X₁ ≤ X₀ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀ ∧ X₁ ≤ X₀
t₆₃: f3_v1(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀
t₆₇: f3_v2(X₀, X₁, X₂, X₃) → f4_v1(X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₀ ≤ X₁
t₆₆: f3_v2(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ 0
t₇₂: f3_v3(X₀, X₁, X₂, X₃) → f4_v2(X₀, X₁, X₂, X₃) :|: 1+X₁ ≤ X₀ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀
t₇₁: f3_v3(X₀, X₁, X₂, X₃) → f4_v3(X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀
t₇₀: f3_v3(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀
t₇₄: f3_v4(X₀, X₁, X₂, X₃) → f8(O, P, M, N) :|: X₁ ≤ X₀ ∧ X₀ ≤ X₁ ∧ 0 ≤ 0 ∧ X₁ ≤ 1+X₀
t₆₉: f4(X₀, X₁, X₂, X₃) → f3_v2(1+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁
t₆₈: f4(X₀, X₁, X₂, X₃) → f3_v3(X₀, 1+X₁, X₂, X₃) :|: X₁ ≤ X₀
t₆₅: f4_v1(X₀, X₁, X₂, X₃) → f3_v2(1+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁
t₆₂: f4_v2(X₀, X₁, X₂, X₃) → f3_v1(X₀, 1+X₁, X₂, X₃) :|: X₁ ≤ X₀ ∧ 1+X₁ ≤ X₀
t₇₃: f4_v3(X₀, X₁, X₂, X₃) → f3_v4(1+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₁ ∧ X₁ ≤ 1+X₀

All Bounds

Timebounds

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

Costbounds

Overall costbound: 16⋅X₀+16⋅X₁+8⋅X₂+8⋅X₃+36 {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₂₉: 1 {O(1)}
t₅₉: 1 {O(1)}
t₆₀: 1 {O(1)}
t₆₁: 1 {O(1)}
t₆₂: 2⋅X₂+2⋅X₃+4⋅X₀+4⋅X₁+5 {O(n)}
t₆₃: 1 {O(1)}
t₆₄: 2⋅X₂+2⋅X₃+4⋅X₀+4⋅X₁+3 {O(n)}
t₆₅: 2⋅X₂+2⋅X₃+4⋅X₀+4⋅X₁+3 {O(n)}
t₆₆: 1 {O(1)}
t₆₇: 2⋅X₂+2⋅X₃+4⋅X₀+4⋅X₁+4 {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)}

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₀+1 {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₁+1 {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₃+3⋅X₀+1 {O(n)}
t₆₀, X₁: 2⋅X₂+3⋅X₁+1 {O(n)}
t₆₀, X₂: 5⋅X₂ {O(n)}
t₆₀, X₃: 5⋅X₃ {O(n)}
t₆₁, X₀: 2⋅X₃+3⋅X₀+1 {O(n)}
t₆₁, X₁: 2⋅X₂+3⋅X₁+1 {O(n)}
t₆₁, X₂: 5⋅X₂ {O(n)}
t₆₁, X₃: 5⋅X₃ {O(n)}
t₆₂, X₀: 2⋅X₃+4⋅X₀+1 {O(n)}
t₆₂, X₁: 2⋅X₃+4⋅X₀+4⋅X₂+8⋅X₁+7 {O(n)}
t₆₂, X₂: 6⋅X₂ {O(n)}
t₆₂, X₃: 6⋅X₃ {O(n)}
t₆₄, X₀: 2⋅X₃+4⋅X₀+1 {O(n)}
t₆₄, X₁: 2⋅X₃+4⋅X₀+4⋅X₂+8⋅X₁+7 {O(n)}
t₆₄, X₂: 6⋅X₂ {O(n)}
t₆₄, X₃: 6⋅X₃ {O(n)}
t₆₅, X₀: 2⋅X₂+4⋅X₁+4⋅X₃+8⋅X₀+5 {O(n)}
t₆₅, X₁: 2⋅X₂+4⋅X₁+1 {O(n)}
t₆₅, X₂: 6⋅X₂ {O(n)}
t₆₅, X₃: 6⋅X₃ {O(n)}
t₆₇, X₀: 2⋅X₂+4⋅X₁+4⋅X₃+8⋅X₀+5 {O(n)}
t₆₇, X₁: 2⋅X₂+4⋅X₁+1 {O(n)}
t₆₇, X₂: 6⋅X₂ {O(n)}
t₆₇, X₃: 6⋅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₀: X₀+1 {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₁+1 {O(n)}
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₀: X₀+1 {O(n)}
t₇₃, X₁: X₁+1 {O(n)}
t₇₃, X₂: X₂ {O(n)}
t₇₃, X₃: X₃ {O(n)}