Hasta ahora hemos analizado lo que hay de fondo en las demostraciones formales que hacen los matemáticos, pero los matemáticos no sólo demuestran, sino que también definen. La teoría de conjuntos que usan habitualmente los matemáticos (al igual que le sucede a la teoría T que hemos expuesto en el mensaje anterior) no tiene más conceptos primitivos que los de "conjunto" y "pertenencia". Sin embargo, los matemáticos tratan con un rico abanicos de conceptos. ¿De dónde salen? ¿Cómo se interpreta formalmente la introducción de un nuevo concepto?
Por poner un caso muy simple, si trabajamos en la teoría T un matemático podría empezar diciendo:
Definición Diremos que un conjunto \( x \) es un subconjunto de otro conjunto \( y \) (y lo representaremos por \( x\subset y \)) si todo elemento de \( x \) es también un elemento de \( y \).
¿Cómo se formaliza esto, que no es un teorema?
Hay esencialmente dos formas distintas de concebir una definición. Una es considerar que estamos añadiendo un nuevo signo al lenguaje formal de la teoría, en este caso un relator diádico \( x\subset y \), y el nuevo relator se acompaña de un nuevo axioma que regula su uso:
\( \forall xy(x\subset y\leftrightarrow \forall u(u\in x\rightarrow u\in y)) \)
Según esta concepción, las definiciones son axiomas. Ahora bien, está claro que no pueden considerarse axiomas "normales", en el sentido de que no es lo mismo añadir como axioma la definición de inclusión que añadir como axioma la hipótesis del continuo. Las definiciones, así entendidas, son lo que los lógicos llaman "axiomas inesenciales", lo cual viene a decir que no añaden información a la teoría, y con precisión significa que todo modelo de la teoría puede dotarse de una nueva relación que hace verdadero al nuevo axioma. De este modo, los axiomas inesenciales no restringen las interpretaciones posibles de la teoría (al contrario que los axiomas esenciales, como la hipótesis del continuo: si un modelo no la cumple, no se puede hacer nada para que la cumpla, y es un modelo que se descarta al añadir el axioma adicional).
Sin embargo, hay una forma conceptualmente mucho más simple de concebir una definición, y es considerar que es una mera abreviatura. Vista así, la definición se reduce a
\( x\subset y\equiv \forall u(u\in x\rightarrow u\in y), \)
donde ahora hay que entender que el término de la izquierda es otro nombre para la misma fórmula que nombra el término de la derecha. Deshaciendo todos los convenios de notación que venimos adoptando, la fórmula en cuestión es la sucesión de signos
\( \forall x\rightarrow \in ux\in uy \)
Incluso podríamos considerar que esto no es más que una sucesión de números naturales. Puestos a referirnos a esta sucesión de signos o números con el nombre más cómodo de \( \forall u(u\in x\rightarrow u\in y) \), nada nos impide usar un nombre más cómodo y llamarla \( x\subset y \). Así, aquí no hemos de ver una fórmula con tres signos, sino una fórmula con nueve signos, el primero de los cuales no es la variable \( x \) sino el cuantificador universal.
Con esta forma de concebir las demostraciones el lenguaje de la teoría formal es siempre el mismo, y lo único que cambia es nuestra forma de referirnos a sus fórmulas. Así, en un razonamiento teórico sobre fórmulas arbitrarias no tenemos que preocuparnos para nada por los signos añadidos, ya que en realidad no hemos añadido ninguno. Podemos asegurar sin comprobación alguna que toda fórmula de la teoría (por muchas definiciones sucesivas que acumule) puede escribirse en términos de los signos primitivos de la teoría porque en realidad
es una sucesión de signos primitivos del lenguaje de la teoría, porque nunca hemos añadido ninguno más.
Por el contrario, cuando se conciben las definiciones como axiomas que introducen un nuevo signo a la teoría, es necesario demostrar teoremas que justifiquen la inesencialidad en términos formales y no semánticos, estableciendo concretamente que toda fórmula que incluya signos "definidos" es equivalente a otra que no los contiene, pues para razonar con fórmulas "en abstracto" no podemos tener en cuenta todos los signos que podrían haberse introducido en la teoría mediante las definiciones oportunas. Con la segunda concepción todo esto es inmediato.
Sin embargo, hay dos clases muy distintas de definiciones, y todo lo que hemos dicho sólo vale para una de ellas. Imaginemos que un matemático sigue razonando en la teoría T y dice lo siguiente:
El axioma del par dice que, dados dos conjuntos \( x \) e \( y \), existe otro conjunto \( z \) cuyos elementos son exactamente \( x \) e \( y \). Dicho conjunto es único por el axioma de extensionalidad. En efecto, si hubiera dos conjuntos \( z \) y \( z' \) cuyos elementos fueran precisamente \( x \) e \( y \), ambos tendrían los mismos elementos, y lo que dice el axioma de extensionalidad es que dos conjuntos con los mismos elementos son iguales. A este único conjunto \( z \) cuyos elementos son \( x \) e \( y \) lo llamaremos par desordenado de \( x \) e \( y \) y lo representaremos por \( \{x,y\} \).
¿Cómo se ha de entender esto? Cuando escribimos \( x\in \{x,y\} \), ¿qué hay que entender que es \( \{x,y\} \)?
Al igual que antes, tenemos la opción de considerar que la definición consiste en añadir un nuevo signo al lenguaje formal, en este caso un funtor diádico, que podríamos representar en principio por \( P \), junto con el axioma
\( \forall xy(\forall u(u\in Pxy\leftrightarrow u=x\lor u=y)), \)
y además convenir en escribir \( \{x,y\}\equiv Pxy \).
Con este convenio, la respuesta a la pregunta que habíamos planteado es que \( \{x,y\} \) es un término del lenguaje formal de la teoría extendido con un nuevo funtor \( P \), concretamente el término que consta del nuevo funtor seguido de las dos variables \( x, y \).
De nuevo, esto exige justificar qué condiciones deben darse para que un axioma de este tipo sea inesencial, lo que formalmente supone demostrar que toda fórmula escrita con el nuevo signo \( \{x,y\} \) es equivalente a otra que no lo contiene.
Si intentamos concebir una definición de este tipo como una abreviatura, nos encontramos con un problema: el lenguaje \( \mathcal L_{\rm tc} \) no tiene más términos que las variables, y \( \{x,y\} \) debería ser un término, pero no una variable. Entonces, ¿qué término es?
Una solución en esta línea consiste en considerar que en realidad no definimos \( \{x,y\} \), sino más bien la fórmula
\( z=\{x,y\}\equiv \forall u(u\in z\leftrightarrow u\in y). \)
Aquí se entiende que la parte izquierda es sólo una forma abreviada de escribir la fórmula de la derecha, que es una fórmula de \( \mathcal L_{\rm tc} \), sin ningún signo añadido.
Toda fórmula en la que aparezca \( \{x,y\} \) debe entenderse como una abreviatura de otra fórmula en la que \( \{x,y\} \) aparece en la forma \( z=\{x,y\} \). Por ejemplo,
\( x\in \{x,y\}\equiv \exists z(z=\{x,y\}\land x\in z) \).
Concretando algunos detalles, ésta es una forma viable de concebir las definiciones de términos sin implicar la adición de nuevos funtores o constantes al lenguaje de la teoría. Sin embargo, hay una tercera opción más "concreta" que vamos a discutir seguidamente:
Lenguajes con descriptor
Una forma de tratar las definiciones de términos de forma clara y sistemática es añadir un nuevo signo lógico a los lenguajes formales, llamado el descriptor "\( | \)".
Ello nos obliga a modificar las definiciones que hemos dado en los mensajes anteriores para cubrir también este signo adicional.
En primer lugar, las definiciones de término y fórmula deben unirse a una definición conjunta de "expresión", pues igual que los relatores nos pasan de términos a fórmulas, el descriptor nos pasa de fórmulas a términos. En efecto, la definición de expresión queda ahora como sigue:
Toda variable \( x \) es un término.
Toda constante \( c \) es un término.
Si \( f \) es un funtor \( n \)-ádico y \( t_1,\ldots, t_n \) son términos, entonces \( ft_1\cdots t_n \) es una término.
Si \( R \) es un relator \( n \)-ádico y \( t_1,\ldots, t_n \) son términos, entonces \( Rt_1\cdots t_n \) es una fórmula.
Si \( \alpha \) es una fórmula \( \lnot\alpha \) es una fórmula.
Si \( \alpha \) y \( \beta \) son fórmulas, entonces \( \alpha\rightarrow \beta \) es una fórmula.
Si \( \alpha \) es una fórmula y \( x \) es una variable, entonces \( \forall x\alpha \) es una fórmula.
Si \( \alpha \) es una fórmula y \( x \) es una variable, entonces \( |x\alpha\equiv (x|\alpha) \) es un término.
Como siempre, el orden "real de los signos" es \( |x\alpha \), con el nuevo signo delante, para marcar inequívocamente el tipo de expresión, pero en la práctica escribiremos \( x|\alpha \), añadiendo paréntesis si es necesario. Los términos de la forma \( x|\alpha \) se llaman
descripciones.
Con ayuda del descriptor, la definición de par desordenado es:
\( \{x,y\}\equiv z|\forall u(u\in z\leftrightarrow u=x\lor u=y). \)
Esto se lee: "\( \{x, y\} \) es el conjunto \( z \) tal que sus elementos son exactamente \( x \) e \( y \)".
Para poder manipular formalmente las descripciones necesitamos incorporar a \( _{\mathcal L} \) un axioma que diga qué podemos decir de ellas. Es el axioma K7:
\( \exists !x\alpha\rightarrow S_x^{x|\alpha}\alpha \)
Naturalmente, esto supone extender la definición de la sustitución para incluir el caso de las descripciones. La definición sigue exactamente el mismo criterio seguido para definir la sustitución en una fórmula de tipo \( \forall x\alpha \). Dejando de lado esos detalles, lo que dice el axioma K7, (que también puede presentarse en forma de regla derivada de inferencia (DP descripciones propias):
\( \exists !x\alpha\vdash S_x^{x|\alpha}\alpha \))
es que si existe un único \( x \) que cumple la descripción, entonces el \( x|\alpha \) cumple la descripción (y por lo tanto es ese único objeto que la cumple).
En nuestro caso: como hemos demostrado que \( \exists! z(\forall u(u\in z\leftrightarrow u=x\lor u)y)) \), la regla de las descripciones propias nos permite sustituir \( z \) por \( z|\forall u(u\in z\leftrightarrow u=x\lor u=y) \) es decir, por \( \{x,y\} \) en la definición, y nos queda
\( \forall u(u\in \{x,y\}\leftrightarrow u=x\lor u=y) \),
es decir, el par \( \{x,y\} \) cumple la propiedad que lo define.
Antes de presentar con más detalle el uso del descriptor, vamos a ver más ejemplos de su funcionamiento. Todos ellos siguen el mismo esquema:
Razonamos en la teoría T: el axioma del conjunto vacío afirma que \( \exists x\forall u\ u\notin x \). Este \( x \) es único, porque si hubiera dos conjuntos sin elementos, ambos tendrían los mismos elementos (ninguno) y el axioma de extensionalidad afirma que dos conjuntos con los mismos elementos son iguales.
Por lo tanto, en T se demuestra: \( \exists ! x\forall u\ u\notin x \).
Esta unicidad nos permite aplicar la regla de las descripciones propias. Si definimos
\( \emptyset\equiv x|\forall u\ u\notin x \),
la regla DP nos permite pasar de la existencia con unicidad a la sustitución de la descripción \( \emptyset \) en la fórmula que lo define, es decir: \( \forall u\ u\notin \emptyset \), y a partir de ahí ya podemos usar el conjunto vacío sabiendo que cumple lo que dice su definición.
Similarmente, el axioma de la unión dice que, para todo conjunto \( x \), existe un conjunto \( y \) cuyos elementos son los elementos de los elementos de \( x \), y dicho \( y \) tiene que ser único por el axioma de extensionalidad. Por lo tanto, tenemos:
\( \forall x\exists !y\forall u(u\in y\leftrightarrow \exists v(u\in v\land v\in x)) \)
Si definimos
\( \bigcup x\equiv y|\forall u(u\in y\leftrightarrow \exists v(u\in v\land v\in x)) \)
La unicidad nos permite aplicar la regla DP para concluir que podemos sustituir \( \bigcup x \) en la fórmula que la define, es decir:
\( \forall u(u\in \bigcup x\leftrightarrow \exists v(u\in v\land v\in x)) \)
Notemos que la regla DP sigue el "espíritu" de \( K_{\mathcal L} \), es decir, es una regla que el matemático puede usar "instintivamente", sin siquiera ser consciente del paso lógico concreto que está dando. En la práctica, un matemático razona simplemente así:
El axioma de la diferencia afirma que, para todo par de conjuntos \( x \) e \( y \) existe un conjunto \( z \) cuyos elementos son los elementos de \( x \) que no pertenecen a \( y \). Claramente, dicho \( z \) es único por el axioma de extensionalidad, luego podemos llamarmo \( x\setminus y \)
Por debajo de esto hay dos cosas:
1) Que cuando el matemático dice ``podemos llamar \( x\setminus y \) al conjunto cuyos elementos son los elementos de \( x \) que no están en \( y \)" eso se formaliza como
\( x\setminus y\equiv z|\forall u(u\in z\leftrightarrow u\in x\land u\notin y) \)
2) Que el matemático tiene conciencia de que no puede dar nombre a algo salvo que haya demostrado que la definición lo caracteriza, es decir, que existe un único \( z \) que cumple la definición. Esto se formaliza como que es la condición necesaria para que sea aplicable la regla DP, que nos permite afirmar que
\( \forall xyu(u\in x\setminus y\leftrightarrow u\in x\land u\notin y). \)
Los ejemplos que hemos visto son los usos típicos del descriptor y, en realidad, todo uso del descriptor es un uso típico como los que acabamos de ver. Vemos así que la finalidad del descriptor no es ni más ni menos que (junto con la regla DP) formalizar de forma el concepto de definición matemática sin necesidad de recurrir a añadir signos al lenguaje formal.
Como comentábamos, la incorporación del descriptor a los lenguajes formales requiere retocar todas las definiciones para tenerlo en consideración. El cambio más drástico es el que ya hemos indicado: que ya no es posible definir los conceptos de término y fórmula por separado, sino que es necesario definirlos simultáneamente porque se puede construir fórmulas a partir de términos y términos a partir de fórmulas.
En segundo lugar, las definiciones de variable libre y ligada se han de extender para tener en cuenta que en un término como \( z|\forall u(u\in z\leftrightarrow u\in x\land u\notin y) \) la variable \( z \) está ligada por el descriptor, igual que la variable \( u \) está ligada por el cuantificador, mientras que las variables \( x, y \) están libres. La idea es que el descriptor liga variables exactamente igual que lo hacen los cuantificadores.
Por último, hay que definir el concepto de sustitución de una variable por un término en una expresión (término o fórmula) considerando a la vez los dos casos, pues ahora están relacionados, y sólo hay que añadir la definición de sustitución \( S_x^t y|\alpha \), que se define exactamente igual que \( S_x^t\forall y\alpha \), sin más que cambiar \( \forall y \) por \( y| \).
Remito para los detalles a mi libro de lógica (capítulo I).
Desde el punto de vista semántico, hay que definir qué es el objeto denotado en un modelo \( M \) por una descripción \( x|\alpha \) respecto de una valoración \( v \).
Para ello necesitamos hacerle un pequeño añadido a la definición de modelo. En un modelo \( M \) de un lenguaje con descriptor debe fijarse (además de una interpretación para cada constante, relator y funtor del lenguaje) un objeto \( d \) de su universo al que llamaremos "descripción impropia" en el modelo \( M \) y que será el objeto asignado a cada descripción impropia, en el sentido siguiente:
\( M(x|\alpha)[v] \) se define como el único objeto \( a \) que cumple \( M\vDash \alpha[v_x^a] \), si es que existe tal único \( a \), o bien \( M(x|\alpha)[v]\equiv d \) en caso contrario (tanto si no existe ningún \( a \) como si existen varios).
De este modo el objeto denotado por \( x|\alpha \) es lo que cabe esperar que sea (el único objeto que cumple \( \alpha \)) cuando existe tal objeto, pero sucede que el término \( x|\alpha \) está ahí, es un término que requiere interpretación, aunque no se dé la unicidad, y en tal caso le asignamos un significado convencional, el objeto al que llamamos \( d \), y que podemos elegirlo en cada modelo.
Por ejemplo, un matemático nunca diría "definimos \( A \) como el conjunto que tiene entre sus elementos al conjunto vacío", porque sabe que eso no define un conjunto (no hay un único conjunto que cumpla eso), pero nada nos impide considerar el término \( A\equiv x|\emptyset\in x \).
Aunque un matemático nunca definiría esta \( A \), no hay ningún problema en definirla a condición de que tengamos claro que no podemos aplicar la regla DP y, por consiguiente, no podemos afirmar que \( \emptyset \in A \) (y, por consiguiente, no podemos decir nada de \( A \) a partir de su "definición", podemos dar la definición, pero no usarla, y ahí se ataja formalmente el sinsentido).
Pero como \( A \) es un término (si no "bien definido" en el sentido que los matemáticos usan la definición, sí al menos correctamente definido), tiene que tener una interpretación en todo modelo, y hemos convenido que se interpreta como un objeto \( d \) fijado arbitrariamente en el modelo de antemano, y que no tiene nada que ver con la definición. Si da la casualidad de que dicho objeto contiene al conjunto vacío, entonces \( A \) denotará un objeto que casualmente cumplirá la definición de \( A \), pero no tiene por qué ser así.
Con la definición que hemos dado de "objeto denotado por una descripción" se comprueba inmediatamente que el axioma K7 es verdadero en todo modelo, por lo que \( K_{\mathcal L} \) sigue siendo correcto.
En cambio, con dicha definición ha dejado de ser semánticamente completo. Hay sentencias verdaderas en todo modelo de T que no son demostrables a partir de los axiomas de T. Por ejemplo:
\( (x|\emptyset\in x)=(x|\emptyset\notin x) \)
Esta sentencia es verdadera en todo modelo de T, porque ambos miembros son descripciones impropias: ni hay un único conjunto que contenga al conjunto vacío, ni hay un único conjunto que no contenga al conjunto vacío. Por ejemplo, \( \{\emptyset\}, \{\emptyset, \{\emptyset\}\} \) son dos conjuntos que cumplen lo primero y \( \emptyset, \{\{\emptyset\}\} \) son dos conjuntos que cumplen lo segundo. Esto hace que en cualquier modelo de T ambos términos denoten la descripción impropia \( d \) y, por consiguiente, la sentencia resulta verdadera. Pero no tenemos ninguna regla de inferencia que nos permita tratar con descripciones impropias para que podamos demostrar esa igualdad.
La completitud semántica de \( K_{\mathcal L} \) se recupera añadiendo un octavo y último axioma que recoja el convenio que hemos adoptado con las descripciones impropias:
\( \lnot\exists !x\alpha\rightarrow (x|\alpha)=(x|x=x) \)
Notemos que \( x|x=x \) siempre denota en un modelo a la descripción impropia (porque sólo es una descripción propia si en el modelo hay un único objeto que es idéntico a sí mismo, lo cual sólo puede suceder si el modelo tiene un único objeto, y entonces dicho objeto tiene que ser \( d \) necesariamente, porque no hay otra posibilidad para \( d \)). Por lo tanto, lo que afirma K8 es que cuando no hay un único objeto que cumple \( \alpha \), la descripción \( x|\alpha \) (es decir, cualquier descripción impropia) es igual a una descripción impropia concreta (luego todas las descripciones impropias son iguales entre sí, todas denotan al mismo objeto en un modelo).
Este axioma K8 no se usa para nada en la práctica, pues explica cómo tratar el caso que nunca plantea un matemático, pues un matemático nunca usa descripciones impropias. Sin embargo, es todo lo que hace falta para demostrar igualdades "tontas" como la anterior que, queramos o no, tienen que poder demostrarse para que podamos decir que nuestro cálculo deductivo es semánticamente completo. En efecto, con este último axioma, la demostración del teorema de completitud sigue siendo válida aunque el lenguaje tenga descriptor.
Pese a todo, es posible dar al axioma K8 una utilidad práctica que un matemático considerará, si no especialmente útil, al menos razonable. Podemos añadir un axioma a T que diga:
\( (x|x=x)=\emptyset \)
Esto significa "la descripción impropia es el conjunto vacío". Dicho así puede que lo le diga mucho a un matemático, pero se puede explicar en términos más simples: "Cualquier cosa que esté mal definida se entenderá por convenio que es igual al conjunto vacío". Eso sí lo entiende el matemático y, aunque no le preocupe mucho, porque no tiene por costumbre definir cosas mal, sí puede serle útil a veces, para no tener que precisar qué sucede en los casos que no le interesan.
Por ejemplo, si la Aritmética de Peano adoptamos como axioma \( (x|x=x)=0 \), entonces podemos definir
\( x-y\equiv z|(x=y+z) \),
y con esta definición puede demostrarse que \( 0''''-0'''=0' \), mientras que \( 0''-0'''' \) es una descripción impropia, porque puede probarse que no existe ningún número \( z \) tal que \( 0''''+z=0'' \), pero entonces, por K8 y el axioma específico sobre las descripciones impropias, podemos afirmar que \( 0''-0''''=(x|x=x)=0 \). Así estamos conviniendo en que todas las restas que no se pueden calcular valen cero.
Similarmente, volviendo a la teoría de conjuntos, podemos convenir que las integrales de las funciones no integrables son el conjunto vacío, que los límites de las sucesiones que no tienen límite son el conjunto vacío, etc. No es imprescindible, pero no queda mal. Evita que podamos escribir cosas que no tengan interpretación.
Lo dicho es suficiente para manejar descripciones en la práctica (y manejarlas inconscientemente, como hace el matemático), así que nos limitaremos a citar un último resultado: si en una teoría podemos caracterizar la descripción impropia sin usar descriptores (por ejemplo, como el único \( x \) que cumple \( \forall u\ u\notin x \) en T, o como \( x=0 \) en AP), entonces toda fórmula con descriptores es equivalente en dicha teoría a otra sin descriptores. Por lo tanto, al estudiar la teoría a nivel teórico siempre podemos decir "consideramos únicamente fórmulas sin descriptores", y con ello (si lo que vamos a decir sobre fórmulas se conserva por equivalencia lógica) no perdemos generalidad. Por ello, una vez demostrado este teorema, el considerar descriptores no es un lastre con el que estemos obligados a cargar para siempre, sino que en cualquier momento podemos desprendernos de él a efectos teóricos, y usar los descriptores únicamente a efectos prácticos, para formalizar definiciones de forma económica y precisa.