Initial Problem
Start: f2
Program_Vars: X₀, X₁, X₂
Temp_Vars: D
Locations: f1, f2, f300
Transitions:
t₄: f2(X₀, X₁, X₂) → f300(X₀, X₁, X₂)
t₃: f300(X₀, X₁, X₂) → f1(X₀, X₁, D) :|: 0 ≤ X₀
t₀: f300(X₀, X₁, X₂) → f300(X₀-99, 0, X₂) :|: 0 ≤ 1+X₁ ∧ 1+X₀ ≤ 0 ∧ 1+X₁ ≤ 0
t₁: f300(X₀, X₁, X₂) → f300(1+X₀, 1+X₁, X₂) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁
t₂: f300(X₀, X₁, X₂) → f300(1+X₀, 1+X₁, X₂) :|: 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
Preprocessing
Eliminate variables [D; X₂] that do not contribute to the problem
Found invariant 0 ≤ X₀ for location f1
Problem after Preprocessing
Start: f2
Program_Vars: X₀, X₁
Temp_Vars:
Locations: f1, f2, f300
Transitions:
t₁₄: f2(X₀, X₁) → f300(X₀, X₁)
t₁₅: f300(X₀, X₁) → f1(X₀, X₁) :|: 0 ≤ X₀
t₁₆: f300(X₀, X₁) → f300(X₀-99, 0) :|: 0 ≤ 1+X₁ ∧ 1+X₀ ≤ 0 ∧ 1+X₁ ≤ 0
t₁₇: f300(X₀, X₁) → f300(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁
t₁₈: f300(X₀, X₁) → f300(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
MPRF for transition t₁₆: f300(X₀, X₁) → f300(X₀-99, 0) :|: 0 ≤ 1+X₁ ∧ 1+X₀ ≤ 0 ∧ 1+X₁ ≤ 0 of depth 1:
new bound:
X₁ {O(n)}
MPRF:
• f300: [-X₁]
MPRF for transition t₁₈: f300(X₀, X₁) → f300(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0 of depth 1:
new bound:
99⋅X₁+X₀ {O(n)}
MPRF:
• f300: [-X₀-99⋅X₁]
TWN: t₁₇: f300→f300
cycle: [t₁₇: f300→f300; t₁₈: f300→f300]
original loop: (1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∨ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0,(X₀,X₁) -> (1+X₀,1+X₁))
transformed loop: (1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∨ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0,(X₀,X₁) -> (1+X₀,1+X₁))
loop: (1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∨ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0,(X₀,X₁) -> (1+X₀,1+X₁))
order: [X₁; X₀]
closed-form:X₁: X₁ + [[n != 0]]⋅n^1
X₀: X₀ + [[n != 0]]⋅n^1
Termination: true
Formula:
0 ≤ 2+X₁ ∧ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
∨ 0 ≤ 2+X₁ ∧ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
∨ 0 ≤ 2+X₁ ∧ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₁ ≤ 0
∨ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0
∨ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0 ∧ 3+X₁ ≤ 0
∨ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0 ∧ 0 ≤ X₁
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0 ∧ 3+X₁ ≤ 0
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0 ∧ 0 ≤ X₁
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 3+X₁ ≤ 0
∨ 1 ≤ 0
∨ 1 ≤ 0 ∧ 0 ≤ X₁
Stabilization-Threshold for: 2+X₁ ≤ 0
alphas_abs: 1+X₁
M: 0
N: 1
Bound: 2⋅X₁+4 {O(n)}
Stabilization-Threshold for: 1+X₀ ≤ 0
alphas_abs: X₀
M: 0
N: 1
Bound: 2⋅X₀+2 {O(n)}
original loop: (1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∨ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0,(X₀,X₁) -> (1+X₀,1+X₁))
transformed loop: (1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∨ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0,(X₀,X₁) -> (1+X₀,1+X₁))
loop: (1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∨ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0,(X₀,X₁) -> (1+X₀,1+X₁))
order: [X₁; X₀]
closed-form:X₁: X₁ + [[n != 0]]⋅n^1
X₀: X₀ + [[n != 0]]⋅n^1
Termination: true
Formula:
0 ≤ 2+X₁ ∧ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
∨ 0 ≤ 2+X₁ ∧ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
∨ 0 ≤ 2+X₁ ∧ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₁ ≤ 0
∨ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0
∨ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0 ∧ 3+X₁ ≤ 0
∨ 0 ≤ 1 ∧ 0 ≤ 1+X₀ ∧ 1 ≤ 0 ∧ 1+X₀ ≤ 0 ∧ 0 ≤ X₁
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0 ∧ 3+X₁ ≤ 0
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 2+X₀ ≤ 0 ∧ 0 ≤ X₁
∨ 0 ≤ 1 ∧ 1 ≤ 0 ∧ 3+X₁ ≤ 0
∨ 1 ≤ 0
∨ 1 ≤ 0 ∧ 0 ≤ X₁
Stabilization-Threshold for: 2+X₁ ≤ 0
alphas_abs: 1+X₁
M: 0
N: 1
Bound: 2⋅X₁+4 {O(n)}
Stabilization-Threshold for: 1+X₀ ≤ 0
alphas_abs: X₀
M: 0
N: 1
Bound: 2⋅X₀+2 {O(n)}
TWN - Lifting for [17: f300->f300; 18: f300->f300] of 2⋅X₀+2⋅X₁+8 {O(n)}
relevant size-bounds w.r.t. t₁₄: f2→f300:
X₀: X₀ {O(n)}
X₁: X₁ {O(n)}
Runtime-bound of t₁₄: 1 {O(1)}
Results in: 2⋅X₀+2⋅X₁+8 {O(n)}
TWN - Lifting for [17: f300->f300; 18: f300->f300] of 2⋅X₀+2⋅X₁+8 {O(n)}
relevant size-bounds w.r.t. t₁₆: f300→f300:
X₀: 2⋅X₀+198 {O(n)}
X₁: 0 {O(1)}
Runtime-bound of t₁₆: X₁ {O(n)}
Results in: 4⋅X₀⋅X₁+404⋅X₁ {O(n^2)}
Found invariant 1+X₁ ≤ 0 ∧ 1+X₀+X₁ ≤ 0 ∧ X₀ ≤ 0 for location f300_v1
Found invariant X₁ ≤ 1 ∧ 98+X₀+X₁ ≤ 0 ∧ 1 ≤ X₁ ∧ 100+X₀ ≤ X₁ ∧ 99+X₀ ≤ 0 for location f300_v4
Found invariant X₁ ≤ 0 ∧ 100+X₀+X₁ ≤ 0 ∧ 0 ≤ X₁ ∧ 100+X₀ ≤ X₁ ∧ 100+X₀ ≤ 0 for location f300_v3
Found invariant 0 ≤ X₀ for location f1
Found invariant 1 ≤ X₁ ∧ 1+X₀ ≤ X₁ ∧ X₀ ≤ 0 for location f300_v2
Analysing control-flow refined program
MPRF for transition t₅₂: f300_v1(X₀, X₁) → f300_v1(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0 ∧ 1+X₀+X₁ ≤ 0 ∧ 1+X₁ ≤ 0 ∧ X₀ ≤ 0 ∧ X₁ ≤ 0 of depth 1:
new bound:
X₁+1 {O(n)}
MPRF:
• f300_v1: [1-X₁]
MPRF for transition t₅₀: f300_v2(X₀, X₁) → f300_v2(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₀ ≤ X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 0 of depth 1:
new bound:
4⋅X₀+299 {O(n)}
MPRF:
• f300_v2: [1-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:
Locations: f1, f2, f300, f300_v1, f300_v2, f300_v3, f300_v4
Transitions:
t₁₄: f2(X₀, X₁) → f300(X₀, X₁)
t₁₅: f300(X₀, X₁) → f1(X₀, X₁) :|: 0 ≤ X₀
t₄₇: f300(X₀, X₁) → f1(X₀, X₁) :|: 0 ≤ X₀
t₄₄: f300(X₀, X₁) → f300_v1(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0
t₄₅: f300(X₀, X₁) → f300_v2(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁
t₄₆: f300(X₀, X₁) → f300_v3(X₀-99, 0) :|: 0 ≤ 1+X₁ ∧ 1+X₀ ≤ 0 ∧ 1+X₁ ≤ 0
t₅₄: f300_v1(X₀, X₁) → f1(X₀, X₁) :|: 0 ≤ X₀ ∧ 1+X₀+X₁ ≤ 0 ∧ 1+X₁ ≤ 0 ∧ X₀ ≤ 0 ∧ X₁ ≤ 0
t₅₂: f300_v1(X₀, X₁) → f300_v1(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 2+X₁ ≤ 0 ∧ 1+X₀+X₁ ≤ 0 ∧ 1+X₁ ≤ 0 ∧ X₀ ≤ 0 ∧ X₁ ≤ 0
t₅₃: f300_v1(X₀, X₁) → f300_v3(X₀-99, 0) :|: 0 ≤ 1+X₁ ∧ 1+X₀ ≤ 0 ∧ 1+X₁ ≤ 0 ∧ 1+X₀+X₁ ≤ 0 ∧ X₀ ≤ 0 ∧ X₁ ≤ 0
t₅₁: f300_v2(X₀, X₁) → f1(X₀, X₁) :|: 0 ≤ X₀ ∧ 0 ≤ 1+X₁ ∧ 1+X₀ ≤ X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 0 ∧ 0 ≤ X₁
t₅₀: f300_v2(X₀, X₁) → f300_v2(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∧ 0 ≤ 1+X₁ ∧ 1+X₀ ≤ X₁ ∧ 1 ≤ X₁ ∧ X₀ ≤ 0
t₄₈: f300_v3(X₀, X₁) → f300_v4(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∧ 0 ≤ 1+X₁ ∧ 100+X₀ ≤ 0 ∧ 100+X₀ ≤ X₁ ∧ 100+X₀+X₁ ≤ 0 ∧ X₀ ≤ 0 ∧ X₁ ≤ 0
t₄₉: f300_v4(X₀, X₁) → f300_v2(1+X₀, 1+X₁) :|: 1+X₀ ≤ 0 ∧ 0 ≤ X₁ ∧ 0 ≤ 1+X₁ ∧ X₁ ≤ 1 ∧ 1 ≤ X₁ ∧ 98+X₀+X₁ ≤ 0 ∧ 99+X₀ ≤ 0 ∧ 100+X₀ ≤ X₁ ∧ X₀ ≤ 0
All Bounds
Timebounds
Overall timebound:4⋅X₀+X₁+311 {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₅₀: 4⋅X₀+299 {O(n)}
t₅₁: 1 {O(1)}
t₅₂: X₁+1 {O(n)}
t₅₃: 1 {O(1)}
t₅₄: 1 {O(1)}
Costbounds
Overall costbound: 4⋅X₀+X₁+311 {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₅₀: 4⋅X₀+299 {O(n)}
t₅₁: 1 {O(1)}
t₅₂: X₁+1 {O(n)}
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₁+1 {O(n)}
t₄₆, X₀: X₀+99 {O(n)}
t₄₆, X₁: 0 {O(1)}
t₄₇, X₀: X₀ {O(n)}
t₄₇, X₁: X₁ {O(n)}
t₄₈, X₀: 3⋅X₀+297 {O(n)}
t₄₈, X₁: 1 {O(1)}
t₄₉, X₀: 3⋅X₀+297 {O(n)}
t₄₉, X₁: 2 {O(1)}
t₅₀, X₀: 4⋅X₀+297 {O(n)}
t₅₀, X₁: 4⋅X₀+X₁+302 {O(n)}
t₅₁, X₀: 0 {O(1)}
t₅₁, X₁: 2⋅X₁+4⋅X₀+303 {O(n)}
t₅₂, X₀: X₀ {O(n)}
t₅₂, X₁: X₁ {O(n)}
t₅₃, X₀: 2⋅X₀+198 {O(n)}
t₅₃, X₁: 0 {O(1)}
t₅₄, X₀: 0 {O(1)}
t₅₄, X₁: 2⋅X₁ {O(n)}