Preprocessing

Found invariant 0 ≤ X₀ for location l1

Found invariant 0 ≤ X₀ for location l2

Probabilistic Analysis

Probabilistic Program after Preprocessing

Start: l0
Program_Vars: X₀, X₁
Temp_Vars: T
Locations: l0, l1, l2
Transitions:
g₀:l0(X₀,X₁) → t₁:l1(T,X₁) :|: 1 ≤ T
g₂:l1(X₀,X₁) → [1/2]:t₃:l1(0,X₁) :+: [1/2]:t₄:l1(X₀,X₁) :|: 1 ≤ X₀ ∧ 0 ≤ X₀
g₅:l1(X₀,X₁) → t₆:l2(X₀,X₁-1) :|: 0 ≤ X₀
g₇:l2(X₀,X₁) → t₈:l1(X₀,X₁) :|: 1 ≤ X₁ ∧ 0 ≤ X₀ ∧ X₀ ≤ 0

Run classical analysis on SCC: [l0]

Classical Approximation after Lifting Classical Results

All Bounds
Timebounds

Overall timebound:inf {Infinity}
g₀: 1 {O(1)}
g₂: inf {Infinity}
g₅: inf {Infinity}
g₇: inf {Infinity}

Costbounds

Overall costbound: inf {Infinity}
g₀: inf {Infinity}
g₂: inf {Infinity}
g₅: inf {Infinity}
g₇: inf {Infinity}

Sizebounds

(g₀,l1), X₁: X₁ {O(n)}

Run probabilistic analysis on SCC: [l0]

Run classical analysis on SCC: [l1; l2]

MPRF for transition t₈: l2(X₀,X₁) → l1(X₀,X₁) :|: X₀ ≤ 0 ∧ 0 ≤ X₀ ∧ 1 ≤ X₁ of depth 1:

new bound:

X₁+1 {O(n)}

MPRF:

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

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

new bound:

X₁+2 {O(n)}

MPRF:

• l1: [1]
• l2: [0]

Classical Approximation after Lifting Classical Results

All Bounds
Timebounds

Overall timebound:inf {Infinity}
g₀: 1 {O(1)}
g₂: inf {Infinity}
g₅: X₁+2 {O(n)}
g₇: X₁+1 {O(n)}

Costbounds

Overall costbound: inf {Infinity}
g₀: inf {Infinity}
g₂: inf {Infinity}
g₅: inf {Infinity}
g₇: inf {Infinity}

Sizebounds

(g₀,l1), X₁: X₁ {O(n)}
(g₂,l1), X₁: 3⋅X₁ {O(n)}
(g₅,l2), X₁: 5⋅X₁+2 {O(n)}
(g₇,l1), X₀: 0 {O(1)}
(g₇,l1), X₁: 5⋅X₁+2 {O(n)}

Run probabilistic analysis on SCC: [l1; l2]

Analysing control-flow refined program

Run classical analysis on SCC: [l1; l1_v1; l1_v2; l2]

knowledge_propagation leads to new time bound 1 {O(1)} for transition t₉: l1(X₀,X₁) → l1_v1(0,X₁) :|: 0 ≤ X₀ ∧ 1 ≤ X₀

knowledge_propagation leads to new time bound 1 {O(1)} for transition t₁₀: l1(X₀,X₁) → l1_v2(X₀,X₁) :|: 0 ≤ X₀ ∧ 1 ≤ X₀

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

MPRF for transition t₁₄: l1_v1(X₀,X₁) → l2(X₀,X₁-1) :|: 0 ≤ X₀ ∧ X₀ ≤ 0 of depth 1:

new bound:

2 {O(1)}

MPRF:

• l1: [0]
• l1_v1: [1]
• l1_v2: [1]
• l2: [0]

MPRF for transition t₁₆: l1_v2(X₀,X₁) → l1_v1(Temp_Int₁₀₈,X₁) :|: 0 ≤ X₀ ∧ 1 ≤ X₀ ∧ Temp_Int₁₀₈ ≤ 0 ∧ 0 ≤ Temp_Int₁₀₈ ∧ 1 ≤ X₀ of depth 1:

new bound:

1 {O(1)}

MPRF:

• l1: [0]
• l1_v1: [0]
• l1_v2: [1]
• l2: [0]

MPRF for transition t₁₉: l1_v2(X₀,X₁) → l2(X₀,X₁-1) :|: 1 ≤ X₀ ∧ 0 ≤ X₀ of depth 1:

new bound:

1 {O(1)}

MPRF:

• l1: [1]
• l1_v1: [1]
• l1_v2: [1]
• l2: [1-X₀]

Classical Approximation after Lifting Classical Results

All Bounds
Timebounds

Overall timebound:inf {Infinity}
g₀: 1 {O(1)}
g₅: X₁+2 {O(n)}
g₇: X₁+1 {O(n)}
g₁₁: 2 {O(1)}
g₁₃: X₁+2 {O(n)}
g₁₅: 2 {O(1)}
g₁₈: inf {Infinity}
g₂₀: 1 {O(1)}

Costbounds

Overall costbound: inf {Infinity}
g₀: inf {Infinity}
g₅: inf {Infinity}
g₇: inf {Infinity}
g₁₁: inf {Infinity}
g₁₃: inf {Infinity}
g₁₅: inf {Infinity}
g₁₈: inf {Infinity}
g₂₀: inf {Infinity}

Sizebounds

(g₀,l1), X₁: X₁ {O(n)}
(g₅,l2), X₁: 5⋅X₁+2 {O(n)}
(g₇,l1), X₀: 0 {O(1)}
(g₇,l1), X₁: 5⋅X₁+2 {O(n)}
(g₁₁,l1_v1), X₁: 2⋅X₁ {O(n)}
(g₁₁,l1_v2), X₁: 2⋅X₁ {O(n)}
(g₁₃,l2), X₁: 6⋅X₁+6 {O(n)}
(g₁₅,l2), X₀: 0 {O(1)}
(g₁₅,l2), X₁: 3⋅X₁+2 {O(n)}
(g₁₈,l1_v1), X₁: 3⋅X₁ {O(n)}
(g₁₈,l1_v2), X₁: 3⋅X₁ {O(n)}
(g₂₀,l2), X₁: 2⋅X₁+2 {O(n)}

Run probabilistic analysis on SCC: [l1; l1_v1; l1_v2; l2]

Plrf for transition g₁₈:l1_v2(X₀,X₁) → [1/2]:t₁₆:l1_v1(0,X₁) :+: [1/2]:t₁₇:l1_v2(X₀,X₁) :|: 1 ≤ X₀ ∧ 0 ≤ X₀:

new bound:

3 {O(1)}

PLRF:

• l1: 1
• l1_v1: 0
• l1_v2: 2
• l2: 1

Use classical time bound for entry point (g₀:l0→[t₁:1:l1],l1)
Use classical time bound for entry point (g₁₅:l1_v1→[t₁₄:1:l2],l2)

CFR: Improvement to new bound with the following program:

method: PartialEvaluationProbabilistic new bound:

O(n)

cfr-program:

Start: l0
Program_Vars: X₀, X₁
Temp_Vars: T
Locations: l0, l1, l1_v1, l1_v2, l2
Transitions:
g₀:l0(X₀,X₁) → t₁:l1(T,X₁) :|: 1 ≤ T
g₅:l1(X₀,X₁) → t₆:l2(X₀,X₁-1) :|: 0 ≤ X₀
g₇:l2(X₀,X₁) → t₈:l1(X₀,X₁) :|: 1 ≤ X₁ ∧ 0 ≤ X₀ ∧ X₀ ≤ 0
g₁₁:l1(X₀,X₁) → [1/2]:t₉:l1_v1(0,X₁) :+: [1/2]:t₁₀:l1_v2(X₀,X₁) :|: 1 ≤ X₀ ∧ 0 ≤ X₀
g₁₃:l1(X₀,X₁) → t₁₂:l2(X₀,X₁-1) :|: 0 ≤ X₀
g₁₅:l1_v1(X₀,X₁) → t₁₄:l2(X₀,X₁-1) :|: 0 ≤ X₀ ∧ X₀ ≤ 0
g₁₈:l1_v2(X₀,X₁) → [1/2]:t₁₆:l1_v1(0,X₁) :+: [1/2]:t₁₇:l1_v2(X₀,X₁) :|: 1 ≤ X₀ ∧ 0 ≤ X₀
g₂₀:l1_v2(X₀,X₁) → t₁₉:l2(X₀,X₁-1) :|: 1 ≤ X₀ ∧ 0 ≤ X₀

Results of Probabilistic Analysis

All Bounds

Timebounds

Overall timebound:3⋅X₁+14 {O(n)}
g₀: 1 {O(1)}
g₅: X₁+2 {O(n)}
g₇: X₁+1 {O(n)}
g₁₁: 2 {O(1)}
g₁₃: X₁+2 {O(n)}
g₁₅: 2 {O(1)}
g₁₈: 3 {O(1)}
g₂₀: 1 {O(1)}

Costbounds

Overall costbound: 3⋅X₁+19 {O(n)}
g₀: 1 {O(1)}
g₅: X₁+2 {O(n)}
g₇: X₁+1 {O(n)}
g₁₁: 4 {O(1)}
g₁₃: X₁+2 {O(n)}
g₁₅: 2 {O(1)}
g₁₈: 6 {O(1)}
g₂₀: 1 {O(1)}

Sizebounds

(g₀,l1), X₁: X₁ {O(n)}
(g₅,l2), X₁: 5⋅X₁+2 {O(n)}
(g₇,l1), X₀: 0 {O(1)}
(g₇,l1), X₁: 5⋅X₁+2 {O(n)}
(g₁₁,l1_v1), X₀: 0 {O(1)}
(g₁₁,l1_v1), X₁: 2⋅X₁ {O(n)}
(g₁₁,l1_v2), X₁: 2⋅X₁ {O(n)}
(g₁₃,l2), X₁: 6⋅X₁+6 {O(n)}
(g₁₅,l2), X₀: 0 {O(1)}
(g₁₅,l2), X₁: 3⋅X₁+2 {O(n)}
(g₁₈,l1_v1), X₀: 0 {O(1)}
(g₁₈,l1_v1), X₁: 3⋅X₁ {O(n)}
(g₁₈,l1_v2), X₁: 3⋅X₁ {O(n)}
(g₂₀,l2), X₁: 2⋅X₁+2 {O(n)}