'Technically' intractable problems are solvable just fine in a way that is almost as useful as solving them completely if you can achieve one of two things:
* Reliably identify when you've encountered an unsolvable case (usefulness of this approach depends on the exact problem you're solving).
or
* Reduce the probability of unsolvable cases/incorrect solutions to a level low enough to not actually happen in practice.
'Technically' GUIDs are impossible, reliable network communication (TCP) is impossible, O^2 time complexity functions will grow to unusably large running times - but in practice all of these things are used constantly to solve real problems.
"Distributed locks" are at best a contention-reduction mechanism. They cannot be used to implement mutual exclusion that is _guaranteed_ to work.
I've seen way too many systems where people assume TCP == perfectly reliable and distributed locks == mutual exclusion. Which of course it's not the case.
'Technically' intractable problems are solvable just fine in a way that is almost as useful as solving them completely if you can achieve one of two things:
* Reliably identify when you've encountered an unsolvable case (usefulness of this approach depends on the exact problem you're solving).
or
* Reduce the probability of unsolvable cases/incorrect solutions to a level low enough to not actually happen in practice.
'Technically' GUIDs are impossible, reliable network communication (TCP) is impossible, O^2 time complexity functions will grow to unusably large running times - but in practice all of these things are used constantly to solve real problems.