En informática , específicamente en el área de la teoría de lenguajes formales , se utilizan con frecuencia diversas funciones de cadena ; sin embargo, la notación empleada difiere de la utilizada en la programación , y algunas funciones comunes en el ámbito teórico rara vez se emplean en la programación. Este artículo define algunos de estos términos básicos.
Cadenas y lenguajes
Una cadena es una secuencia finita de caracteres. La cadena vacía se denota porLa concatenación de dos cadenasyse denota por, o más corto porConcatenar con la cadena vacía no supone ninguna diferencia:La concatenación de cadenas es asociativa :.
Por ejemplo,.
Un lenguaje es un conjunto finito o infinito de cadenas. Además de las operaciones de conjuntos habituales como la unión, la intersección, etc., la concatenación se puede aplicar a los lenguajes: si ambosyson los lenguajes, su concatenaciónse define como el conjunto de concatenaciones de cualquier cadena dey cualquier cadena deformalmente. Nuevamente, el punto de concatenaciónA menudo se omite por brevedad.
El idiomaConsistir únicamente en la cadena vacía debe distinguirse del lenguaje vacío.Concatenar cualquier idioma con el anterior no produce ningún cambio:, mientras que al concatenar con este último siempre se obtiene el lenguaje vacío:La concatenación de lenguajes es asociativa:.
Por ejemplo, abreviar, el conjunto de todos los números decimales de tres dígitos se obtiene comoEl conjunto de todos los números decimales de longitud arbitraria es un ejemplo de lenguaje infinito.
Alfabeto de una cadena
El alfabeto de una cadena es el conjunto de todos los caracteres que aparecen en una cadena particular. Si s es una cadena, su alfabeto se denota por
El alfabeto de un idiomaes el conjunto de todos los caracteres que aparecen en cualquier cadena de, formalmente: .
Por ejemplo, el conjuntoes el alfabeto de la cadenay lo anteriores el alfabeto del idioma mencionado anteriormenteasí como del lenguaje de todos los números decimales.
Sustitución de cadenas
Sea L un lenguaje y Σ su alfabeto. Una sustitución de cadenas , o simplemente una sustitución , es una función f que asigna caracteres de Σ a lenguajes (posiblemente con un alfabeto diferente). Así, por ejemplo, dado un carácter a ∈ Σ, se tiene f ( a )= L a donde L a ⊆ Δ * es algún lenguaje cuyo alfabeto es Δ. Esta función puede extenderse a cadenas como
- f (ε)=ε
para la cadena vacía ε, y
- f ( sa )= f ( s ) f ( a )
para cadena s ∈ L y carácter a ∈ Σ. Las sustituciones de cadenas pueden extenderse a lenguajes completos como [ 1 ].
Los lenguajes regulares son cerrados bajo la sustitución de cadenas. Es decir, si cada carácter del alfabeto de un lenguaje regular se sustituye por otro lenguaje regular, el resultado sigue siendo un lenguaje regular. [ 2 ] De manera similar, los lenguajes libres de contexto son cerrados bajo la sustitución de cadenas. [ 3 ] [ nota 1 ]
Un ejemplo sencillo es la conversión de f uc (.) a mayúsculas, que puede definirse, por ejemplo, de la siguiente manera:
Para la extensión de f uc a cadenas, tenemos, por ejemplo:
- f uc (‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},
- f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›}, y
- f uc (‹¡Vamos!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.
Para la extensión de f uc a los idiomas, tenemos, por ejemplo:
- f uc ({ ‹Straße›, ‹u2›, ‹Go!› }) = { ‹STRASSE› } ∪ { ‹U› } ∪ { } = { ‹STRASSE›, ‹U› }.
homomorfismo de cadenas
Un homomorfismo de cadenas (a menudo denominado simplemente homomorfismo en la teoría del lenguaje formal ) es una sustitución de cadenas tal que cada carácter se reemplaza por una sola cadena. Es decir,, dóndees una cadena, para cada carácter. [ nota 2 ] [ 4 ]
Los homomorfismos de cadenas son morfismos de monoides en el monoide libre , que preservan la cadena vacía y la operación binaria de concatenación de cadenas . Dado un lenguaje, el conjuntose llama la imagen homomórfica deLa imagen homomórfica inversa de una cadenase define como
mientras que la imagen homomórfica inversa de un lenguajese define como
En general,, mientras que uno sí tiene
y
para cualquier idioma.
La clase de lenguajes regulares es cerrada bajo homomorfismos y homomorfismos inversos. [ 5 ] De manera similar, los lenguajes libres de contexto son cerrados bajo homomorfismos [ nota 3 ] y homomorfismos inversos. [ 6 ]
Se dice que un homomorfismo de cadenas es ε-libre (o e-libre) sipara todas las a en el alfabetoLos cifrados simples de sustitución de una sola letra son ejemplos de homomorfismos de cadenas (libres de ε).
Un ejemplo de homomorfismo de cadenas g uc también se puede obtener definiendo de forma similar a la sustitución anterior : g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε, pero dejando g uc indefinido en caracteres de puntuación. Ejemplos de imágenes homomórficas inversas son
- g uc −1 ({ ‹SSS› }) = { ‹sss›, ‹sß›, ‹ßs› }, ya que g uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS›, y
- g uc −1 ({ ‹A›, ‹bb› }) = { ‹a› }, ya que g uc (‹a›) = ‹A›, mientras que ‹bb› no puede ser alcanzado por g uc .
Para este último lenguaje, g uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› }. El homomorfismo g uc no es ε-libre, ya que mapea eg ‹0› a ε.
Un ejemplo muy simple de homomorfismo de cadenas que asigna cada carácter a un solo carácter es la conversión de una cadena codificada en EBCDIC a ASCII .
Proyección de cadena
Si s es una cadena, yes un alfabeto, la proyección de cadena de s es la cadena que resulta de eliminar todos los caracteres que no están en. Está escrito comoSe define formalmente eliminando caracteres del lado derecho:
Aquídenota la cadena vacía . La proyección de una cadena es esencialmente lo mismo que una proyección en álgebra relacional .
La proyección de cadenas puede promoverse a la proyección de un lenguaje . Dado un lenguaje formal L , su proyección viene dada por
Cociente derecho e izquierdo
El cociente derecho de un carácter a de una cadena s es la truncación del carácter a en la cadena s , desde el lado derecho. Se denota comoSi la cadena no tiene un carácter en el lado derecho, el resultado es una cadena vacía. Por lo tanto:
Se puede tomar el cociente de la cadena vacía:
De manera similar, dado un subconjuntode un monoide, se puede definir el subconjunto cociente como
Los cocientes izquierdos pueden definirse de forma similar, realizando las operaciones en el lado izquierdo de una cadena.
Hopcroft y Ullman (1979) definen el cociente L 1 / L 2 de los lenguajes L 1 y L 2 sobre el mismo alfabeto como L 1 / L 2 = { s | ∃ t ∈ L 2 . st ∈ L 1 } . [ 7 ] Esto no es una generalización de la definición anterior, ya que, para una cadena s y caracteres distintos a , b , la definición de Hopcroft y Ullman implicalo que produce {} , en lugar de { ε } .
El cociente izquierdo (cuando se define de forma similar a Hopcroft y Ullman 1979) de un lenguaje unitario L 1 y un lenguaje arbitrario L 2 se conoce como derivada de Brzozowski ; si L 2 se representa mediante una expresión regular , también puede ser el cociente izquierdo. [ 8 ]
Relación sintáctica
El cociente derecho de un subconjuntode un monoidedefine una relación de equivalencia , llamada relación sintáctica derecha de S. Está dada por
La relación es claramente de índice finito (tiene un número finito de clases de equivalencia) si y solo si la familia de cocientes derechos es finita; es decir, si
es finito. En el caso de que M sea el monoide de palabras sobre algún alfabeto, S es entonces un lenguaje regular , es decir, un lenguaje que puede ser reconocido por un autómata de estados finitos . Esto se analiza con mayor detalle en el artículo sobre monoides sintácticos .
Derecho de cancelación
La cancelación derecha de un carácter a de una cadena s es la eliminación de la primera aparición del carácter a en la cadena s , comenzando desde el lado derecho. Se denota comoy se define recursivamente como
La cadena vacía siempre se puede cancelar:
Claramente, cancelación correcta y desplazamiento por proyección :
Prefijos
Los prefijos de una cadena son el conjunto de todos los prefijos de una cadena, con respecto a un lenguaje dado:
dónde.
El cierre de prefijo de un lenguaje es
Ejemplo:
Un lenguaje se denomina prefijo cerrado si.
El operador de cierre de prefijo es idempotente :
La relación de prefijo es una relación binaria.de tal manera quesi y solo siEsta relación es un ejemplo particular de un orden de prefijo .
Véase también
- Comparación de lenguajes de programación (funciones de cadena)
- El lema de Levi
- Cadenas de caracteres (informática) : definición e implementación de operaciones más básicas con cadenas de caracteres.
Notas
- ↑ Aunque todo lenguaje regular es también libre de contexto, el teorema anterior no está implícito en el actual, ya que el primero produce un resultado de modelado para lenguajes regulares.
- ↑ Estrictamente hablando, un homomorfismo produce un lenguaje que consta de una sola cadena, es decir.
- ↑ Esto se deduce del cierre mencionado anteriormente bajo sustituciones arbitrarias.
Referencias
- 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 978-0-201-02988-8. Zbl 0426.68001 . (Véase el capítulo 3.)
- ↑ Hopcroft, Ullman (1979), Sec.3.2, p.60
- ↑ Hopcroft, Ullman (1979), Sec. 3.2, Teorema 3.4, pág. 60
- ↑ Hopcroft, Ullman (1979), Sec. 6.2, Teorema 6.2, pág. 131
- ↑ Hopcroft, Ullman (1979), Sec. 3.2, págs. 60-61
- ↑ Hopcroft, Ullman (1979), Sec. 3.2, Teorema 3.5, pág. 61
- ↑ Hopcroft, Ullman (1979), Sec. 6.2, Teorema 6.3, pág. 132
- ↑ Hopcroft, Ullman (1979), Sec.3.2, p.62
- ↑ Janusz A. Brzozowski (1964). "Derivadas de Expresiones Regulares" . J.ACM . 11 (4): 481– 494. doi : 10.1145/321239.321249 . S2CID 14126942 .
- Lenguajes formales
- Álgebra relacional
- Cadenas de caracteres (informática)