A reduction is a way of converting one problem into another in such a way that a solution to the second problem can be used to solve the first problem.
Turing Reductions
An oracle for a language is an external device that is capable of reporting whether any string is a member of . An oracle Turing machine is a TM with the additional capability of querying an oracle. We write to describe an oracle Turing machine with an oracle for language .
A language is decidable relative to another language if is decidable if it has an oracle for . is Turing reducible to , denoted , if is decidable relative to .
Suppose . If is decidable, then is decidable. If is undecidable, then is undecidable.
Mapping Reductions
Let be a language over and be a language over . A mapping reduction (or many-one reduction) from to is a computable function such that, for all inputs ,
If such a function exists, we write .
Polynomial Time
Language is polynomial time mapping reducible to language if a polynomial time computable function exists, where for every ,
If such a function exists, we write .
Reference Table
The following is a list of languages that are useful for constructing reductions to and from.