There are two general (*) calculation models : the Lambda Calculus (LC) and the Turing Model (TM) model.
Lambda Calculus approaches computation by representing it using a mathematical formalism in which the results are produced through the composition of functions over the type domain. LC is also associated with Combinatory Logic , which is considered a more generalized approach to the same topic.
The Turing Machine model approaches computation, representing it as a manipulation of characters stored in an idealized repository using a number of basic operations (such as addition, mutation, etc.).
These various computational models are the basis for different families of programming languages. Lambda calculus led to the emergence of languages such as ML , Scheme, and Haskell . The Turing model led to C , C ++ , Pascal and others. As a generalization, most functional programming has a theoretical basis in lambda calculus.
Due to the nature of the Lambda calculus, some evidence of the behavior of systems based on its principles is possible. In fact, provability (i.e., correctness ) is an important concept in LC and makes certain kinds of reasoning and conclusions about LC systems possible. LC is also associated with type theory and category theory (and relies).
In contrast, Turing models rely less on type theory and more on structuring computations as a series of state transitions in the base model. Turing Machine calculation models are more difficult to make statements and not succumb to similar mathematical proofs and manipulations that make programs based on LC. However, this does not mean that such an analysis is impossible - some important aspects of TM models are used in the study of virtualization and static analysis of programs.
Since functional programming is based on careful selection of types and conversion between types, FP can be thought of as more “mathematical."
(*) There are other calculation models, but they are less relevant for this discussion.