| gstore2[n1] = groupblock(gndx, lax, 0), remove-refsize0(gstore1) = gstore1, elems nx ∩ jro0 = ∅, dom gstore1 ∪ elems nx = jro0 ∪ dom gstore2, p_os.keys.inodes?, jro1.keys.inodes?, ri.inos < jmaxino, jro1 < jmaxino, p_os < pmaxino, fi1.inos < pmaxino, inv(gstore1), inv(gstore2 \ jro0), log-cons(abs-log(nx, gstore2 ↓), nodes(gstore2 ↓, jro0)), refsize-cons(gstore2, range ri), refsize-cons(gstore1, range fi1), refsize-cons(gstore2 -- n1, range ri), ri-cons(ri, nodes(gstore2 ↓, jro0)), ri-inj(ri), ri-inj(fi1), n1 ∈ jro0 ∪ dom gstore2, n1 ∈ gstore1, n1 ∈ gstore2, pmaxino ≤ jmaxino, ri.lebs ⊆ dom gstore2, fi1.lebs ⊆ dom gstore1, jvalid5 → jvalid0, jvalid3 ∧ nx ≠ [] → valid-journal-head(nx, gstore2, jro0), jvalid3 ∧ nx ≠ [] → valid-journal-head(nx, gstore2 -- n1, jro0 ++ n1) ⊦ #(jro0 ∪ dom gstore2) = 0, #((dom nodes(gstore2 ↓, jro0) | n1) ∩ range ri) = 0, jmaxino = 0, pmaxino = 0, jro0 ∪ dom gstore2 = ∅, dups(nx), n1 ∈ nx, ∀ adr. adr ∈ (dom nodes(gstore2 ↓, jro0) | n1) ∩ range ri ↔ adr ∈ ∅, ∃ adr. adr.lnum = n1 ∧ adr ∈ ri |
gstore2[adr.lnum] = groupblock(gndx, lax, 0), remove-refsize0(gstore1) = gstore1, elems nx ∩ jro0 = ∅, dom gstore1 ∪ elems nx = jro0 ∪ dom gstore2, jro1.keys.inodes?, p_os.keys.inodes?, fi1.inos < pmaxino, p_os < pmaxino, jro1 < jmaxino, ri.inos < jmaxino, inv(gstore2 \ jro0), inv(gstore1), log-cons(abs-log(nx, gstore2 ↓), nodes(gstore2 ↓, jro0)), refsize-cons(gstore2 -- adr.lnum, range ri), refsize-cons(gstore1, range fi1), refsize-cons(gstore2, range ri), ri-cons(ri, nodes(gstore2 ↓, jro0)), ri-inj(fi1), ri-inj(ri), adr.lnum ∈ gstore1, adr ∈ ri, adr.lnum ∈ jro0 ∪ dom gstore2, adr ∈ nodes(gstore2 ↓, jro0), adr.lnum ∈ gstore2, pmaxino ≤ jmaxino, fi1.lebs ⊆ dom gstore1, ri.lebs ⊆ dom gstore2, jvalid3 ∧ nx ≠ [] → valid-journal-head(nx, gstore2 -- adr.lnum, jro0 ++ adr.lnum), jvalid3 ∧ nx ≠ [] → valid-journal-head(nx, gstore2, jro0), jvalid5 → jvalid0 ⊦ #((dom nodes(gstore2 ↓, jro0) | adr.lnum) ∩ range ri) = 0, #(jro0 ∪ dom gstore2) = 0, jmaxino = 0, pmaxino = 0, (dom nodes(gstore2 ↓, jro0) | adr.lnum) ∩ range ri = ∅, jro0 ∪ dom gstore2 = ∅, dups(nx), adr.lnum ∈ nx, ∃ adr0. adr0.lnum = adr.lnum ∧ adr0 ∈ ri
Used simplifier rules: size-zero-01: ⊦ as ≠ ∅ → # as ≠ 0; (forward) from specification set-basic[node-store]%size-zero: ⊦ # as ≠ 0 → as ≠ ∅; (forward) from specification set-basic[node-store]%fwd-in-gstore0: ⊦ n ∈ gstore ∧ ¬ n ∈ nx ∧ dom gstore0 ∪ elems nx = dom gstore ∪ ginval → n ∈ gstore0; (forward) from specification apersistence-base%unc: ⊦ ns ∪ ns0 = ns0 ∪ ns; from specification set-union[nat-set]%una: ⊦ (ns ∪ ns0) ∪ ns1 = ns ∪ ns0 ∪ ns1; from specification set-union[nat-set]%lebs-in-ri-in-gstore: ⊦ adr ∈ ri ∧ ri.lebs ⊆ dom gstore → adr.lnum ∈ gstore; (forward) from specification gjournal-base% ⊦ adr ∈ dom fs ↔ adr ∈ fs; (s)% ⊦ adr ∈ as | n ↔ adr.lnum = n ∧ adr ∈ as; (ws)%int-c: ⊦ as ∩ as0 = as0 ∩ as; from specification set-union[node-store]%int-a: ⊦ (as ∩ as0) ∩ as1 = as ∩ as0 ∩ as1; from specification set-union[node-store]% ⊦ adr ∈ range ri ↔ adr ∈ ri; (s)% ⊦ adr ∈ as ∩ as0 ↔ adr ∈ as ∧ adr ∈ as0; (ws)% ⊦ ¬ adr ∈ ∅; (s)