Articulo de referencia

Enumerador (informática)

Un enumerador es una máquina de Turing con una impresora conectada. La máquina de Turing puede usar esa impresora como dispositivo de salida para imprimir cadenas de caracteres....

Un enumerador es una máquina de Turing con una impresora conectada. La máquina de Turing puede usar esa impresora como dispositivo de salida para imprimir cadenas de caracteres. Cada vez que la máquina de Turing desea agregar una cadena a la lista, la envía a la impresora. El enumerador es un tipo de variante de máquina de Turing y es equivalente a una máquina de Turing.

Definición formal

Un enumeradormi{\displaystyle E}puede definirse como una máquina de Turing de 2 cintas ( Máquina de Turing de múltiples cintas dondek=2{\displaystyle k=2}) cuyo idioma es{\displaystyle \emptyset }. Inicialmente,mi{\displaystyle E}No recibe ninguna entrada y todas las cintas están en blanco (es decir, llenas de símbolos en blanco). Símbolo recién definido#Γ#Σ{\displaystyle \#\in \Gamma \land \#\notin \Sigma }es el delimitador que marca el final de un elemento deS{\displaystyle S}. La segunda cinta puede considerarse como la impresora, las cadenas en ella están separadas por#{\displaystyle \#}El idioma enumerado por un enumeradormi{\displaystyle E}denotado porL(mi){\displaystyle L(E)}se define como el conjunto de cadenas en la segunda cinta (la impresora).

Equivalencia entre máquinas de Turing y enumeradores

Un lenguaje sobre un alfabeto finito es Turing-reconocible si y solo si puede ser enumerado por un enumerador. Esto demuestra que los lenguajes Turing-reconocibles también son recursivamente enumerables.

Prueba

Un lenguaje reconocible por Turing puede ser enumerado por un enumerador.

Consideremos una máquina de Turing.METRO{\displaystyle M}y el idioma aceptado por él seaL(METRO){\displaystyle L(M)}Dado que el conjunto de todas las cadenas posibles sobre el alfabeto de entradaΣ{\displaystyle \Sigma }es decir, el cierre KleeneΣ{\displaystyle \Sigma ^{*}}es un conjunto contable , podemos enumerar las cadenas en él comos1,s2,,si,{\displaystyle s_{1},s_{2},\dots ,s_{i},}etc. Luego, el enumerador enumera el lenguaje.L(METRO){\displaystyle L(M)}seguirá los pasos:

1 para i = 1,2,3,... 2 carrerasMETRO{\displaystyle M}con cadenas de entradas1,s2,,si{\displaystyle s_{1},s_{2},\dots ,s_{i}}parai{\displaystyle i}- Paso 3 Si se acepta alguna cadena, entonces imprímala.

Ahora surge la pregunta de si cada cadena en el lenguajeL(METRO){\displaystyle L(M)}será impreso por el Enumerador que construimos. Para cualquier cadenaw{\displaystyle w}en el idiomaL(METRO){\displaystyle L(M)}la TMMETRO{\displaystyle M}ejecutará un número finito de pasos (seamosk{\displaystyle k}paraw{\displaystyle w}) para aceptarlo. Luego en elk{\displaystyle k}-º paso del Enumeradorw{\displaystyle w}se imprimirá. Por lo tanto, el enumerador imprimirá cada cadenaMETRO{\displaystyle M}reconoce pero una sola cadena puede imprimirse varias veces.

Un lenguaje enumerable es reconocible por Turing.

Es muy fácil construir una máquina de Turing.METRO{\displaystyle M}que reconoce el lenguaje enumerableL{\displaystyle L}Podemos usar dos cintas. En una, tomamos la cadena de entrada y en la otra, ejecutamos el enumerador para enumerar las cadenas del lenguaje una tras otra. Una vez que se imprime una cadena en la segunda cinta, la comparamos con la entrada de la primera. Si coinciden, aceptamos la entrada; de lo contrario, continuamos. Cabe destacar que si la cadena no pertenece al lenguaje, la máquina de Turing nunca se detendrá, rechazando así la cadena.

Referencias

  • Sipser, Michael (2012). Introducción a la teoría de la computación - Edición internacional . Cengage Learning. ISBN 978-1-133-18781-3.