Initial Problem
Start: eval_render_ht_start
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars:
Locations: eval_render_ht_LeafBlock_in, eval_render_ht_NewDefault_in, eval_render_ht_bb0_in, eval_render_ht_bb1_in, eval_render_ht_bb2_in, eval_render_ht_bb3_in, eval_render_ht_start, eval_render_ht_stop
Transitions:
t₄: eval_render_ht_LeafBlock_in(X₀, X₁, X₂, X₃) → eval_render_ht_NewDefault_in(X₀, X₁, X₂, X₃) :|: 8 ≤ X₁
t₃: eval_render_ht_LeafBlock_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) :|: X₁ ≤ 7
t₆: eval_render_ht_NewDefault_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb3_in(X₀, X₁, X₂, X₃)
t₁: eval_render_ht_bb0_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(X₃, X₁, X₂, X₃)
t₂: eval_render_ht_bb1_in(X₀, X₁, X₂, X₃) → eval_render_ht_LeafBlock_in(X₀, X₂-X₀, X₂, X₃)
t₅: eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) → eval_render_ht_stop(X₀, X₁, X₂, X₃)
t₇: eval_render_ht_bb3_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(4+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₂
t₈: eval_render_ht_bb3_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(X₀-4, X₁, X₂, X₃) :|: X₂ ≤ X₀
t₀: eval_render_ht_start(X₀, X₁, X₂, X₃) → eval_render_ht_bb0_in(X₀, X₁, X₂, X₃)
Preprocessing
Found invariant X₁ ≤ 7 for location eval_render_ht_bb2_in
Found invariant X₁ ≤ 7 for location eval_render_ht_stop
Found invariant 8 ≤ X₁ for location eval_render_ht_NewDefault_in
Found invariant 8 ≤ X₁ for location eval_render_ht_bb3_in
Problem after Preprocessing
Start: eval_render_ht_start
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars:
Locations: eval_render_ht_LeafBlock_in, eval_render_ht_NewDefault_in, eval_render_ht_bb0_in, eval_render_ht_bb1_in, eval_render_ht_bb2_in, eval_render_ht_bb3_in, eval_render_ht_start, eval_render_ht_stop
Transitions:
t₄: eval_render_ht_LeafBlock_in(X₀, X₁, X₂, X₃) → eval_render_ht_NewDefault_in(X₀, X₁, X₂, X₃) :|: 8 ≤ X₁
t₃: eval_render_ht_LeafBlock_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) :|: X₁ ≤ 7
t₆: eval_render_ht_NewDefault_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb3_in(X₀, X₁, X₂, X₃) :|: 8 ≤ X₁
t₁: eval_render_ht_bb0_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(X₃, X₁, X₂, X₃)
t₂: eval_render_ht_bb1_in(X₀, X₁, X₂, X₃) → eval_render_ht_LeafBlock_in(X₀, X₂-X₀, X₂, X₃)
t₅: eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) → eval_render_ht_stop(X₀, X₁, X₂, X₃) :|: X₁ ≤ 7
t₇: eval_render_ht_bb3_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(4+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₂ ∧ 8 ≤ X₁
t₈: eval_render_ht_bb3_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(X₀-4, X₁, X₂, X₃) :|: X₂ ≤ X₀ ∧ 8 ≤ X₁
t₀: eval_render_ht_start(X₀, X₁, X₂, X₃) → eval_render_ht_bb0_in(X₀, X₁, X₂, X₃)
Cut unreachable locations [eval_render_ht_LeafBlock_in] from the program graph
Found invariant 8+X₃ ≤ X₂ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ for location eval_render_ht_LeafBlock_in_v2
Found invariant 8+X₃ ≤ X₂ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ ∧ 8 ≤ X₁ for location eval_render_ht_bb1_in_v1
Found invariant 8+X₃ ≤ X₂ ∧ X₃ ≤ X₀ ∧ 8+X₀ ≤ X₂ ∧ 8 ≤ X₁ for location eval_render_ht_NewDefault_in_v1
Found invariant X₃ ≤ X₀ ∧ X₂ ≤ 7+X₀ ∧ X₁ ≤ 7 for location eval_render_ht_bb2_in
Found invariant X₃ ≤ X₀ ∧ X₂ ≤ 7+X₀ ∧ X₁ ≤ 7 for location eval_render_ht_stop
Found invariant 8+X₃ ≤ X₂ ∧ X₃ ≤ X₀ ∧ 8+X₀ ≤ X₂ ∧ 8 ≤ X₁ for location eval_render_ht_bb3_in_v1
Found invariant X₃ ≤ X₀ ∧ X₀ ≤ X₃ for location eval_render_ht_LeafBlock_in_v1
Found invariant X₃ ≤ X₀ ∧ X₀ ≤ X₃ for location eval_render_ht_bb1_in
Analysing control-flow refined program
MPRF for transition t₄₆: eval_render_ht_NewDefault_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_bb3_in_v1(X₀, X₁, X₂, X₃) :|: 8+X₀ ≤ X₂ ∧ 8 ≤ X₁ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₃ ≤ X₀ ∧ X₀+X₁ ≤ X₂ of depth 1:
new bound:
X₂+X₃+7 {O(n)}
MPRF:
• eval_render_ht_LeafBlock_in_v2: [X₂-7-X₀]
• eval_render_ht_NewDefault_in_v1: [X₂-7-X₀]
• eval_render_ht_bb1_in_v1: [X₂-4-X₀]
• eval_render_ht_bb3_in_v1: [X₂-8-X₀]
MPRF for transition t₄₇: eval_render_ht_bb3_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in_v1(4+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₂ ∧ 8+X₀ ≤ X₂ ∧ 8 ≤ X₁ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₃ ≤ X₀ ∧ X₀+X₁ ≤ X₂ of depth 1:
new bound:
X₂+X₃ {O(n)}
MPRF:
• eval_render_ht_LeafBlock_in_v2: [X₂-X₀]
• eval_render_ht_NewDefault_in_v1: [X₂-X₀]
• eval_render_ht_bb1_in_v1: [3+X₂-X₀]
• eval_render_ht_bb3_in_v1: [X₂-X₀]
MPRF for transition t₄₈: eval_render_ht_bb1_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_LeafBlock_in_v2(X₀, X₂-X₀, X₂, X₃) :|: X₀ ≤ 3+X₂ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ ∧ 8 ≤ X₁ ∧ 8+X₃ ≤ X₂ of depth 1:
new bound:
X₂+X₃+7 {O(n)}
MPRF:
• eval_render_ht_LeafBlock_in_v2: [X₂-4-X₀]
• eval_render_ht_NewDefault_in_v1: [X₁-7]
• eval_render_ht_bb1_in_v1: [X₂-3-X₀]
• eval_render_ht_bb3_in_v1: [X₁-7]
MPRF for transition t₅₀: eval_render_ht_LeafBlock_in_v2(X₀, X₁, X₂, X₃) → eval_render_ht_NewDefault_in_v1(X₀, X₁, X₂, X₃) :|: 8 ≤ X₁ ∧ 0 ≤ 3+X₁ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₀+X₁ ≤ X₂ of depth 1:
new bound:
X₂+X₃+4 {O(n)}
MPRF:
• eval_render_ht_LeafBlock_in_v2: [X₂-3-X₀]
• eval_render_ht_NewDefault_in_v1: [X₂-4-X₀]
• eval_render_ht_bb1_in_v1: [X₂-3-X₀]
• eval_render_ht_bb3_in_v1: [X₂-7-X₀]
CFR: Improvement to new bound with the following program:
method: PartialEvaluation new bound:
O(n)
cfr-program:
Start: eval_render_ht_start
Program_Vars: X₀, X₁, X₂, X₃
Temp_Vars:
Locations: eval_render_ht_LeafBlock_in_v1, eval_render_ht_LeafBlock_in_v2, eval_render_ht_NewDefault_in_v1, eval_render_ht_bb0_in, eval_render_ht_bb1_in, eval_render_ht_bb1_in_v1, eval_render_ht_bb2_in, eval_render_ht_bb3_in_v1, eval_render_ht_start, eval_render_ht_stop
Transitions:
t₄₅: eval_render_ht_LeafBlock_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_NewDefault_in_v1(X₀, X₁, X₂, X₃) :|: 8 ≤ X₁ ∧ X₂ ≤ X₀+X₁ ∧ X₃ ≤ X₀ ∧ X₀+X₁ ≤ X₂ ∧ X₀ ≤ X₃
t₄₄: eval_render_ht_LeafBlock_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) :|: X₁ ≤ 7 ∧ X₂ ≤ X₀+X₁ ∧ X₃ ≤ X₀ ∧ X₀+X₁ ≤ X₂ ∧ X₀ ≤ X₃
t₅₀: eval_render_ht_LeafBlock_in_v2(X₀, X₁, X₂, X₃) → eval_render_ht_NewDefault_in_v1(X₀, X₁, X₂, X₃) :|: 8 ≤ X₁ ∧ 0 ≤ 3+X₁ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₀+X₁ ≤ X₂
t₄₉: eval_render_ht_LeafBlock_in_v2(X₀, X₁, X₂, X₃) → eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) :|: X₁ ≤ 7 ∧ 0 ≤ 3+X₁ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₀+X₁ ≤ X₂
t₄₆: eval_render_ht_NewDefault_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_bb3_in_v1(X₀, X₁, X₂, X₃) :|: 8+X₀ ≤ X₂ ∧ 8 ≤ X₁ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₃ ≤ X₀ ∧ X₀+X₁ ≤ X₂
t₁: eval_render_ht_bb0_in(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in(X₃, X₁, X₂, X₃)
t₄₃: eval_render_ht_bb1_in(X₀, X₁, X₂, X₃) → eval_render_ht_LeafBlock_in_v1(X₀, X₂-X₀, X₂, X₃) :|: X₃ ≤ X₀ ∧ X₀ ≤ X₃
t₄₈: eval_render_ht_bb1_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_LeafBlock_in_v2(X₀, X₂-X₀, X₂, X₃) :|: X₀ ≤ 3+X₂ ∧ 4+X₃ ≤ X₀ ∧ 4+X₀ ≤ X₂ ∧ 8 ≤ X₁ ∧ 8+X₃ ≤ X₂
t₅: eval_render_ht_bb2_in(X₀, X₁, X₂, X₃) → eval_render_ht_stop(X₀, X₁, X₂, X₃) :|: X₂ ≤ 7+X₀ ∧ X₁ ≤ 7 ∧ X₃ ≤ X₀
t₄₇: eval_render_ht_bb3_in_v1(X₀, X₁, X₂, X₃) → eval_render_ht_bb1_in_v1(4+X₀, X₁, X₂, X₃) :|: 1+X₀ ≤ X₂ ∧ 8+X₀ ≤ X₂ ∧ 8 ≤ X₁ ∧ 8+X₃ ≤ X₂ ∧ X₂ ≤ X₀+X₁ ∧ X₃ ≤ X₀ ∧ X₀+X₁ ≤ X₂
t₀: eval_render_ht_start(X₀, X₁, X₂, X₃) → eval_render_ht_bb0_in(X₀, X₁, X₂, X₃)
All Bounds
Timebounds
Overall timebound:4⋅X₂+4⋅X₃+25 {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₄₆: X₂+X₃+7 {O(n)}
t₄₇: X₂+X₃ {O(n)}
t₄₈: X₂+X₃+7 {O(n)}
t₄₉: 1 {O(1)}
t₅₀: X₂+X₃+4 {O(n)}
Costbounds
Overall costbound: 4⋅X₂+4⋅X₃+25 {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₄₆: X₂+X₃+7 {O(n)}
t₄₇: X₂+X₃ {O(n)}
t₄₈: X₂+X₃+7 {O(n)}
t₄₉: 1 {O(1)}
t₅₀: X₂+X₃+4 {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₀: 4⋅X₂+6⋅X₃ {O(n)}
t₅, X₁: X₂+X₃+7 {O(n)}
t₅, X₂: 2⋅X₂ {O(n)}
t₅, X₃: 2⋅X₃ {O(n)}
t₄₃, X₀: X₃ {O(n)}
t₄₃, X₁: X₂+X₃ {O(n)}
t₄₃, X₂: X₂ {O(n)}
t₄₃, X₃: X₃ {O(n)}
t₄₄, X₀: X₃ {O(n)}
t₄₄, X₁: X₂+X₃ {O(n)}
t₄₄, X₂: X₂ {O(n)}
t₄₄, X₃: X₃ {O(n)}
t₄₅, X₀: X₃ {O(n)}
t₄₅, X₁: X₂+X₃ {O(n)}
t₄₅, X₂: X₂ {O(n)}
t₄₅, X₃: X₃ {O(n)}
t₄₆, X₀: 4⋅X₂+5⋅X₃ {O(n)}
t₄₆, X₁: 6⋅X₂+6⋅X₃ {O(n)}
t₄₆, X₂: X₂ {O(n)}
t₄₆, X₃: X₃ {O(n)}
t₄₇, X₀: 4⋅X₂+5⋅X₃ {O(n)}
t₄₇, X₁: 6⋅X₂+6⋅X₃ {O(n)}
t₄₇, X₂: X₂ {O(n)}
t₄₇, X₃: X₃ {O(n)}
t₄₈, X₀: 4⋅X₂+5⋅X₃ {O(n)}
t₄₈, X₁: 5⋅X₂+5⋅X₃ {O(n)}
t₄₈, X₂: X₂ {O(n)}
t₄₈, X₃: X₃ {O(n)}
t₄₉, X₀: 4⋅X₂+5⋅X₃ {O(n)}
t₄₉, X₁: 7 {O(1)}
t₄₉, X₂: X₂ {O(n)}
t₄₉, X₃: X₃ {O(n)}
t₅₀, X₀: 4⋅X₂+5⋅X₃ {O(n)}
t₅₀, X₁: 5⋅X₂+5⋅X₃ {O(n)}
t₅₀, X₂: X₂ {O(n)}
t₅₀, X₃: X₃ {O(n)}