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