Transformation of one computational problem to another, used to show that the second problem is as difficult as the first