Initial Problem

Start: l0
Program_Vars: X₀, X₁, X₂, X₃, X₄, X₅
Temp_Vars: U, V
Locations: l0, l1, l2, l3, l4
Transitions:
t₀: l0(X₀, X₁, X₂, X₃, X₄, X₅) → l1(U, X₁, X₂, X₃, X₄, X₅)
t₁: l1(X₀, X₁, X₂, X₃, X₄, X₅) → l1(1+X₀, X₁, X₂, X₃, X₄, X₅) :|: X₀ ≤ 3 ∧ 1 ≤ X₀ ∧ 0 ≤ V ∧ V ≤ 0
t₃: l1(X₀, X₁, X₂, X₃, X₄, X₅) → l2(X₀, X₁, X₂, X₃, X₄, X₅) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁
t₂: l2(X₀, X₁, X₂, X₃, X₄, X₅) → l1(X₀, X₁-1, X₂, X₃, X₄, X₅)
t₄: l2(X₀, X₁, X₂, X₃, X₄, X₅) → l3(X₀, X₁, X₂, X₃, X₄, X₅)
t₅: l3(X₀, X₁, X₂, X₃, X₄, X₅) → l3(X₀, X₁, X₂, X₃, 2⋅X₄, 3⋅X₅) :|: 1+X₅ ≤ X₄ ∧ 1 ≤ X₅
t₆: l3(X₀, X₁, X₂, X₃, X₄, X₅) → l4(X₀, X₁, X₂, X₃, X₄, X₅)
t₇: l4(X₀, X₁, X₂, X₃, X₄, X₅) → l4(X₀, X₁, X₂, X₃, X₄-1, X₅) :|: 1 ≤ X₄

Preprocessing

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

Found invariant 1 ≤ X₁ for location l2

Found invariant 1 ≤ X₁ for location l4

Found invariant 1 ≤ X₁ for location l3

Problem after Preprocessing

Start: l0
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars: U, V
Locations: l0, l1, l2, l3, l4
Transitions:
t₁₇: l0(X₀, X₁, X₂, X₃) → l1(U, X₁, X₂, X₃)
t₁₈: l1(X₀, X₁, X₂, X₃) → l1(1+X₀, X₁, X₂, X₃) :|: X₀ ≤ 3 ∧ 1 ≤ X₀ ∧ 0 ≤ V ∧ V ≤ 0
t₁₉: l1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁
t₂₀: l2(X₀, X₁, X₂, X₃) → l1(X₀, X₁-1, X₂, X₃) :|: 1 ≤ X₁
t₂₁: l2(X₀, X₁, X₂, X₃) → l3(X₀, X₁, X₂, X₃) :|: 1 ≤ X₁
t₂₂: l3(X₀, X₁, X₂, X₃) → l3(X₀, X₁, 2⋅X₂, 3⋅X₃) :|: 1+X₃ ≤ X₂ ∧ 1 ≤ X₃ ∧ 1 ≤ X₁
t₂₃: l3(X₀, X₁, X₂, X₃) → l4(X₀, X₁, X₂, X₃) :|: 1 ≤ X₁
t₂₄: l4(X₀, X₁, X₂, X₃) → l4(X₀, X₁, X₂-1, X₃) :|: 1 ≤ X₂ ∧ 1 ≤ X₁

MPRF for transition t₁₉: l1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁ of depth 1:

new bound:

X₁ {O(n)}

MPRF:

• l1: [X₁]
• l2: [X₁-1]

MPRF for transition t₂₀: l2(X₀, X₁, X₂, X₃) → l1(X₀, X₁-1, X₂, X₃) :|: 1 ≤ X₁ of depth 1:

new bound:

X₁ {O(n)}

MPRF:

• l1: [X₁]
• l2: [X₁]

Found invariant 1 ≤ X₁ for location l2

Found invariant X₀ ≤ 4 ∧ 2 ≤ X₀ for location l1_v1

Found invariant 1 ≤ X₁ for location l4

Found invariant 1 ≤ X₁ for location l3

Analysing control-flow refined program

knowledge_propagation leads to new time bound X₁+1 {O(n)} for transition t₄₂: l1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁

knowledge_propagation leads to new time bound X₁+1 {O(n)} for transition t₄₃: l1(X₀, X₁, X₂, X₃) → l1_v1(1+X₀, X₁, X₂, X₃) :|: X₀ ≤ 3 ∧ 1 ≤ X₀ ∧ 0 ≤ V ∧ V ≤ 0

MPRF for transition t₄₄: l1_v1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁ ∧ X₀ ≤ 4 ∧ 1 ≤ X₀ ∧ 2 ≤ X₀ of depth 1:

new bound:

X₁ {O(n)}

MPRF:

• l1: [X₁]
• l1_v1: [X₁]
• l2: [X₁-1]

MPRF for transition t₄₅: l1_v1(X₀, X₁, X₂, X₃) → l1_v1(1+X₀, X₁, X₂, X₃) :|: X₀ ≤ 3 ∧ 1 ≤ X₀ ∧ 0 ≤ V ∧ V ≤ 0 ∧ X₀ ≤ 4 ∧ 2 ≤ X₀ of depth 1:

new bound:

17⋅X₁+26 {O(n)}

MPRF:

• l1: [9]
• l1_v1: [13-X₀]
• l2: [9]

CFR: Improvement to new bound with the following program:

method: PartialEvaluation new bound:

O(n)

cfr-program:

Start: l0
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars: U, V
Locations: l0, l1, l1_v1, l2, l3, l4
Transitions:
t₁₇: l0(X₀, X₁, X₂, X₃) → l1(U, X₁, X₂, X₃)
t₄₃: l1(X₀, X₁, X₂, X₃) → l1_v1(1+X₀, X₁, X₂, X₃) :|: X₀ ≤ 3 ∧ 1 ≤ X₀ ∧ 0 ≤ V ∧ V ≤ 0
t₁₉: l1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁
t₄₂: l1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁
t₄₅: l1_v1(X₀, X₁, X₂, X₃) → l1_v1(1+X₀, X₁, X₂, X₃) :|: X₀ ≤ 3 ∧ 1 ≤ X₀ ∧ 0 ≤ V ∧ V ≤ 0 ∧ X₀ ≤ 4 ∧ 2 ≤ X₀
t₄₄: l1_v1(X₀, X₁, X₂, X₃) → l2(X₀, X₁, X₂, X₃) :|: V ≤ 1 ∧ 1 ≤ V ∧ 1 ≤ X₁ ∧ X₀ ≤ 4 ∧ 1 ≤ X₀ ∧ 2 ≤ X₀
t₂₀: l2(X₀, X₁, X₂, X₃) → l1(X₀, X₁-1, X₂, X₃) :|: 1 ≤ X₁
t₂₁: l2(X₀, X₁, X₂, X₃) → l3(X₀, X₁, X₂, X₃) :|: 1 ≤ X₁
t₂₂: l3(X₀, X₁, X₂, X₃) → l3(X₀, X₁, 2⋅X₂, 3⋅X₃) :|: 1+X₃ ≤ X₂ ∧ 1 ≤ X₃ ∧ 1 ≤ X₁
t₂₃: l3(X₀, X₁, X₂, X₃) → l4(X₀, X₁, X₂, X₃) :|: 1 ≤ X₁
t₂₄: l4(X₀, X₁, X₂, X₃) → l4(X₀, X₁, X₂-1, X₃) :|: 1 ≤ X₂ ∧ 1 ≤ X₁

TWN: t₂₂: l3→l3

cycle: [t₂₂: l3→l3]
original loop: (1+X₃ ≤ X₂ ∧ 1 ≤ X₃ ∧ 1 ≤ X₁,(X₁,X₂,X₃) -> (X₁,2⋅X₂,3⋅X₃))
transformed loop: (1+X₃ ≤ X₂ ∧ 1 ≤ X₃ ∧ 1 ≤ X₁,(X₁,X₂,X₃) -> (X₁,2⋅X₂,3⋅X₃))
loop: (1+X₃ ≤ X₂ ∧ 1 ≤ X₃ ∧ 1 ≤ X₁,(X₁,X₂,X₃) -> (X₁,2⋅X₂,3⋅X₃))
order: [X₃; X₂; X₁]
closed-form:
X₃: X₃⋅(3)^n
X₂: X₂⋅(2)^n
X₁: X₁

Termination: true
Formula:

0 ≤ 1 ∧ 1 ≤ 0 ∧ 1 ≤ X₁ ∧ 1 ≤ X₃ ∧ 0 ≤ X₂ ∧ X₂ ≤ 0 ∧ 0 ≤ X₃ ∧ X₃ ≤ 0
∨ 1 ≤ 0 ∧ 1 ≤ X₁ ∧ 1 ≤ X₃ ∧ 0 ≤ X₂ ∧ X₂ ≤ 0 ∧ 0 ≤ X₃ ∧ X₃ ≤ 0
∨ 1 ≤ X₁ ∧ 1 ≤ X₂ ∧ 1 ≤ X₃ ∧ 0 ≤ X₃ ∧ X₃ ≤ 0
∨ 1 ≤ X₁ ∧ 1 ≤ X₃ ∧ 1+X₃ ≤ 0

Stabilization-Threshold for: 1+X₃ ≤ X₂
alphas_abs: X₂
M': 1
N: 1
Bound: log(X₂)+2 {O(log(n))}

TWN - Lifting for [22: l3->l3] of log(X₂)+4 {O(log(n))}

relevant size-bounds w.r.t. t₂₁: l2→l3:
X₂: X₂ {O(n)}
Runtime-bound of t₂₁: 1 {O(1)}
Results in: log(X₂)+4 {O(log(n))}

MPRF for transition t₂₄: l4(X₀, X₁, X₂, X₃) → l4(X₀, X₁, X₂-1, X₃) :|: 1 ≤ X₂ ∧ 1 ≤ X₁ of depth 1:

new bound:

16⋅X₂⋅X₂+X₂ {O(n^2)}

MPRF:

• l4: [X₂]

Found invariant 1 ≤ X₁ for location l2

Found invariant X₀ ≤ 4 ∧ 2 ≤ X₀ for location l1_v1

Found invariant 1 ≤ X₁ for location l4

Found invariant 1 ≤ X₁ for location l3

Found invariant 0 ≤ X₂ ∧ 1 ≤ X₁+X₂ ∧ 1 ≤ X₁ for location l4_v1

All Bounds

Timebounds

Overall timebound:16⋅X₂⋅X₂+22⋅X₁+X₂+log(X₂)+35 {O(n^2)}
t₁₇: 1 {O(1)}
t₁₉: X₁ {O(n)}
t₂₀: X₁ {O(n)}
t₂₁: 1 {O(1)}
t₂₂: log(X₂)+4 {O(log(n))}
t₂₃: 1 {O(1)}
t₂₄: 16⋅X₂⋅X₂+X₂ {O(n^2)}
t₄₂: X₁+1 {O(n)}
t₄₃: X₁+1 {O(n)}
t₄₄: X₁ {O(n)}
t₄₅: 17⋅X₁+26 {O(n)}

Costbounds

Overall costbound: 16⋅X₂⋅X₂+22⋅X₁+X₂+log(X₂)+35 {O(n^2)}
t₁₇: 1 {O(1)}
t₁₉: X₁ {O(n)}
t₂₀: X₁ {O(n)}
t₂₁: 1 {O(1)}
t₂₂: log(X₂)+4 {O(log(n))}
t₂₃: 1 {O(1)}
t₂₄: 16⋅X₂⋅X₂+X₂ {O(n^2)}
t₄₂: X₁+1 {O(n)}
t₄₃: X₁+1 {O(n)}
t₄₄: X₁ {O(n)}
t₄₅: 17⋅X₁+26 {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₁: X₁ {O(n)}
t₂₁, X₂: X₂ {O(n)}
t₂₁, X₃: X₃ {O(n)}
t₂₂, X₁: X₁ {O(n)}
t₂₂, X₂: 16⋅X₂⋅X₂ {O(n^2)}
t₂₂, X₃: 81⋅X₂⋅X₃ {O(n^2)}
t₂₃, X₁: 2⋅X₁ {O(n)}
t₂₃, X₂: 16⋅X₂⋅X₂+X₂ {O(n^2)}
t₂₃, X₃: 81⋅X₂⋅X₃+X₃ {O(n^2)}
t₂₄, X₁: 2⋅X₁ {O(n)}
t₂₄, X₂: 16⋅X₂⋅X₂+X₂ {O(n^2)}
t₂₄, X₃: 81⋅X₂⋅X₃+X₃ {O(n^2)}
t₄₂, X₁: X₁ {O(n)}
t₄₂, X₂: X₂ {O(n)}
t₄₂, X₃: X₃ {O(n)}
t₄₃, X₀: 4 {O(1)}
t₄₃, X₁: X₁ {O(n)}
t₄₃, X₂: X₂ {O(n)}
t₄₃, X₃: X₃ {O(n)}
t₄₄, X₀: 4 {O(1)}
t₄₄, X₁: X₁ {O(n)}
t₄₄, X₂: X₂ {O(n)}
t₄₄, X₃: X₃ {O(n)}
t₄₅, X₀: 4 {O(1)}
t₄₅, X₁: X₁ {O(n)}
t₄₅, X₂: X₂ {O(n)}
t₄₅, X₃: X₃ {O(n)}