| zh[r] = mkznode(r0, zbrar, boolvar, true, m0), remove-refsize0(gstore1) = gstore1, remove-refsize0(istore2) = istore2, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, ((btree(rp, r, adr1, height, dirty, ri, nodes(istore4), as, alladrs, ok) * P))(zh), btree-sub-clean(r, m0, zh), inv(gstore2 \ ginval2), inv(gstore1), inv(istore4), inv(istore2), inv (istore4 [m, (istore4[m].indlist:= (istore4[m].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ')) .ladrlist:= (istore4[m].ladrlist + @(maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ') ]), refsize-cons(istore4, as0 ∪ as), r ∈ zh, m ∈ istore4, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize ≤ LEB_SIZE, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize ≤ n, n ≤ LEB_SIZE, as0 ⊆ dom nodes(istore4), alladrs ⊆ dom nodes(istore4), as ⊆ alladrs, as ⊆ dom nodes(istore4), istore2 ⊑ istore4 [m, (istore4[m].indlist:= (istore4[m].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ')) .ladrlist:= (istore4[m].ladrlist + @(maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ') ], istore2 ⊑ istore4, ¬ dups(nx), ¬ adr1 ∈ as, ¬ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ∈ istore4, ¬ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ∈ istore2, height = 0 → as = ∅ ⊦ ⟪apersistence_get_iblock_refsize# (index(m).lnum, adr0, istore4 [index(m).lnum, istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist:= ( istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist + @ (@(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).pos, @(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).size) ') ], istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, index(m), syn ; ; maxino); istore3 := istore4 [index(m).lnum, istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist:= ( istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist + @ (@(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).pos, @(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).size) ') ]; apersistence_set_iblock_refsize# (index(m).lnum, maxino + @(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).size, adr0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, index(m), syn ; istore3); err := ESUCCESS; if err = ESUCCESS then zh[r].dirty := false⟫ ( refsize-cons(istore3, as0 ∪ (err = ESUCCESS ⊃ as ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);as)) ∧ inv(istore3) ∧ istore2 ⊑ istore3 ∧ m ∈ istore3 ∧ istore4 ⊑ istore3 ∧ r ∈ zh ∧ (err = ESUCCESS → ¬ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ∈ as) ∧ dom nodes(istore3) = dom nodes(istore4) ∪ (err = ESUCCESS ⊃ ∅ ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);∅) ∧ (( btree (rp, r, (err = ESUCCESS ⊃ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);adr1), height, err ≠ ESUCCESS, ri, nodes(istore3), (err = ESUCCESS ⊃ as ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);as), (err = ESUCCESS ⊃ (alladrs -- adr1) ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);alladrs), ok) * P) )(zh) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ¬ zh[r].dirty)) |
zh[r] = mkznode(r0, zbrar, boolvar, true, m0), istore4[m] = indexblock(indx, lax, m1), remove-refsize0(istore2) = istore2, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval2 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval2, ((btree(rp, r, adr1, height, dirty, ri, nodes(istore4), as, alladrs, ok) * P))(zh), btree-sub-clean(r, m0, zh), inv (istore4 [m, (istore4[m].indlist:= (indx + save(mkznode(r0, zbrar, boolvar, true, m0)) ')) .ladrlist:= (lax + @(maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ') ]), inv(istore2), inv(istore4), inv(gstore1), inv(gstore2 \ ginval2), refsize-cons(istore4, as0 ∪ as), m ∈ istore4, r ∈ zh, n ≤ LEB_SIZE, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize ≤ n, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize ≤ LEB_SIZE, as ⊆ dom nodes(istore4), as ⊆ alladrs, alladrs ⊆ dom nodes(istore4), as0 ⊆ dom nodes(istore4), istore2 ⊑ istore4, istore2 ⊑ istore4 [m, (istore4[m].indlist:= (indx + save(mkznode(r0, zbrar, boolvar, true, m0)) ')) .ladrlist:= (lax + @(maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ') ], height = 0 → as = ∅ ⊦ ⟪apersistence_get_iblock_refsize# (index(m).lnum, adr0, istore4 [index(m).lnum, istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist:= ( istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist + @ (@(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).pos, @(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).size) ') ], istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, index(m), syn ; ; maxino); istore3 := istore4 [index(m).lnum, istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist:= ( istore4 [index(m).lnum, istore4[index(m).lnum].indlist:= (istore4[index(m).lnum].indlist + save(mkznode(r0, zbrar, boolvar, true, m0)) ') ] [index(m).lnum ] .ladrlist + @ (@(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).pos, @(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).size) ') ]; apersistence_set_iblock_refsize# (index(m).lnum, maxino + @(index(m).lnum, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize).size, adr0, istore2, ginval2, gstore2, gstore1, nx, maxino0, ginval, index(m), syn ; istore3); err := ESUCCESS; if err = ESUCCESS then zh[r].dirty := false⟫ ( refsize-cons(istore3, as0 ∪ (err = ESUCCESS ⊃ as ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);as)) ∧ inv(istore3) ∧ istore2 ⊑ istore3 ∧ m ∈ istore3 ∧ istore4 ⊑ istore3 ∧ r ∈ zh ∧ (err = ESUCCESS → ¬ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ∈ as) ∧ dom nodes(istore3) = dom nodes(istore4) ∪ (err = ESUCCESS ⊃ ∅ ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);∅) ∧ (( btree (rp, r, (err = ESUCCESS ⊃ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);adr1), height, err ≠ ESUCCESS, ri, nodes(istore3), (err = ESUCCESS ⊃ as ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);as), (err = ESUCCESS ⊃ (alladrs -- adr1) ++ @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize);alladrs), ok) * P) )(zh) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ¬ zh[r].dirty)), dups(nx), adr1 ∈ as, @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ∈ istore4, @(m, maxino1, save(mkznode(r0, zbrar, boolvar, true, m0)).flashsize) ∈ istore2
Used simplifier rules: ⊦ (indx = iblock.indlist ∧ lax = iblock.ladrlist) ∧ m = iblock.ref-size ↔ iblock = indexblock(indx, lax, m); (elim) Used terms: istore4[m], indx, lax, m1