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