| ∀ r, str, st0. # st0 .refs < # st .refs → ( true → cyclic(str, r, st0) ∨ junkref(str, r, st0) ∨ (∃ refs. validrefs(str, refs, st0[refs .first -- _type] .type, st0) ∧ refs ≠ [] ∧ ¬ dups(refs) ∧ refs .first = r ∧ ¬ has_reffield(refs .last, st0))) ⊦ ∃ refs. validrefs(str, refs, st[refs .first -- _type] .type, st) ∧ refs ≠ [] ∧ ¬ dups(refs) ∧ refs .first = jvmref ∧ ¬ has_reffield(refs .last, st) |
⊦ validrefs(str, jvmref ', ty, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r ' .first = r], [CSIMPSEQ : ⊦ r ' ≠ []], [CSIMPSEQ : ⊦ ¬ dups(r ')], [CSIMPSEQ : ⊦ r ' .last = r], [CSIMPSEQ : ⊦ ¬ has_reffield(jvmref, st)])], [EXTRATERMS : (jvmref ')]]