| log2 = nx, lpt0 = lpt1, m = LEB_SIZE, n = log0.head, nx0 = nx, n < # lpt, valid-indices(lpt1, nx), ∃ log. (log2 = log + log0 ∧ lpt = replay-log(lpt1, log) ∧ valid-indices(lpt, log2) ∧ ¬ dups(log2)) ∧ log0 = log1 ⊦ ⟪lpt := lpt[n, lpt[n].flags:= LP_GROUP_NODES][n, lpt[n, lpt[n].flags:= LP_GROUP_NODES][n].size:= m]; log0 := log0.tail⟫ ∃ log. (log2 = log + log0 ∧ lpt = replay-log(lpt1, log) ∧ valid-indices(lpt, log2) ∧ ¬ dups(log2)) ∧ # log0 < # log1, log0 = [], dups(nx) |
log2 = nx, lpt0 = lpt1, m = LEB_SIZE, n = log0.head, nx0 = nx, n < # lpt[n, lpt[n].flags:= LP_GROUP_NODES], n < # lpt, valid-indices(lpt1, nx), ∃ log. (log2 = log + log0 ∧ lpt = replay-log(lpt1, log) ∧ valid-indices(lpt, log2) ∧ ¬ dups(log2)) ∧ log0 = log1 ⊦ ⟪log0 := log0.tail⟫ ∃ log. ( log2 = log + log0 ∧ lpt[n, lpt[n].flags:= LP_GROUP_NODES][n, lpt[n, lpt[n].flags:= LP_GROUP_NODES][n].size:= m] = replay-log(lpt1, log) ∧ valid-indices(lpt[n, lpt[n].flags:= LP_GROUP_NODES][n, lpt[n, lpt[n].flags:= LP_GROUP_NODES][n].size:= m], log2) ∧ ¬ dups(log2)) ∧ # log0 < # log1, log0 = [], dups(nx)
Used simplifier rules: ⊦ valid-indices(lpt, nx0 + nx1) ↔ valid-indices(lpt, nx0) ∧ valid-indices(lpt, nx1); (ws)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ # replay-log(lpt, nx) = # lpt; (s)% ⊦ # lpt[n, lp] = # lpt; (s)