| st0[_mode] = throw(r, mkclasstype(class1)), ¬ jvmref -- mkfs(class0, void_type, `initstate' .field) ' ∈ st ∨ st[jvmref -- mkfs(class0, void_type, `initstate' .field) '] ≠ initval(error), ¬ jvmref -- mkfs(class0, void_type, `initstate' .field) ' ∈ st ∨ st[jvmref -- mkfs(class0, void_type, `initstate' .field) '] ≠ initval(undone), st0 = (st[r0 -- _type, typeval(mkclasstype(class))][_mode, throw(r0, mkclasstype(class))]) ∧ newref(r0, st) ∨ st0 = st ⊦ ¬ jvmref -- mkfs(class0, void_type, `initstate' .field) ' ∈ st ∧ _uninit ∈ st, (¬ jvmref -- mkfs(class0, void_type, `initstate' .field) ' ∈ st0 ∨ st0[jvmref -- mkfs(class0, void_type, `initstate' .field) '] ≠ initval(error)) ∧ (¬ jvmref -- mkfs(class0, void_type, `initstate' .field) ' ∈ st0 ∨ st0[jvmref -- mkfs(class0, void_type, `initstate' .field) '] ≠ initval(undone)) ∧ (jvmref -- mkfs(class0, void_type, `initstate' .field) ' ∈ st0 ∨ ¬ _uninit ∈ st0) |
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ newref(r, st) → r ≠ jvmref], [CSIMPSEQ : ⊦ (st[rk0, val][rk]) = ((rk = rk0 ⊃ val; st[rk]))], [CSIMPSEQ : ⊦ throw(r, ty) = throw(r0, ty0) ↔ r = r0 ∧ ty = ty0], [CSIMPSEQ : ⊦ mkclasstype(class) = mkclasstype(class0) ↔ class = class0], [CSIMPSEQ : ⊦ r0 -- mkfs (class0, ty0, `initstate' .field) ' ∈ st[_mode, val] ↔ r0 -- mkfs (class0, ty0, `initstate' .field) ' ∈ st], [CSIMPSEQ : ⊦ r0 -- mkfs (class0, ty0, `initstate' .field) ' ∈ st[r -- _type, val] ↔ r0 -- mkfs (class0, ty0, `initstate' .field) ' ∈ st], [CSIMPSEQ : ⊦ _mode = jvmref -- sk ↔ sk = mkfs (`java.lang.Object' .class, void_type, `mode' .field) '], [CSIMPSEQ : ⊦ fs ' = fs0 ' ↔ fs = fs0], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ stringvar .field = stringvar0 .field ↔ stringvar = stringvar0], [CSIMPSEQ : ⊦ r ≠ r0 → (st[r0 -- sk0, val][r -- sk]) = st[r -- sk]], [CSIMPSEQ : ⊦ _uninit ∈ st[_mode, val] ↔ _uninit ∈ st], [CSIMPSEQ : ⊦ _uninit ∈ st[r -- _type, val] ↔ _uninit ∈ st])], [EXTRAFMAS : (st = st0)]]