| # x = # lax, st[n] = mkblock(x, lax, m0), inv-flashsize(x, lax), n ∈ st ⊦ st[n, mkblock(x + a ', lax + @(m, m2) ', m1)][@(n, m, m2)] = a, dups(lax), @(m, m2) ∈ lax |
⊦ adr ∈ st → st[adr] = st[adr.lnum].list[pos(@(adr.pos, adr.size), st[adr.lnum].ladrlist)]
Used simplifier rules: ⊦ @(m, m0, m1).lnum = m; (s)% ⊦ st[n, ablock][n] = ablock; (s)% ⊦ mkblock(x, lax, m).list = x; (s)% ⊦ @(m, m0, m1).pos = m0; (s)% ⊦ @(m, m0, m1).size = m1; (s)% ⊦ mkblock(x, lax, m).ladrlist = lax; (s)% ⊦ ¬ ladr ∈ lax → pos(ladr, lax + lax0) = pos(ladr, lax0) + # lax; (s)% ⊦ pos(ladr, ladr ') = 0; (s)% ⊦ n + 0 = n; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ n = # x → (x + a ')[n] = a; (s)%a: ⊦ (x + y) + z = x + y + z; from specification list% ⊦ @(n, n0, n1) ∈ st[n, ablock] ↔ @(n0, n1) ∈ ablock.ladrlist; (s)% ⊦ ladr ∈ lax + lax0 ↔ ladr ∈ lax ∨ ladr ∈ lax0; (s)% ⊦ ladr ∈ ladr0 ' ↔ ladr = ladr0; (s) Used terms: @(n, m, m2), st[n, mkblock(x + a ', lax + @(m, m2) ', m1)]