| remove-refsize0(gstore0) = gstore0, dom remove-refsize0(gstore) ∩ ginval = ∅, elems nx ∩ ginval = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, inv(gstore \ ginval), inv(gstore0), ri-inj(fi), ri-inj(fi0), ¬ dups(nx) ⊦ ⟪index_commit#(maxino, fi, true; ginval0, ginval, gstore, fi0, gstore0, nx, maxino0, ginval1; err)⟫ ( inv(gstore \ ginval) ∧ inv(gstore0) ∧ elems nx ∩ ginval = ∅ ∧ ¬ dups(nx) ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ remove-refsize0(gstore0) = gstore0 ∧ ri-inj(fi0)) |
syn ↔ true, fi = fi1, fi0 = fi2, ginval = ginval2, ginval0 = ginval4, ginval1 = ginval3, gstore = gstore1, gstore0 = gstore2, maxino = maxino1, maxino0 = maxino2, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval4 = ∅, dom remove-refsize0(gstore2) ∩ ginval4 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval4, inv(gstore1), inv(gstore2 \ ginval4), ri-inj(fi1), ri-inj(fi2) ⊦ ⟪if syn ∧ dom remove-refsize0(gstore0) ∩ ginval0 = ∅ then {fail_or_success#(; ; err); if err = ESUCCESS then {gstore0 := remove-refsize0(gstore0); gstore := gstore0; ginval0 := ∅; ginval := ginval1; nx := []; maxino := maxino0; fi := fi0}; ginval1 := ?} else abort⟫ ( inv(gstore0 \ ginval0) ∧ inv(gstore) ∧ elems nx ∩ ginval0 = ∅ ∧ ¬ dups(nx) ∧ dom gstore ∪ elems nx = dom gstore0 ∪ ginval0 ∧ remove-refsize0(gstore) = gstore ∧ ri-inj(fi)), dups(nx)
Used simplifier rules: commit: ⊦ ;