| lpt[n] = mklp(n0, n1, lpf, n2), n < # lpt, bufs-log-only(buffered(n), nx, lpt), lpt-ram-flash(lpt, lpt0, nx) ⊦ lpt-ram-flash(lpt[n, mklp(m0, m1, lpf, m2)], lpt0, nx) |
# lpt0 = # lpt, lpt[n, mklp(m0, m1, lpf, m2)][n3].flags = LP_GROUP_NODES, lpt0[n3].flags = LP_GROUP_NODES, lpt[n] = mklp(n0, n1, lpf, n2), n3 < # lpt, n < # lpt, ∀ n. n < # lpt ∧ lpt0[n].flags = LP_GROUP_NODES ∧ lpt[n].flags = LP_GROUP_NODES ∧ ¬ n ∈ nx → lpt[n].size = lpt0[n].size, nx ≠ [] ∧ n = nx.last ∧ lpt[nx.last].flags = LP_GROUP_NODES ∨ lpf = LP_INDEX_NODES ⊦ lpt[n, mklp(m0, m1, lpf, m2)][n3].size = lpt0[n3].size, n3 ∈ nx
Used simplifier rules: lpt-ram-flash: ⊦ lpt-ram-flash(lpt1, lpt0, nx) ↔ # lpt0 = # lpt1 ∧ (∀ n. n < # lpt1 ∧ lpt0[n].flags = LP_GROUP_NODES ∧ lpt1[n].flags = LP_GROUP_NODES ∧ ¬ n ∈ nx → lpt1[n].size = lpt0[n].size);%bufs-log-only: ⊦ bufs-log-only(bleb, nx, lpt) ↔ bleb = nobuffer ∨ bleb.leb < # lpt ∧ ( nx ≠ [] ∧ bleb.leb = nx.last ∧ lpt[bleb.leb].flags = LP_GROUP_NODES ∨ lpt[bleb.leb].flags = LP_INDEX_NODES);% ⊦ mklp(n2, n3, lpf, m).flags = lpf; (s)% ⊦ m < n → n ≠ 0; (s)%lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ # lpt[n, lp] = # lpt; (s)% ⊦ buffered(m).leb = m; (s)% ⊦ nobuffer ≠ buffered(m); (s)