| validref(str, r, ty, st) ⊦ r = jvmref, is_typevalue(st[r0 -- _type]) ∧ is_reftype(st[r0 -- _type] .type), (st[r0 -- fs ', val][r -- _type]) .type ≤ ty ∧ ¬ junkref(str, r, st[r0 -- fs ', val]) |
⊦ ¬ is_reftype(st[r -- _type] .type) ∧ r ≠ jvmref → ¬ validref(str, r, ty, st)
validref(str, r, ty, st) ⊦ r -- _type = r0 -- fs ', r = jvmref, is_typevalue(st[r0 -- _type]) ∧ is_reftype(st[r0 -- _type] .type), (st[r0 -- fs ', val][r -- _type]) .type ≤ ty ∧ ¬ junkref(str, r, st[r0 -- fs ', val])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ r = r0 ∧ sk = sk0], [CSIMPSEQ : ⊦ (st[rk, val][rk]) = val], [CSIMPSEQ : ⊦ ¬ is_typevalue(val) → val .type = void_type], [CSIMPSEQ : ⊦ ¬ is_reftype(void_type)])], [EXTRAFMAS : (r -- _type = r0 -- fs ')]]