We all the time write and talk about mathematical problems in plain English. For example, we define "the traveling salesman problem". But what is the actual, underlying structure of a "mathematical problem"? Can arbitrary mathematical problems be expressed exactly, in a formal language? Is it meaningful to talk about an algorithm that solves any arbitrary problem? Of course, that wouldn't decidable, but can we express it? For example, can we write a program which accepts, as input, a problem (example: "find an algorithm that sorts a list optimally") and outputs a solution (example: the merge sort algorithm)?