| st[r -- _type] .type = mkclasstype(class0), is_obj(str, r, st[r -- mkfs(class, mkclasstype(class1), fieldvar) ', refval(r)]), is_valid_ref(str, r, st), mkfs(class, mkclasstype(class1), fieldvar) ' ∈ instfields(class0), class0 ≤ class1 ⊦ r = jvmref, validrefs(str, r ', mkclasstype(class1), st[r -- mkfs(class, mkclasstype(class1), fieldvar) ', refval(r)]) |
⊦ validrefs(str, r ', ty, st) ↔ r = jvmref ∨ r ≠ jvmref ∧ is_valid_ref(str, r, st) ∧ st[r -- _type] .type ≤ ty
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ is_obj(str, r, st) → is_valid_ref(str, r, st)], [CSIMPSEQ : ⊦ (st[ r0 -- mkfs (class, mkclasstype(class0), fieldvar) ', val] [r -- _type ] ) = st[r -- _type]], [CSIMPSEQ : ⊦ mkclasstype(class1) ≤ mkclasstype(class2) ↔ class1 ≤ class2])], [EXTRATERMS : (st[r -- mkfs(class, mkclasstype(class1), fieldvar) ', refval(r)], mkclasstype(class1), r, str)]]