| is_classtype(st[r0 -- _type] .type), validrefs(str, (r ' + refs0) + r1 ', st[r -- _type] .type, st[r0 -- fs ', val]) ⊦ validrefs(str, (r ' + refs0) + r1 ', st[r -- _type] .type, st), fs ' = _type, junkref(str, r, st), fs ' ∈ instfields(st[r0 -- _type] .type .class), dups(refs0), r ∈ refs0, r1 ≠ r ∧ ¬ r1 ∈ refs0 |
⊦ ¬ 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[r -- _type] .type, (r ' + refs0) + r1 ', str)]]