Regarding cryptography and the issue of collisions, I posed a question as to whether it was ever possible to store every single possible combination of a bit array of a particular size, in a bit array that was at least one bit smaller, with apodictic certainty that no collision would occur. 

The answer given to me by one fellow was no, and he used the following example:

```
Given 4 bits
0000
It has 16 possible combinations
Try storing 16 possible combinations in 3 bits:
000
```

While this was seemingly obvious on the smaller scale, I wonder that if you scaled up, whether this would remain true, given that more bits will offer far more flexibility and options ( and yet conversely you requiring more combinations to account for ). I have a hard time imagining it NOT remaining true, however perhaps there is something I am overlooking. 

Working under the presumption that this is not possible; Why is it that md5 is reprimanded for generating collisions:
https://en.wikipedia.org/wiki/MD5#Collision_vulnerabilities

When frankly given the principle, that literally no hash should be immune to this problem?