
En lógica , matemáticas , informática y lingüística , un lenguaje formal es un conjunto de cadenas cuyos símbolos se toman de un conjunto llamado " alfabeto ".
El alfabeto de un lenguaje formal consta de símbolos que se concatenan en cadenas (también llamadas "palabras"). [ 1 ] Las palabras que pertenecen a un lenguaje formal particular a veces se denominan palabras bien formadas . Un lenguaje formal se define a menudo mediante una gramática formal, como una gramática regular o una gramática libre de contexto .
En informática, los lenguajes formales se utilizan, entre otras cosas, como base para definir las gramáticas de los lenguajes de programación y los lenguajes naturales controlados (es decir, versiones formalizadas de subconjuntos de lenguajes naturales). En la teoría de la complejidad computacional , los problemas de decisión se definen típicamente como lenguajes formales, y las clases de complejidad se definen como los conjuntos de lenguajes formales que pueden ser analizados por máquinas con capacidad computacional limitada. En lógica y fundamentos de las matemáticas , los lenguajes formales se utilizan para representar la sintaxis de los sistemas axiomáticos , y el formalismo matemático es la filosofía que sostiene que todas las matemáticas pueden reducirse a la manipulación sintáctica de lenguajes formales de esta manera.
El campo de la teoría del lenguaje formal estudia principalmente los aspectos puramente sintácticos de dichas lenguas, es decir, sus patrones estructurales internos. La teoría del lenguaje formal surgió de la lingüística como una forma de comprender las regularidades sintácticas de las lenguas naturales . [ 2 ]
Historia
En el siglo XVII, Gottfried Leibniz imaginó y describió la characteristica universalis , un lenguaje universal y formal que utilizaba pictogramas . Posteriormente, Carl Friedrich Gauss investigó el problema de los códigos de Gauss . [ 3 ]
A mediados del siglo XIX, George Boole estableció el campo del álgebra booleana , que es una forma formal de describir operaciones lógicas utilizando valores de verdad y operadores de conjuntos. En su obra Una investigación de las leyes del pensamiento , demostró que el razonamiento lógico puede expresarse y manipularse mediante ecuaciones simbólicas. [ 4 ]
Gottlob Frege intentó plasmar las ideas de Leibniz mediante un sistema de notación, esbozado por primera vez en Begriffsschrift (1879) y desarrollado con mayor profundidad en sus dos volúmenes de Grundgesetze der Arithmetik (1893/1903). [ 5 ] Este sistema describía un «lenguaje formal del lenguaje puro». [ 6 ]
En la primera mitad del siglo XX, se produjeron varios avances relevantes para los lenguajes formales. Axel Thue publicó cuatro artículos relacionados con las palabras y el lenguaje entre 1906 y 1914. El último de ellos introdujo lo que Emil Post denominó más tarde «Sistemas de Thue» y ofreció un ejemplo temprano de un problema indecidible . [ 7 ] Posteriormente, Post utilizó este artículo como base para una demostración de 1947 que demostraba que «el problema de las palabras para semigrupos era recursivamente insoluble», [ 8 ] y más tarde ideó el sistema canónico para la creación de lenguajes formales.
En 1907, Leonardo Torres Quevedo introdujo en Viena un lenguaje formal para la descripción de dibujos mecánicos (dispositivos mecánicos) . Publicó «Sobre un sistema de notaciones y símbolos destinados a facilitar la descripción de las máquinas» («Sobre un sistema de notaciones y símbolos destinados a facilitar la descripción de las máquinas»). [ 9 ] Heinz Zemanek lo consideró equivalente a un lenguaje de programación para el control numérico de máquinas herramienta. [ 10 ]
Noam Chomsky ideó una representación abstracta de los lenguajes formales y naturales, conocida como la jerarquía de Chomsky . [ 11 ] En 1959, John Backus desarrolló la forma Backus-Naur para describir la sintaxis de un lenguaje de programación de alto nivel, siguiendo su trabajo en la creación de FORTRAN . [ 12 ] Peter Naur fue el secretario/editor del Informe ALGOL60 en el que utilizó la forma Backus-Naur para describir la parte formal de ALGOL60.
Palabras sobre un alfabeto
En el contexto de los lenguajes formales, un alfabeto puede ser cualquier conjunto ; sus elementos se denominan letras . Un alfabeto puede contener un número infinito de elementos; [ nota 1 ] sin embargo, la mayoría de las definiciones en la teoría de lenguajes formales especifican alfabetos con un número finito de elementos, y muchos resultados se aplican solo a ellos. A menudo, resulta útil utilizar el término «alfabeto» en su sentido habitual, o, de forma más general, cualquier codificación de caracteres finita como ASCII o Unicode .
Una palabra sobre un alfabeto puede ser cualquier secuencia finita (es decir, cadena ) de letras. El conjunto de todas las palabras sobre un alfabeto Σ se suele denotar por Σ * (usando la estrella de Kleene ). La longitud de una palabra es el número de letras que la componen. Para cualquier alfabeto, solo existe una palabra de longitud 0, la palabra vacía , que a menudo se denota por e, ε, λ o incluso Λ. Mediante concatenación se pueden combinar dos palabras para formar una nueva palabra, cuya longitud es la suma de las longitudes de las palabras originales. El resultado de concatenar una palabra con la palabra vacía es la palabra original.
En algunas aplicaciones, especialmente en lógica , el alfabeto también se conoce como vocabulario y las palabras como fórmulas u oraciones ; esto rompe la metáfora letra/palabra y la reemplaza por una metáfora palabra/oración.
Definición
Dado un conjunto no vacío, un lenguaje formalencimaes un subconjunto de, dóndees el conjunto de todas las posibles palabras de longitud finita sobreLlamamos al conjuntoel alfabeto dePor otro lado, dado un lenguaje formalencima, una palabraestá bien formado si. De manera similar, una expresiónestá bien formado siA veces, un lenguaje formalencimatiene un conjunto de reglas y restricciones claras para la creación de todas las palabras bien formadas posibles a partir de.
En informática y matemáticas, que no suelen tratar con lenguajes naturales , el adjetivo "formal" a menudo se omite por ser redundante. Por otro lado, podemos decir simplemente "un lenguaje formal"." cuando su alfabetoQueda claro en el contexto.
Si bien la teoría del lenguaje formal suele ocuparse de lenguajes formales descritos por reglas sintácticas, la definición real del concepto de "lenguaje formal" es simplemente la que se ha descrito: un conjunto (posiblemente infinito) de cadenas de longitud finita compuestas a partir de un alfabeto dado, ni más ni menos. En la práctica, existen muchos lenguajes que pueden describirse mediante reglas, como los lenguajes regulares o los lenguajes libres de contexto . La noción de gramática formal se asemeja más al concepto intuitivo de "lenguaje", descrito por reglas sintácticas. Por un uso indebido de la definición, a menudo se piensa que un lenguaje formal particular viene acompañado de una gramática formal que lo describe.
Ejemplos
Las siguientes reglas describen un lenguaje formal L sobre el alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, =}:
- Toda cadena no vacía que no contenga "+" o "=" y que no comience con "0" está en L.
- La cadena "0" está en L.
- Una cadena que contiene " =" está en L si y solo si hay exactamente un "=", y separa dos cadenas válidas de L.
- Una cadena que contiene "+ " pero no "=" está en L si y solo si cada "+" en la cadena separa dos cadenas válidas de L.
- Ninguna cadena pertenece a L aparte de las implícitas en las reglas anteriores.
Según estas reglas, la cadena "23+4=555" pertenece a L , pero la cadena "=234=+" no. Este lenguaje formal expresa números naturales , sumas bien formadas e igualdades de suma bien formadas, pero solo expresa su apariencia (su sintaxis ), no su significado ( semántica ). Por ejemplo, en ninguna parte de estas reglas se indica que "0" signifique el número cero, "+" signifique suma, "23+4=555" sea falso, etc.
Construcciones
Para lenguajes finitos, se pueden enumerar explícitamente todas las palabras bien formadas. Por ejemplo, podemos describir un lenguaje L como simplemente L = {a, b, ab, cba}. El caso degenerado de esta construcción es el lenguaje vacío , que no contiene ninguna palabra ( L = ∅ ).
Sin embargo, incluso sobre un alfabeto finito (no vacío) como Σ = {a, b}, existe un número infinito de palabras de longitud finita que potencialmente pueden expresarse: "a", "abb", "ababba", "aaababbbbaab", ... Por lo tanto, los lenguajes formales suelen ser infinitos, y describir un lenguaje formal infinito no es tan simple como escribir L = {a, b, ab, cba}. Aquí hay algunos ejemplos de lenguajes formales:
- L = Σ * , el conjunto de todas las palabras sobre Σ;
- L = {a} * = {a n }, donde n abarca los números naturales y "a n " significa "a" repetido n veces (este es el conjunto de palabras que consisten únicamente en el símbolo "a");
- el conjunto de programas sintácticamente correctos en un lenguaje de programación dado (cuya sintaxis generalmente se define mediante una gramática libre de contexto );
- el conjunto de entradas sobre las cuales se detiene una determinada máquina de Turing ; o
- el conjunto de cadenas máximas de caracteres alfanuméricos ASCII en esta línea, es decir, el conjunto {el, conjunto, de, cadenas, máximas, alfanuméricos, caracteres, ASCII, en, esta, línea, es decir}.
Formalismos de especificación de lenguaje
Los lenguajes formales se utilizan como herramientas en múltiples disciplinas. Sin embargo, la teoría del lenguaje formal rara vez se ocupa de lenguajes particulares (excepto como ejemplos), sino que se centra principalmente en el estudio de diversos tipos de formalismos para describir lenguajes. Por ejemplo, un lenguaje puede darse como
- aquellas cadenas generadas por alguna gramática formal ;
- aquellas cadenas descritas o coincidentes con una expresión regular particular ;
- aquellas cadenas aceptadas por algún autómata , como una máquina de Turing o un autómata de estados finitos ;
- aquellas cadenas para las cuales algún procedimiento de decisión (un algoritmo que hace una secuencia de preguntas relacionadas de SÍ/NO) produce la respuesta SÍ.
Las preguntas típicas que se suelen plantear sobre este tipo de formalismos incluyen:
- ¿Cuál es su poder expresivo? (¿Puede el formalismo X describir todos los lenguajes que puede describir el formalismo Y ? ¿Puede describir otros lenguajes?)
- ¿Cuál es su grado de reconocibilidad? (¿Qué tan difícil es decidir si una palabra dada pertenece a un idioma descrito por el formalismo X ?)
- ¿Cuál es su comparabilidad? (¿Qué tan difícil es decidir si dos lenguajes, uno descrito en el formalismo X y otro en el formalismo Y , o nuevamente en X , son realmente el mismo lenguaje?).
Sorprendentemente, a menudo la respuesta a estos problemas de decisión es "no se puede hacer en absoluto" o "es extremadamente caro" (con una caracterización de su coste). Por lo tanto, la teoría del lenguaje formal constituye un área de aplicación fundamental de la teoría de la computabilidad y la teoría de la complejidad . Los lenguajes formales pueden clasificarse en la jerarquía de Chomsky en función del poder expresivo de su gramática generativa, así como de la complejidad de su autómata de reconocimiento . Las gramáticas libres de contexto y las gramáticas regulares ofrecen un buen equilibrio entre expresividad y facilidad de análisis sintáctico , y se utilizan ampliamente en aplicaciones prácticas.
Metasintaxis
Una metasintaxis es una sintaxis que se utiliza para definir la sintaxis de un lenguaje de programación o un lenguaje formal. Describe la estructura y composición permitidas de frases y oraciones de un metalenguaje , que se utiliza para describir un lenguaje natural o un lenguaje de programación . [ 13 ] Algunos de los metalenguajes formales más utilizados para lenguajes de programación son la forma Backus-Naur (BNF), la forma Backus-Naur extendida (EBNF), la notación sintáctica de Wirth (WSN) y la forma Backus-Naur aumentada (ABNF).
Los metalenguajes poseen su propia metasintaxis, compuesta por símbolos terminales , símbolos no terminales y metasímbolos . Un símbolo terminal, como una palabra o un token, es una estructura independiente dentro del lenguaje que se está definiendo. Un símbolo no terminal representa una categoría sintáctica , que define una o más estructuras sintagmáticas o de oraciones válidas, formadas por un subconjunto de n elementos. Los metasímbolos proporcionan información sintáctica con fines denotativos en una metasintaxis determinada. Los símbolos terminales, no terminales y metasímbolos no se aplican a todos los metalenguajes.
Por lo general, el metalenguaje para lenguajes a nivel de token (formalmente llamados " lenguajes regulares ") no tiene no terminales porque el anidamiento no es un problema en estos lenguajes regulares. El inglés, como metalenguaje para describir ciertos lenguajes, no contiene metasímbolos, ya que toda explicación puede hacerse utilizando expresiones en inglés. Solo existen ciertos metalenguajes formales utilizados para describir lenguajes recursivos (formalmente llamados lenguajes libres de contexto ) que tienen terminales, no terminales y metasímbolos en su metasintaxis.
Operaciones con lenguajes
Ciertas operaciones con lenguajes son comunes. Esto incluye las operaciones estándar de conjuntos, como la unión, la intersección y el complemento. Otro tipo de operación es la aplicación elemento a elemento de las operaciones con cadenas de caracteres.
Ejemplos: supongamosyson lenguas sobre algún alfabeto común.
- La concatenaciónconsta de todas las cadenas de la formadóndees una cadena deyes una cadena de.
- La interseccióndeyconsta de todas las cadenas que están contenidas en ambos idiomas.
- El complementodecon respecto aconsta de todas las cadenas másque no están en.
- La estrella de Kleene : el lenguaje que consiste en todas las palabras que son concatenaciones de cero o más palabras en el idioma original;
- Reversión :
- Sea ε la palabra vacía, entonces, y
- para cada palabra no vacía(dóndeson elementos de algún alfabeto), sea,
- luego para un lenguaje formal,.
- homomorfismo de cadenas
Estas operaciones con cadenas se utilizan para investigar las propiedades de cierre de las clases de lenguajes. Una clase de lenguajes es cerrada bajo una operación particular cuando dicha operación, aplicada a los lenguajes de la clase, siempre produce un lenguaje de la misma clase. Por ejemplo, se sabe que los lenguajes libres de contexto son cerrados bajo la unión, la concatenación y la intersección con lenguajes regulares , pero no bajo la intersección ni el complemento. La teoría de tríos y familias abstractas de lenguajes estudia las propiedades de cierre más comunes de las familias de lenguajes por derecho propio. [ 14 ]
Aplicaciones
Lenguajes de programación
Un compilador suele tener dos componentes distintos. Un analizador léxico , a veces generado por una herramienta como lex, identifica los tokens de la gramática del lenguaje de programación, por ejemplo, identificadores o palabras clave , literales numéricos y de cadena, signos de puntuación y símbolos de operadores, que a su vez se especifican mediante un lenguaje formal más simple, generalmente mediante expresiones regulares . En el nivel conceptual más básico, un analizador sintáctico , a veces generado por un generador de analizadores sintácticos como yacc, intenta determinar si el programa fuente es sintácticamente válido, es decir, si está bien formado con respecto a la gramática del lenguaje de programación para la que se construyó el compilador.
Por supuesto, los compiladores hacen más que simplemente analizar el código fuente: normalmente lo traducen a un formato ejecutable. Por ello, un analizador sintáctico suele generar más que una simple respuesta de sí o no, generalmente un árbol de sintaxis abstracta . Este árbol es utilizado por las etapas posteriores del compilador para generar finalmente un ejecutable que contiene código máquina que se ejecuta directamente en el hardware, o algún código intermedio que requiere una máquina virtual para su ejecución.
Teorías formales, sistemas y demostraciones

En lógica matemática , una teoría formal es un conjunto de enunciados expresados en un lenguaje formal.
Un sistema formal (también llamado cálculo lógico o sistema lógico ) consta de un lenguaje formal junto con un aparato deductivo (también llamado sistema deductivo ). El aparato deductivo puede consistir en un conjunto de reglas de transformación , que pueden interpretarse como reglas válidas de inferencia, o en un conjunto de axiomas , o en ambos. Un sistema formal se utiliza para derivar una expresión a partir de una o más expresiones. Si bien un lenguaje formal puede identificarse con sus fórmulas, un sistema formal no puede identificarse de la misma manera por sus teoremas. Dos sistemas formalesypueden tener los mismos teoremas y, sin embargo, diferir en algún aspecto significativo desde el punto de vista de la teoría de la demostración (por ejemplo, una fórmula A puede ser una consecuencia sintáctica de una fórmula B en una pero no en otra).
Una demostración o derivación formal es una secuencia finita de fórmulas bien formadas (que pueden interpretarse como enunciados o proposiciones ), cada una de las cuales es un axioma o se deduce de las fórmulas precedentes de la secuencia mediante una regla de inferencia . El último enunciado de la secuencia es un teorema de un sistema formal. Las demostraciones formales son útiles porque sus teoremas pueden interpretarse como proposiciones verdaderas.
Interpretaciones y modelos
Los lenguajes formales son de naturaleza puramente sintáctica, pero se les puede asignar una semántica que da significado a los elementos del lenguaje. Por ejemplo, en lógica matemática , el conjunto de fórmulas posibles de una lógica particular es un lenguaje formal, y una interpretación asigna un significado a cada una de las fórmulas, generalmente un valor de verdad .
El estudio de las interpretaciones de los lenguajes formales se denomina semántica formal . En lógica matemática, esto se suele abordar mediante la teoría de modelos . En la teoría de modelos, los términos que aparecen en una fórmula se interpretan como objetos dentro de estructuras matemáticas , y unas reglas de interpretación composicionales fijas determinan cómo se puede derivar el valor de verdad de la fórmula a partir de la interpretación de sus términos; un modelo para una fórmula es una interpretación de los términos tal que la fórmula se vuelve verdadera.
Véase también
Notas
- ↑ Por ejemplo, la lógica de primer orden a menudo se expresa utilizando un alfabeto que, además de símbolos como ∧, ¬, ∀ y paréntesis, contiene infinitos elementos x 0 , x 1 , x 2 ,… que desempeñan el papel de variables.
Referencias
Citas
- ↑ Véase, por ejemplo, Reghizzi, Stefano Crespi (2009). Formal Languages and Compilation . Texts in Computer Science. Springer. p. 8. Bibcode : 2009flc..book.....C . ISBN 9781848820500
Un alfabeto es un conjunto finito
. - ↑ "Introducción a la teoría de autómatas, lenguajes y computación" . infolab.stanford.edu . Consultado el 23 de enero de 2026 .
- ↑ "En la prehistoria de la teoría del lenguaje formal: Lenguajes de Gauss" . Enero de 1992. Consultado el 30 de abril de 2021 .
- ↑ Burris, Stanley; Jackson, Marcel (2026), Zalta, Edward N.; Nodelman, Uri (eds.), "George Boole" , The Stanford Encyclopedia of Philosophy ( edición de primavera de 2026), Metaphysics Research Lab, Universidad de Stanford , consultado el 5 de abril de 2026.
- ↑ «Gottlob Frege» . 5 de diciembre de 2019 . Consultado el 30 de abril de 2021 .
- ↑ Martin Davis (1995). «Influencia de la lógica matemática en la informática» . En Rolf Herken (ed.). La máquina de Turing universal: un estudio de medio siglo . Springer. pág. 290. ISBN 978-3-211-82637-9.
- ↑ "El artículo de Thue de 1914: una traducción" (PDF) . 28 de agosto de 2013. Archivado (PDF) del original el 30 de abril de 2021. Recuperado el 30 de abril de 2021 .
- ↑ "Emil Leon Post" . Septiembre de 2001. Consultado el 30 de abril de 2021 .
- ↑ Torres Quevedo, Leonardo. Sobre un sistema de notaciones y símbolos destinados a facilitar la descripción de las máquinas, (pdf) , págs. 25–30, Revista de Obras Públicas, 17 de enero de 1907.
- ↑ Bruderer, Herbert (2021). «La evolución global de la tecnología informática» . Hitos en la informática analógica y digital . Springer. pág. 1212. ISBN 978-3030409739.
- ↑ Jäger, Gerhard; Rogers, James (19 de julio de 2012). "Teoría del lenguaje formal: refinando la jerarquía de Chomsky" . Philosophical Transactions of the Royal Society B. 367 ( 1598): 1956–1970. doi : 10.1098 / rstb.2012.0077 . PMC 3367686. PMID 22688632 .
- ↑ "John Warner Backus" . Febrero de 2016. Consultado el 30 de abril de 2021 .
- ↑ Sellink, Alex y Chris Verhoef. « Desarrollo, evaluación y reingeniería de descripciones de lenguajes ».Software Maintenance and Reengineering, 2000. Actas del Cuarto Congreso Europeo. IEEE, 2000.
- ↑ Hopcroft y Ullman (1979) , Capítulo 11: Propiedades de cierre de familias de lenguajes.
Fuentes
- Obras citadas
- Hopcroft, John E.; Ullman , Jeffrey D. (1979). Introducción a la teoría de autómatas, lenguajes y computación . Reading, Massachusetts: Addison-Wesley Publishing. ISBN 81-7808-347-7.
- Referencias generales
- AG Hamilton, Lógica para matemáticos , Cambridge University Press , 1978, ISBN 0-521-21838-1.
- Seymour Ginsburg , Propiedades algebraicas y de teoría de autómatas de los lenguajes formales , North-Holland, 1975, ISBN 0-7204-2506-9.
- Michael A. Harrison , Introducción a la teoría del lenguaje formal , Addison-Wesley, 1978.
- Rautenberg, Wolfgang (2010). Una introducción concisa a la lógica matemática (3.ª ed.). Nueva York: Springer Science+Business Media . doi : 10.1007/978-1-4419-1221-3 . ISBN 978-1-4419-1220-6.
- Grzegorz Rozenberg , Arto Salomaa , Manual de lenguajes formales: Volumen I-III , Springer, 1997, ISBN 3-540-61486-9.
- Patrick Suppes, Introducción a la lógica , D. Van Nostrand, 1957, ISBN 0-442-08072-7.
Enlaces externos
- "Lenguaje formal" , Enciclopedia de Matemáticas , EMS Press , 2001 [1994]
- Universidad de Maryland , Definiciones de lenguaje formal. Archivado el 16 de febrero de 2008 en Wayback Machine.
- James Power, "Notas sobre teoría del lenguaje formal y análisis sintáctico". Archivado el 21 de noviembre de 2007 en Wayback Machine , 29 de noviembre de 2002.
- Borradores de algunos capítulos del "Manual de teoría del lenguaje formal", vol. 1–3, G. Rozenberg y A. Salomaa (eds.), Springer Verlag , (1997):
- Alexandru Mateescu y Arto Salomaa, "Prefacio" en el volumen 1, págs. v-viii, y "Lenguajes formales: una introducción y una sinopsis", capítulo 1 en el vol. 1, págs. 1–39
- Sheng Yu, "Lenguajes regulares", Capítulo 2 en Vol. 1
- Jean-Michel Autebert, Jean Berstel, Luc Boasson, "Lenguajes libres de contexto y autómatas de pila", Capítulo 3 en Vol. 1
- Christian Choffrut y Juhani Karhumäki, "Combinatoria de palabras", capítulo 6 en vol. 1
- Tero Harju y Juhani Karhumäki, "Morfismos", Capítulo 7 en el vol. 1, págs. 439–510
- Jean-Eric Pin, "Semigrupos sintácticos", Capítulo 10 en Vol. 1, págs. 679–746
- M. Crochemore y C. Hancart, "Autómatas para la coincidencia de patrones", Capítulo 9 en Vol. 2
- Dora Giammarresi, Antonio Restivo, "Lenguajes bidimensionales", Capítulo 4 en vol. 3, págs. 215–267
- Lenguajes formales
- informática teórica
- Combinatoria de palabras
- Lingüística matemática