| remove-refsize0(gstore2) = gstore2, elems nx ∩ jro = ∅, dom gstore2 ∪ elems nx = dom gstore3 ∪ jro, n0 < LEB_SIZE, n0 < jmaxino, fi1.inos < pmaxino, fi2.inos < jmaxino1, p_os < pmaxino, inv(gstore2), inv(gstore3 \ jro), inv(gstore3[nx.last]), inv(gstore3[n, groupblock([], [], 0)] \ (jro -- n)), refsize-cons(gstore2, range fi1), refsize-cons(gstore3, range fi2), refsize-cons(gstore3[n, groupblock([], [], 0)], range fi2), ri-inj(fi2), ri-inj(fi1), valid-journal-head(nx, gstore3, jro), nx.last ∈ gstore3, pmaxino ≤ jmaxino1, jmaxino ≤ LEB_SIZE, fi1.lebs ⊆ dom gstore2, fi2.lebs ⊆ dom gstore3 ⊦ nx = [], pmaxino = 0, dups(nx), valid-journal-head(nx + n ', gstore3[n, groupblock([], [], 0)], jro -- n), n ∈ nx, n ∈ gstore3 |
⊦ valid-journal-head(nx, gstore, ginval) ↔ nx ≠ [] ∧ nx.last ∈ gstore ∧ ¬ nx.last ∈ ginval ∧ (gstore[nx.last].gndlist = [] ∨ gstore[nx.last].gndlist.last.end)
Used simplifier rules: ⊦ nx + n ' ≠ []; (s)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ (nx + n ').last = n; (s)% ⊦ n ∈ gstore[n, gblock]; (s)% ⊦ n ∈ ns -- n0 ↔ n ≠ n0 ∧ n ∈ ns; (s)% ⊦ gstore[n, gblock][n] = gblock; (s)% ⊦ groupblock(gndx, lax, m).gndlist = gndx; (s) Used terms: jro -- n, gstore3[n, groupblock([], [], 0)], nx + n '