| is_referencevalue(st[r -- sk]), is_obj(str, r, st), sk ∈ instfields(st[r -- _type] .type .class), unchanged(str, r, st, st1), st[r -- sk] .refval ≠ jvmref → st[st[r -- sk] .refval -- _type] .type ≤ sk .fs .type ∧ is_valid_ref(str, st[r -- sk] .refval, st) ⊦ r = jvmref, unchanged(str, st[r -- sk] .refval, st, st1) |
sk .fs = mkfs(class, ty, fieldvar), is_referencevalue(st[r -- sk]), is_obj(str, r, st), sk ∈ instfields(st[r -- _type] .type .class), unchanged(str, r, st, st1), st[r -- sk] .refval ≠ jvmref → st[st[r -- sk] .refval -- _type] .type ≤ ty ∧ is_valid_ref(str, st[r -- sk] .refval, st) ⊦ r = jvmref, unchanged(str, st[r -- sk] .refval, st, st1)
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ class = fs .class ∧ ty = fs .type ∧ fieldvar = fs .field ↔ fs = mkfs(class, ty, fieldvar)])], [EXTRATERMS : (sk .fs, class, ty, fieldvar)]]