Lambda calculus can be called the smallest universal programming language. It consists of just one transformation rule (variable substitution) and just one way to define a function. Each "function definition" comes together with a list of the function's parameters, i.e. variables that can be used inside that definition. "Variable substitution" means substitution of values for variables, that is, a transformation step where an application of a function to some arguments is replaced with that function's definition in which all variables (that appear in its list of parameters) are replaced with arguments used in that application. 