| is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val]), list2set(refs) ∩ list2set(refs1) = ∅ ⊦ val .refval = r0, r0 = st[r -- sk] .refval, sk = _type, sk = _length, validrefs(str, refs + r ' + r0 ' + refs1, ty, st[r -- sk, val]) ↔ validrefs(str, refs + r ' + r0 ' + refs1, ty, st), r = r0, dups(refs), r0 ∈ refs, r ∈ refs1, r ∈ refs, dups(refs1), r0 ∈ refs1 |
is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val]), list2set([]) ∩ list2set(refs1) = ∅ ⊦ val .refval = r0, r0 = st[r -- sk] .refval, sk = _type, sk = _length, validrefs(str, [] + r ' + r0 ' + refs1, ty, st[r -- sk, val]) ↔ validrefs(str, [] + r ' + r0 ' + refs1, ty, st), r = r0, dups([]), r0 ∈ [], r ∈ refs1, r ∈ [], dups(refs1), r0 ∈ refs1
∀ str, r, st, sk, val, refs1, r0, ty. (is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val])) ∧ list2set(refs0) ∩ list2set(refs1) = ∅ → val .refval = r0 ∨ r0 = st[r -- sk] .refval ∨ sk = _type ∨ sk = _length ∨ (validrefs(str, refs0 + r ' + r0 ' + refs1, ty, st[r -- sk, val]) ↔ validrefs(str, refs0 + r ' + r0 ' + refs1, ty, st)) ∨ r = r0 ∨ dups(refs0) ∨ r0 ∈ refs0 ∨ r ∈ refs1 ∨ r ∈ refs0 ∨ dups(refs1) ∨ r0 ∈ refs1, is_valid_ref(str, r, st) ↔ is_valid_ref(str, r, st[r -- sk, val]), list2set(r1 + refs0) ∩ list2set(refs1) = ∅ ⊦ val .refval = r0, r0 = st[r -- sk] .refval, sk = _type, sk = _length, validrefs(str, (r1 + refs0) + r ' + r0 ' + refs1, ty, st[r -- sk, val]) ↔ validrefs(str, (r1 + refs0) + r ' + r0 ' + refs1, ty, st), r = r0, dups(r1 + refs0), r0 ∈ r1 + refs0, r ∈ refs1, r ∈ r1 + refs0, dups(refs1), r0 ∈ refs1
[[CONCRETESIMPRULES : ([CSIMPGEN : references generated by [], +;])]]