| jmaxino = n, ndx = [], ndx0 = ndx3, ndx1 = ndx3, ndx4 = ndx2 ⊦ ⟪while ndx0 ≠ [] ∧ ndx0.head.flashsize ≤ jmaxino do {/* (prepost-split-nodes: invariant ndx0` = ndx + ndx0 ∧ jmaxino` = ndx.flashsize + jmaxino wfbound # ndx0) */; let nd = ndx0.head in {ndx := ndx + nd; ndx0 := ndx0.tail; jmaxino := jmaxino - nd.flashsize}}⟫ (ndx1 = ndx + ndx0 ∧ ndx.flashsize ≤ n ∧ (ndx0 = [] ∨ ndx.flashsize + ndx0.head.flashsize > n)) |
jmaxino0 = n, jmaxino0 = ndx.flashsize + jmaxino, ndx0 = ndx5, ndx1 = ndx3, ndx4 = ndx2, ndx6 = [], ndx7 = ndx3, ndx7 = ndx + ndx0, ndx0.head.flashsize ≤ jmaxino, ndx0 ≠ [] → ndx0 ≠ [] ⊦ ⟪let nd = ndx0.head in {ndx := ndx + nd; ndx0 := ndx0.tail; jmaxino := jmaxino - nd.flashsize}⟫ (((ndx0 ≠ [] → ndx0 ≠ []) ∧ ndx7 = ndx + ndx0 ∧ jmaxino0 = ndx.flashsize + jmaxino) ∧ # ndx0 < # ndx5), ndx0 = []
Used simplifier rules: ⊦ m ≤ m + n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic% ⊦ m > n ↔ n < m; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ [] + ndx = ndx; (s)%a: ⊦ (ndx + ndx0) + ndx1 = ndx + ndx0 + ndx1; from specification list[node-list]% ⊦ [].flashsize = 0; (s)% ⊦ n + 0 = n; (s) Used formulas: (ndx0 ≠ [] → ndx0 ≠ []) ∧ ndx0` = ndx + ndx0 ∧ jmaxino` = ndx.flashsize + jmaxino, # ndx0 = # ndx0