6

Click here to load reader

Laboratorio_2

  • Upload
    juanmro

  • View
    29

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Laboratorio_2

Controladores Programables Uniminuto

Laboratorio 2 de Maquina de turing.

Presentado por: John Muñoz

Universidad uniminuto

Santiago de Cali, valle del cauca.

2014

Page 2: Laboratorio_2

JFLAP.

JFLAP (del inglés, Java Formal Language and Automata Package) es un software que permite

experimentar de forma gráfica con los conceptos relativos a la teoría de autómatas y

lenguajes formales. Permite diseñar, evaluar y realizar distintas transformaciones y

comprobaciones sobre autómatas finitos, gramáticas, autómatas a pila, máquinas de Turing, y

otros elementos adicionales que no forman parte del contenido de este curso.

Para la realización de estas prácticas se requiere la descargar de la herramienta libre JFLAP de su

sitio web (http://www.jflap.org/). Además es necesario consultar el tutorial on-line de la

herramienta (http://www.jflap.org/tutorial/), o el siguiente libro guía: Susan H. Rodger and

Thomas W. Finley. JFLAP: An Interactive Formal Languages and Automata Package. Jones &

Bartlett Publishers, Sudbury, MA (2006)

Objetivo:

El objetivo de esta hoja es practicar el diseño de maquinas de Turing que reconozcan lenguajes y que computen funciones

Trabajo Previo:

Descargar e instalar el Software Asignado por el docente.

Antes de abordar el diseño de una maquina de Turíng se deberían tener en cuenta las siguientes consideraciones: La máquina de Turín puede escribir en la cinta cualquier carácter que desee. Por lo tanto, a no ser que el enunciado diga lo contrario, podemos escribir los símbolos que queramos de forma que el diseño de la maquina sea más sencillo o intuitivo. La máquina de Turín se va moviendo por la cinta hacia derecha o izquierda según nos plazca. Al movernos por la cinta es muy importante que no perdamos la posición en la que nos encontramos. Por ejemplo, sabemos que a la izquierda y a la derecha de la cadena de entrada se encuentran caracteres en blanco, por lo tanto, si buscamos el ultimo carácter de la cadena de entrada, podemos recorrerlos todos hasta encontrar el primer blanco; encontrado este, el ultimo carácter se encuentra a su izquierda. De igual manera podemos hacer para encontrar el primer carácter de la cadena de entrada (si nos movemos hacia la izquierda, estará a la derecha del primer blanco que nos encontremos). A veces para no perdernos o para delimitar zonas en la cinta (zona donde escribir la solución, zona donde hacer cálculos intermedios, etc.) es bueno escribir cosas en la cinta. En la cinta podemos escribir lo que queramos, quizá escribir un “*” en algún sitio, pueda ser útil para movernos (a izquierda o derecha) y encontrar esa zona.

De hecho, el funcionamiento de una maquina de Turín es ese: leo un elemento, en esa posición escribo algo (si escribo ese mismo elemento, la cinta queda igual), me muevo a otro lado de la cinta y hago algo, vuelvo a por otro elemento, escribo, me muevo para hacer algo, vuelvo a por otro elemento...

Page 3: Laboratorio_2

Una buena manera de diseñar una maquina de Turing es, ante un problema dado, pensar en una solución que resuelva el problema de manera iterativa. Los elementos que ya hemos leído debemos marcarlos o eliminarlos para evitar que sean tratados de nuevo. Para elegir si marcarlos o eliminarlos podemos seguir las siguientes recomendaciones: Si no vamos a volver a utilizar los símbolos podemos eliminarlos. Sin embargo, si los símbolos se encuentran en medio de la cadena de entrada no es bueno eliminarlos, ya que al sustituirlos por el carácter blanco, podrá ocurrir que en alguna de las iteraciones, al encontrarnos con ese blanco, no sepamos distinguir si se trata de un blanco en medio de la cadena de entrada o del blanco que marca el final de la misma (es decir: perderíamos referencias que sirven para encontrar nuestra posición dentro de la cinta). Por lo tanto, aunque no los vayamos a utilizar, si se encuentran en medio de la cadena de entrada, lo mejor es marcarlos (y eliminarlos antes de analizar si es necesario). Sin embargo, si los vamos a utilizar posteriormente, la única opción es marcarlos. Es importante crear una subrutina que trate a todos los elementos por igual (siempre que sea posible). En el momento en que hagamos una subrutina para el primer elemento, otra para el segundo, otra para el ultimo, etc... Más probabilidades habrá de cometer un error en el diseño de la maquina, mas estados tendrá y más tiempo se habrá invertido en su diseño. Puntos a Desarrollar 1. Segun el ejercicio realizado en clase realice su grafica en JFLAB y mire se comportamiento de

estados según la cadena de entrada, el problema tiene como petición diseñar una maquina de

turing que reconozca:

Tal que:

Cambie un 0 por una x

Cambie un 1 por una y

Grafique e identifique sus elementos, posibles cadenas aceptadas:

Page 4: Laboratorio_2

2. Construya una maquina de turing que acepte el lenguaje.

Se cambia la a por la x moviéndose a la derecha. (Explique qué pasa con la maquina). Represente

los movimientos en la tabla de transiciones para MT.

Identifique en qué momento la máquina de turing se detiene. Cuales posibles cadenas son

aceptadas

Grafíquela e identifique sus elementos. Teniendo como base la siguiente grafica:

3. Diseñar una Máquina de Turing que obtenga el sucesor de un número binario. Solución: En primer lugar, se escribe un conjunto de números binarios consecutivos, para intentar buscar regularidades en los números binarios que permitan idear un algoritmo para resolver el problema de forma general.

Tras observar detenidamente por filas las dos columnas centrales sombreadas de la tabla anterior, se puede concluir que:

Page 5: Laboratorio_2

-si la entrada acaba en 0, su sucesor se obtiene cambiando dicho último 0 por un 1. -si la entrada acaba en 1, la obtención del sucesor es más complicada:

-se debe recorrer el número del final al inicio, sustituyendo todos los 1’s por 0’s, hasta que aparezca un 0 (o en su defecto un blanco) y cambiarlo por un 1.

Como no se especifica nada en el enunciado, se puede asumir que la cinta al final sólo contendrá el sucesor, sin preservar la entrada inicial. Basándose en esta generalización, se puede pasar a describir el algoritmo y definir la máquina de Turing formalmente. Algoritmo (detallado):

1. Recorrer el número hasta el final, buscando el primer blanco a la derecha de los 1’s y 0’s [transiciones recursivas en estado q0]. Al llegar, mover a la izquierda una posición transición de q0 a q1], para situarse en el último dígito del número binario [llegada a estado q1].

2. En la posición final: 2.1. si es un 0, se cambia por un 1 [transición de q1 a q2], y se va al paso 5. 2.2. si es un 1, ir recorriendo el número hacia atrás, sustituyendo 1’s por 0’s [transición de

q1 a q4 y transiciones recursivas en q4], hasta que aparezca un 0 (ir a paso 3) o un blanco (ir a paso 4).

3. Si recorriendo hacia atrás se llega a un 0, se sustituye por un 1 [transición de q4 a q2], y se

va al paso 5.

4. Si recorriendo hacia atrás se llega a un blanco, se sustituye por un 1 [transición de q4 a q3], y la máquina se para, porque ya se tiene el sucesor y la cabeza lectora está al inicio del número.

5. Tras obtener el sucesor, pero tener la cabeza lectora en el medio del número, se transita al estado q2, donde se recorre el número hacia la izquierda [transiciones recursivas en q2], hasta encontrar un blanco, moviéndose una posición a la derecha [transición a q3], para finalizar con la cabeza lectora al inicio del número sucesor binario.

Definición de la MT

MT9=({0,1},{0,1,},,{q0,q1,q2,q3,q4},q0,f,{q3}), donde f (con cabeza de la pila al inicio del número)

Page 6: Laboratorio_2

Para desarrollar: Realice el esquema en jflap, revise el comportamiento e identifique las cadenas

que son aceptadas por el autómata, de un breve resumen en sus propias palabras del

procedimiento realizado.

Elementos de Reporte de Laboratorio:

Portada

Tema

Objetivos

Introducción o/y marco teórico

Actividades de Desarrollo

Conclusión

Referencias Bibliográficas

Bibliografía:

http://gabriellacayo.wordpress.com/2013/07/09/laboratorio-iii-jflap/

http://dl.dropboxusercontent.com/u/20099418/manual_Completo_JFLAP.pdf

http://automatasylenguajesformales.wordpress.com/2012/03/29/introduccion-a-jflap-

herramienta-para-la-visualizacion-de-lenguajes-formales/

http://www.cs.duke.edu/csed/jflap/tutorial/fa/createfa/fa.html

http://www.cs.duke.edu/csed/jflap/tutorial/turing/one/index.html