| jmaxino0 = jmaxino, ndx0 = ndx ⊦ ⟪jmaxino := 0; gndx := []; let jvalid0 = true in while ndx0 ≠ [] do {/* (inv-transaction : invariant ∃ ndx. ndx0` = ndx + ndx0 ∧ (ndx0 = [] → transaction(ndx0`, gndx)) ∧ (ndx0 ≠ [] → transaction-prefix(ndx0`, gndx) ∧ # gndx = # ndx) ∧ jmaxino = gndx.flashsize ∧ (jvalid0 ↔ ndx = []) wfbound # ndx0) */; let jvalid = # ndx0 = 1 in let gnd = mkgnode(ndx0.head, jmaxino0 + # gndx, jvalid0, jvalid) in {gndx := gndx + gnd; jmaxino := jmaxino + gnd.flashsize; ndx0 := ndx0.tail; jvalid0 := false}}⟫ (transaction(ndx, gndx) ∧ jmaxino = gndx.flashsize) |
jmaxino0 = jmaxino, ndx0 = ndx ⊦ ⟪gndx := []; let jvalid0 = true in {jmaxino := 0; while ndx0 ≠ [] do {/* (inv-transaction : invariant ∃ ndx. ndx0` = ndx + ndx0 ∧ (ndx0 = [] → transaction(ndx0`, gndx)) ∧ (ndx0 ≠ [] → transaction-prefix(ndx0`, gndx) ∧ # gndx = # ndx) ∧ jmaxino = gndx.flashsize ∧ (jvalid0 ↔ ndx = []) wfbound # ndx0) */; let jvalid = # ndx0 = 1 in let gnd = mkgnode(ndx0.head, jmaxino0 + # gndx, jvalid0, jvalid) in {gndx := gndx + gnd; jmaxino := jmaxino + gnd.flashsize; ndx0 := ndx0.tail; jvalid0 := false}}}⟫ (transaction(ndx, gndx) ∧ jmaxino = gndx.flashsize)