| gstore[@(m, m0, m1)] = mkgnode(nd0, m2, boolvar, boolvar0) ⊦ #(@(m, m0, m1) ' + ax) = #(nd ' + ndx) ∧ (∀ n. n < #(@(m, m0, m1) ' + ax) → (@(m, m0, m1) ' + ax)[n] ∈ gstore ∧ ¬ (@(m, m0, m1) ' + ax)[n].lnum ∈ ginval ∧ gstore[(@(m, m0, m1) ' + ax)[n]].nd = (nd ' + ndx)[n]) ↔ @(m, m0, m1) ∈ gstore ∧ ¬ m ∈ ginval ∧ nd0 = nd ∧ # ax = # ndx ∧ (∀ n. n < # ax → ax[n] ∈ gstore ∧ ¬ ax[n].lnum ∈ ginval ∧ gstore[ax[n]].nd = ndx[n]) |
# ax = # ndx, gstore[@(m, m0, m1)] = mkgnode(nd0, m2, boolvar, boolvar0) ⊦ (∀ n. ¬ # ndx < n → (@(m, m0, m1) ' + ax)[n] ∈ gstore ∧ ¬ (@(m, m0, m1) ' + ax)[n].lnum ∈ ginval ∧ gstore[(@(m, m0, m1) ' + ax)[n]].nd = (nd ' + ndx)[n]) ↔ @(m, m0, m1) ∈ gstore ∧ ¬ m ∈ ginval ∧ nd0 = nd ∧ (∀ n. n < # ndx → ax[n] ∈ gstore ∧ ¬ ax[n].lnum ∈ ginval ∧ gstore[ax[n]].nd = ndx[n])
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + n = m + n0 ↔ n = n0; (s)%a: ⊦ (ndx + ndx0) + ndx1 = ndx + ndx0 + ndx1; from specification list[node-list]% ⊦ #(nd ' + ndx) = (# ndx)+1; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ m +1 = m + 1; (s)% ⊦ #(adr ' + ax) = (# ax)+1; (s)