| # lpt = # avol0, lpt[n] = mklp(m0, m1, lpf, m2), n < # lpt, abs-gstore(avol0, lpt, gstore, ginval), id○(avol0, avol1, n) ⊦ lpf = LP_GROUP_NODES, abs-gstore(avol1, lpt, gstore, ginval) |
# lpt = # avol1, # avol0 = # avol1, lpt[n] = mklp(m0, m1, lpf, m2), n < # avol1, id○(avol0, 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) ⊦ lpf = LP_GROUP_NODES, (n0 < # avol1 ∧ lpt[n0].flags = LP_GROUP_NODES ↔ n0 ∈ gstore) ∧ (n0 ∈ gstore ∧ ¬ n0 ∈ ginval → abs-leb(avol1[n0], gstore[n0], lpt[n0])) ∧ (n0 ∈ gstore → lpt[n0].ref-size = gstore[n0].ref-size)
Used simplifier rules: abs-gstore-def: ⊦ abs-gstore(avol, lpt, gstore, ginval) ↔ (∀ n. (n < # lpt ∧ lpt[n].flags = LP_GROUP_NODES ↔ n ∈ gstore) ∧ ( n ∈ gstore ∧ ¬ n ∈ ginval → abs-leb(avol[n], gstore[n], lpt[n])) ∧ (n ∈ gstore → lpt[n].ref-size = gstore[n].ref-size));% ⊦ m < n → n ≠ 0; (s)%idexcept-size: ⊦ id○(avol, avol0, n) → # avol = # avol0; (forward) from specification array-copy[avolume]%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic