| nx3 = n + nx1, elems nx2 ∩ ginval = ∅, elems nx3 ∩ ginval = ∅, inv(gstore2), elems nx2 ⊆ dom gstore2, elems nx3 ⊆ dom gstore2 ⊦ ⟪gjournal_remove_nonend_blocks#(n, fi0, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid; log; err); nx0 := nx1⟫ (elems nx0 ⊆ dom gstore2 ∧ elems nx0 ∩ ginval = ∅ ∧ # nx0 < # nx3), nx3 = [] |
elems nx2 ∩ ginval = ∅, ginval ∩ elems nx1 = ∅, inv(gstore2), n ∈ gstore2, elems nx2 ⊆ dom gstore2, elems nx1 ⊆ dom gstore2, ¬ n ∈ ginval ⊦ ⟪gjournal_remove_nonend_blocks#(n, fi0, fi, ginval, gstore2, gstore, nx, pmaxino, p_os, jvalid; log; err); nx0 := nx1⟫ (elems nx0 ⊆ dom gstore2 ∧ elems nx0 ∩ ginval = ∅ ∧ ¬ # nx1 < # nx0)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m < n + 1 ↔ ¬ n < m; (s)% ⊦ m +1 = m + 1; (s)% ⊦ #(n ' + nx) = (# nx)+1; (s)% ⊦ n ∈ dom gstore ↔ n ∈ gstore; (s)% ⊦ ns ++ n ⊆ ns0 ↔ ns ⊆ ns0 ∧ n ∈ ns0; (ws)% ⊦ n ' + nx ≠ []; (s)%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 ∩ (ns0 ++ n) = ∅ ↔ ns ∩ ns0 = ∅ ∧ ¬ n ∈ ns; (ws)%a: ⊦ (nx + nx0) + nx1 = nx + nx0 + nx1; from specification list[nat-list-set]% ⊦ elems(n ' + nx0) = elems nx0 ++ n; (s)% ⊦ n + nx = n ' + nx; (s)