| pstate = journal(m), remove-refsize0(istore1) = istore1, remove-refsize0(gstore2) = gstore2, elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, pstate.journal?, btree-inv(rp, adr, istore2, istore1, zh, fi, fi0), inv(istore1), inv(istore2), inv(gstore2), inv(gstore0 \ ginval0), ri-inj(fi0), ri-inj(fi), n ≤ LEB_SIZE, istore1 ⊑ istore2, pstate.index? → m ∈ istore2, pstate.journal? → nx0 ≠ [] ∧ m = nx0.last ∧ m ∈ gstore0 ⊦ ⟨index_get_block_free_size#(fi, fi0, ginval0, gstore0, gstore2, nx0, maxino0, ginval2, syn0; ; n1)⟩ (n = n1), pstate = unbuffered, dups(nx0) |
remove-refsize0(istore1) = istore1, remove-refsize0(gstore2) = gstore2, elems nx0 ∩ ginval0 = ∅, dom gstore2 ∪ elems nx0 = dom gstore0 ∪ ginval0, nx0 ≠ [], btree-inv(rp, adr, istore2, istore1, zh, fi, fi0), inv(gstore0[nx0.last]), inv(istore1), inv(istore2), inv(gstore2), inv(gstore0 \ ginval0), ri-inj(fi0), ri-inj(fi), nx0.last ∈ gstore0, n ≤ LEB_SIZE, istore1 ⊑ istore2, ¬ dups(nx0) ⊦ ⟨index_get_block_free_size#(fi, fi0, ginval0, gstore0, gstore2, nx0, maxino0, ginval2, syn0; ; n1)⟩ (n = n1)
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)