Because you can't compile a mathematical definition.
If we imagine that the hash function came only as a mathematical definition, how would your test your new implementation in LangOfTheWeek is correct?
Well, you have 2 options. One, you can prove that your program behaves, in every important way, the same as the definition. This is long, tedious work, and most programmers don't even have the necessary skills for this. Two, you can make a reference implemention in some other language, and compare the outputs.
Now, given, say, 100 programmers each working on their own functions, we should have 1 resulting behaviour. This will mean that everybody implemented the algorithm 100% correctly. However, the actual number will be between 1 and 100, depending on the skills of the programmers, and the care they've taken in implementing the functions.
Now, what's the result here? (no pun intended). It's likely to be chaos.
That's why it's very convenient to have a single reference source.
If A = B and B = C, then A = C, except where void or prohibited by law. -- Roy Santoro