| # lpt = # avol1, # avol0 = # avol1, dom remove-refsize0(gstore) ∩ ginval = ∅, ∀ n. n < # avol1 ∧ (lpt[n].ref-size ≠ 0 ∨ lpt[n].flags = LP_FREE) → avol0[n] = avol1[n], ∀ n. (n < # avol1 ∧ lpt[n].flags = LP_GROUP_NODES ↔ n ∈ gstore) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], gstore[n], lpt[n])) ∧ (n ∈ gstore → lpt[n].ref-size = gstore[n].ref-size), ¬ ( n < # avol1 ∧ lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n].flags = LP_GROUP_NODES ↔ n ∈ remove-refsize0(gstore)) ∨ ¬ ( n ∈ remove-refsize0(gstore) → abs-leb(avol1[n], remove-refsize0(gstore)[n], lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n])) ∨ ¬ ( n ∈ remove-refsize0(gstore) → lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n].ref-size = remove-refsize0(gstore)[n].ref-size) ⊦ |
# avol0 = # avol1, # lpt = # avol1, remove-refsize0(gstore)[n] = groupblock(gndx, lax, m), dom remove-refsize0(gstore) ∩ ginval = ∅, ∀ n. (n < # avol1 ∧ lpt[n].flags = LP_GROUP_NODES ↔ n ∈ gstore) ∧ (n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol0[n], gstore[n], lpt[n])) ∧ (n ∈ gstore → lpt[n].ref-size = gstore[n].ref-size), ∀ n. n < # avol1 ∧ (lpt[n].ref-size ≠ 0 ∨ lpt[n].flags = LP_FREE) → avol0[n] = avol1[n], ¬ ( n < # avol1 ∧ lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n].flags = LP_GROUP_NODES ↔ n ∈ remove-refsize0(gstore)) ∨ ¬ ( n ∈ remove-refsize0(gstore) → abs-leb(avol1[n], remove-refsize0(gstore)[n], lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n])) ∨ ¬(n ∈ remove-refsize0(gstore) → lpt.map(λ lp. (lp.ref-size = 0 ∧ lp.flags ≠ LP_FREE ⊃ mklp(0, 0, LP_FREE, lp.gcheapidx);lp))[n].ref-size = m) ⊦
Used simplifier rules: ⊦ (gndx = gblock.gndlist ∧ lax = gblock.ladrlist) ∧ m = gblock.ref-size ↔ gblock = groupblock(gndx, lax, m); (elim) Used terms: remove-refsize0(gstore)[n], gndx, lax, m