| dups(vals0 .nonnullrefs) ↔ (∃ r, m, n. vals0[m] = refval(r) ∧ vals0[n] = refval(r) ∧ r ≠ jvmref ∧ m ≠ n ∧ m < # vals0 ∧ n < # vals0) ⊦ dups((val ' + vals0) .nonnullrefs) ↔ (∃ r, m, n. (val ' + vals0)[m] = refval(r) ∧ (val ' + vals0)[n] = refval(r) ∧ r ≠ jvmref ∧ m ≠ n ∧ ¬ # vals0 < m ∧ ¬ # vals0 < n) |
⊦ ¬ is_referencevalue(val) ∨ val .refval = jvmref → (val ' + vals) .nonnullrefs = vals .nonnullrefs
¬ (¬ is_referencevalue(val) ∨ val .refval = jvmref), dups(vals0 .nonnullrefs) ↔ (∃ r, m, n. vals0[m] = refval(r) ∧ vals0[n] = refval(r) ∧ r ≠ jvmref ∧ m ≠ n ∧ m < # vals0 ∧ n < # vals0) ⊦ dups((val ' + vals0) .nonnullrefs) ↔ (∃ r, m, n. (val ' + vals0)[m] = refval(r) ∧ (val ' + vals0)[n] = refval(r) ∧ r ≠ jvmref ∧ m ≠ n ∧ ¬ # vals0 < m ∧ ¬ # vals0 < n)
¬ is_referencevalue(val) ∨ val .refval = jvmref, dups(vals0 .nonnullrefs) ↔ (∃ r, m, n. vals0[m] = refval(r) ∧ vals0[n] = refval(r) ∧ r ≠ jvmref ∧ m ≠ n ∧ m < # vals0 ∧ n < # vals0) ⊦ dups(vals0 .nonnullrefs) ↔ (∃ r, m, n. (val ' + vals0)[m] = refval(r) ∧ (val ' + vals0)[n] = refval(r) ∧ r ≠ jvmref ∧ m ≠ n ∧ ¬ # vals0 < m ∧ ¬ # vals0 < n)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (vals0, val)]]