| # gndx = # lax, gndx[pos(@(m1, m2), lax)] = mkgnode(nd0, m, boolvar1, boolvar2), gstore[n] = groupblock(gndx, lax, n0), prefixn(valid-group-nodes(gndx), gndx)[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, valid-group-nodes(gndx) ≤ # lax, n0 ≤ m0 ⊦ lax = [], nd0 = nd1, n ∈ ginval |
⊦ m < n ∧ m < # gndx → prefixn(n, gndx)[m] = gndx[m]
Used simplifier rules: ⊦ mkgnode(nd, m, boolvar, boolvar0) = mkgnode(nd0, m0, boolvar1, boolvar2) ↔ nd = nd0 ∧ m = m0 ∧ (boolvar ↔ boolvar1) ∧ (boolvar0 ↔ boolvar2); (ws)% ⊦ ladr ∈ prefixn(n, lax) → pos(ladr, lax) < n; (ss)% ⊦ m ≤ n → (n ≤ m ↔ m = n); (s)% ⊦ m ≠ n → (m ≤ n ↔ m < n); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic%in-prefixn-pos-smaller0: ⊦ ladr ∈ prefixn(n, lax) ∧ m ≤ pos(ladr, lax) → m ≤ n; (forward) from specification list-prefixn[laddress-list]% ⊦ m < n → ¬ n < m; (s)%# gndx ≤ m ⊦ prefixn(m, gndx) = gndx; (s)%# lax ≤ m ⊦ prefixn(m, lax) = lax; (s)%let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat Used terms: pos(@(m1, m2), lax), gndx, valid-group-nodes(gndx)