| validrefs(str, (r ' + refs1) + r1 ', st[r -- _type] .type, st[r0 -- sk, val]) ⊦ sk = _type, path∃(str, r, r0, st), junkref(str, r, st), dups(refs1), r ∈ refs1, ¬ dups(r ' + refs1) ∧ r1 ∈ r ' + refs1 ∧ (r ' + refs1) .first = r ∧ validrefs(str, (r ' + refs1) + r1 ', st[(r ' + refs1) .first -- _type] .type, st), r1 ≠ r ∧ ¬ r1 ∈ refs1 |
validrefs(str, (r ' + refs1) + r1 ', st[r -- _type] .type, st[r0 -- sk, val]) ⊦ sk = _type, path∃(str, r, r0, st), junkref(str, r, st), dups(refs1), r ∈ refs1, r1 ≠ r ∧ ¬ r1 ∈ refs1, (r1 = r ∨ r1 ∈ refs1) ∧ validrefs(str, (r ' + refs1) + r1 ', st[r -- _type] .type, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (r ' + refs) .first = r], [CSIMPSEQ : ⊦ ¬ r ∈ r0 ' + refs ↔ r ≠ r0 ∧ ¬ r ∈ refs], [CSIMPSEQ : ⊦ (refs + refs0) + refs1 = refs + refs0 + refs1], [CSIMPSEQ : ⊦ ¬ r ∈ refs → (dups(r ' + refs) ↔ dups(refs))])]]