| gstore2[m] = groupblock(gndx, lax, m2), dom gstore2 = dom gstore3, fi = fi2, fi0 = fi1 \ datakeys(key, n0, fi1), gstore = gstore2, gstore0 = gstore1, lnum = m, n = m2 - m1, remove-refsize0(gstore1) = gstore1, elems nx ∩ jro = ∅, as0 ∩ range(fi1 \ datakeys(key, n0, fi1)) = ∅, dom gstore1 ∪ elems nx = dom gstore3 ∪ jro, dom gstore1 ∪ elems nx = dom gstore[lnum, gstore[lnum].ref-size:= n] ∪ jro, p_os < pmaxino, fi1.inos < jmaxino, fi2.inos < pmaxino, gstore2 =○refsize gstore3, inv(gstore3 \ jro), inv(gstore1), inv(gstore2 \ jro), inv(gstore[lnum, gstore[lnum].ref-size:= n] \ jro), refsize-cons(gstore3, range fi1), refsize-cons(gstore1, range fi2), refsize-cons(gstore2, range(fi1 \ datakeys(key, n0, fi1)) ∪ as0), ri-inj(fi1), ri-inj(fi1 \ datakeys(key, n0, fi1)), ri-inj(fi2), @(m, m0, m1) ∈ as0, m ∈ gstore2, lnum ∈ gstore, pmaxino ≤ jmaxino, m2 ≥ m1, fi1.lebs ⊆ dom gstore3, fi2.lebs ⊆ dom gstore1, as0.lebs ⊆ dom gstore3, jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore3, jro), jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore2, jro) ⊦ # as0 = 0, as0 = ∅, pmaxino = 0, dups(nx), (jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore[lnum, gstore[lnum].ref-size:= n], jro)) ∧ dom gstore[lnum, gstore[lnum].ref-size:= n] = dom gstore3 ∧ (as0 -- @(m, m0, m1)) ∩ range(fi1 \ datakeys(key, n0, fi1)) = ∅ ∧ (as0 -- @(m, m0, m1)).lebs ⊆ dom gstore[lnum, gstore[lnum].ref-size:= n] ∧ refsize-cons(gstore[lnum, gstore[lnum].ref-size:= n], range(fi1 \ datakeys(key, n0, fi1)) ∪ (as0 -- @(m, m0, m1))) ∧ gstore[lnum, gstore[lnum].ref-size:= n] =○refsize gstore3 ∧ #(as0 -- @(m, m0, m1)) < # as0 |
gstore2[m] = groupblock(gndx, lax, m2), dom gstore2 = dom gstore3, remove-refsize0(gstore1) = gstore1, elems nx ∩ jro = ∅, as0 ∩ range(fi1 \ datakeys(key, n0, fi1)) = ∅, dom gstore1 ∪ elems nx = dom gstore3 ∪ jro, p_os < pmaxino, fi1.inos < jmaxino, fi2.inos < pmaxino, gstore2 =○refsize gstore3, inv(gstore3 \ jro), inv(gstore1), inv(gstore2 \ jro), inv(gstore2[m, groupblock(gndx, lax, m2 - m1)] \ jro), refsize-cons(gstore3, range fi1), refsize-cons(gstore1, range fi2), refsize-cons(gstore2, range(fi1 \ datakeys(key, n0, fi1)) ∪ as0), ri-inj(fi1), ri-inj(fi1 \ datakeys(key, n0, fi1)), ri-inj(fi2), @(m, m0, m1) ∈ as0, m ∈ gstore2, pmaxino ≤ jmaxino, m1 ≤ m2, fi1.lebs ⊆ dom gstore3, fi2.lebs ⊆ dom gstore1, as0.lebs ⊆ dom gstore3, jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore3, jro), jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore2, jro) ⊦ # as0 = 0, as0 = ∅, pmaxino = 0, dups(nx), (jvalid2 ∧ nx ≠ [] → valid-journal-head(nx, gstore2[m, groupblock(gndx, lax, m2 - m1)], jro)) ∧ refsize-cons(gstore2[m, groupblock(gndx, lax, m2 - m1)], range(fi1 \ datakeys(key, n0, fi1)) ∪ (as0 -- @(m, m0, m1)))
Used simplifier rules: ⊦ as.lebs ⊆ ns → (as -- adr).lebs ⊆ ns; (ss)% ⊦ groupblock(gndx, lax, m).ref-size:= m0 = groupblock(gndx, lax, m0); (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ ¬ n < n; (s)% ⊦ m < n + 1 ↔ ¬ n < m; (s)%n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s)% ⊦ m < 1 ↔ m = 0; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ adr ∈ as → #(as -- adr) = # as - 1; (s)% ⊦ (gblock.ref-size:= m).ladrlist = gblock.ladrlist; (s)% ⊦ (gblock.ref-size:= m).gndlist = gblock.gndlist; (s)%⊦ gstore =○refsize gstore0 → ( gstore[n, gblock] =○refsize gstore0 ↔ n ∈ gstore ∧ gblock.gndlist = gstore[n].gndlist ∧ gblock.ladrlist = gstore[n].ladrlist); (s)% ⊦ as ∩ as0 = ∅ → (as -- adr) ∩ as0 = ∅; (s)%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]% ⊦ n ≥ m ↔ m ≤ n; (s)% ⊦ n ∈ gstore → dom gstore ++ n = dom gstore; (s)% ⊦ dom gstore[n, gblock] = dom gstore ++ n; (s)