| path∃(str, r, r0, st[r0 -- sk, val]) ⊦ sk = _type, path∃(str, r, r0, st), junkref(str, r, st) |
⊦ r ≠ r0 → (path∃(str, r, r0, st) ↔ (∃ refs. refs ≠ [] ∧ refs .first = r ∧ refs .last = r0 ∧ ¬ dups(refs) ∧ validrefs(str, refs, st[r -- _type] .type, st)))
⊦ path∃(str, r, r, st) ↔ r = jvmref ∨ r ≠ jvmref ∧ is_valid_ref(str, r, st)
r ≠ r0, ∃ refs. refs ≠ [] ∧ refs .first = r ∧ refs .last = r0 ∧ ¬ dups(refs) ∧ validrefs(str, refs, (st[r0 -- sk, val][r -- _type]) .type, st[r0 -- sk, val]) ⊦ sk = _type, path∃(str, r, r0, st), junkref(str, r, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ is_valid_ref(str, r, st) ∧ r ≠ jvmref → junkref(str, r, st)])], [EXTRATERMS : (st[r0 -- sk, val], r0, r, str)]]