| st[r1 -- _type] .type = mkclasstype(class), path∃(str, r3, r0, st), path∃(str, r2, r0, st), sk ∈ instfields(class), r1 ∈ refs, r ∈ refs, disjoint(str, refs, st) ⊦ r = r1, r1 = jvmref, r0 = jvmref, r3 = r2, junkref(str, r1, st), ¬ r3 ∈ refs -l r1 ∧ r3 ≠ st[r1 -- sk] .refval, ¬ r2 ∈ refs -l r1 ∧ r2 ≠ st[r1 -- sk] .refval |
⊦ disjoint(str, refs, st) ↔ ¬ (∃ r, r0, r1. r ∈ refs ∧ r0 ∈ refs ∧ r ≠ r0 ∧ r1 ≠ jvmref ∧ path∃(str, r, r1, st) ∧ path∃(str, r0, r1, st))
st[r1 -- _type] .type = mkclasstype(class), path∃(str, r3, r0, st), path∃(str, r2, r0, st), sk ∈ instfields(class), r1 ∈ refs, r ∈ refs, ∀ r, r0, r1. ¬ (r ∈ refs ∧ r0 ∈ refs ∧ r ≠ r0 ∧ r1 ≠ jvmref ∧ path∃(str, r, r1, st) ∧ path∃(str, r0, r1, st)) ⊦ r = r1, r1 = jvmref, r0 = jvmref, r3 = r2, junkref(str, r1, st), ¬ r3 ∈ refs -l r1 ∧ r3 ≠ st[r1 -- sk] .refval, ¬ r2 ∈ refs -l r1 ∧ r2 ≠ st[r1 -- sk] .refval
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st, refs, str)]]