As you may already know, functional programming has its roots in a formal system called the Lambda calculus (or λ-calculus), which is a model of computation based on the ideas of function abstraction and application through substitution of bound variables. (Don’t worry, you’ll get the idea soon enough.)
The system was created by the American mathematician and logician Alonzo Church as a framework for answering the Entscheidungsproblem (lit. “Decision problem”) posed by the German mathematician David Hilbert in 1928. This problem can essentially be formulated as the question wether or not there exist a machine that, given a program, can compute if any given input is valid or not, according to the program.