| syn ↔ true, adr = adr1, adr0 = @(index(n0).lnum, maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize), ginval = ∅, ginval0 = ∅, ginval1 = ns, gstore = ∅, gstore0 = ∅, istore = istore1, istore0 = istore2, istore1 = ∅, istore2 = (∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ], maxino = maxino1, maxino0 = maxino4, maxino1 = maxino4, ns = ∅, nx = [], inv ((∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ]), inv((∅)[n0, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', 0)]), inv((∅)[n0, indexblock([], [], 0)]), indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize ≤ LEB_SIZE, index(n0).index? ∨ index(n0).journal? ⊦ ⟪if syn ∧ dom remove-refsize0(gstore0) ∩ ginval0 = ∅ then {fail_or_success#(; ; err); if err = ESUCCESS then {istore0 := remove-refsize0(istore0); istore := istore0; gstore0 := remove-refsize0(gstore0); gstore := gstore0; ginval0 := ∅; adr := adr0; ginval := ginval1; nx := []; maxino := maxino0; pstate := unbuffered} else pstate := readonly; ginval1 := ?} else abort⟫ ( ( err = ESUCCESS → (∃ ri, fi. btree-inv(null, adr, istore0, istore, zh, ri, fi)) ∧ inv(gstore0 \ ginval0) ∧ inv(gstore) ∧ elems nx ∩ ginval0 = ∅ ∧ ¬ dups(nx) ∧ dom gstore ∪ elems nx = dom gstore0 ∪ ginval0 ∧ remove-refsize0(gstore) = gstore ∧ inv(istore0) ∧ inv(istore) ∧ istore ⊑ istore0 ∧ remove-refsize0(istore) = istore ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore0) ∧ (pstate.index? → pstate.lnum ∈ istore0)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → btree-inv(null, adr, istore0, istore, zh, ∅, ∅) ∧ gstore0 = ∅ ∧ ginval0 = ∅ ∧ maxino = maxino4 ∧ nx = [] ∧ ginval = ∅)) |
syn ↔ true, adr = adr1, adr0 = @(index(n0).lnum, maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize), ginval = ∅, ginval0 = ∅, ginval1 = ns, gstore = ∅, gstore0 = ∅, istore = istore1, istore0 = istore2, istore1 = ∅, istore2 = (∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ], maxino = maxino1, maxino0 = maxino4, maxino1 = maxino4, ns = ∅, nx = [], inv((∅)[n0, indexblock([], [], 0)]), inv((∅)[n0, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', 0)]), inv ((∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ]), indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize ≤ LEB_SIZE, index(n0).index? ∨ index(n0).journal? ⊦ ⟪fail_or_success#(; ; err); if err = ESUCCESS then {istore0 := remove-refsize0(istore0); istore := istore0; gstore0 := remove-refsize0(gstore0); gstore := gstore0; ginval0 := ∅; adr := adr0; ginval := ginval1; nx := []; maxino := maxino0; pstate := unbuffered} else pstate := readonly; ginval1 := ?⟫ ( ( err = ESUCCESS → (∃ ri, fi. btree-inv(null, adr, istore0, istore, zh, ri, fi)) ∧ inv(gstore0 \ ginval0) ∧ inv(gstore) ∧ elems nx ∩ ginval0 = ∅ ∧ ¬ dups(nx) ∧ dom gstore ∪ elems nx = dom gstore0 ∪ ginval0 ∧ remove-refsize0(gstore) = gstore ∧ inv(istore0) ∧ inv(istore) ∧ istore ⊑ istore0 ∧ remove-refsize0(istore) = istore ∧ (pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore0) ∧ (pstate.index? → pstate.lnum ∈ istore0)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → btree-inv(null, adr, istore0, istore, zh, ∅, ∅) ∧ gstore0 = ∅ ∧ ginval0 = ∅ ∧ maxino = maxino4 ∧ nx = [] ∧ ginval = ∅))
Used simplifier rules: ⊦ remove-refsize0(∅) = ∅; (s)% ⊦ dom ∅ = ∅; (s)% ⊦ ns ∩ ∅ = ∅; (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]