| jvalid ↔ true, gndx0 = [], jmaxino0 = jmaxino1, jmaxino2 = 0, ndx2 = ndx, ∃ ndx. ( ndx2 = ndx + ndx0 ∧ (ndx0 = [] → transaction(ndx2, gndx)) ∧ (ndx0 ≠ [] → transaction-prefix(ndx2, gndx) ∧ # gndx = # ndx) ∧ jmaxino = gndx.flashsize ∧ (jvalid0 ↔ ndx = [])) ∧ ndx0 = ndx1 ⊦ ⟪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}⟫ ∃ ndx. ( ndx2 = ndx + ndx0 ∧ (ndx0 = [] → transaction(ndx2, gndx)) ∧ (ndx0 ≠ [] → transaction-prefix(ndx2, gndx) ∧ # gndx = # ndx) ∧ jmaxino = gndx.flashsize ∧ (jvalid0 ↔ ndx = [])) ∧ # ndx0 < # ndx1, ndx0 = [] |
jvalid ↔ # ndx0 = 1, jvalid1 ↔ true, gndx0 = [], jmaxino0 = jmaxino1, jmaxino2 = 0, ndx2 = ndx, ∃ ndx. ( ndx2 = ndx + ndx0 ∧ (ndx0 = [] → transaction(ndx2, gndx)) ∧ (ndx0 ≠ [] → transaction-prefix(ndx2, gndx) ∧ # gndx = # ndx) ∧ jmaxino = gndx.flashsize ∧ (jvalid0 ↔ ndx = [])) ∧ ndx0 = ndx1 ⊦ ⟪let gnd = mkgnode(ndx0.head, jmaxino0 + # gndx, jvalid0, jvalid) in {gndx := gndx + gnd; jmaxino := jmaxino + gnd.flashsize; ndx0 := ndx0.tail; jvalid0 := false}⟫ ∃ ndx. ( ndx2 = ndx + ndx0 ∧ (ndx0 = [] → transaction(ndx2, gndx)) ∧ (ndx0 ≠ [] → transaction-prefix(ndx2, gndx) ∧ # gndx = # ndx) ∧ jmaxino = gndx.flashsize ∧ (jvalid0 ↔ ndx = [])) ∧ # ndx0 < # ndx1, ndx0 = []