| st[(r ' + refs) .last -- _type] .type = mkclasstype(class), is_obj(str, (r ' + refs) .last, st), is_valid_ref(str, r, st), validrefs(str, r ' + refs + st[(r ' + refs) .last -- fs '] .refval ', mkclasstype(`java.lang.Object' .class), st), validrefs(str, r ' + refs, mkclasstype(`java.lang.Object' .class), st), validrefs(str, st[(r ' + refs) .last -- fs '] .refval ', fs .type, st), is_referencevalue(st[(r ' + refs) .last -- fs ']), fs ' ∈ instfields(class) ⊦ (r ' + refs) .last = jvmref, r = jvmref, r = st[(r ' + refs) .last -- fs '] .refval, ∃ fs0. fs0 ' ∈ instfields(class) ∧ is_referencevalue(st[(r ' + refs) .last -- fs0 ']) ∧ st[(r ' + refs) .last -- fs0 '] .refval = st[(r ' + refs) .last -- fs '] .refval |
fs = mkfs(class0, ty, fieldvar), st[(r ' + refs) .last -- _type] .type = mkclasstype(class), is_obj(str, (r ' + refs) .last, st), is_valid_ref(str, r, st), validrefs(str, r ' + refs + st[(r ' + refs) .last -- fs '] .refval ', mkclasstype(`java.lang.Object' .class), st), validrefs(str, r ' + refs, mkclasstype(`java.lang.Object' .class), st), validrefs(str, st[(r ' + refs) .last -- fs '] .refval ', ty, st), is_referencevalue(st[(r ' + refs) .last -- fs ']), fs ' ∈ instfields(class) ⊦ (r ' + refs) .last = jvmref, r = jvmref, r = st[(r ' + refs) .last -- fs '] .refval, ∃ fs0. fs0 ' ∈ instfields(class) ∧ is_referencevalue(st[(r ' + refs) .last -- fs0 ']) ∧ st[(r ' + refs) .last -- fs0 '] .refval = st[(r ' + refs) .last -- fs '] .refval
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ class = fs .class ∧ ty = fs .type ∧ fieldvar = fs .field ↔ fs = mkfs(class, ty, fieldvar)])], [EXTRATERMS : (fs, class0, ty, fieldvar)]]