¡¡Ú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).
Suscribirse a:
Enviar comentarios (Atom)
2 comentarios:
Estáis pallá! De quién ha sido la idea de realizar la M.T.?
No lo voy a corregir, pero me juego lo que quieras a que no hace lo que debería ;P
Como no va a hacer lo que debería... ¡¡¡me reconoce el código fuente de eMule!!!... básicamente es la representación (aproximada) en MT del automata finito que dibujó Gloria al final de una clase, Los del grupo 6 tienen una captura de pantalla de móvil (muy borrosa por cierto). Si no te aclaras con nuestra implementación puedo colgar también la captura pantalla de mi móvil de aqel automata finito de ejemplo (que se ve mucho mejor :P )
Pues ponednos un 10 de nota por estar "locos" xD
Publicar un comentario