| # lax = # gndx1, lax.to-adr(lnum) = ax2, jvalid0 ↔ boolvar0, gstore2[lnum] = groupblock(gndx1, lax, m), ax = ax1, err = err0, err = ESUCCESS, err1 = ESUCCESS, fi0 = ri, gstore = gstore1, gstore0 = gstore2, jro = ginval, ndx0 = [], nx = nx0, p_os = ns, pmaxino = maxino, inv(gstore2 \ ginval), inv(groupblock(gndx1, lax, m)), ri-cons(ri, nodes(gstore2 ↓, ginval)), lnum ∈ gstore2, err = ESUCCESS → (∃ ax0, gndx0. ax2 = ax0 + ax ∧ gndx1 = gndx0 + gndx ∧ # ax2 = # gndx1 ∧ # ax = # gndx ∧ ndx = nodes(gstore0 ↓, jro)[referenced-adrs(ax0, fi0)]), err = ESUCCESS ∨ ⌊err⌋ ⊦ ax = [], lnum ∈ ginval, gndx ≠ [] ∧ ax ≠ [] |
Used simplifier rules: ⊦ # ax = 0 ↔ ax = []; (s)% ⊦ # [] = 0; (s)%fwd-inv-gblock-rem: ⊦ inv(gstore \ ginval) ∧ n ∈ gstore ∧ ¬ n ∈ ginval ∧ gstore[n] = gblock → inv(gblock); (forward) from specification apersistence-base%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]% ⊦ #(gndx + gndx0) = # gndx + # gndx0; (s)% ⊦ # lax.to-adr(n) = # lax; (s)