| # ax = # ndx, ax[m7] = @(m3, m4, m5), gstore[@(m, m0, m1)] = mkgnode(nd, m2, boolvar, boolvar0), gstore[@(m3, m4, m5)] = mkgnode(nd0, m6, boolvar1, boolvar2), n = m7 + 1, @(m, m0, m1) ∈ gstore, n ≤ # ndx, ∀ n. n < # ndx → ax[n] ∈ gstore ∧ ¬ ax[n].lnum ∈ ginval ∧ gstore[ax[n]].nd = ndx[n] ⊦ n = 0, m ∈ ginval, @(m3, m4, m5) ∈ gstore ∧ ¬ m3 ∈ ginval ∧ nd0 = (nd ' + ndx)[n] |
# ax = # ndx, ax[m7] = @(m3, m4, m5), gstore[@(m, m0, m1)] = mkgnode(nd, m2, boolvar, boolvar0), gstore[@(m3, m4, m5)] = mkgnode(nd0, m6, boolvar1, boolvar2), m7 < # ndx, @(m, m0, m1) ∈ gstore, ∀ n. n < # ndx → ax[n] ∈ gstore ∧ ¬ ax[n].lnum ∈ ginval ∧ gstore[ax[n]].nd = ndx[n] ⊦ ndx = [], m ∈ ginval, @(m3, m4, m5) ∈ gstore ∧ ¬ m3 ∈ ginval ∧ nd0 = ndx[m7]
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%a: ⊦ (ndx + ndx0) + ndx1 = ndx + ndx0 + ndx1; from specification list[node-list]% ⊦ (nd ' + ndx)[n + 1] = ndx[n]; (s)% ⊦ m + 1 ≤ n ↔ m < n; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m + 1 ≠ 0; (s)