¡¡Última tarea!! :-)
a)
Según el enunciado del problema se pide una máquina generadora de cadenas que serán códigos sintácticamente válidos de MT (las cadenas generadas las podría comparar con comparar con la tarea de compilar un programa, sintácticamente puede estar correcto y compilar sin errores, otra historia es que no de errores de ejecución).
Para realizar este último generador de cadenas (del curso :-P ), vamos a utilizar una MT multicinta con 2 cintas.
La posicion inical del los cabezales en las cintas serán:
Cinta1: ...B0B... (primera cadena que aceptaría el generador sería 111010101010111)
Cinta2: ...BBB...
La cinta 1 tendrá una cadena que la máquina de Turing deberá comprobar si es sintácticamente correcta, en cuyo caso se escribirá en la cinta 2. Independientemente de si es o no válida la cadena se sustituirá la cadena de la cinta 1 por la siguiente que la sucede.
Tras mucho pensar y como no se nos ocurría otra manera de tratar la cadena, la usamos como si fuera un número binario al que se le incrementa en 1 el valor. Se rechazarían muchas cadenas pero sacamos todas las válidas en orden canónico (total... hay infinitas cadenas, de las cuales infinitas cadenas se rechazarían y otras infinitas serían válidas... antes de agotarse las infinitas combinaciones posibles de cadenas nuestro sol se convierte en supernova ).
Funcionamiento:
- Desde f(q0,1,B) hasta f(q19,1,B) la MT recorre la cadena de la cinta 1. Si la recorre sin error se escribirá en la cinta 2 un delimitador "#" para separar cada una de las cadenas válidas y a su vez el cabezal de la cinta 1 se desplazará hacia la izquierda.
- Desde f(q20,1,B) hasta f(q20,B,B) se seguirá desplazando en la cinta 1 hacia la izquierda hasta llegar al inicio de la cadena.
- Desde f(q21,0,B) hasta f(q21,B,B) copia simbolo a simbolo de izquierda a derecha la cadena de la cinta 1 en la cinta 2.
- Desde f(q22,0,B) hasta f(q23,1,B) trata de colocar en la cinta 1 la siguiente cadena en orden canónico, tratando la cadena de la cinta 1 como un número binario se le suma 1, dejando preparada la siguiente cadena para la siguiente iteracción del generador.
- Finalmente en el estado q24 el cabezal de la cinta 1 se desplaza hacia la izquierda hasta el inicio de la nueva cadena y salta al estado q0 para comenzar de nuevo el proceso de validación de cadena.
A continuación, las transiciones del MT del "a)" de la tarea:
f(q0,1,B) = (q1,{1,R},{B,Z})
f(q1,1,B) = (q2,{1,R},{B,Z})
f(q2,1,B) = (q3,{1,R},{B,Z})
f(q3,0,B) = (q4,{0,R},{B,Z})
f(q4,0,B) = (q4,{0,R},{B,Z})
f(q4,1,B) = (q5,{1,R},{B,Z})
f(q5,0,B) = (q6,{0,R},{B,Z})
f(q6,0,B) = (q7,{0,R},{B,Z})
f(q7,0,B) = (q8,{0,R},{B,Z})
f(q8,1,B) = (q9,{1,R},{B,Z})
f(q7,1,B) = (q9,{1,R},{B,Z})
f(q6,1,B) = (q9,{1,R},{B,Z})
f(q9,0,B) = (q10,{0,R},{B,Z})
f(q10,0,B) = (q10,{0,R},{B,Z})
f(q10,1,B) = (q11,{1,R},{B,Z})
f(q11,0,B) = (q12,{0,R},{B,Z})
f(q12,0,B) = (q13,{0,R},{B,Z})
f(q13,0,B) = (q14,{0,R},{B,Z})
f(q13,1,B) = (q15,{1,R},{B,Z})
f(q14,1,B) = (q15,{1,R},{B,Z})
f(q12,1,B) = (q15,{1,R},{B,Z})
f(q15,0,B) = (q16,{0,R},{B,Z})
f(q16,0,B) = (q17,{0,R},{B,Z})
f(q17,1,B) = (q18,{1,R},{B,Z})
f(q16,1,B) = (q18,{1,R},{B,Z})
f(q18,1,B) = (q19,{1,R},{B,Z})
f(q19,0,B) = (q4,{0,R},{B,Z})
f(q19,1,B) = (q20,{1,L},{#,R})
f(q20,1,B) = (q20,{1,L},{B,Z})
f(q20,0,B) = (q20,{0,L},{B,Z})
f(q20,B,B) = (q21,{B,R},{B,Z})
f(q21,0,B) = (q21,{0,R},{0,R})
f(q21,1,B) = (q21,{1,R},{1,R})
f(q21,B,B) = (q22,{B,L},{B,Z})
f(q22,0,B) = (q24,{1,L},{B,Z})
f(q22,1,B) = (q23,{0,L},{B,Z})
f(q23,0,B) = (q24,{1,L},{B,Z})
f(q23,1,B) = (q23,{0,L},{B,Z})
f(q24,0,B) = (q24,{0,L},{B,Z})
f(q24,1,B) = (q24,{1,L},{B,Z})
f(q24,B,B) = (q0,{B,R},{B,Z})
b)
El pensamiento que creemos que se acerca más es la opción 2 ("¡Anda! salen infinitas máquinas pero va a ser que no tengo bastantes...") porque a pesar de haber infinitas máquinas puede darse el caso que el resultado no se encuentre entre todas esas máquinas (por ejemplo: cuando un programa no puede detenerse porque cae en un bucle infinito, hay infinitos resultados pero ninguno de ellos es el válido para continuar).
miércoles, 28 de mayo de 2008
lunes, 12 de mayo de 2008
Tarea 5: Demostración de intersección de dos LRE.
Por las propiedades de clausura de los LRE, podemos demostrar que la intersección de dos LRE da como resultado otro lenguaje LRE.
Para el lenguaje interesección de dos Lenguajes sólo aceptará cadenas que pertenezcan a ambos lenguajes.
Para demostrarlo utilizaremos 2 MT, ambas máquinas (M1 y M2) reconocen lenguajes recursivamentes enumerables.
Procedimiento:
Tomamos una cadena x tal que si la M2 acepta la cadena, habilitará la M1. Si esta última acepta la cadena, tendremos la intersección entre L1 y L2.
Si x € L1 AND x € L2 => x € L1 intersección L2 = L
Para el lenguaje interesección de dos Lenguajes sólo aceptará cadenas que pertenezcan a ambos lenguajes.
Para demostrarlo utilizaremos 2 MT, ambas máquinas (M1 y M2) reconocen lenguajes recursivamentes enumerables.
Procedimiento:
Tomamos una cadena x tal que si la M2 acepta la cadena, habilitará la M1. Si esta última acepta la cadena, tendremos la intersección entre L1 y L2.
Si x € L1 AND x € L2 => x € L1 intersección L2 = L

Suscribirse a:
Entradas (Atom)