| ⊦ ty = void_type, ¬ _uninit ∈ st[r -- mkfs(class, ty, fieldvar) ', val] ∧ (∀ rk. rk ∈ st[r -- mkfs(class, ty, fieldvar) ', val] ∧ rk .ref = jvmref ∧ is_fskey(rk .key) ∧ rk .key .fs .type = void_type ∧ rk .key .fs .field = `initstate' .field → (st[r -- mkfs(class, ty, fieldvar) ', val][rk]) ≠ initval(undone) ∧ (st[r -- mkfs(class, ty, fieldvar) ', val][rk]) ≠ initval(error)) ↔ init(st) |
⊦ ty = void_type, _uninit ≠ r -- mkfs(class, ty, fieldvar) ' ∧ ¬ _uninit ∈ st ∧ (∀ 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)) ↔ init(st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (st[rk0, val][rk]) = ((rk = rk0 ⊃ val; st[rk]))], [CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)], [CSIMPSEQ : ⊦ rk ∈ st[rk0, val] ↔ rk = rk0 ∨ rk ∈ st])]]