This is something I've been working on.
I would like "small" below to be much smaller than what follows. But this would work for your purposes for a set of binary strings $S$, cryptographic hash $H(x)$, and pre-shared key $k$.
$H(S)=\text{sort} \{H(x) | x \in S\}$. Call this the public witness for $S$. You can hide the size of the set by including random hashes to a given length modulus. This would be a public witness with no integrity, but gives the basic idea.
Assuming the size of $x$ is generally much larger than $H(x)$, the representation of the witness $H(S)$ for $S$ is small compared to the representation for $S$.
If you want to restrict this to those with a pre-shared symmetric key k: (I use $+$ for append to distinguish from the set "such that")
$H^2(k+S)=\text{sort} \{H(k+H(k+x)) | x \in S\}$. Append a keyed-checksum for an integrity check.
$\text{witness for S}: H^2(k+S) + H(k+H^2(k+S))$
Again, to hide the size of $S$ you could always add random hashes to a max size or (imperfectly) to a size modulus.
Checking for membership: send $(n,H(k+n) \bigoplus H(k+x))$ where $n$ is an incrementing number (it may be implied such as a timestamp). The recipient can uncover $H(k+x)$ and then compute $H(k+H(k+x))$ to see if it is in the witness set.