| ∃ rkvs0, val, rkvs1. rkvs = rkvs0 + (((jvmref -- mkfs(class, ty, fieldvar) ') × val) + rkvs1) ∧ ¬ jvmref -- mkfs(class, ty, fieldvar) ' ∈ rkvs1, validvals(str, rkvs, st), mkfs(class, ty, fieldvar) ' ∈ statfields(class), tdname∃(str, class), initdone(class, st), jvmref -- mkfs(class, ty, fieldvar) ' ∈ st, okval(st[jvmref -- mkfs(class, ty, fieldvar) '], ty), type∃(str, ty), jvmref ∈ st, is_reftype(ty) → validrefval(str, st[jvmref -- mkfs(class, ty, fieldvar) '], ty, st) ⊦ ty = void_type, (is_reftype(ty) → validrefval(str, st[rkvs][jvmref -- mkfs(class, ty, fieldvar) '], ty, st[rkvs])) ∧ okval(st[rkvs][jvmref -- mkfs(class, ty, fieldvar) '], ty) |
⊦ validvals(str, rkvs + rkvs0, st) ↔ validvals(str, rkvs, st) ∧ validvals(str, rkvs0, st)
⊦ validvals(str, rkv ', st) ↔ validval(str, rkv .1, rkv .2, st)
mkfs(class, ty, fieldvar) ' ∈ statfields(class), tdname∃(str, class), initdone(class, st), jvmref -- mkfs(class, ty, fieldvar) ' ∈ st, okval(st[jvmref -- mkfs(class, ty, fieldvar) '], ty), type∃(str, ty), jvmref ∈ st, validvals(str, rkvs1, st), validval(str, jvmref -- mkfs(class, ty, fieldvar) ', val, st), validvals(str, rkvs0, st), is_reftype(ty) → validrefval(str, st[jvmref -- mkfs(class, ty, fieldvar) '], ty, st) ⊦ ty = void_type, jvmref -- mkfs(class, ty, fieldvar) ' ∈ rkvs0, ( is_reftype(ty) → validrefval (str, st[rkvs1 + ((jvmref -- mkfs(class, ty, fieldvar) ') × val) ' + rkvs0][jvmref -- mkfs(class, ty, fieldvar) '], ty, st[rkvs1 + ((jvmref -- mkfs(class, ty, fieldvar) ') × val) ' + rkvs0])) ∧ okval(st[rkvs1 + ((jvmref -- mkfs(class, ty, fieldvar) ') × val) ' + rkvs0][jvmref -- mkfs(class, ty, fieldvar) '], ty)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (rkvs + rkvs0) + rkvs1 = rkvs + rkvs0 + rkvs1], [CSIMPSEQ : ⊦ (rk × val) .2 = val], [CSIMPSEQ : ⊦ (rk × val) .1 = rk], [CSIMPSEQ : ⊦ rkv + rkvs = rkv ' + rkvs])]]