| # gndx1 = # lax1, # gndx = # lax, gstore[n] = groupblock(gndx, lax, m0), prefixn(valid-group-nodes(gndx), gndx)[pos(@(m1, m2), lax)] = mkgnode(nd, m5, boolvar, boolvar0), (gndx + gndx1)[pos(@(m1, m2), lax)] = mkgnode(nd0, m, boolvar1, boolvar2), @(m1, m2) ∈ lax, @(m1, m2) ∈ prefixn(valid-group-nodes(gndx), lax), n ∈ gstore ⊦ nd = nd0, n ∈ ginval |
⊦ m < n ∧ m < # gndx → prefixn(n, gndx)[m] = gndx[m]
Used simplifier rules: valid-group-nodes-ls: ⊦ n < valid-group-nodes(gndx) → n < # gndx;% ⊦ n < # gndx → (gndx + gndx0)[n] = gndx[n]; (s)%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%⊦ 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)% ⊦ ¬ n < # gndx → (gndx + gndx0)[n] = gndx0[n - # gndx]; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)%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; (ss)% ⊦ m ≤ n → (n < m ↔ false); (s)%# gndx ≤ m ⊦ prefixn(m, gndx) = gndx; (s)% ⊦ ladr ∈ lax → ¬ # lax ≤ pos(ladr, lax); (s) Used terms: pos(@(m1, m2), lax), gndx, valid-group-nodes(gndx)