| fi = fi0, ginval = ginval0, ginval1 = ginval2, gstore = crash(gstore0, gstore1, ginval0, nx), gstore2 = gstore1, maxino = maxino0, nx0 = nx, syn, inv-journal(nx, gstore0, gstore1, ginval0), ri-inj(fi0), ri-inj(fi1) ⊦ ⟪index_recover#(; maxino1, nx1, ginval3, fi, nx0, maxino, ginval1, ginval, gstore, gstore2; fi2, syn0, err)⟫ (err = ESUCCESS → syn0 ∧ inv-journal(nx0, gstore, gstore2, ginval) ∧ ri-inj(fi2) ∧ ri-inj(fi)) |
gstore = crash(gstore0, gstore1, ginval0, nx), remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval0 = ∅, dom gstore1 ∪ elems nx = dom gstore0 ∪ ginval0, inv(gstore0 \ ginval0), inv(gstore1), ri-inj(fi1), ri-inj(fi0), ¬ dups(nx) ⊦ ⟪index_recover#(; maxino1, nx1, ginval3, fi0, nx, maxino, ginval1, ginval0, gstore, gstore1; fi2, syn0, err)⟫ ( err = ESUCCESS → syn0 ∧ inv(gstore \ ginval0) ∧ inv(gstore1) ∧ elems nx ∩ ginval0 = ∅ ∧ ¬ dups(nx) ∧ dom gstore1 ∪ elems nx = dom gstore ∪ ginval0 ∧ remove-refsize0(gstore1) = gstore1 ∧ ri-inj(fi2) ∧ ri-inj(fi0))
Used simplifier rules: ⊦ inv-journal(nx, gstore, gstore0, ginval) ↔ inv(gstore \ ginval) ∧ inv(gstore0) ∧ elems nx ∩ ginval = ∅ ∧ ¬ dups(nx) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ remove-refsize0(gstore0) = gstore0; (s)