# Function (mathematics)

In mathematics, a **function**^{[note 1]} from a set X to a set Y assigns to each element of X exactly one element of Y. The set X is called the domain of the function and the set Y is called the codomain of the function.

Functions were originally the idealization of how a varying quantity depends on another quantity. For example, the position of a planet is a *function* of time. Historically, the concept was elaborated with the infinitesimal calculus at the end of the 17th century, and, until the 19th century, the functions that were considered were differentiable (that is, they had a high degree of regularity). The concept of a function was formalized at the end of the 19th century in terms of set theory, and this greatly enlarged the domains of application of the concept.

A function is most often denoted by letters such as f, g and h, and the value of a function f at an element x of its domain is denoted by *f(x)*.

A function is uniquely represented by the set of all pairs (*x*, *f* (*x*)), called the *graph of the function*.^{[note 2]}^{[1]} When the domain and the codomain are sets of real numbers, each such pair may be thought of as the Cartesian coordinates of a point in the plane. The set of these points is called the graph of the function; it is a popular means of illustrating the function.

Functions are widely used in science, and in most fields of mathematics. It has been said that functions are "the central objects of investigation" in most fields of mathematics.^{[2]}

A **function** from a set X to a set Y is an assignment of an element of Y to each element of X. The set X is called the domain of the function and the set Y is called the codomain of the function.

A function, its domain, and its codomain, are declared by the notation *f*: *X*→*Y*, and the value of a function f at an element x of X, denoted by *f(x)*, is called the *image* of x under f, or the *value* of f applied to the *argument* x.

Functions are also called *maps* or *mappings*, though some authors make some distinction between "maps" and "functions" (see § Other terms).

Two functions f and g are equal if their domain and codomain sets are the same and their output values agree on the whole domain. More formally, given *f*: *X* → *Y* and *g*: *X* → *Y*, we have *f* = *g* if and only if *f*(*x*) = *g*(*x*) for all *x* ∈ *X*.^{[3]}^{[note 3]}

The domain and codomain are not always explicitly given when a function is defined, and, without some (possibly difficult) computation, one might only know that the domain is contained in a larger set. Typically, this occurs in mathematical analysis, where "a function from X to Y " often refers to a function that may have a proper subset^{[note 4]} of X as domain. For example, a "function from the reals to the reals" may refer to a real-valued function of a real variable. However, a "function from the reals to the reals" does not mean that the domain of the function is the whole set of the real numbers, but only that the domain is a set of real numbers that contains a non-empty open interval. Such a function is then called a partial function. For example, if f is a function that has the real numbers as domain and codomain, then a function mapping the value x to the value *g*(*x*) = 1/*f*(*x*) is a function g from the reals to the reals, whose domain is the set of the reals x, such that *f*(*x*) ≠ 0.

The range or image of a function is the set of the images of all elements in the domain.^{[4]}^{[5]}^{[6]}^{[7]}

In the relational approach, a function *f*: *X*→*Y* is a binary relation between X and Y that associates to each element of X exactly one element of Y. That is, *f* is defined by a set G of ordered pairs (*x*, *y*) with *x* ∈ *X*, *y* ∈ *Y*, such that every element of *X* is the first component of exactly one ordered pair in G. In other words, for every *x* in *X*, there is exactly one element *y* such that the ordered pair (*x*, *y*) belongs to the set of pairs defining the function *f*. The set G is called the graph of f. Some authors identify it with the function;^{[8]} however, in common usage, the function is generally distinguished from its graph. In this approach, a function is defined as an ordered triple (*X*, *Y*, *G*). In this notation, whether a function is surjective (see below) depends on the choice of Y.

Any subset of the Cartesian product of two sets *X* and *Y* defines a binary relation *R* ⊆ *X* × *Y* between these two sets. It is immediate that an arbitrary relation may contain pairs that violate the necessary conditions for a function given above.

The set of all functions from some given domain to a codomain can be identified with the Cartesian product of copies of the codomain, indexed by the domain. Namely, given sets *X* and *Y*, any function *f*: *X* → *Y* is an element of the Cartesian product of copies of *Y*s over the index set *X*:

Viewing *f* as tuple with coordinates, then for each *x* ∈ *X*, the *x*th coordinate of this tuple is the value *f*(*x*) ∈ *Y*. This reflects the intuition that for each *x* ∈ *X*, the function *picks* some element *y* ∈ *Y*, namely, *f*(*x*). (This point of view is used for example in the discussion of a choice function.)

Infinite Cartesian products are often simply "defined" as sets of functions.^{[10]}

There are various standard ways for denoting functions. The most commonly used notation is functional notation, which is the first notation described below.

In functional notation, the function is immediately given a name, such as f, and its definition is given by what f does to the explicit argument x, using a formula in terms of x. For example, the function which takes a real number as input and outputs that number plus 1 is denoted by

In this example, the function f takes a real number as input, squares it, then adds 1 to the result, then takes the sine of the result, and returns the final result as the output.

When the symbol denoting the function consists of several characters and no ambiguity may arise, the parentheses of functional notation might be omitted. For example, it is common to write sin *x* instead of sin(*x*).

Functional notation was first used by Leonhard Euler in 1734.^{[11]} Some widely used functions are represented by a symbol consisting of several letters (usually two or three, generally an abbreviation of their name). In this case, a roman type is customarily used instead, such as "sin" for the sine function, in contrast to italic font for single-letter symbols.

When using this notation, one often encounters the abuse of notation whereby the notation *f*(*x*) can refer to the value of f at x, or to the function itself. If the variable x was previously declared, then the notation *f*(*x*) unambiguously means the value of f at x. Otherwise, it is useful to understand the notation as being both simultaneously; this allows one to denote composition of two functions f and g in a succinct manner by the notation *f*(*g*(*x*)).

However, distinguishing f and *f*(*x*) can become important in cases where functions themselves serve as inputs for other functions. (A function taking another function as an input is termed a *functional*.) Other approaches of notating functions, detailed below, avoid this problem but are less commonly used.

This defines a function sqr from the integers to the integers that returns the square of its input.

There are other, specialized notations for functions in sub-disciplines of mathematics. For example, in linear algebra and functional analysis, linear forms and the vectors they act upon are denoted using a dual pair to show the underlying duality. This is similar to the use of bra–ket notation in quantum mechanics. In logic and the theory of computation, the function notation of lambda calculus is used to explicitly express the basic notions of function abstraction and application. In category theory and homological algebra, networks of functions are described in terms of how they and their compositions commute with each other using commutative diagrams that extend and generalize the arrow notation for functions described above.

A function is often also called a **map** or a **mapping**, but some authors make a distinction between the term "map" and "function". For example, the term "map" is often reserved for a "function" with some sort of special structure (e.g. maps of manifolds). In particular *map* is often used in place of *homomorphism* for the sake of succinctness (e.g., linear map or *map from G to H* instead of *group homomorphism from G to H*). Some authors^{[19]} reserve the word *mapping* for the case where the structure of the codomain belongs explicitly to the definition of the function.

Some authors, such as Serge Lang,^{[20]} use "function" only to refer to maps for which the codomain is a subset of the real or complex numbers, and use the term *mapping* for more general functions.

In the theory of dynamical systems, a map denotes an evolution function used to create discrete dynamical systems. See also Poincaré map.

Whichever definition of *map* is used, related terms like *domain*, *codomain*, *injective*, *continuous* have the same meaning as for a function.

Functions are often classified by the nature of formulas that define them:

The implicit function theorem provides mild differentiability conditions for existence and uniqueness of an implicit function in the neighborhood of a point.

Many functions can be defined as the antiderivative of another function. This is the case of the natural logarithm, which is the antiderivative of 1/*x* that is 0 for *x* = 1. Another common example is the error function.

More generally, many functions, including most special functions, can be defined as solutions of differential equations. The simplest example is probably the exponential function, which can be defined as the unique function that is equal to its derivative and takes the value 1 for *x* = 0.

Functions whose domain are the nonnegative integers, known as sequences, are often defined by recurrence relations.

A graph is commonly used to give an intuitive picture of a function. As an example of how a graph helps to understand a function, it is easy to see from its graph whether a function is increasing or decreasing. Some functions may also be represented by bar charts.

On the other hand, if a function's domain is continuous, a table can give the values of the function at specific values of the domain. If an intermediate value is needed, interpolation can be used to estimate the value of the function. For example, a portion of a table for the sine function might be given as follows, with values rounded to 6 decimal places:

Before the advent of handheld calculators and personal computers, such tables were often compiled and published for functions such as logarithms and trigonometric functions.

Bar charts are often used for representing functions whose domain is a finite set, the natural numbers, or the integers. In this case, an element x of the domain is represented by an interval of the x-axis, and the corresponding value of the function, *f*(*x*), is represented by a rectangle whose base is the interval corresponding to x and whose height is *f*(*x*) (possibly negative, in which case the bar extends below the x-axis).

This section describes general properties of functions, that are independent of specific properties of the domain and the codomain.

The *image* of *f* is the image of the whole domain, that is, *f*(*X*).^{[21]} It is also called the range of f,^{[4]}^{[5]}^{[6]}^{[7]} although the term *range* may also refer to the codomain.^{[7]}^{[21]}^{[22]}

The preimage by f of an element y of the codomain is sometimes called, in some contexts, the fiber of *y* under *f*.

"One-to-one" and "onto" are terms that were more common in the older English language literature; "injective", "surjective", and "bijective" were originally coined as French words in the second quarter of the 20th century by the Bourbaki group and imported into English.^{[citation needed]} As a word of caution, "a one-to-one function" is one that is injective, while a "one-to-one correspondence" refers to a bijective function. Also, the statement "*f* maps *X* *onto* *Y*" differs from "*f* maps *X* *into* *B*", in that the former implies that *f* is surjective, while the latter makes no assertion about the nature of *f*. In a complicated reasoning, the one letter difference can easily be missed. Due to the confusing nature of this older terminology, these terms have declined in popularity relative to the Bourbakian terms, which have also the advantage of being more symmetrical.

An *extension* of a function f is a function g such that f is a restriction of g. A typical use of this concept is the process of analytic continuation, that allows extending functions whose domain is a small part of the complex plane to functions whose domain is almost the whole complex plane.

A **multivariate function**, or **function of several variables** is a function that depends on several arguments. Such functions are commonly encountered. For example, the position of a car on a road is a function of the time travelled and its average speed.

More formally, a function of n variables is a function whose domain is a set of n-tuples.
For example, multiplication of integers is a function of two variables, or **bivariate function**, whose domain is the set of all pairs (2-tuples) of integers, and whose codomain is the set of integers. The same is true for every binary operation. More generally, every mathematical operation is defined as a multivariate function.

It is common to also consider functions whose codomain is a product of sets. For example, Euclidean division maps every pair (*a*, *b*) of integers with *b* ≠ 0 to a pair of integers called the *quotient* and the *remainder*:

The codomain may also be a vector space. In this case, one talks of a vector-valued function. If the domain is contained in a Euclidean space, or more generally a manifold, a vector-valued function is often called a vector field.

The idea of function, starting in the 17th century, was fundamental to the new infinitesimal calculus (see History of the function concept). At that time, only real-valued functions of a real variable were considered, and all functions were assumed to be smooth. But the definition was soon extended to functions of several variables and to functions of a complex variable. In the second half of the 19th century, the mathematically rigorous definition of a function was introduced, and functions with arbitrary domains and codomains were defined.

Functions are now used throughout all areas of mathematics. In introductory calculus, when the word *function* is used without qualification, it means a real-valued function of a single real variable. The more general definition of a function is usually introduced to second or third year college students with STEM majors, and in their senior year they are introduced to calculus in a larger, more rigorous setting in courses such as real analysis and complex analysis.

A *real function* is a real-valued function of a real variable, that is, a function whose codomain is the field of real numbers and whose domain is a set of real numbers that contains an interval. In this section, these functions are simply called *functions*.

The functions that are most commonly considered in mathematics and its applications have some regularity, that is they are continuous, differentiable, and even analytic. This regularity insures that these functions can be visualized by their graphs. In this section, all functions are differentiable in some interval.

Functions enjoy pointwise operations, that is, if f and g are functions, their sum, difference and product are functions defined by

The domains of the resulting functions are the intersection of the domains of f and g. The quotient of two functions is defined similarly by

but the domain of the resulting function is obtained by removing the zeros of g from the intersection of the domains of f and g.

Many other real functions are defined either by the implicit function theorem (the inverse function is a particular instance) or as solutions of differential equations. For example, the sine and the cosine functions are the solutions of the linear differential equation

When the elements of the codomain of a function are vectors, the function is said to be a vector-valued function. These functions are particularly useful in applications, for example modeling physical properties. For example, the function that associates to each point of a fluid its velocity vector is a vector-valued function.

In mathematical analysis, and more specifically in functional analysis, a **function space** is a set of scalar-valued or vector-valued functions, which share a specific property and form a topological vector space. For example, the real smooth functions with a compact support (that is, they are zero outside some compact set) form a function space that is at the basis of the theory of distributions.

Function spaces play a fundamental role in advanced mathematical analysis, by allowing the use of their algebraic and topological properties for studying properties of functions. For example, all theorems of existence and uniqueness of solutions of ordinary or partial differential equations result of the study of function spaces.

Usefulness of the concept of multi-valued functions is clearer when considering complex functions, typically analytic functions. The domain to which a complex function may be extended by analytic continuation generally consists of almost the whole complex plane. However, when extending the domain through two different paths, one often gets different values. For example, when extending the domain of the square root function, along a path of complex numbers with positive imaginary parts, one gets i for the square root of −1; while, when extending through complex numbers with negative imaginary parts, one gets −*i*. There are generally two ways of solving the problem. One may define a function that is not continuous along some curve, called a branch cut. Such a function is called the principal value of the function. The other way is to consider that one has a *multi-valued function*, which is analytic everywhere except for isolated singularities, but whose value may "jump" if one follows a closed loop around a singularity. This jump is called the monodromy.

The definition of a function that is given in this article requires the concept of set, since the domain and the codomain of a function must be a set. This is not a problem in usual mathematics, as it is generally not difficult to consider only functions whose domain and codomain are sets, which are well defined, even if the domain is not explicitly defined. However, it is sometimes useful to consider more general functions.

These generalized functions may be critical in the development of a formalization of the foundations of mathematics. For example, Von Neumann–Bernays–Gödel set theory, is an extension of the set theory in which the collection of all sets is a class. This theory includes the replacement axiom, which may be stated as: If X is a set and F is a function, then *F*[*X*] is a set.

In computer programming, a function is, in general, a piece of a computer program, which implements the abstract concept of function. That is, it is a program unit that produces an output for each input. However, in many programming languages every subroutine is called a function, even when there is no output, and when the functionality consists simply of modifying some data in the computer memory.

Functional programming is the programming paradigm consisting of building programs by using only subroutines that behave like mathematical functions. For example, `if_then_else`

is a function that takes three functions as arguments, and, depending on the result of the first function (*true* or *false*), returns the result of either the second or the third function. An important advantage of functional programming is that it makes easier program proofs, as being based on a well founded theory, the lambda calculus (see below).

Except for computer-language terminology, "function" has the usual mathematical meaning in computer science. In this area, a property of major interest is the computability of a function. For giving a precise meaning to this concept, and to the related concept of algorithm, several models of computation have been introduced, the old ones being general recursive functions, lambda calculus and Turing machine. The fundamental theorem of computability theory is that these three models of computation define the same set of computable functions, and that all the other models of computation that have ever been proposed define the same set of computable functions or a smaller one. The Church–Turing thesis is the claim that every philosophically acceptable definition of a *computable function* defines also the same functions.

General recursive functions are partial functions from integers to integers that can be defined from

Although defined only for functions from integers to integers, they can model any computable function as a consequence of the following properties:

Lambda calculus is a theory that defines computable functions without using set theory, and is the theoretical background of functional programming. It consists of *terms* that are either variables, function definitions (*𝜆*-terms), or applications of functions to terms. Terms are manipulated through some rules, (the *α*-equivalence, the β-reduction, and the η-conversion), which are the axioms of the theory and may be interpreted as rules of computation.

In its original form, lambda calculus does not include the concepts of domain and codomain of a function. Roughly speaking, they have been introduced in the theory under the name of *type* in typed lambda calculus. Most kinds of typed lambda calculi can define fewer functions than untyped lambda calculus.