stringtranslate.com

Operaciones de cadena

En informática , en el área de la teoría del lenguaje formal , se hace uso frecuente de una variedad de funciones de cadena ; sin embargo, la notación utilizada es diferente de la utilizada para la programación de computadoras , y algunas funciones comúnmente utilizadas en el ámbito teórico rara vez se usan al programar. Este artículo define algunos de estos términos básicos.

Cadenas e idiomas

Una cadena es una secuencia finita de caracteres. La cadena vacía se indica con . La concatenación de dos cadenas y se denota por , o más brevemente por . Concatenar con la cadena vacía no hace 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 conjunto habituales como unión, intersección, etc., la concatenación se puede aplicar a los idiomas: si ambos y son idiomas, su concatenación se define como el conjunto de concatenaciones de cualquier cadena de y cualquier cadena de , formalmente . Nuevamente, el punto de concatenación a menudo se omite por motivos de brevedad.

El lenguaje que consta únicamente de una cadena vacía debe distinguirse del lenguaje vacío . Concatenar cualquier idioma con el primero no genera ningún cambio: , mientras que concatenar con el segundo siempre produce el idioma vacío: . La concatenación de lenguas es asociativa: .

Por ejemplo, abreviando , el conjunto de todos los números decimales de tres cifras se obtiene como . El conjunto de todos los números decimales de longitud arbitraria es un ejemplo de un lenguaje infinito.

Alfabeto de una cadena

El alfabeto de una cadena es el conjunto de todos los caracteres que aparecen en una cadena en particular. Si s es una cadena, su alfabeto se denota por

El alfabeto de un idioma es el conjunto de todos los caracteres que aparecen en cualquier cadena de , formalmente: .

Por ejemplo, el conjunto es el alfabeto de la cadena , y lo anterior es el alfabeto del idioma anterior así como del idioma de todos los números decimales.

Sustitución de cadenas

Sea L un idioma y sea Σ su alfabeto. Una sustitución de cadena o simplemente una sustitución es una asignación f que asigna caracteres en Σ a idiomas (posiblemente en un alfabeto diferente). Así, por ejemplo, dado un carácter a ∈ Σ, se tiene f ( a )= L a donde L a ⊆ Δ * es algún idioma cuyo alfabeto es Δ. Este mapeo puede extenderse a cadenas como

f (ε)=ε

para la cadena vacía ε, y

f ( sa ) ​​= f ( s ) f ( a )

para cadena sL y carácter a ∈ Σ. Las sustituciones de cadenas se pueden extender a idiomas completos como [1]

Los lenguajes regulares se cierran bajo sustitución de cadenas. Es decir, si cada carácter del alfabeto de un idioma normal se sustituye por otro idioma normal, el resultado sigue siendo un idioma normal. [2] De manera similar, los lenguajes libres de contexto se cierran bajo 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 cuerdas, tenemos, por ejemplo

Para la extensión de f uc a idiomas, tenemos, por ejemplo

Homomorfismo de cuerdas

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, donde hay una cadena para cada carácter . [nota 2] [4]

Los homomorfismos de cadenas son morfismos 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 conjunto se llama imagen homomórfica de . La imagen homomórfica inversa de una cuerda se define como

mientras que la imagen homomórfica inversa de una lengua se define como

En general, si bien uno tiene

y

para cualquier idioma .

La clase de lenguas regulares está cerrada bajo homomorfismos y homomorfismos inversos. [5] De manera similar, los lenguajes libres de contexto están cerrados bajo homomorfismos [nota 3] y homomorfismos inversos. [6]

Se dice que un homomorfismo de cadena es libre de ε (o libre de e) si es para todo a en el alfabeto . Los cifrados de sustitución de una sola letra simples son ejemplos de homomorfismos de cadenas (libres de ε).

También se puede obtener un ejemplo de homomorfismo de cadena g uc definiendo una sustitución similar a la anterior: g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε, pero dejando que g uc no esté definido en caracteres de puntuación. Ejemplos de imágenes homomórficas inversas son

Para este último idioma, g uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› } . El homomorfismo g uc no está libre de ε, ya que asigna, por ejemplo, ‹0› a ε.

Un ejemplo de homomorfismo de cadena muy simple que asigna cada carácter a solo un carácter es la conversión de una cadena codificada con EBCDIC a ASCII .

Proyección de cuerdas

Si s es una cadena y es 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 como . Se define formalmente eliminando los caracteres del lado derecho:

Aquí denota la cadena vacía . La proyección de una cuerda es esencialmente la misma que una proyección en álgebra relacional .

La proyección de cuerdas puede promoverse a la proyección de un idioma . Dado un lenguaje formal L , su proyección viene dada por

[ cita necesaria ]

Cociente derecho e izquierdo

El cociente derecho de un carácter a de una cadena s es el truncamiento del carácter a en la cadena s , desde el lado derecho. Se denota como . Si la cadena no tiene a en el lado derecho, el resultado es la cadena vacía. De este modo:

El cociente de la cadena vacía se puede tomar:

De manera similar, dado un subconjunto de un monoide , se puede definir el subconjunto cociente como

Los cocientes izquierdos se pueden definir de manera similar, realizando operaciones a la izquierda de una cadena. [ cita necesaria ]

Hopcroft y Ullman (1979) definen el cociente L 1 / L 2 de las lenguas L 1 y L 2 sobre el mismo alfabeto como L 1 / L 2 = { s | ∃ tL 2 . stL 1 } . [7] Esta 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 implicaproduciendo {}, en lugar de { ε }.

El cociente izquierdo (cuando se define de manera similar a Hopcroft y Ullman 1979) de un lenguaje singleton L 1 y un lenguaje arbitrario L 2 se conoce como derivada de Brzozowski ; si L 2 está representado por una expresión regular , también puede serlo el cociente izquierdo. [8]

relación sintáctica

El cociente derecho de un subconjunto de un monoide define una relación de equivalencia , llamada relación sintáctica derecha de S. esta dado por

La relación es claramente de índice finito (tiene un número finito de clases de equivalencia) si y sólo si los cocientes de derechos familiares son finitos; 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 . [ cita necesaria ]

Cancelación del derecho

La cancelación correcta 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 como y se define recursivamente como

La cadena vacía siempre es cancelable:

Claramente, cancelación correcta y conmutación de proyección :

[ cita necesaria ]

Prefijos

Los prefijos de una cadena es el conjunto de todos los prefijos de una cadena, con respecto a un idioma determinado:

dónde .

El prefijo cerrado de un idioma es

Ejemplo:

Un idioma se llama prefijo cerrado si .

El operador de cierre de prefijo es idempotente :

La relación de prefijo es una relación binaria tal que si y sólo si . Esta relación es un ejemplo particular de orden de prefijo . [ cita necesaria ]

Ver también

Notas

  1. ^ Aunque todo lenguaje regular también está libre de contexto, el teorema anterior no está implícito en el actual, ya que el primero produce un resultado más modelador para los lenguajes regulares.
  2. ^ Estrictamente formalmente, un homomorfismo produce un lenguaje que consta de una sola cadena, es decir .
  3. ^ Esto se desprende del cierre mencionado anteriormente bajo sustituciones arbitrarias.

Referencias

  1. ^ Hopcroft, Ullman (1979), sección 3.2, p.60
  2. ^ Hopcroft, Ullman (1979), Sección 3.2, Teorema 3.4, p.60
  3. ^ Hopcroft, Ullman (1979), sección 6.2, teorema 6.2, p.131
  4. ^ Hopcroft, Ullman (1979), sección 3.2, páginas 60-61
  5. ^ Hopcroft, Ullman (1979), sección 3.2, teorema 3.5, p.61
  6. ^ Hopcroft, Ullman (1979), sección 6.2, teorema 6.3, p.132
  7. ^ Hopcroft, Ullman (1979), sección 3.2, p.62
  8. ^ Janusz A. Brzozowski (1964). "Derivadas de expresiones regulares". J.ACM . 11 (4): 481–494. doi : 10.1145/321239.321249 . S2CID  14126942.