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