| err = err0, err = ESUCCESS, ginval = ∅, ginval0 = ∅, gstore = ∅, gstore0 = ∅, istore = ∅, istore0 = (∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ], maxino = maxino4, 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, ⌊err0⌋ ∨ err0 = ESUCCESS, index(n0).index? ∨ index(n0).journal? ⊦ ( err = ESUCCESS → (∃ ri, fi. btree-inv (null, @(index(n0).lnum, maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize), remove-refsize0(istore0), remove-refsize0(istore0), zh, ri, fi)) ∧ inv(remove-refsize0(gstore0) \ ∅) ∧ inv(remove-refsize0(gstore0)) ∧ elems [] ∩ ∅ = ∅ ∧ ¬ dups([]) ∧ dom remove-refsize0(gstore0) ∪ elems [] = dom remove-refsize0(gstore0) ∪ ∅ ∧ remove-refsize0(remove-refsize0(gstore0)) = remove-refsize0(gstore0) ∧ inv(remove-refsize0(istore0)) ∧ inv(remove-refsize0(istore0)) ∧ remove-refsize0(istore0) ⊑ remove-refsize0(istore0) ∧ remove-refsize0(remove-refsize0(istore0)) = remove-refsize0(istore0) ∧ (unbuffered.journal? → [] ≠ [] ∧ unbuffered.lnum = [].last ∧ unbuffered.lnum ∈ remove-refsize0(gstore0)) ∧ (unbuffered.index? → unbuffered.lnum ∈ remove-refsize0(istore0))) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ ( err = ESUCCESS → btree-inv (null, @(index(n0).lnum, maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize), remove-refsize0(istore0), remove-refsize0(istore0), zh, ∅, ∅) ∧ remove-refsize0(gstore0) = ∅ ∧ ∅ = ∅ ∧ maxino4 = maxino4 ∧ [] = [] ∧ ∅ = ∅) |
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 ⊦ ∃ ri, fi. btree-inv (null, @(n0, maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize), (∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ], (∅ )[n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(maxino2, indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ', indexnode(mkbrarray(BRANCH_SIZE), true, 0).flashsize) ], zh, ri, fi)
Used simplifier rules: ⊦ btree-inv (null, @(n, m0, m1), (∅ )[n, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1) ], (∅ )[n, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1) ], zh, ∅, ∅); (s)% ⊦ ¬ unbuffered.index?; (s)% ⊦ ¬ unbuffered.journal?; (s)% ⊦ inv(istore) → istore ⊑ istore; (s)%unc: ⊦ ns ∪ ns0 = ns0 ∪ ns; from specification set-union[nat-set]%una: ⊦ (ns ∪ ns0) ∪ ns1 = ns ∪ ns0 ∪ ns1; from specification set-union[nat-set]% ⊦ ns ∪ ∅ = ns; (s)% ⊦ dom ∅ = ∅; (s)% ⊦ ¬ dups([]); (s)%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]% ⊦ ns ∩ ∅ = ∅; (s)% ⊦ elems [] = ∅; (s)% ⊦ inv(∅); (s)% ⊦ ∅ \ ns = ∅; (s)% ⊦ remove-refsize0(∅) = ∅; (s)% ⊦ ind.flashsize ≠ 0; (s)%⊦ remove-refsize0((∅)[n, indexblock(indx, lax, m0)]) = (m0 = 0 ⊃ ∅;(∅)[n, indexblock(indx, lax, m0)]); (s)% ⊦ index(m).lnum = m; (s)% ⊦ ¬ ⌊ESUCCESS⌋ ; (s)% ⊦ index(m).index?; (s)