| # ax = # ndx, gstore[@(m3, m4, m5)] = mkgnode(nd1, m6, boolvar1, boolvar2), ax[n] = @(m3, m4, m5), gstore[@(m, m0, m1)] = mkgnode(nd0, m2, boolvar, boolvar0), ¬ # ndx < 0 → (@(m, m0, m1) ' + ax)[0] ∈ gstore ∧ ¬ (@(m, m0, m1) ' + ax)[0].lnum ∈ ginval ∧ gstore[(@(m, m0, m1) ' + ax)[0]].nd = (nd ' + ndx)[0], ∀ 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 < # ndx → @(m3, m4, m5) ∈ gstore ∧ ¬ m3 ∈ ginval ∧ nd1 = ndx[n]) |
# ax = # ndx, gstore[@(m, m0, m1)] = mkgnode(nd0, m2, boolvar, boolvar0), ax[n] = @(m3, m4, m5), gstore[@(m3, m4, m5)] = mkgnode(nd1, m6, boolvar1, boolvar2), n < # ndx, @(m, m0, m1) ∈ gstore, ∀ n0. ¬ # ndx < n0 → (@(m, m0, m1) ' + ax)[n0] ∈ gstore ∧ ¬ (@(m, m0, m1) ' + ax)[n0].lnum ∈ ginval ∧ gstore[(@(m, m0, m1) ' + ax)[n0]].nd = (nd0 ' + ndx)[n0] ⊦ ndx = [], m ∈ ginval, @(m3, m4, m5) ∈ gstore ∧ ¬ m3 ∈ ginval ∧ nd1 = ndx[n]
Used simplifier rules: ⊦ # ndx = 0 ↔ ndx = []; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ mkgnode(nd, m, boolvar, boolvar0).nd = nd; (s)%a: ⊦ (ndx + ndx0) + ndx1 = ndx + ndx0 + ndx1; from specification list[node-list]% ⊦ (nd ' + ndx)[0] = nd; (s)% ⊦ @(m, m0, m1).lnum = m; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ (adr ' + ax)[0] = adr; (s)% ⊦ ¬ m < 0; (s)