| istore0[n0] = indexblock(indx, lax, m), istore[maxino2, istore[maxino2].ref-size:= n][n0] = indexblock(indx0, lax0, m0), istore[n0] = indexblock(indx1, lax1, m1), remove-refsize0(istore0) = istore0, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, inv(istore0), inv(istore), inv(gstore1), inv(gstore2 \ ginval2), inv(istore[maxino2, istore[maxino2].ref-size:= n]), maxino2 ∈ istore, dom istore0 ⊆ dom istore, n0 ∈ istore0 ∧ n0 ∈ istore → indx ⊑ indx1 ∧ lax ⊑ lax1 ∧ # indx = # lax ∧ # indx1 = # lax1, pstate = unbuffered → syn, pstate.index? → pstate.lnum ∈ istore, pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2 ⊦ dups(nx), (pstate.index? → pstate.lnum ∈ istore[maxino2, istore[maxino2].ref-size:= n]) ∧ (n0 ∈ istore0 ∧ n0 ∈ istore[maxino2, istore[maxino2].ref-size:= n] → indx ⊑ indx0 ∧ lax ⊑ lax0 ∧ # indx = # lax ∧ # indx0 = # lax0) |
⊦ n ≠ n0 → istore[n0, iblock][n] = istore[n]
Used simplifier rules: ⊦ n ≠ n0 → (n ∈ istore[n0, iblock] ↔ n ∈ istore); (s)%⊦ indexblock(indx, lax, m) = indexblock(indx0, lax0, m0) ↔ indx = indx0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ n ∈ istore[n0, iblock] ↔ n = n0 ∨ n ∈ istore; (ws)% ⊦ ¬ unbuffered.index?; (s)% ⊦ istore[n, iblock][n] = iblock; (s)% ⊦ n ∈ istore[n, iblock]; (s)%fwd-inv-iblock: ⊦ inv(istore) ∧ n ∈ istore ∧ istore[n] = iblock → inv(iblock); (forward) from specification apersistence-base% ⊦ indexblock(indx, lax, m).ref-size:= m0 = indexblock(indx, lax, m0); (s) Used terms: n0, istore[maxino2].ref-size:= n, maxino2, istore