| ⊦ class+∃(str, (st[jvmref -- sk, val][r -- _type]) .type .class) ∧ ¬ is_abstract((st[jvmref -- sk, val][r -- _type]) .type .class) ∧ is_obj(r, st) ↔ is_obj(str, r, st) |
⊦ ¬ is_obj(jvmref, st)
⊦ ¬ is_obj(str, jvmref, st)
⊦ ¬ is_obj(jvmref, st)
⊦ ¬ is_obj(str, jvmref, st)
⊦ is_obj(str, r, st) ↔ class+∃(str, st[r -- _type] .type .class) ∧ ¬ is_abstract(st[r -- _type] .type .class) ∧ is_obj(r, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (st[rk, val][rk]) = val], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ r = r0 ∧ sk = sk0], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ ¬ ¬ (r = r0 ∧ sk = sk0)], [CSIMPSEQ : ⊦ r ≠ r0 → (st[r0 -- sk0, val][r -- sk]) = st[r -- sk]])], [EXTRAFMAS : (r -- _type = jvmref -- sk)]]