| # gndx = # lax, gstore[n] = groupblock(gndx, lax, n0), gndx[pos(@(m1, m2), lax)] = mkgnode(nd0, m, boolvar1, boolvar2), (gndx + mkgnode(nd, m3, boolvar, true) ')[pos(@(m1, m2), lax)] = mkgnode(nd1, m4, boolvar3, boolvar4), pos(@(m1, m2), lax) < valid-group-nodes(gndx), n ∈ gstore, @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), @(m1, m2) ∈ lax, n0 ≤ m0 ⊦ lax = [], nd0 = nd1, n ∈ ginval |
⊦ ¬ n < # gndx → (gndx + gndx0)[n] = gndx0[n - # gndx]
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ m < n ↔ ¬ n ≤ m; (ss)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%transitivity: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification oelem[nat-set]%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic% ⊦ m < n → ¬ n < m; (s)%# lax ≤ m ⊦ prefixn(m, lax) = lax; (s)% ⊦ ladr ∈ lax → ¬ # lax ≤ pos(ladr, lax); (s)% ⊦ n < # gndx → (gndx + gnd ')[n] = gndx[n]; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%⊦ mkgnode(nd, m, boolvar, boolvar0) = mkgnode(nd0, m0, boolvar1, boolvar2) ↔ nd = nd0 ∧ m = m0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2); (ws) Used terms: pos(@(m1, m2), lax), mkgnode(nd, m3, boolvar, true) ', gndx