From [Wikipedia][1] (emphasis at the end is mine): > In complexity theory and computability theory, an oracle machine is an abstract machine used to study decision problems. It can be visualized as a Turing machine with a black box, called an oracle, which is able to decide certain decision problems in a single operation. The problem can be of any complexity class. *Even undecidable problems, like the halting problem, can be used.* Isn't assuming the existence of a machine which can decide the halting problem... problematic? The way I've heard it explained is that it's only problematic if you assume it can solve its own halting problem or any of the "super-oracles" above it. However, if an oracle O can solve the halting problem for machine M, can't M just use O to solve its own halting problem? Isn't that a contradiction, from which all propositions follow? I'm sure I'm making an elementary mistake, so please point it out :) [1]: http://en.wikipedia.org/wiki/Oracle_machine