According to Wikipedia:
Money is any item or verifiable record that is generally accepted as payment for goods and services and repayment of debts in a particular country or socio-economic context or is easily converted to such a form. The main functions of money are distinguished as: a medium of exchange; a unit of account; a store of value. The money supply of a country consists of currency (banknotes and coins) and, depending on the particular definition used, one or more types of bank money.
In terms of David Hilbert’s Entscheidungsproblem, a definition should allow us to implement the predicate function isMoney(x) that will return true if x is money or false if it is not. As usual, the Wikipedia definition is only weakly predicatable. I do not say that the definition is wrong, but the definition is still unsatisfactory, because it is not readily usable for the purpose of computation. It is just not effectively computable. In other words, for many otherwise valid purposes, this definition must be considered to be useless.
Let’s say that the following alternative definition of money is not necessarily more correct, but rather more decidable and more computable.
Say that our person knows about n different products, numbered from 1 to n. Our person can trade in these products. This establishes the function tr(x,i,j) = y, where our person can trade x units of product i and in the best case receive y units of product j. This allows us to further establish the roundtrip trade losses function rtl, defined as: rtl(x,i,j) = tr(tr(x,i,j),j,i)) If our person trades x products i for y products j, and then trades back these y products j, he may receive only z products x back, incurring a loss of x – z.
Here we assume that when an arbitrarily-chosen person buys an arbitrarily-chosen product and sell that product back, this person will most likely incur a (roundtrip) loss. This is not always the case. Wholesalers, for example, will buy a product and sell it to retailers, expecting to make a profit.
In order to make the losses comparable, we will express them in proportion to the amount of product traded. The proportional roundtrip trade losses prtl for product x, when traded for product y, are: prtl(x,i,j) = (x – tr(tr(x,i,j),j,i)) / x.
Now we can finally attempt to define money. If for any quantity x, for a given product k and a given product l, the roundtrip trade losses ptrl(x,k,l) are smaller than the roundtrip trade losses ptrl(x,i,j) incurred for any arbitrarily picked product pair i,j, then k or l is a currency (or both are currencies):
∀ x,i,j ∈ N, 1<= i,j,k,l <= n, ptrl(x,k,l) <= ptrl(x,i,j) => isMoney(k) or isMoney(l)
From there we can classify products as currencies or non-currencies. If the distance between their best proportional roundtrip losses and the average (or median) roundtrip losses is smaller than the distance to the currency pair, then they are non-currencies.
You can verify that what we conventionally consider to be currencies have indeed very low proportional roundtrip losses, especially when traded against another currency. According to the metrics established by the definition proposal in this article, bitcoin is unambiguously a currency.