| istore0[adr] = istore[adr], adr = @(m, m0, m1), remove-refsize0(istore0) = istore0, (( r => mkznode(null, zbrar, height0 = 0, false, nused) * bnode(r, zbrar, 0, nused, nused, height0, false, fi, nodes(istore0), as0 -- adr, alladrs0 -- adr) * true) )(zh), ((btree(null, rp, adr, height, dirty, ri, nodes(istore), as, alladrs, ok) * true))(zh0), ((btree(null, null, adr, height0, false, fi, nodes(istore0), as0, alladrs0, ok) * true))(zh0), nused < BRANCH_SIZE, inv(istore), refsize-cons(istore0, as0), refsize-cons(istore, as), unmodified(adr, mkznode(null, zbrar, height0 = 0, false, nused), nodes(istore0)), adr ∈ istore, adr ∈ istore0, adr ∈ alladrs0, adr ∈ as0, as0 ⊆ dom nodes(istore), alladrs ⊆ dom nodes(istore), alladrs0 ⊆ dom nodes(istore), as ⊆ dom nodes(istore), as ⊆ alladrs, as0 ⊆ dom nodes(istore0), as0 ⊆ alladrs0, nodes(istore0) ⊆ nodes(remove-refsize0(crash(istore, istore0))), istore0 ⊑ istore ⊦ # alladrs0 = 0, # as0 = 0, alladrs0 = ∅, as0 = ∅, adr ∈ remove-refsize0(crash(istore, istore0)), m ∈ istore0 ∧ @(m0, m1) ∈ crash(istore, istore0)[m].ladrlist |
istore0[@(m, m0, m1)] = istore[@(m, m0, m1)], remove-refsize0(istore0) = istore0, (( r => mkznode(null, zbrar, height0 = 0, false, nused) * bnode(r, zbrar, 0, nused, nused, height0, false, fi, nodes(istore0), as0 -- @(m, m0, m1), alladrs0 -- @(m, m0, m1)) * true) )(zh), ((btree(null, rp, @(m, m0, m1), height, dirty, ri, nodes(istore), as, alladrs, ok) * true))(zh0), ((btree(null, null, @(m, m0, m1), height0, false, fi, nodes(istore0), as0, alladrs0, ok) * true))(zh0), nused < BRANCH_SIZE, inv(istore), refsize-cons(istore0, as0), refsize-cons(istore, as), unmodified(@(m, m0, m1), mkznode(null, zbrar, height0 = 0, false, nused), nodes(istore0)), @(m, m0, m1) ∈ alladrs0, @(m, m0, m1) ∈ as0, @(m, m0, m1) ∈ istore, @(m, m0, m1) ∈ istore0, m ∈ istore0, m ∈ istore, as0 ⊆ dom nodes(istore), alladrs ⊆ dom nodes(istore), alladrs0 ⊆ dom nodes(istore), as ⊆ dom nodes(istore), as ⊆ alladrs, as0 ⊆ dom nodes(istore0), as0 ⊆ alladrs0, nodes(istore0) ⊆ nodes(remove-refsize0(crash(istore, istore0))), istore0 ⊑ istore ⊦ # alladrs0 = 0, # as0 = 0, alladrs0 = ∅, as0 = ∅, @(m, m0, m1) ∈ remove-refsize0(crash(istore, istore0)), @(m0, m1) ∈ crash(istore, istore0)[m].ladrlist
Used simplifier rules: prefix-fwd-in: ⊦ istore ⊑ istore0 ∧ n ∈ istore → n ∈ istore0; (forward) from specification ablock-store-inv[index-store]% ⊦ ¬ n ∈ istore → ¬ @(n, n0, n1) ∈ istore; (s)% ⊦ adr ∈ nodes(istore) ↔ adr ∈ istore; (s)%Dom: ⊦ adr ∈ dom iast ↔ adr ∈ iast; from specification store+set[index-store-address-store]%sub-in: ⊦ adr ∈ as ∧ as ⊆ as0 → adr ∈ as0; (forward) from specification set-basic[node-store]%prefix-in: ⊦ adr ∈ istore ∧ istore ⊑ istore0 → adr ∈ istore0; (forward) from specification ablock-store-inv[index-store]%prefix-at: ⊦ adr ∈ istore ∧ istore ⊑ istore0 → istore[adr] = istore0[adr]; (forward) from specification ablock-store-inv[index-store]