| ⊦ val .refval ≠ refs0 .first ∧ refs0 .first ≠ st[r -- sk] .refval ∧ refs0 ≠ [] ∧ sk ≠ _type ∧ sk ≠ _length ∧ ¬ dups(refs + r ' + refs0) ∧ (is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val])) → (validrefs(str, refs + r ' + refs0, ty, st[r -- sk, val]) ↔ validrefs(str, refs + r ' + refs0, ty, st)) |
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)
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : setlist, references, dups-03, ⊦ ¬ dups(refs) ∧ ¬ dups(refs0) → ( dups(refs + refs0) ↔ list2set(refs) ∩ list2set(refs0) ≠ ∅)], [CSIMPNAMEDFORWARD : list-dup, references, a, ⊦ ¬ dups(refs + refs0) → ¬ dups(refs) ∧ ¬ dups(refs0)], [CSIMPNAMEDSEQ : list, references, a, ⊦ (refs + refs0) + refs1 = refs + refs0 + refs1], [CSIMPNAMEDSEQ : list-dup, references, f-01, ⊦ dups(refs + r ' + refs0) ↔ r ∈ refs ∨ r ∈ refs0 ∨ dups(refs + refs0)])]]