| syn ↔ true, err0 = ESUCCESS, istore = istore1, istore0 = istore2, remove-refsize0(gstore0) = gstore0, remove-refsize0(istore1) = istore1, elems nx ∩ ginval = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval, inv(gstore \ ginval), inv(gstore0), inv(istore2), inv(istore1), n ∈ gstore, n ∈ gstore0, istore1 ⊑ istore2, pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore, pstate.index? → pstate.lnum ∈ istore2, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪gstore := gstore -- n, ginval := ginval ++ n⟫ ( inv(gstore \ ginval) ∧ elems nx ∩ ginval = ∅ ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore) ∧ (pstate.index? → pstate.lnum ∈ istore2)), dups(nx), n ∈ nx |
Used simplifier rules: ⊦ ¬ ⌊ESUCCESS⌋ ; (s)% ⊦ (gstore -- n) \ ns = (gstore \ ns) -- n; (s)% ⊦ n ∈ gstore → (gstore \ (ns ++ n)) -- n = gstore \ (ns ++ n); (s)% ⊦ inv(gstore \ ns) → inv(gstore \ (ns ++ n)); (s)%int-a: ⊦ (ns ∩ ns0) ∩ ns1 = ns ∩ ns0 ∩ ns1; from specification set-union[nat-set]%int-c: ⊦ ns ∩ ns0 = ns0 ∩ ns; from specification set-union[nat-set]% ⊦ ns ∩ (ns0 ++ n) = ∅ ↔ ns ∩ ns0 = ∅ ∧ ¬ n ∈ ns; (ws)% ⊦ n ∈ elems nx ↔ n ∈ nx; (s)% ⊦ dom(gstore -- n) = dom gstore -- n; (s)% ⊦ (ns ++ n) ∪ ns0 = (ns ∪ ns0) ++ n; (s)% ⊦ (ns ∪ (ns0 -- n)) ++ n = (ns ∪ ns0) ++ n; (s)%una: ⊦ (ns ∪ ns0) ∪ ns1 = ns ∪ ns0 ∪ ns1; from specification set-union[nat-set]%unc: ⊦ ns ∪ ns0 = ns0 ∪ ns; from specification set-union[nat-set]% ⊦ n ∈ gstore -- n0 ↔ n ≠ n0 ∧ n ∈ gstore; (s)% ⊦ ns ++ n = ns ↔ n ∈ ns; (s)% ⊦ n ∈ ns ∪ ns0 ↔ ¬(¬ n ∈ ns ∧ ¬ n ∈ ns0); (ss)% ⊦ n ∈ dom gstore ↔ n ∈ gstore; (s)%ne-01: ⊦ n ∈ ns → ns ≠ ∅; (forward) from specification set-basic[nat-set]%fwd-in-gstore-loghead: ⊦ nx ≠ [] ∧ ginval ∩ elems nx = ∅ ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval → nx.last ∈ gstore; (forward) from specification apersistence-base%fwd-inv-loghead: ⊦ nx ≠ [] ∧ inv(gstore \ ginval) ∧ ginval ∩ elems nx = ∅ ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval → inv(gstore[nx.last]); (forward) from specification apersistence-base% ⊦ nx.last ∈ nx ↔ nx ≠ []; (s)