| dups(fis0 .vals .nonnullrefs) → dups(fis0 .keys) ∨ (∃ r, sk, sk0. sk ≠ sk0 ∧ r ≠ jvmref ∧ fis0[sk] = refval(r) ∧ fis0[sk0] = refval(r) ∧ sk ∈ fis0 ∧ sk0 ∈ fis0), dups((fv + fis0) .vals .nonnullrefs) ⊦ dups((fv + fis0) .keys), ∃ r, sk, sk0. sk ≠ sk0 ∧ r ≠ jvmref ∧ (fv + fis0)[sk] = refval(r) ∧ (fv + fis0)[sk0] = refval(r) ∧ sk ∈ fv + fis0 ∧ sk0 ∈ fv + fis0 |
⊦ (fv ' + fis) .vals = fv .2 ' + fis .vals
⊦ (fis + fis0) .keys = fis .keys + fis0 .keys
⊦ fv ' .keys = fv .1 '
dups(fv .2 ' .nonnullrefs + fis0 .vals .nonnullrefs), dups(fis0 .vals .nonnullrefs) → sk ≠ sk0 ∧ r ≠ jvmref ∧ fis0[sk] = refval(r) ∧ fis0[sk0] = refval(r) ∧ sk ∈ fis0 ∧ sk0 ∈ fis0 ⊦ dups(fis0 .keys), fv .1 ∈ fis0 .keys, ∃ r0, sk1, sk2. sk1 ≠ sk2 ∧ r0 ≠ jvmref ∧ (fv ' + fis0)[sk1] = refval(r0) ∧ (fv ' + fis0)[sk2] = refval(r0) ∧ (sk1 ∈ fv ' ∨ sk1 ∈ fis0) ∧ (sk2 ∈ fv ' ∨ sk2 ∈ fis0)
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : assoclist, fieldinit, in-append, ⊦ sk ∈ fis + fis0 ↔ sk ∈ fis ∨ sk ∈ fis0], [CSIMPNAMEDSEQ : list, storekeys, a, ⊦ (sks + sks0) + sks1 = sks + sks0 + sks1], [CSIMPNAMEDSEQ : list-dup, storekeys, dups-cons, ⊦ dups(sk ' + sks) ↔ dups(sks) ∨ sk ∈ sks], [CSIMPNAMEDSEQ : list, javavalues, a, ⊦ (vals + vals0) + vals1 = vals + vals0 + vals1], [CSIMPNAMEDSEQ : valuesfuns, , nonnullrefs-append, ⊦ (vals + vals0) .nonnullrefs = vals .nonnullrefs + vals0 .nonnullrefs], [CSIMPNAMEDSEQ : list, fieldinit-assoclista, a, ⊦ (fis + fis0) + fis1 = fis + fis0 + fis1], [CSIMPNAMEDSEQ : list, fieldinit-assoclista, c, ⊦ fv + fis = fv ' + fis])]]