| (∅)[n, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1)][n0] = indexblock(indlist, lax, m), n0 ∈ (∅)[n, indexblock(indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1)] ⊦ m = ((∅ ++ @(n, m0, m1)) | n0).size |
⊦ n ≠ n0 → istore[n0, iblock][n] = istore[n]
Used simplifier rules: m ≠ m0 ⊦ (as ++ @(m0, m1, m2)) | m = as | m; (s)% ⊦ ∅ | n = ∅; (s)% ⊦ ∅.size = 0; (s)%in-neq: ⊦ n ≠ n0 → (n ∈ istore[n0, iblock] ↔ n ∈ istore); from specification store[index-store-ablock-store-nat-store]%In-empty: ⊦ ¬ n ∈ ∅; from specification store[index-store-ablock-store-nat-store]%At-same: ⊦ istore[n, iblock][n] = iblock; from specification store[index-store-ablock-store-nat-store]%⊦ indexblock(indlist, lax, m) = indexblock(indlist0, lax0, m0) ↔ indlist = indlist0 ∧ lax = lax0 ∧ m = m0; (ws)% ⊦ (as ++ @(m0, m1, m2)) | m0 = (as | m0) ++ @(m0, m1, m2); (s)% ⊦ (as ++ adr).size = (adr ∈ as ⊃ as.size;as.size + adr.size); (s)%In-empty: ⊦ ¬ adr ∈ ∅; from specification set-basic[node-store]% ⊦ @(m, m0, m1).size = m1; (s)%add-base: ⊦ n + 0 = n; from specification nat-basic2%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic2%c: ⊦ m + n = n + m; from specification nat-basic2 Used terms: n0, indexblock (indexnode(mkbrarray(BRANCH_SIZE), true, 0) ', @(m0, m1) ', m1), n, ∅