| gjournal_gc_update_index#(JVALID, PFI, PINVAL, PSTORE0, PNL, PMAXINO, P_OS, ISYNCED; ADRLIST, NDLIST, JMAXINO, PRI, PSTORE) {if NDLIST.keys.toSet ⊆ dom PRI ∧ # ADRLIST = # NDLIST ∧ key-cons(NDLIST) ∧ ADRLIST.toSet ∩ range PRI = ∅ ∧ ¬ dups(ADRLIST) ∧ nodes-cons(ADRLIST, NDLIST, PSTORE, PINVAL) then while ADRLIST ≠ [] do {/* (inv-gc-update-index : invariant # ADRLIST` = # NDLIST` ∧ (∃ ax0, ndx0. # ax0 = # ndx0 ∧ ADRLIST` = ax0 + ADRLIST ∧ NDLIST` = ndx0 + NDLIST ∧ PRI = (PRI`)[ndx0.keys, ax0]) ∧ dom PRI = dom PRI` ∧ inv-journal(PNL, PSTORE, PSTORE0, PINVAL) ∧ JMAXINO` ≤ JMAXINO ∧ PRI.inos < JMAXINO ∧ refsize-cons(PSTORE, range PRI) ∧ ri-inj(PRI) ∧ PRI.lebs ⊆ dom PSTORE ∧ dom PSTORE = dom PSTORE` ∧ nodes-cons(ADRLIST, NDLIST, PSTORE, PINVAL) ∧ nodes(PSTORE ↓, PINVAL) = nodes(PSTORE` ↓, PINVAL`) ∧ abs-log(PNL, PSTORE ↓) = abs-log(PNL`, PSTORE` ↓) ∧ (JVALID ∧ PNL ≠ [] → valid-journal-head(PNL, PSTORE, PINVAL)) wfbound # ADRLIST) */; gjournal_index_store#(NDLIST.head.key, ADRLIST.head, PFI, PINVAL, PSTORE0, PNL, PMAXINO, P_OS, ISYNCED; JMAXINO, PRI, PSTORE); ADRLIST := ADRLIST.tail; NDLIST := NDLIST.tail} else abort } |