language: add not builtin
Now that we have matchN as a builtin, it feels sensible to add not(X) as an alias for matchN(0, [X]).
Related to #943.
One thing that just occurred to me: it might be hard to distinguish between ! the boolean operator and not the validation operator when explaining CUE or reading CUE code aloud. I'm wondering if never might be a better word than not.
never works i think. i'd also offer up isnt, exclude, prevent, or block to be honest, though block might be confusing with struct for some brand new users. but that's just me. it should be related to match but the opposite or near the opposite, yes? i've been expecting a keep , include to be possible as a 'filter' (a combination of possibly multiple matchN/existsN), and exclude would mirror that while linking linguistically to match as well. but ideally none of these are needed and just a nice existsN/matchN family of patterns should do. i assume these words are verbs on type terms/features/factors/schemas so my actual vote is isnt in order to have an 'is-a, is-not-a, inheritance' kind of vibe. is would be unary equals if you all wanted as well i think. isN and isntN is interesting to think about for me too. almost always when thinking of a unit operation i also try to imagine the inverse and the group version, then i check out symmetries with other 'gameplay elements'. also i think these should all be group functions (i.e. take in lists) and i think some should output lists with information about which items in the list met the functions conditions.