| # lax = # gndx1 + # gndx, jvalid ↔ false, gstore2[n] = groupblock(gndx1 + gndx, lax, m), ax = ax0 + prefixn(# gndx1, lax).to-adr(n), gndx2 = gndx1, valid-group-nodes(gndx1) = valid-group-nodes(gndx1 + gndx), inv(groupblock(gndx1 + gndx, lax, m)), inv(gstore2 \ ginval), n ∈ gstore2 ⊦ ax = [], gndx1 = [], gndx2 = [], gndx2.last.end, n ∈ ginval, (∃ gndx3. # lax = # gndx2.butlast + # gndx3 ∧ gndx1 + gndx = gndx2.butlast + gndx3 ∧ ax.butlast = ax0 + prefixn(# gndx2.butlast, lax).to-adr(n) ∧ valid-group-nodes(gndx2.butlast) = valid-group-nodes(gndx2.butlast + gndx3) ∧ (jvalid → # gndx2.butlast = valid-group-nodes(gndx2.butlast + gndx3))) ∧ (jvalid ⊃ 0;# gndx2.butlast) < # gndx1 |
# lax = # gndx1 + # gndx, gstore2[n] = groupblock(gndx1 + gndx, lax, m), valid-group-nodes(gndx1) = valid-group-nodes(gndx1 + gndx), inv(gstore2 \ ginval), inv(groupblock(gndx1 + gndx, lax, m)), n ∈ gstore2 ⊦ ax0 + prefixn(# gndx1, lax).to-adr(n) = [], gndx1 = [], gndx1.last.end, n ∈ ginval, ∃ gndx0. # gndx1 + # gndx0 = 1 + # lax ∧ gndx1 + gndx = gndx1.butlast + gndx0 ∧ (ax0 + prefixn(# gndx1, lax).to-adr(n)).butlast = ax0 + prefixn(# gndx1 - 1, lax).to-adr(n) ∧ valid-group-nodes(gndx1.butlast) = valid-group-nodes(gndx1.butlast + gndx0)
Used simplifier rules: ⊦ ¬ n < n; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%n ≤ m ⊦ (m - n) + n0 = n1 ↔ m + n0 = n + n1; (s)% ⊦ # gndx = 0 ↔ gndx = []; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ gndx ≠ [] → # gndx.butlast = # gndx - 1; (s)