| ri[key] = @(m, m0, m1), gstore2[m] = groupblock(gndx, lax, n0 + m1), remove-refsize0(gstore1) = gstore1, elems nx ∩ jro0 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ jro0, p_os.keys.inodes?, jro1.keys.inodes?, fi1.inos < pmaxino, ri.inos < jmaxino, p_os < pmaxino, jro1 < jmaxino, inv(gstore2[m, groupblock(gndx, lax, n0)] \ jro0), inv(gstore1), inv(gstore2 \ jro0), log-cons(abs-log(nx, gstore2 ↓), nodes(gstore2 ↓, jro0)), refsize-cons(gstore1, range fi1), refsize-cons(gstore2, range ri), ri-inj(ri), ri-inj(ri -- key), ri-inj(fi1), m ∈ gstore2, key ∈ ri, pmaxino ≤ jmaxino, fi1.lebs ⊆ dom gstore1, ri.lebs ⊆ dom gstore2, jvalid1 ∧ nx ≠ [] → valid-journal-head(nx, gstore2, jro0), jvalid2 → jvalid0 ⊦ jmaxino = 0, nodes(gstore2 ↓, jro0) = nodes(gstore2 ↓[m, groupblock(prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), n0)], jro0), pmaxino = 0, dups(nx) |
⊦ n ∈ gstore ∧ gblock.gndlist = gstore[n].gndlist ∧ gblock.ladrlist = gstore[n].ladrlist → nodes(gstore[n, gblock], ginval) = nodes(gstore, ginval)
Used simplifier rules: ⊦ n ∈ gstore ↓ ↔ n ∈ gstore; (s)% ⊦ groupblock(gndx, lax, m).gndlist = gndx; (s)% ⊦ n ∈ gstore → gstore ↓[n] = gstore[n] ↓; (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)%⊦ groupblock(gndx, lax, m0) ↓ = groupblock (prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)%valid-group-nodes-ls: ⊦ n < valid-group-nodes(gndx) → n < # gndx; (forward) from specification gjournal-abs%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m < n → n ≠ 0; (s)% ⊦ ¬ n < n; (s)%n0 ≤ # gndx, n1 ≤ # gndx ⊦ prefixn(n0, gndx) = prefixn(n1, gndx) ↔ n0 = n1; (s) Used terms: jro0, groupblock (prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), n0), m, gstore2 ↓