Double spending is the act of sending a transaction containing inputs that have already been spent, in an attempt to commit fraud on the network.
The reason for this is that double spending is a crime and analogous to intentionally bouncing a check – the difference is that the merchant would have cryptographic proof that the customer attempted such an act.
Bitcoin solves the double spending problem via its economic incentives. Miners have a strong incentive not to include these transactions in a block because they are at risk of having their block rejected by other miners as well as would be complicit in carrying out a crime.
These factors highlight why the solution to double spending is an economic solution, not a technical one. Many arguments have been made by developers in the past that changes are necessary to the protocol to fix this issue, but they are all unnecessary.