Users don't create coins. Miners do all the work: they do the difficulty adjustments, they create blocks, and they verify other blocks. A network with no users other than miners would still generate coins. A network made of just one miner would still generate coins. Users certainly give these coins value, but the miners create them.
Bitcoins are imaginary, and this aspect of the system is important. They were not created "mathematically" at the start. You can change the end total number of bitcoins by adding just a single "0" to the code that determines block value. These new coins would be worthless, of course, but they would still be created.
Real-life example: Due to a bug, billions of bitcoins were created in one transaction. These coins were recognized by the entire network for a while, even though they were not taken from some "global pool".
Theymos, I understand where you're coming from--but saying miners create coins is exactly like saying that printing presses create dollar bills. It confuses the sequence of the thing with the source of its identity in the eyes of anyone who doesn't already know how the whole system works. Coins don't take any work to create: the work the miners are doing is to verify transactions and create blocks. The reason we treat that one transaction they include to themselves as valid is because it allots them a subset of the pre-agreed-upon 19 million, according to the pre-agreed-upon schedule, all of which
was mathematically defined from the get-go, or none of us would have started using bitcoins as money. It is because of that mathematical definition that the multibillion coin block was considered a bug rather than just a very prolific miner, and why everyone went to so much trouble to correct it. If the network as a whole makes a change, the network as a whole will have to agree to it before it happens, thus changing the community agreement that BitCoin is. It's the same as the difference between testnet and BitCoin--only the latter is money, barring the emergence of a separate testnet community with their corresponding agreement.
Don't confuse the implementation with the abstraction--when you are teaching someone how to use a computer you tell them that the mouse "moves" the pointer even though technically what happens is that based on the electronic signal from the mouse's optical sensor pixels on the screen are varied in colour and intensity so that a pre-existing pattern is displayed using a different subset of pixels. Coins are exactly as imaginary as a mouse pointer--for human beings we choose an abstraction of the underlying mathematics that makes sense without creating unnecessary confusion. For the average user a mouse
does move the pointer, the windows
are the computer programs, you
do click a dialogue button, and bitcoins are
awarded to miners for their essential work. And that's how all the literature and software should describe it. Power users will know the difference.
Borogrove you are completely right about block validation, and you also make a good point. We
need to change the
abstraction we present to new users. Anyone who digs into the technical details will learn the
implementation of it themselves.