| is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val]), list2set(refs) ∩ list2set(refs0) = ∅ ⊦ val .refval = refs0 .first, refs0 .first = st[r -- sk] .refval, refs0 = [], sk = _type, sk = _length, validrefs(str, refs + r ' + refs0, ty, st[r -- sk, val]) ↔ validrefs(str, refs + r ' + refs0, ty, st), r ∈ refs0, r ∈ refs, dups(refs0), dups(refs) |
refs0 = r0 + refs1, is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val]), list2set(refs) ∩ list2set(refs0) = ∅ ⊦ val .refval = r0, r0 = st[r -- sk] .refval, refs0 = [], sk = _type, sk = _length, validrefs(str, refs + r ' + refs0, ty, st[r -- sk, val]) ↔ validrefs(str, refs + r ' + refs0, ty, st), r ∈ refs0, r ∈ refs, dups(refs0), dups(refs)
[[CONCRETESIMPRULES : ([CSIMPELIM : refs ≠ [] ⊦ r = refs .first ∧ refs0 = refs .rest ↔ refs = r + refs0])], [EXTRATERMS : (refs0, r0, refs1)]]