| pstate = journal(m), remove-refsize0(gstore2) = gstore2, remove-refsize0(istore1) = istore1, elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, pstate.journal?, btree-inv(rp, adr, istore2, istore1, zh, fi, fi0), inv(gstore0 \ ginval0), inv(gstore2), inv(istore2), inv(istore1), ri-inj(fi), ri-inj(fi0), istore1 ⊑ istore2, pstate.journal? → nx0 ≠ [] ∧ m = nx0.last ∧ m ∈ gstore0, pstate.index? → m ∈ istore2 ⊦ pstate = unbuffered, dups(nx0), ∃ n. n ≤ LEB_SIZE |
remove-refsize0(gstore2) = gstore2, remove-refsize0(istore1) = istore1, elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, btree-inv(rp, adr, istore2, istore1, zh, fi, fi0), inv(gstore0[nx0.last]), inv(gstore0 \ ginval0), inv(gstore2), inv(istore2), inv(istore1), ri-inj(fi), ri-inj(fi0), nx0.last ∈ gstore0, istore1 ⊑ istore2 ⊦ nx0 = [], dups(nx0), ∃ n. n ≤ LEB_SIZE
Used simplifier rules: 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%fwd-in-gstore-loghead: ⊦ nx ≠ [] ∧ ginval ∩ elems nx = ∅ ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval → nx.last ∈ gstore; (forward) from specification apersistence-base%unc: ⊦ ns ∪ ns0 = ns0 ∪ ns; from specification set-union[nat-set]%una: ⊦ (ns ∪ ns0) ∪ ns1 = ns ∪ ns0 ∪ ns1; from specification set-union[nat-set]%int-c: ⊦ ns ∩ ns0 = ns0 ∩ ns; from specification set-union[nat-set]%int-a: ⊦ (ns ∩ ns0) ∩ ns1 = ns ∩ ns0 ∩ ns1; from specification set-union[nat-set]% ⊦ ¬ journal(m).index?; (s)% ⊦ journal(m).journal?; (s)% ⊦ unbuffered ≠ journal(m); (s)