| (r2 ' + refs1) .last = (r1 ' + refs0) .last, validrefs(str, r1 ' + refs0, st[r1 -- _type] .type, st), validrefs(str, r2 ' + refs1, st[r2 -- _type] .type, st), path∃(str, r, r1, st), path∃(str, r, r2, st) ⊦ (r1 ' + refs0) .last = jvmref, r2 = r1, path∃(str, r2, r1, st), path∃(str, r1, r2, st), hasSharing(r, st) |
⊦ refs ≠ [] → (r ' + refs) .last = refs .last
¬ refs1 ≠ [], (r2 ' + refs1) .last = (r1 ' + refs0) .last, validrefs(str, r1 ' + refs0, st[r1 -- _type] .type, st), validrefs(str, r2 ' + refs1, st[r2 -- _type] .type, st), path∃(str, r, r1, st), path∃(str, r, r2, st) ⊦ (r1 ' + refs0) .last = jvmref, r2 = r1, path∃(str, r2, r1, st), path∃(str, r1, r2, st), hasSharing(r, st)
refs1 ≠ [], refs1 .last = (r1 ' + refs0) .last, validrefs(str, r1 ' + refs0, st[r1 -- _type] .type, st), validrefs(str, r2 ' + refs1, st[r2 -- _type] .type, st), path∃(str, r, r1, st), path∃(str, r, r2, st) ⊦ (r1 ' + refs0) .last = jvmref, r2 = r1, path∃(str, r2, r1, st), path∃(str, r1, r2, st), hasSharing(r, st)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (refs1, r2)]]