En lógica, matemáticas, informática y lingüística, un lenguaje formal consta de palabras cuyas letras se toman de un alfabeto y están bien formadas de acuerdo con un conjunto específico de reglas.
El alfabeto de un idioma formal consta de símbolos, letras o fichas que se concatenan en cadenas del idioma. Cada cadena concatenada de los símbolos de este alfabeto se llama una palabra, y las palabras que pertenecen a un lenguaje formal particular, a veces se llaman palabras bien formadas o fórmulas bien formadas. Un lenguaje formal a menudo se define por medio de una gramática formal, como una gramática regular o una gramática libre de contexto, que consiste en sus reglas de formación.
El campo de la teoría del lenguaje formal estudia principalmente los aspectos puramente sintácticos de tales lenguajes, 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 los lenguajes naturales. En informática, los lenguajes formales se utilizan, entre otros, como base para definir la gramática de los lenguajes de programación y las versiones formalizadas de subconjuntos de lenguajes naturales en los que las palabras del lenguaje representan conceptos que están asociados con significados o semánticas particulares. 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 poder computacional limitado. En la lógica y los 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 de que todas las matemáticas pueden reducirse a la manipulación sintáctica de los lenguajes formales de esta manera.
Se cree que el primer uso del lenguaje formal fue el Begriffsschrift de 1879 de Gottlob Frege, que significa "escritura de conceptos", que describía un "lenguaje formal, modelado sobre el de la aritmética, para el pensamiento puro".
El primer sistema semi-Thue de Axel Thue, que se puede utilizar para reescribir cadenas, influyó en las gramáticas formales.
Un alfabeto, en el contexto de los lenguajes formales, puede ser cualquier conjunto, aunque a menudo tiene sentido utilizar un alfabeto en el sentido habitual de la palabra, o más generalmente un conjunto de caracteres como ASCII o Unicode. Los elementos de un alfabeto se denominan letras. Un alfabeto puede contener un número infinito de elementos; sin embargo, la mayoría de las definiciones en la teoría del lenguaje formal especifican alfabetos con un número finito de elementos y la mayoría de los resultados se aplican solo a ellos.
Una palabra sobre un alfabeto puede ser cualquier secuencia finita (es decir, una cadena ) de letras. El conjunto de todas las palabras sobre un alfabeto Σ generalmente se denota con Σ * (usando la estrella de Kleene ). La longitud de una palabra es el número de letras que la componen. Para cualquier alfabeto, solo hay una palabra de longitud 0, la palabra vacía, que a menudo se denota por e, ε, λ o incluso Λ. Por 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 se conocen como fórmulas u oraciones ; esto rompe la metáfora de letra / palabra y la reemplaza por una metáfora de palabra / oración.
Un lenguaje formal L sobre un alfabeto Σ es un subconjunto de Σ *, es decir, un conjunto de palabras sobre ese alfabeto. A veces, los conjuntos de palabras se agrupan en expresiones, mientras que las reglas y restricciones pueden formularse para la creación de "expresiones bien formadas".
En informática y matemáticas, que no suelen tratar con lenguajes naturales, el adjetivo "formal" se omite a menudo por redundante.
Si bien la teoría del lenguaje formal generalmente se ocupa de los lenguajes formales que se describen mediante algunas reglas sintácticas, la definición real del concepto "lenguaje formal" es solo la anterior: un conjunto (posiblemente infinito) de cadenas de longitud finita compuestas a partir de un alfabeto dado, Nada mas y nada menos. En la práctica, hay muchos lenguajes que pueden describirse mediante reglas, como lenguajes regulares o lenguajes libres de contexto. La noción de una gramática formal puede estar más cerca del concepto intuitivo de un "lenguaje", uno descrito por reglas sintácticas. Por abuso de la definición, a menudo se piensa que un lenguaje formal particular está equipado con una gramática formal que lo describe.
Las siguientes reglas describen un lenguaje formal L sobre el alfabeto Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, =}:
Según estas reglas, la cadena "23 + 4 = 555" está en L, pero la cadena "= 234 = +" no. Este lenguaje formal expresa números naturales, adiciones bien formadas e igualdades de suma bien formadas, pero expresa solo su apariencia (su sintaxis ), no lo que significan ( semántica ). Por ejemplo, en ninguna parte de estas reglas hay alguna indicación de que "0" significa el número cero, "+" significa suma, "23 + 4 = 555" es falso, etc.
Para lenguajes finitos, se pueden enumerar explícitamente todas las palabras bien formadas. Por ejemplo, podemos describir un lenguaje L simplemente como L = {a, b, ab, cba}. El caso degenerado de esta construcción es el lenguaje vacío, que no contiene palabras en absoluto ( L = ∅ ).
Sin embargo, incluso en un alfabeto finito (no vacío) como Σ = {a, b} hay un número infinito de palabras de longitud finita que pueden expresarse potencialmente: "a", "abb", "ababba", " aaababbbbaab ",.... Por lo tanto, los lenguajes formales son típicamente infinitos, y describir un lenguaje formal infinito no es tan simple como escribir L = {a, b, ab, cba}. A continuación, se muestran algunos ejemplos de lenguajes formales:
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 ocupa principalmente del estudio de varios tipos de formalismos para describir lenguajes. Por ejemplo, un idioma se puede dar como
Las preguntas típicas que se hacen sobre estos formalismos incluyen:
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 lo caro que es). Por lo tanto, la teoría del lenguaje formal es un área de aplicación importante 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 según el poder expresivo de su gramática generativa, así como la complejidad de su autómata de reconocimiento. Las gramáticas libres de contexto y las gramáticas regulares proporcionan un buen compromiso entre expresividad y facilidad de análisis, y se utilizan ampliamente en aplicaciones prácticas.
Ciertas operaciones en idiomas son comunes. Esto incluye las operaciones de conjuntos estándar, como unión, intersección y complemento. Otra clase de operación es la aplicación de operaciones de cadena por elementos.
Ejemplos: supongamos que y son idiomas sobre algún alfabeto común.
Estas operaciones de cadena se utilizan para investigar las propiedades de cierre de clases de lenguajes. Una clase de lenguajes se cierra bajo una operación particular cuando la operación, aplicada a los lenguajes de la clase, siempre vuelve a producir un lenguaje en la misma clase. Por ejemplo, se sabe que los lenguajes libres de contexto están cerrados bajo unión, concatenación e intersección con lenguajes regulares, pero no cerrados bajo intersección o complemento. La teoría de tríos y familias abstractas de lenguas estudia las propiedades de cierre más comunes de las familias de lenguas por derecho propio.
Operación | Regular | DCFL | CFL | INDIANA | CSL | recursivo | RE | |
---|---|---|---|---|---|---|---|---|
Unión | sí | No | sí | sí | sí | sí | sí | |
Intersección | sí | No | No | No | sí | sí | sí | |
Complemento | sí | sí | No | No | sí | sí | No | |
Concatenación | sí | No | sí | sí | sí | sí | sí | |
Estrella de Kleene | sí | No | sí | sí | sí | sí | sí | |
(Cadena) homomorfismo | sí | No | sí | sí | No | No | sí | |
homomorfismo libre de ε (cadena) | sí | No | sí | sí | sí | sí | sí | |
Sustitución | sí | No | sí | sí | sí | No | sí | |
Homomorfismo inverso | sí | sí | sí | sí | sí | sí | sí | |
Marcha atrás | sí | No | sí | sí | sí | sí | sí | |
Intersección con un idioma regular | sí | sí | sí | sí | sí | sí | sí |
Un compilador suele tener dos componentes distintos. Un analizador léxico, a veces generada por una herramienta como lex
, identifica los símbolos de la gramática lenguaje de programación, por ejemplo, identificadores o palabras clave, literales numéricas y de cadena, signos de puntuación y del operador símbolos, que son en sí mismos especificado por un lenguaje formal más simple, generalmente por medio de regularidad expresiones. En el nivel conceptual más básico, un analizador, a veces generado por un generador de analizadores sintácticos como yacc
, intenta decidir 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 el que se construyó el compilador.
Por supuesto, los compiladores hacen algo más que analizar el código fuente, por lo general lo traducen a algún formato ejecutable. Debido a esto, un analizador generalmente genera más de una respuesta sí / no, generalmente un árbol de sintaxis abstracto. Esto se usa en las etapas posteriores del compilador para generar eventualmente un ejecutable que contenga código de máquina que se ejecute directamente en el hardware, o algún código intermedio que requiera una máquina virtual para ejecutarse.
En lógica matemática, una teoría formal es un conjunto de oraciones expresadas en un lenguaje formal.
Un sistema formal (también llamado cálculo lógico o sistema lógico) consiste en 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 un conjunto de axiomas, o tener ambos. Se utiliza un sistema formal para derivar una expresión de una o más expresiones. Aunque un lenguaje formal puede identificarse con sus fórmulas, un sistema formal no puede identificarse igualmente por sus teoremas. Dos sistemas formales y pueden tener todos los mismos teoremas y, sin embargo, diferir de alguna manera significativa de la teoría de la prueba (una fórmula A puede ser una consecuencia sintáctica de una fórmula B en uno pero no en otro, por ejemplo).
Una prueba o derivación formal es una secuencia finita de fórmulas bien formadas (que pueden interpretarse como oraciones o proposiciones ), cada una de las cuales es un axioma o se sigue de las fórmulas anteriores en la secuencia por una regla de inferencia. La última oración de la secuencia es un teorema de un sistema formal. Las demostraciones formales son útiles porque sus teoremas pueden interpretarse como proposiciones verdaderas.
Los lenguajes formales son de naturaleza completamente sintáctica, pero se les puede dar una semántica que dé 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, por lo general, un valor de verdad.
El estudio de las interpretaciones de lenguajes formales se denomina semántica formal. En lógica matemática, esto se hace a menudo en términos de 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 las reglas de interpretación composicional 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 términos tal que la fórmula se vuelve verdadera.
![]() | Wikimedia Commons tiene medios relacionados con lenguajes formales. |