Theoretical computer science and mathematics theory that classifies problems according to their inherent difficulty, and relates those classes to each other