| is_classtype(st[r0 -- _type] .type), validrefs(str, (r2 ' + refs1) + r1 ', st[r2 -- _type] .type, st) ⊦ validrefs(str, (r2 ' + refs1) + r1 ', st[r2 -- _type] .type, st[r0 -- fs ', val]), fs ' = _type, junkref(str, r2, st), fs ' ∈ instfields(st[r0 -- _type] .type .class), dups(refs1), r2 ∈ refs1, r1 ≠ r2 ∧ ¬ r1 ∈ refs1 |
⊦ validrefs(str, refs, ty, st) ∧ ¬ junkref(str, refs .first, st) ∧ fs ' ≠ _type ∧ is_classtype(st[r0 -- _type] .type) ∧ ¬ fs ' ∈ instfields(st[r0 -- _type] .type .class) ∧ refs ≠ [] ∧ ¬ dups(refs .butlast) → validrefs(str, refs, ty, st[r0 -- fs ', val])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (r ' + refs) .first = r], [CSIMPSEQ : ⊦ ¬ refs + refs0 ≠ [] ↔ refs = [] ∧ refs0 = []], [CSIMPSEQ : ⊦ r ' ≠ []], [CSIMPSEQ : ⊦ (refs + r ') .butlast = refs], [CSIMPSEQ : ⊦ ¬ r ∈ refs → (dups(r ' + refs) ↔ dups(refs))], [CSIMPSEQ : ⊦ (refs + refs0) + refs1 = refs + refs0 + refs1])], [EXTRATERMS : (val, fs, r0, st, st[r2 -- _type] .type, (r2 ' + refs1) + r1 ', str)]]