Teoría de computación. ¿Por qué formalizar la semántica que formalmente no existe?

lunes,27 febrero, 2023

Por Alfonso Ortega

Me gustaría plantear al lector algunas cuestiones sobre las siguientes oraciones:

La impedancia crujiente eleva la lechuza en la caña sosa de la vela.

El Juan saludaron los pasajeros del tren que pasaba.

¿Son estas oraciones castellanas correctas?, ¿alguna de las dos se comprende mejor que la otra?, ¿qué mensaje quiere transmitir la segunda oración?, ¿qué mensaje podría querer transmitir la primera oración?

Se puede ser un poco más preciso. Para ello espero que no haya que desempolvar los conocimientos de análisis morfológico y sintáctico de la gramática castellana que todos hemos adquirido hace más o menos tiempo.

Comencemos a analizar la segunda oración. Si aplicamos sólo los siguientes dos pequeños cambios: “El” sobraría y “saludaron” debería ser “saludó a”, obtenemos una oración que parece totalmente correcta. El resultado es “Juan saludó a los pasajeros del tren que pasaba”. Y es justamente este mensaje el que pensábamos que la oración original quería transmitir: Juan está viendo pasar un tren tan de cerca que puede saludar a sus pasajeros.

Continuemos con la primera oración. Tras leerla un par de veces, el lector estará de acuerdo con la opinión de que no vamos a poder arreglar nada con unos cambios sencillos como en el caso anterior. De hecho, todo es “aparentemente correcto”. En “La impedancia crujiente” determinante, sustantivo y adjetivo concuerdan en género y número. El verbo (“eleva”) también concuerda correctamente. En el complemento directo (“la lechuza”) y en el preposicional (“en la caña sosa de la vela”) tampoco se aprecia nada que podamos arreglar. Por otro lado, como lector, soy incapaz de asociar un posible mensaje a esta oración.

¿Qué es lo que no funciona en esta frase aparentemente correcta?, ¿qué hace que ésta no se entienda aunque no contenga errores gramaticales tan obvios como la otra? ¿por qué la otra, a pesar de esos errores, se comprende mejor?

Creo que todos nos hemos percatado de que la primera “no tiene ningún sentido”, mientras que la segunda “tiene un mensaje claro”, pero se han cometido un par de errores al escribirla.

De forma general e intuitiva asociamos con el término “semántica” estas cuestiones relacionadas “con el significado del lenguaje”. En oposición a ella, se utiliza el término “sintaxis” o “sintáctico” para las cuestiones que tienen que ver más bien con la “forma” con la que expresamos esa semántica.

Por lo tanto, concluiríamos que la naturaleza de los errores de la primera oración son semánticos mientras que los de la segunda son más bien sintácticos.

Abordemos esta cuestión desde otra perspectiva. Es suficiente con que el lector conozca la existencia de los lenguajes de programación y del proceso de programación en general, para que haya escuchado hablar de la oposición entre “lenguaje natural” (como el castellano utilizado en estas oraciones) y “lenguaje formal”. Esta última es una categoría que incluye también los lenguajes de programación. No le será ajeno al lector el hecho de que los lenguajes naturales son más propensos a ser ambiguos que los formales y que no es trivial que los ordenadores se expresen con fluidez en lenguaje natural, comprendiéndolo y generándolo.

Tal vez el lector tenga la esperanza de que en los lenguajes formales no se planteen problemas como los evidenciados en las primeras oraciones. No es así. Cualquier lector con conocimientos de programación será capaz de escribir expresiones en su lenguaje de programación favorito que exhiban las mismas peculiaridades, es decir, que puedan tener errores sintácticos y semánticos en diferentes formas.

Aporto dos ejemplos similares utilizando el lenguaje de programación C: la primera sentencia no tiene ningún sentido, en la segunda parece querer imprimirse los 10 primeros números naturales pero hay “cosas que no se escriben así en C”.

for (int i = 0; i < “Hola mundo”; ) {  i = i -1; }

forr (int i = 0, i menor 10; i++) { printf(i); }

Por lo tanto, podríamos concluir que también ha lugar la oposición entre sintaxis y semántica en los lenguajes desde el punto de vista formal de la teoría de la computación. En este punto podemos ofrecer al lector el siguiente resumen del estado de esa cuestión.

  • La teoría de la computación es el área que se puede considerar como el soporte teórico matemático de la computación. Sus resultados se agrupan, en general, en dispositivos de cómputo (máquinas), lenguajes formales y los problemas que se pueden resolver o describir con ellos.
  • Pues bien, en este dominio podemos encontrar trabajos que sugieren (algunos) o demuestran (otros) los siguientes resultados:
    • Que lo que hemos identificado previamente como semántica no existe, ni desde el punto de vista de los dispositivos de cómputo ni de los lenguajes formales.
    • Que se han propuesto una amplia gama de modelos formales de todo tipo para formalizar la  semántica, entendida precisamente en oposición a la sintaxis.

Y entonces cabría preguntar: ¿cómo puede ser que no exista formalmente ningún concepto teórico que permita representar la razón por la cual podemos escribir oraciones sintácticamente correctas y semánticamente incorrectas?, ¿qué interés tiene formalizar la semántica si no existe desde el punto de vista formal?.

Estas reflexiones, y estas preguntas sin respuesta; confío en que hayan evidenciado la complejidad de la oposición entre sintaxis y semántica en la teoría de la computación.

Para dar al lector interesado, debida respuesta a estas cuestiones, profundizaremos en este mismo blog, en los conceptos necesarios para comprender la naturaleza de la semántica desde el punto de vista de la teoría de la computación.