Non-fungibility by law does not mean non-fungibility in nature.
For example, water is property and therefore it is not fungible, by your logic. But if I steal your water and I pour it into a lake, I would like to see you try to get it back.
Bitcoin is intangible and as a result it is fungible like water. There is a history of bitcoins passing from address to address, but there is no way to distinguish individual satoshis because they don't actually exist.
Not true. That's not how the
BTC blockchain works. You can easily trace stolen
BTC, and that's what happened with the klee stolen bitcoins. In fact, in that thread, you will notice that a innocent third party who had, through a mixer, ended up with some of the stolen bitcoins of klee was asking the forum whether it's Ok to spend them, or whether he would have to return them (apparently he thought bitcoins were not fungible by law, which is mistaken, but it shows you can easily trace bitcoins).
That is how the blockchain works. You can
sometimes track bitcoins and that has happened on a few occasions. You can
sometimes track water: If I have a red bucket of water, and you give me a blue bucket of water, later I can give a bucket of water to odolvlobo and he can know which chunk of water he's received by the colour of the bucket. Sometimes, however, you cannot track water: I take a large green bucket and pour the contents of both the red and blue bucket into it. Later, I meet odolvlobo and pour him half of the green bucket's water. Now the question of which chunk of water he's received is nonsensical; the chunks of water lost their identities when they were combined. Water is not traceable in general. Bitcoin is not traceable in general.
You can't distinguish one satoshi from another. For example, if a thief sends 2 BTC, 1 stolen and 1 clean, to 1xyz..., you cannot not look at 1xyz... and determine which satoshis are stolen and which are clean.
Well put. Here's a closely related fiat example to help those still struggling with the concept.
Suppose I have two bank accounts, $200 with Chase and $0 with HSBC. On Monday, I transfer $100 from Chase to HSBC. On Tuesday, I send the remaining $100 to HSBC. On Wednesday. I transfer $100 back from HSBC to Chase. Which $100 does Chase now have? Are they the Monday dollars or the Tuesday dollars, or perhaps a mixture of both?