Muy buenas, Carlos.
Hola, gdl. Bienvenido al foro en general y a este hilo en particular.
He leído el artículo rápidamente y, seguramente será por mi formación en informática, lo encuentro algo distinto a lo que esperaría de la lógica de primer orden.
Ésa era justamente mi intención, escribir algo distinto, porque para escribir lo mismo que ya está escrito en los libros, para eso ya están los libros. Naturalmente, hacer algo distinto sólo por no hacer lo mismo sería una frivolidad por mi parte. Mi intención de hacer algo distinto está motivada a su vez porque tengo la sensación (generada en gran parte por consultas sobre lógica que he visto hacer en este foro) que quienes estudian lógica siguiendo los estándares que se ven en los libros acaban con una concepción de la lógica que, a mi juicio (siempre discutible) está bastante deformada, y mi intención era enfatizar los aspectos que los libros no enfatizan por su forma de exposición.
Estoy seguro que hablamos de lo mismo, pero desde distintas perspectivas. Voy a intentar explicar mi punto de vista porque quizás te sea de utilidad y ambos podamos aprender.
Te aclaro yo también la perspectiva desde la que estoy diseñando el hilo: mi intención es explicar la lógica como formalización del razonamiento matemático y exclusivamente con la finalidad de servir de fundamento a la matemática formal. Evidentemente, con la lógica se pueden hacer muchas más cosas que fundamentar las matemáticas, pero mi interés es exclusivamente explicar qué es y por qué es como es la lógica que sirve de fundamento a la matemática formal.
Cuando hable de "nosotros" me refiero a cómo lo veíamos en nuestras clases de informática. Yo, la verdad, no soy nadie especialmente dedicado a la lógica.
Yo tampoco. Como digo, la lógica "en sí misma" tampoco me ha interesado nunca. Me interesa como fundamento de la matemática y como herramienta auxiliar en el estudio de la teoría de conjuntos. La lógica "en sí misma" o "en abstracto", siempre me ha parecido bastante insulsa, pero eso es, por supuesto, un juicio personal y subjetivo que sólo pretende explicar que, de hecho, nunca he visto nada interesante en ella.
Para empezar, nosotros hacíamos una gran distinción entre sintaxis y semántica.
Sí, la razón por la que la lógica matemática sirve para algo es precisamente porque permite prescindir completamente de la semántica, y la forma más clara de ponerlo de manifiesto es describir la sintaxis sin mencionar para nada la semántica. Así lo hago en mi libro de lógica, pero precisamente en este hilo quería enfatizar lo que se pierde de vista al proceder de ese modo: aunque la sintaxis sea al final independiente de la semántica, es fundamental comprender que está completamente motivada por la semántica. Una de las "deformaciones" a las que, siempre a mi juicio, induce la presentación usual de la lógica (primero sintaxis sin referencia alguna a la semántica y luego semántica) es que uno se queda con la sensación de que todas las definiciones sintácticas son arbitrarias, que uno define el modus ponens como lo define, pero que nada hubiera impedido definirlo como que de \( \alpha\rightarrow \beta \) y \( \beta \) se deduce \( \alpha \), por ejemplo.
Lo que pretendo mostrar en el hilo que estoy escribiendo es que todas las definiciones sintácticas están motivadas por el significado pretendido de los lenguajes formales, que aunque podamos definir un relator como un signo que simplemente tiene la etiqueta de relator, lo cierto es que un relator es un signo que pretende ser interpretado como una relación y que no es necesario ocultar o posponer eso para dejar claro que no es necesario hablar de relaciones para definir los lenguajes formales.
Más que nada porque luego teníamos distintas semánticas.
No sé muy bien a qué te refieres con esto. ¿Te refieres a que un mismo lenguaje formal admite distintos modelos o es algo más?
En tu artículo lo veo todo muy mezclado (defines modelo antes de fórmula) y creo que quedaría mejor si dedicases o bien otro artículo o bien una sección inicial a la sintaxis. Luego, completamente separada, la semántica.
Si quieres eso, sólo tienes que leer mi libro de lógica, pero no era mi intención copiar o resumir mi libro de lógica, lo que planteas era justo lo contrario de lo que quería hacer. En realidad no era mi intención exactamente "mezclar" la sintaxis con la semántica, sino presentarlas paralelamente, o más precisamente, con la semántica siempre un paso por delante de la sintaxis, cuidando de dejar claro que al final la sintaxis no se apoya en la semántica, pero incidiendo sobre todo en que toda definición sintáctica está motivada por un concepto semántico. Defino modelo antes que fórmula porque para entender qué es realmente una fórmula no basta asumir que es una cadena de signos que satisface ciertos principios sintácticos de construcción, sino que la idea de fondo es que una fórmula es una cadena de signos susceptible de tener un significado en un modelo. Las ideas de ese tipo son las que se difuminan con la exposición estándar que propones y son las que yo pretendo enfatizar.
Al no hacerlo así se hace de forma subconsciente e incontrolada lo que es mejor, siempre a mi juicio, hacer de forma consciente y controlada: aunque no se hable para nada de semántica al exponer la sintaxis, lo cierto es que todo aquel que ve una fórmula de acuerdo con la definición sintáctica correspondiente, se da cuenta de que puede "leerla" como una afirmación, aunque oficialmente se le asegura que no es más que una cadena de signos, pero cualquier reflexión sobre esto queda prohibida por la prohibición de mencionar la semántica. En las cuestiones que han aparecido hasta ahora esto no es especialmente grave, pero creo que en cuanto se entra en el concepto de deducción, el obstinarse en no motivarlo semánticamente introduce muchos malentendidos.
También veo que hablas de lenguaje formal cuando te refieres específicamente al lenguaje formal de la lógica de primer orden.
Cierto, pero eso es como cuando uno dice "número" refiriéndose a "número real" porque no va a tratar con números complejos. El hilo se titula Lógica de primer orden, y hay que entender que cuando digo "lenguaje formal", quiero decir "lenguaje de primer orden" y, más concretamente, un lenguaje formal del tipo que he definido, sin más pretensiones de generalidad.
Frases como "pero exigiremos que todo lenguaje formal tenga al menos un relator diádico que representaremos por \( = \)" creo que estarían mejor redactadas como "pero exigiremos que el lenguaje formal de la lógica de primer orden tenga al menos un relator diádico que representaremos por \( = \)". Mucho mejor aún si le dieras un nombre a tu lenguaje como \( L_1 \).
No. Todo lo que has dicho hasta aquí es totalmente coherente y simplemente responde a un punto de vista distinto del que yo quiero seguir, pero en esto último hay un pequeño error conceptual. No puede hablar de "el lenguaje formal de la lógica de primer orden" ni mucho menos darle un nombre, porque no es un único lenguaje formal, sino que estoy tratando con infinitos lenguajes posibles, según las constantes, relatores o funtores que posean. No es uno solo.
Además, veo que repites la idea de "un término es si hay una secuencia de cadenas..." y "una fórmula es si hay una secuencia de cadenas..." Los matemáticos buscáis la abstracción. Algo general que sirva para múltiples casos. ¿Por qué no lo has hecho aquí?
Aquí no sé muy bien a qué te refieres. ¿Estás objetando que la definición que doy de término o fórmula no es suficientemente general o suficientemente rigurosa? Pregunto simplemente porque no sé lo que quieres decir.
Bueno. Voy a dar mi opinión y luego ya me criticas.
Por cierto, como nota al margen, nosotros separábamos la lógica de primer orden de la lógica de primer orden con igualdad. Esta última introducía ciertas complicaciones y se necesitaban otras técnicas de resolución (ver por ejemplo la regla de paramodulación).
Sí, distinguir entre lógica con o sin igualdad es totalmente estándar, pero yo pregunto ¿para qué sirve la lógica de primer orden sin igualdad? Podrás decirme que la distinción sirve para ver cuáles son los requisitos lógicos específicos para tratar con la igualdad, pero no estoy interesado en diseccionar la lógica de ese modo. Si los únicos lenguajes formales que voy a usar tienen igualdad, no veo el interés de estudiar primero lenguajes sin igualdad. Es como si antes de estudiar grupos se considerara conveniente estudiar semigrupos a pesar de que nunca vas a trabajar con un semigrupo que no sea un grupo. En ese contexto, yo trabajaría directamente con grupos, y no me importaría si algunas de las cosas que digo valieran también para semigrupos que no fueran grupos.
A lo que voy. Estoy recordando sin consultar apuntes o libros algo puede "bailar" pero los conceptos son muy simiples. Como yo lo haría (como a mí me enseñaron) es algo tal que así.
Lenguajes formales.
Lo primero que hacíamos es definir un lenguaje formal y no específicamente el lenguaje formal de la lógica de primer orden. Esto lo hacíamos de la siguiente manera.
Tomábamos un conjunto \( \Sigma \) que llamábamos alfabeto. El alfabeto se compone de símbolos. Por ejemplo: \( \Sigma=\left\{a,b,c\right\} \). No trataremos ni con los alfabetos ni con los símbolos directamente. El alfabeto debe ser finito (aunque en algunos sitios recuerdo haber visto que puede ser numerable).
Del alfabeto se obtenía el conjunto de sus secuencias \( \Sigma^* \). Este operador es la estrella de Kleene (creo que en matemáticas es el monoide libremente generado). El elemento neutro (la secuencia vacía) la notábamos con \( \epsilon \). A las secuencias también las llamábamos cadenas o palabras.
Definimos un lenguaje como un subconjunto de este conjunto de secuencias \( L\subseteq\Sigma^* \).
Introducíamos los conjuntos unitarios y los notamos con el símbolo correspondiente. Es decir \( a \) es realmente el conjunto \( \left\{a\right\}\subseteq\Sigma^* \).
Introducimos operaciones sobre los lenguajes. En concreto:
- la concatenación (usando la operación del monoide) \( L_1L_2=\left\{w_1w_2\mid w_1 \in L_1, w_2\in L_2\right\} \). También usamos \( \epsilon \) para el conjunto \( \left\{\epsilon\right\} \).
- la unión (simple unión de conjuntos pero representada ahora por el símbolo \( \mid \) de forma que \( L_1\mid L_2=L_1\cup L_2 \))
- la potenciación basada en la concatenación \( L^0=\left\{\epsilon\right\} \) y \( L^{n+1}=L^nL \)
- la clausura de Kleene. No es más que la unión (notada como suma) de todas las potencias \( L^*=\sum_{n=0}^\infty{L^n} \)
Un lenguaje inductivamente generado por una ecuación basada en las anteriores operaciones es el menor lenguaje que cumple tal ecuación. Por ejemplo, \( t = a \mid tt \) significa que el lenguaje \( t \) cumple que es el lenguaje \( a \) unión la concatenación de dos de sus elementos. Inductivamente aquí entraría \( aa \), \( aaa \) y así. Es importante aquí, aunque no recuerde el detalle de todo esto, que el lenguaje inductivamente generado tiene estructura en el sentido de que podemos realizar demostraciones por inducción sobre él.
Hasta aquí lenguajes formales (bastante restringidos ya que son de cierto tipo muy concreto, pero habría que definir gramáticas para poderlos caracterizar totalmente).
Sólo con esto hay una gran cantidad de teoría que se puede desarrollar. Que me venga a la mente: álgebra de términos, relaciones de subsunción o sistemas de reescritura. Seguro que más.
Sí, esto que planteas es bastante estándar y propio de los libros de lógica, y aquí entramos en una mera cuestión de "gustos", y es que debo decirte que eso me parece "horripilante" (y no es una crítica hacia ti, naturalmente, que estás defendiendo la ortodoxia). ¿Realmente aporta a algo a alguien ese planteamiento abstracto que propones? Yo he visto a gente en este foro pregunta dudas sobre ejercicios en ese contexto, y he procurado resolverlas, pero en el fondo pienso ¿y a qué clase de profesores se les ocurrirá hacer perder el tiempo a esta gente con problemas tan tontos en lugar de ir directamente a lo que interesa, a lo que aporta algo? Insisto en que son apreciaciones subjetivas, pero mi impresión es que estar dándole vueltas a lenguajes formados por as bes y ces, es una pérdida de tiempo, cuando puedes ir directamente a los lenguajes formales que interesan. En todo caso sería al revés: sólo cuando alguien ha asimilado las ideas importantes sobre lenguajes formales "de verdad", de los que pueden usarse para formalizar razonamientos, uno puede interesarse en versiones abstractas de esos lenguajes. Es como si a alguien que no sabe nada de grupos, anillos y espacios vectoriales empiezas a hablarle de categorías. Es más sensato demostrarle a uno el teorema de isomorfía de grupos, y el de anillos, y el de espacios vectoriales y, a lo sumo, en un futuro, hacerle ver que todos son casos particulares de un teorema sobre categorías abelianas, si es que uno llega a estudiar algo en el que el punto de vista de las categorías abelianas le aporta realmente algo.
De hecho, si algo me deja insatisfecho de la forma en que presento la lógica es el no poder ser un poco menos abstracto de lo que estoy siendo. Me gustaría poder (o saber) presentar las cosas de una forma mucho más elemental, que no requiriera abstracciones innecesarias, pues lo que pretendo es explicar algo muy concreto y muy intuitivo, algo que no requiere tratar con lenguajes sin significado, y aun así cualquier intento de precisar lo que es una fórmula o un modelo puede "echar para atrás" a más de uno, a pesar de que la idea de fondo la tiene que entender todo el mundo.
Sintaxis de la lógica de primer orden.
Ahora voy a la sintaxis del lenguaje que vamos a usar. La sintaxis de la lógica de primer orden (sin igualdad explícita) se definiría como:
Alfabeto: \( \Sigma=K \cup V \cup C \cup F \cup P \)
Con \( K \) símbolos de puntuación y conectivas \( ¬ \rightarrow \vee \wedge \leftrightarrow \top \bot \forall \exists ( ) , \)
Con \( V \) símbolos de variable (infinito numerable).
Con \( C \) símbolos de constante (numerable, posiblemente vacío).
Con \( F=F_1 \cup F_2 \cup \cdots \) símbolos de función (numerable, posiblemente vacío). (Tú los llamas functores)
Con \( P=P_1 \cup P_2 \cup \cdots \) símbolos de predicado (numerable, no vacío). (Tú los llamas relatores e introduces en \( P_2 \) el igual)
Todos estos conjuntos de símbolos disjuntos entre sí.
Nota: en algunos textos he visto todas los símbolos de función (funtores) mezclados y luego una aplicación de aridad le da a cada uno de ellos un natural que es el número de argumentos que debe tomar. Idem para los símbolos de predicado (relatores).
El conjunto de términos \( T \) es el lenguaje inductivamente generado por la ecuación \( T = V \mid C \mid F_1(T) \mid F_2(T,T) \mid \cdots \)
El conjunto de átomos \( A \) se define como \( A = P_1(T) \mid P_2(T,T) \mid P_3(T,T,T) \mid \cdots \).
El lenguaje de la lógica de primer orden es el lenguaje inductivamente generado por la ecuación \( L= \bot \mid \top \mid A \mid ¬L \mid (L\vee L) \mid (L\wedge L) \mid (L\rightarrow L) \mid (L\leftrightarrow L) \mid \forall V L \mid \exists V L \)
Y si no me he equivocado, esto basta.
Sí, conozco esta forma de hacer las cosas, y siempre he tratado de evitarla a toda costa. Hay un aspecto en todo esto del que no sé si eres consciente. No sé si cuando escribes todo lo que escribes estás pensando en ello como afirmaciones formales en una teoría de conjuntos que te permite hablar de uniones, intersecciones, conjuntos numerables, definiciones inductivas, etc. Si es así, tenemos un problema serio, porque una de las utilidades de la lógica de primer orden es construir la teoría de conjuntos que (tal vez, si acierto al interpretar cómo concibes lo que dices) es necesaria para que puedas desarrollar la lógica "a tu manera (estándar)".
Al margen de esa distinción (tú pareces hablar de conjuntos, yo tengo la necesidad de hablar de signos "de verdad" que pueden escribirse en un papel o meterse en un ordenador, sin apoyarme en ninguna teoría de conjuntos) insisto en que para que alguien entienda qué es una fórmula o un término no necesita entender todo el aparato algebraico que estás montando, como para entender el análisis en \( \mathbb R^n \) no es necesario saber geometría diferencial, y que de hecho es mejor saber análisis en \( \mathbb R^n \) antes de entrar en la geometría diferencial.
Hasta aquí nada de semántica. Todo son símbolos puestos ordenadamente, pero sin significado.
Eso es justo lo que quiero evitar. No hay nada de semántica, pero todo lo que dices tiene una razón de ser porque es "ajustable" a una semántica que has omitido deliberadamente. Lo que yo intento es poner de manifiesto desde el primer momento la existencia de esa semántica que explica realmente lo que estás haciendo. Cuidando de dejar claro que al final cada concepto sintáctico no depende de esa semántica, pero explicando minuciosamente su relación con ella.
Ahora, según la semántica que queramos dotarle a la lógica, podremos introducir una función de interpretación (semántica denotacional), unas reglas de inferencia (semántica operacional) o introducir un isomorfismo con alguna otra estructura matemática (esta es la que más me gusta, espero que podamos hablar de ella más adelante).
Ah, esto responde a algo que te preguntaba más arriba. Me confunde que llames semántica operacional a unas reglas de inferencia. Las reglas de inferencia también tienen su vertiente puramente sintáctica y su interpretación semántica, y ése es también uno de los puntos en los que quiero incidir al comparar ambas partes. Ahora que hablas ya claramente de isomorfismos con estructuras matemáticas ya no hay duda de que concibes todo lo que dices como una parte de la teoría de conjuntos, con lo que tendrás que admitir que tu planteamiento no sirve para fundamentar la teoría de conjuntos, que es casi la única razón por la que me interesa la lógica (aunque no tengo intención de llegar tan lejos en mi artículo).
Otra cosa: perdóname mi "ligereza" a la hora de introducir los conceptos. Comprendo que a un matemático le chirríe mucho mi falta de detalle y la completa ausencia de demostraciones en mis afirmaciones.
Hombre, si tuvieras que demostrar aquí todo lo que has dicho tendrías que escribir todo un libro y entonces te sugeriría que dejaras de escribir aquí y te abriría tu propio artículo en la revista del foro.
Por ejemplo, mi lenguaje inductivamente generado seguramente que se corresponda al mecanismo de una sucesión de cadenas de signos que mencionas en tu definición de fórmula.
Sí, claro que se corresponde, pero sigo sin entender cuál es la objeción que pones a mi definición de fórmula (que no es mía, también es bastante estándar): una fórmula es una cadena de signos tal que existe una sucesión de cadenas tales que cada cual es una fórmula atómica (concepto definible previamente) o bien se genera a partir de las anteriores mediante ciertas reglas. ¿Cuál es el problema? En el fondo es también una definición inductiva, pero al mismo tiempo es totalmente constructiva, es decir, no depende de un teorema de recursión no evidente por sí mismo y que requiere una demostración previa.
Sólo espero haber dejado claro mi punto de vista de separar la sintaxis de la semántica por un lado y de introducir unas herramientas para definir los lenguajes formales (independientemente de si vamos a usarlos para la lógica de primer orden o para otra cosa).
Sí, está claro. Lo que no veo es la ventaja de hacerlo así. La única ventaja de separar la sintaxis de la semántica es dejar claro que al final ningún concepto sintáctico depende de la semántica, pero creo que eso puede quedar claro sin necesidad de llevar a ciegas al lector hasta que finalmente decides abrirle los ojos y revelarle el sentido que tiene todo lo dicho hasta entonces. Y las herramientas para definir los lenguajes formales, mi opinión (siempre subjetiva) es que son cañones para matar moscas. No veo la ventaja de introducir una teoría abstracta para luego definir unos lenguajes concretos, de modo que lo único que consigues es oscurecer la definición. Además, esto resulta inviable si las herramientas en cuestión requieren teoría de conjuntos y no quieres caer en un círculo vicioso (la teoría de conjuntos se define a partir de un lenguaje formal, unos axiomas y unas reglas de inferencia que no puedes permitirte en lujo de definir en términos de la teoría de conjuntos).
Y que esa separación no es puntual en cada definición, sino estructural en el desarrollo del texto: primero lenguajes formales en general, luego sintaxis del lenguaje de la lógica de primer orden y finalmente las semánticas.
Sí, entiendo perfectamente lo que propones, pero no me gusta nada nada ese planteamiento. De hecho, creo que no has explicado para nada cuáles son según tú las ventajas de hacerlo así? Yo he tratado de explicarte las ventajas de no hacerlo así, aunque tal vez no haya podido concretar todo lo que me hubiera gustado porque mi artículo aún no está muy avanzado, y todavía no puedo ponerte ejemplos auténticamente relevantes del interés que le veo a este enfoque. Éstos aparecerán realmente cuando entre en la definición de las deducciones formales.
También me ha parecido que introduces una complejidad innecesaria al definir las conectivas formalmente en forma prefija \( \rightarrow \beta \gamma \) pero luego muestras en forma infija \( \beta \rightarrow \gamma \). ¿No crees que es mejor introducirlas de forma infija dejando los paréntesis? En todo caso decir la prioridad que tienen y omitir los paréntesis superfluos. En cualquier caso, esto es un detalle menor.
¡Hombre! Yo creo que la auténtica complejidad innecesaria es todo el aparato algebraico que propones para definir unos míseros lenguajes formales
. A mí me parece una simplificación el no tener que preocuparse para nada de los paréntesis a efectos teóricos, y que éstos queden relegados a meros auxiliares taquigráficos, pero, por supuesto, es cuestión de gustos.
Bueno. Me voy a la cama que es tarde.
Dichoso tú que no vives en Valencia y no tienes una verbena justo delante de tu casa.
Espero no haber dicho muchas tonterías.
En absoluto. Estás defendiendo la más pura ortodoxia sobre el asunto. Pero creo que lo que resultaría realmente enriquecedor es que argumentaras cuáles son a tu juicio las ventajas del planteamiento ortodoxo. En realidad no he pretendido criticar dicho planteamiento, sino que mi opinión es más bien que el planteamiento ortodoxo es un planteamiento técnico, que no responde a los intereses de quien meramente quiera conocer bien la lógica matemática. Volviendo a un ejemplo que te he puesto antes. Yo he estudiado teoría de categorías, y la he estudiado cuando he visto que era útil para tratar ciertos aspectos de la geometría algebraica y la geometría diferencial, y la recomendaré cuando se trate de tratar esos aspectos, pero me parecería un despropósito empezar por teoría de categorías para explicarle a alguien la teoría de grupos o de anillos.
Igualmente, no dudo de que el planteamiento que propones será el más adecuado para estudiar ciertas cuestiones técnicas en las que la lógica formal abstracta sea una herramienta a considerar, pero jamás me he encontrado en un contexto en el que ese punto de vista me haya sido de utilidad frente al estudio directo de los lenguajes formales necesarios en teoría de conjuntos (para fundamentarla y para abordar pruebas de consistencia). Por eso jamás lo recomendaría. Mi punto de vista a la hora de estudiar cualquier teoría matemática siempre ha sido el de no usar herramientas que no demuestren que aportan alguna ventaja frente a técnicas más elementales. Y siempre me ha ido bien así.