13.07.2015 Views

Autómatas de Pila y Máquinas de Turing Estructurados Jairo Rocha

Autómatas de Pila y Máquinas de Turing Estructurados Jairo Rocha

Autómatas de Pila y Máquinas de Turing Estructurados Jairo Rocha

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

XI Jornadas <strong>de</strong> Enseñanza Universitaria <strong>de</strong> la Informática 335entonces la llamada es una abreviación <strong>de</strong> insertaren la posición n todas las instrucciones (excepto elfin) <strong>de</strong>l programa rutina1 don<strong>de</strong> previamentese han reemplazado todas las ocurrencias <strong>de</strong> cadauna <strong>de</strong> las variables x1,...,xe por v1,...,ve,respectivamente; a<strong>de</strong>más, todas las ocurrencias <strong>de</strong>y1,...,ym han <strong>de</strong> ser reemplazadas por otro nombresi hay un vector <strong>de</strong> rutina2 que tenga el mismonombre; finalmente, se supone que los vectoresy1,...,ym (con su nuevo nombre si es necesario)son <strong>de</strong>clarados al programa rutina2.En realidad, con la <strong>de</strong>finición anterior, las llamadasno se hacen en el momento <strong>de</strong> la ejecución sinoque representan un cambio en el programa que hacela llamada. A<strong>de</strong>más, todos los vectores <strong>de</strong> entrada <strong>de</strong>lprograma llamado son compartidos por los dos programas;la variable acepta también es compartida.2.4. Lenguajes in<strong>de</strong>cidiblesEn esta sección mostraremos cómo se <strong>de</strong>finen problemasque no se pue<strong>de</strong>n resolver mediante programas.Como escribiremos programas que tienen por entradaotros programas y ésta tiene que ser una palabrabinaria, tenemos que codificar los programas mediantepalabras sobre {0, 1}; notemos que los programas<strong>de</strong> or<strong>de</strong>nador reales ya están codificados enbinario usando el código ASCII. Se usa aquí la mismacodificación y <strong>de</strong>nota la palabra binaria querepresenta el programa P .La codificación <strong>de</strong> expresiones por números fue unconcepto muy nuevo hace setenta años, y tiene el origenen la codificación <strong>de</strong> Gö<strong>de</strong>l <strong>de</strong> fórmulas aritméticaspor medio <strong>de</strong> números. Hoy en día, no sólo es quelos programas son códigos, sino que estamos acostumbradosa que toda la información sobre personas,aviones, relaciones, imágenes, sonido, etc., esté codificadapor números, porque <strong>de</strong> otra manera no sepodría introducir en el or<strong>de</strong>nador.Tenemos el resultado siguiente que muestra que noes posible <strong>de</strong>cidir si la ejecución <strong>de</strong> un programa dadosobre una palabra dada se parará o no, es <strong>de</strong>cir, elproblema <strong>de</strong> la parada no es <strong>de</strong>cidible.Teorema 7. El lenguaje <strong>de</strong> la paradaL p = { &w | P se para con entrada w}no es <strong>de</strong>cidible.Demostración. La i<strong>de</strong>a <strong>de</strong> la <strong>de</strong>mostración es suponerque existe un programa llamado sePara(p,w)(el primer parámetro son los bits antes <strong>de</strong>l &, y elsegundo, los <strong>de</strong> <strong>de</strong>spués) que se para siempre y reconoceel lenguaje <strong>de</strong> la parada, y emplearlo para construirun programa prueba(q) con el que seParano funciona bien, lo que nos lleva a una contradicción.Sea, entonces, el siguiente programa:programa prueba(q)q1:vectorcopiar(q,q1)sePara(q,q1)si leer(acepta) \= 1 llavorsescr(acepta,1)si_nomientras 0 = 0 hagafmientrasfsifiSuponemos que llamamos prueba()(es <strong>de</strong>cir, q contiene como entrada).Si sePara(,) aceptala entrada, entonces prueba() entraen un bucle infinito. Esto quiere <strong>de</strong>cir queprueba() no se para y, por tanto,sePara(,) no <strong>de</strong>bería haberaceptado.Entonces, sePara(,)no acepta la entrada pero se paraya que siempre se para; entonces,prueba() acepta la entrada y separa, y sePara(,) <strong>de</strong>beríahaber aceptado.Como ambos casos son imposibles, el programasePara(p,w) no pue<strong>de</strong> existir.3. Autómatas <strong>de</strong> pilaInformalmente, un autómata <strong>de</strong> pila es un programacon un vector, ent, para la entrada y un vector,pila, para hacer operaciones con una pila. Los autómatas<strong>de</strong> pila son programas restringidos: primero, elvector <strong>de</strong> entrada no pue<strong>de</strong> ser cambiado ni el punterose pue<strong>de</strong> mover a la izquierda; segundo, el vector<strong>de</strong> la pila pue<strong>de</strong> ser manipulado únicamente con lasoperaciones <strong>de</strong>finidas más a<strong>de</strong>lante que impi<strong>de</strong>n leerlas casillas a la <strong>de</strong>recha <strong>de</strong>l puntero.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!