| # gndx0 = # lax1, # lax = # gndx2, gstore2[adr1.lnum] = groupblock(gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, lax1 + @(adr1.pos, adr1.size) ' + lax, m), inv(groupblock(gndx0 + mkgnode(nd, m0, boolvar, boolvar0) ' + gndx2, lax1 + @(adr1.pos, adr1.size) ' + lax, m)), inv(gstore2 \ ginval), ri-cons(ri, nodes(gstore2 ↓, ginval)), nd.key ∈ ri, adr1.lnum ∈ gstore2, adr1 ∈ ri, adr1 = @(adr1.lnum, adr1.pos, adr1.size) ∨ adr1 ∈ lax.to-adr(adr1.lnum) ⊦ ri[nd.key] = adr1, adr1.lnum ∈ ginval |
Used simplifier rules: lf-inv-append-sizes: ⊦ # gndx1 = # lax1 ∧ inv(groupblock(gndx0 + gndx1, lax0 + lax1, m)) → # gndx0 = # lax0;%a: ⊦ (gndx + gndx0) + gndx1 = gndx + gndx0 + gndx1; from specification list[group-store]%a: ⊦ (lax + lax0) + lax1 = lax + lax0 + lax1; from specification list[laddress-list]%fwd-inv-gblock-rem: ⊦ inv(gstore \ ginval) ∧ n ∈ gstore ∧ ¬ n ∈ ginval ∧ gstore[n] = gblock → inv(gblock); (forward) from specification apersistence-base%adr-in-index-node-key: ⊦ @(n, n0, n1) ∈ ri ∧ # gndx1 = # lax1 ∧ ri-cons(ri, nodes(gstore ↓, ginval)) ∧ gstore[n] = groupblock (gndx0 + gnd ' + gndx1, lax0 + @(n0, n1) ' + lax1, m0) ∧ inv (groupblock (gndx0 + gnd ' + gndx1, lax0 + @(n0, n1) ' + lax1, m0)) → gnd.nd.key ∈ ri ∧ ri[gnd.nd.key] = @(n, n0, n1); (forward) from specification gjournal-abs% ⊦ mkgnode(nd, m, boolvar, boolvar0).nd = nd; (s)% ⊦ (m = adr.lnum ∧ m0 = adr.pos) ∧ m1 = adr.size ↔ adr = @(m, m0, m1); (elim) Used terms: adr1, m1, m2, m3