| boolvar ↔ false, wlar[m0] = wl-entry(m1, free), m = 0, vtblpnum = m2, m1 < n, m0 < # wlar ⊦ ⟪while m < # wlar do {/* (prepost-wl-free-max-below : invariant m ≤ # wlar ∧ (boolvar → vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar, m), n).max) ∧ (¬ boolvar ↔ below(free-ecs(wlar, m), n) = ∅) wfbound # wlar - m) */; if wlar[m].status = free ∧ wlar[m].ec < n ∧ (¬ boolvar ∨ wlar[m].ec > wlar[vtblpnum].ec) then {boolvar := true; vtblpnum := m}; m := m + 1}⟫ (vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar), n).max) |
boolvar0 ↔ false, ¬ boolvar ↔ below(free-ecs(wlar, m), n) = ∅, wlar[m0] = wl-entry(m1, free), m = m3, m4 = 0, vtblpnum0 = m2, m0 < # wlar, m1 < n, m < # wlar, m ≤ # wlar, boolvar → vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar, m), n).max ⊦ ⟪if wlar[m].status = free ∧ wlar[m].ec < n ∧ (¬ boolvar ∨ wlar[m].ec > wlar[vtblpnum].ec) then {boolvar := true; vtblpnum := m}; m := m + 1⟫ ( ( m ≤ # wlar ∧ (boolvar → vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar, m), n).max) ∧ (¬ boolvar ↔ below(free-ecs(wlar, m), n) = ∅)) ∧ # wlar - m < # wlar - m3)
boolvar0 ↔ false, ¬ boolvar ↔ below(free-ecs(wlar, m), n) = ∅, wlar[m0] = wl-entry(m1, free), m4 = 0, vtblpnum0 = m2, m0 < # wlar, m1 < n, m ≤ # wlar, boolvar → vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar, m), n).max ⊦ m < # wlar, vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar), n).max
Used simplifier rules: ⊦ 0 ≤ m; (s)% ⊦ free-ecs(wlar, 0) = ∅; (s)% ⊦ below(∅, m) = ∅; (s) Used formulas: m ≤ # wlar ∧ ( boolvar → vtblpnum < # wlar ∧ wlar[vtblpnum].status = free ∧ wlar[vtblpnum].ec = below(free-ecs(wlar, m), n).max) ∧ (¬ boolvar ↔ below(free-ecs(wlar, m), n) = ∅), # wlar - m = # wlar - m