| inv(gstore \ ginval) ⊦ ( ¬ m ∈ ginval → ( @(m, m0, m1).lnum ∈ crash(gstore, gstore0, ginval, nx) ↓ ∧ @(@(m, m0, m1).pos, @(m, m0, m1).size) ∈ crash(gstore, gstore0, ginval, nx) ↓[@(m, m0, m1).lnum].ladrlist ↔ @(m, m0, m1) ∈ gstore ↓)) ∧ ( ( @(m, m0, m1).lnum ∈ crash(gstore, gstore0, ginval, nx) ↓ ∧ @(@(m, m0, m1).pos, @(m, m0, m1).size) ∈ crash(gstore, gstore0, ginval, nx) ↓[@(m, m0, m1).lnum].ladrlist) ∧ ¬ m ∈ ginval → nodes(crash(gstore, gstore0, ginval, nx) ↓, ginval)[@(m, m0, m1)] = nodes(gstore ↓, ginval)[@(m, m0, m1)]) |
inv(gstore \ ginval) ⊦ ( ¬ m ∈ ginval → ( m ∈ crash(gstore, gstore0, ginval, nx) ∧ @(m0, m1) ∈ prefixn(valid-group-nodes(gstore[m].gndlist), gstore[m].ladrlist) ↔ @(m, m0, m1) ∈ gstore ↓)) ∧ ( m ∈ gstore ∧ @(m0, m1) ∈ crash(gstore, gstore0, ginval, nx) ↓[m].ladrlist ∧ ¬ m ∈ ginval → nodes(crash(gstore, gstore0, ginval, nx) ↓, ginval)[@(m, m0, m1)] = nodes(gstore ↓, ginval)[@(m, m0, m1)])
Used simplifier rules: down-store-in: ⊦ n ∈ gstore ↓ ↔ n ∈ gstore;%down-store-at: ⊦ n ∈ gstore → gstore ↓[n] = gstore[n] ↓;%down-block-explicit: ⊦ groupblock(gndx, lax, m0) ↓ = groupblock (prefixn(valid-group-nodes(gndx), gndx), prefixn(valid-group-nodes(gndx), lax), m0);% ⊦ n ∈ crash(gstore, gstore0, ginval, nx) ↔ n ∈ gstore ∨ n ∈ ginval; (ws)% ⊦ groupblock(gndx, lax, m).ladrlist = lax; (s)%⊦ n ∈ crash(gstore, gstore0, ginval, nx) → crash(gstore, gstore0, ginval, nx)[n] = (n ∈ nx ∨ ¬ n ∈ ginval ⊃ groupblock (gstore[n].gndlist, gstore[n].ladrlist, (n ∈ gstore0 ⊃ gstore0[n].ref-size;0)) ;gstore0[n] ); (s)% ⊦ @(m, m0, m1).size = m1; (s)% ⊦ @(m, m0, m1).pos = m0; (s)% ⊦ @(m, m0, m1).lnum = m; (s)