Conceptos Matemáticos y Terminología para la Programación Funcional
Una función, \(f\), es una aplicación (relación) de un conjunto \(A\) en un conjunto \(B\) tal que cada elemento de \(A\) se relaciona con un único elemento de \(B\). Lo notaremos por \(f:A \rightarrow B\). El conjunto \(A\) (en el que \(f\) está definido) se llama dominio de \(f\), y el subconjunto de los elementos de \(B\) que se relacionan con elementos de \(A\) se denomina rango de \(f\), y se denota \(f(A)\). Cuando \(b\in B\) está relacionado con \(a\in A\) escribiremos \(f(b)=a\).

Diremos que \(f\) es inyectiva si elementos distintos son proyectados en elementos distintos, es decir, \(f(a)=f(a')\) si y solo si, \(a = a'\).

Diremos que \(f\) es sobreyectiva si \(f\) recubre todo el conjunto de llegada, es decir, \(f(A)=B\).

Diremos que \(f\) es biyectiva si es inyectiva y sobreyectiva.

Dadas las funciones \(f:A\rightarrow B\) y \(g:B\rightarrow C\), la composición de \(f\) y \(g\), que escribiremos \(g\circ f\), es la función de \(A\) en \(C\) definida por \((g\circ f) (a) = g(f(a))\).

Una función \(f^{-1}:B\rightarrow A\) es una inversa de \(f\), si y solo si para cada \(a\in A\), \(f^{-1}(f(a))=a\). Si \(f\) es biyectiva entonces existe una inversa que además verifica que para cada \(b\in B\), \(f(f^{-1}(b))=b\). En estos casos, se dice que la función \(f\) es invertible.

Si la función \(f:A\rightarrow B\) y \(A\subseteq A'\), entonces decimos que \(f\) es una función parcial en \(A'\), y es total en \(A\).
Un función \(\oplus:A\times A\rightarrow A\) se denomina operación binaria. Normalmente se escribirá de foma infija, \(a\oplus a'\). En muchos casos también se considera una operación si está definida como, \(\oplus:A\times B\rightarrow C\), y cuando sea dentro de un mismo conjunto se dice que es una operación interna.
Si tenemos \(\oplus\) una operación intena en \(A\), y \(a, b, c \in A\):
- Diremos que \(oplus\) es asociativa si \(a \oplus (b\oplus c) = (a\oplus b) \oplus c\).
- Diremos que \(oplus\) es conmutativa si \(a\oplus b = b\oplus a\).
- Diremos que \(e \in A\) es identidad para \(\oplus\) si \(e\oplus a = a \oplus e = a\).
- Diremos que \(z\in A\) es cero para\(\oplus\) si \(z\oplus a = a \oplus z = z\).
- Diremos que \(x,y\in A\) son inversos si \(x\oplus y = y \oplus x= e\).
- Diremos que \((A,\oplus)\) es semigrupo si \(\oplus\) es asociativa.
- Diremos que \((A,\oplus)\) es monoide si es semigrupo con identidad.
- Diremos que \((A,\oplus)\) es grupo si es monoide con inversos.
- Diremos que \((A,\oplus)\) es abeliano si es grupo conmutativo.