| ∀ rk. rk ∈ st ∧ rk .ref = jvmref ∧ is_fskey(rk .key) ∧ rk .key .fs .type = void_type ∧ rk .key .fs .field = `initstate' .field → st[rk] ≠ initval(undone) ∧ st[rk] ≠ initval(error) ⊦ _uninit ≠ r -- mkfs(class, ty, fieldvar) ' ∧ (∀ rk. (rk = r -- mkfs(class, ty, fieldvar) ' ∨ rk ∈ st) ∧ rk .ref = jvmref ∧ ¬ is_indexkey(rk .key) ∧ rk .key .fs .type = void_type ∧ rk .key .fs .field = `initstate' .field → ((rk = r -- mkfs(class, ty, fieldvar) ' ⊃ val; st[rk])) ≠ initval(undone) ∧ ((rk = r -- mkfs(class, ty, fieldvar) ' ⊃ val; st[rk])) ≠ initval(error)), ty = void_type, _uninit ∈ st |
rk .ref = jvmref, rk .key .fs .type = void_type, rk .key .fs .field = `initstate' .field, is_fskey(rk .key), rk ∈ st, ∀ rk. rk ∈ st ∧ rk .ref = jvmref ∧ ¬ is_indexkey(rk .key) ∧ rk .key .fs .type = void_type ∧ rk .key .fs .field = `initstate' .field → st[rk] ≠ initval(undone) ∧ st[rk] ≠ initval(error) ⊦ ty = void_type, rk = r -- mkfs(class, ty, fieldvar) ', _uninit ∈ st, st[rk] ≠ initval(undone) ∧ st[rk] ≠ initval(error)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (r -- sk) .ref = r], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .field = fieldvar], [CSIMPSEQ : ⊦ fs ' .fs = fs], [CSIMPSEQ : ⊦ (r -- sk) .key = sk], [CSIMPSEQ : ⊦ ¬ is_indexkey(sk) ↔ is_fskey(sk)], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ r -- fs ' = _uninit ↔ r = jvmref ∧ fs = mkfs (`java.lang.Object' .class, void_type, `uninit' .field)], [CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)])]]