| gstore[nx.last] = groupblock(gndx0, lax0, m), remove-refsize0(gstore0) = gstore0, remove-refsize0(istore1) = istore1, elems nx ∩ ginval2 = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval2, inv(gstore \ ginval2), inv(gstore0), inv(istore2), inv(istore1), inv(groupblock(gndx0, lax0, m)), nx.last ∈ gstore, istore1 ⊑ istore2 ⊦ nx = [], dups(nx), ∃ lax, err. (⌊err⌋ ∨ err = ESUCCESS) ∧ ¬ dups(lax0 + lax) ∧ # lax ≤ # gndx ∧ inv-flashsize(prefixn(# lax, gndx), lax) ∧ (err = ESUCCESS ↔ # lax = # gndx) |
gstore[nx.last] = groupblock(gndx0, lax0, m), remove-refsize0(istore1) = istore1, remove-refsize0(gstore0) = gstore0, elems nx ∩ ginval2 = ∅, dom gstore0 ∪ elems nx = dom gstore ∪ ginval2, inv(groupblock(gndx0, lax0, m)), inv(istore1), inv(istore2), inv(gstore0), inv(gstore \ ginval2), nx.last ∈ gstore, istore1 ⊑ istore2 ⊦ gndx = [], nx = [], dups(nx), ∃ lax, err. (⌊err⌋ ∨ err = ESUCCESS) ∧ ¬ dups(lax0 + lax) ∧ # lax ≤ # gndx ∧ inv-flashsize(prefixn(# lax, gndx), lax) ∧ (err = ESUCCESS ↔ # lax = # gndx)
Used simplifier rules: ⊦ # [] = 0; (s)% ⊦ m ≤ 0 ↔ m = 0; (s)% ⊦ # lax = 0 ↔ lax = []; (s)% ⊦ # [] = 0; (s)% ⊦ prefixn(0, gndx) = []; (s)% ⊦ inv-flashsize([], lax) ↔ lax = []; (s)% ⊦ ¬ ⌊ESUCCESS⌋ ; (s)% ⊦ lax + [] = lax; (s)%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]% ⊦ inv(groupblock(gndx, lax, m0)) → ¬ dups(lax); (s) Used formulas: gndx = []