| err = ESUCCESS, err = err0, gstore = gstore3, jro0 = jro, nx0 = nx, remove-refsize0(gstore2) = gstore2, elems(nx + n) ∩ (jro -- n) = ∅, elems nx ∩ jro = ∅, dom gstore2 ∪ elems(nx + n) = dom gstore[n, groupblock([], [], 0)] ∪ (jro -- n), dom gstore2 ∪ elems nx = dom gstore3 ∪ jro, p_os < pmaxino, fi2.inos < jmaxino1, fi1.inos < pmaxino, inv(gstore[n, groupblock([], [], 0)] \ (jro -- n)), inv(gstore3 \ jro), inv(gstore2), refsize-cons(gstore3, range fi2), refsize-cons(gstore2, range fi1), ri-inj(fi1), ri-inj(fi2), jmaxino ≤ LEB_SIZE, pmaxino ≤ jmaxino1, fi2.lebs ⊆ dom gstore3, fi1.lebs ⊆ dom gstore2, jvalid1 ∧ nx ≠ [] → valid-journal-head(nx, gstore3, jro), ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ pmaxino = 0, dups(nx), dups(nx + n), n ∈ gstore, nx ≠ [] ∧ jvalid1 ∧ jmaxino ≤ n0, nx ≠ [] ∧ jvalid1, (true ∧ nx + n ≠ [] → valid-journal-head(nx + n, gstore[n, groupblock([], [], 0)], jro -- n)) ∧ fi2.lebs ⊆ dom gstore[n, groupblock([], [], 0)] ∧ refsize-cons(gstore[n, groupblock([], [], 0)], range fi2) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ dom gstore3 ⊆ dom gstore[n, groupblock([], [], 0)] ∧ ((nx + n).toSet \ nx0.toSet) ∩ dom gstore3 = ∅ ∧ abs-log(nx + n, gstore[n, groupblock([], [], 0)] ↓) = abs-log(nx0, gstore3 ↓) ∧ nodes(gstore[n, groupblock([], [], 0)] ↓, jro -- n) = nodes(gstore3 ↓, jro0) ∧ (err = ESUCCESS → true ∧ nx + n ≠ []) |
remove-refsize0(gstore2) = gstore2, elems nx ∩ jro = ∅, dom gstore2 ∪ elems nx = dom gstore3 ∪ jro, p_os < pmaxino, fi2.inos < jmaxino1, fi1.inos < pmaxino, inv(gstore3[n, groupblock([], [], 0)] \ (jro -- n)), inv(gstore3 \ jro), inv(gstore2), refsize-cons(gstore3, range fi2), refsize-cons(gstore2, range fi1), refsize-cons(gstore3[n, groupblock([], [], 0)], range fi2), ri-inj(fi1), ri-inj(fi2), jmaxino ≤ LEB_SIZE, pmaxino ≤ jmaxino1, fi2.lebs ⊆ dom gstore3, fi1.lebs ⊆ dom gstore2, jvalid1 ∧ nx ≠ [] → valid-journal-head(nx, gstore3, jro) ⊦ pmaxino = 0, dups(nx), valid-journal-head(nx + n ', gstore3[n, groupblock([], [], 0)], jro -- n), n ∈ nx, n ∈ gstore3, nx ≠ [] ∧ jvalid1 ∧ jmaxino ≤ n0, nx ≠ [] ∧ jvalid1
Used simplifier rules: ⊦ ∅.size = 0; (s)% ⊦ ¬ n ∈ gstore ∧ fi.lebs ⊆ dom gstore → range fi | n = ∅; (s)% ⊦ groupblock(gndx, lax, m).ref-size = m; (s)%⊦ refsize-cons(gstore, as) → ( refsize-cons(gstore[n, gblock], as) ↔ ¬ n ∈ gstore ∨ gstore[n].ref-size = (as | n).size → gblock.ref-size = (as | n).size); (ss)% ⊦ ∅ -- n = ∅; (s)%¬ m ∈ gstore ⊦ nodes(gstore[m, groupblock([], [], m0)], ginval -- m) = nodes(gstore, ginval); (s)% ⊦ n ∈ gstore ↓ ↔ n ∈ gstore; (s)%a: ⊦ (ax + ax0) + ax1 = ax + ax0 + ax1; from specification list[address-list-set]% ⊦ ax + [] = ax; (s)% ⊦ ([]).to-adr(n) = []; (s)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)% ⊦ gstore[n, gblock][n] = gblock; (s)% ⊦ ¬ n ∈ nx → abs-log(nx, gstore[n, gblock]) = abs-log(nx, gstore); (s)%⊦ abs-log(nx + n ', gstore) = abs-log(nx, gstore) + gstore[n].ladrlist.to-adr(n); (s)% ⊦ prefixn(0, lax) = []; (s)% ⊦ prefixn(0, gndx) = []; (s)% ⊦ valid-group-nodes([]) = 0; (s)%⊦ groupblock(gndx, lax, m0) ↓ = groupblock (prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0); (s)% ⊦ gstore[m, gblock] ↓ = gstore ↓[m, gblock ↓]; (s)% ⊦ n ∈ dom gstore ↔ n ∈ gstore; (s)% ⊦ (∅ ++ n) ∩ ns = ∅ ↔ ¬ n ∈ ns; (s)% ⊦ ns \ ns = ∅; (s)% ⊦ ¬ n ∈ nx → (ns ++ n) \ nx.toSet = (ns \ nx.toSet) ++ n; (s)% ⊦ ns ∪ ∅ = ns; (s)% ⊦ n '.toSet = ∅ ++ n; (s)% ⊦ (nx + nx0).toSet = nx.toSet ∪ nx0.toSet; (s)% ⊦ ns ⊆ ns ++ n; (s)% ⊦ ns ⊆ ns0 → ns ⊆ ns0 ++ n; (s)% ⊦ nx + n ' ≠ []; (s)% ⊦ ¬ ⌊ESUCCESS⌋ ; (s)% ⊦ dups(nx + n ') ↔ n ∈ nx ∨ dups(nx); (ws)%int-c: ⊦ ns ∩ ns0 = ns0 ∩ ns; from specification set-union[nat-set]%int-a: ⊦ (ns ∩ ns0) ∩ ns1 = ns ∩ ns0 ∩ ns1; from specification set-union[nat-set]% ⊦ (ns ++ n) ∩ (ns0 -- n) = (ns ∩ ns0) -- n; (s)% ⊦ (ns ∪ (ns0 -- n)) ++ n = (ns ∪ ns0) ++ n; (s)% ⊦ dom gstore[n, gblock] = dom gstore ++ n; (s)%unc: ⊦ ns ∪ ns0 = ns0 ∪ ns; from specification set-union[nat-set]%una: ⊦ (ns ∪ ns0) ∪ ns1 = ns ∪ ns0 ∪ ns1; from specification set-union[nat-set]% ⊦ (ns ++ n) ∪ ns0 = (ns ∪ ns0) ++ n; (s)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ elems(nx0 + n ') = elems nx0 ++ n; (s)% ⊦ nx + n = nx + n '; (s)