| validrefs(str, refs, ty, st) ⊦ refs = [], ∃ sks. fits(refs .first, sks, st) ∧ 1 + # sks = # refs ∧ (∀ n. n ≠ 0 ∧ n ≤ # sks → st[refs .first -- firstn(n, sks)] .refval = refs[n]) |
refs = r + refs0, validrefs(str, refs, ty, st) ⊦ refs = [], ∃ sks. fits(r, sks, st) ∧ 1 + # sks = # refs ∧ (∀ n. n ≠ 0 ∧ n ≤ # sks → st[r -- firstn(n, sks)] .refval = refs[n])
[[CONCRETESIMPRULES : ([CSIMPELIM : refs ≠ [] ⊦ r = refs .first ∧ refs0 = refs .rest ↔ refs = r + refs0])], [EXTRATERMS : (refs, r, refs0)]]