| remove-refsize0(istore0) = istore0, remove-refsize0(gstore1) = gstore1, elems nx ∩ ginval1 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval1, inv(istore0), inv(istore), inv(gstore1), inv(gstore2 \ ginval1), maxino2 ∈ istore, istore0 ⊑ istore, pstate.index? → pstate.lnum ∈ istore, pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2 ⊦ dups(nx), ( n0 ∈ crash(istore, istore0) ∧ crash(istore, istore0)[n0].ref-size ≠ 0 ↔ n0 ∈ remove-refsize0(crash(istore[maxino2, istore[maxino2].ref-size:= n], istore0))) ∧ ( n0 ∈ crash(istore, istore0) ∧ crash(istore, istore0)[n0].ref-size ≠ 0 → remove-refsize0(crash(istore, istore0))[n0] = remove-refsize0(crash(istore[maxino2, istore[maxino2].ref-size:= n], istore0))[n0]) |
remove-refsize0(gstore1) = gstore1, remove-refsize0(istore0) = istore0, elems nx ∩ ginval1 = ∅, dom gstore1 ∪ elems nx = dom gstore2 ∪ ginval1, inv(gstore2 \ ginval1), inv(gstore1), inv(istore), inv(istore0), maxino2 ∈ istore, istore0 ⊑ istore, pstate.journal? → nx ≠ [] ∧ pstate.lnum = nx.last ∧ pstate.lnum ∈ gstore2, pstate.index? → pstate.lnum ∈ istore ⊦ dups(nx), (n0 ∈ istore0 ∧ crash(istore, istore0)[n0].ref-size ≠ 0 ↔ n0 ∈ remove-refsize0(crash(istore[maxino2, istore[maxino2].ref-size:= n], istore0))) ∧ ( n0 ∈ istore0 ∧ crash(istore, istore0)[n0].ref-size ≠ 0 → remove-refsize0(crash(istore, istore0))[n0] = remove-refsize0(crash(istore[maxino2, istore[maxino2].ref-size:= n], istore0))[n0])
Used simplifier rules: ⊦ n ∈ crash(istore, istore0) ↔ n ∈ istore0; (s)