Resumen Total SSL
Resumen Total SSL
Resumen Total SSL
MSV
4. Compiladores e Intérpretes
Si bien la evolución tecnológica que lleva al uso de uno u otro, se mencionan las principales diferencias:
• Un compilador siempre crea un programa objeto de un programa fuente correcto y un intérprete nunca lo crea
• Un intérprete lee y ejecuta los programas en forma progresiva, sin necesidad de cargar en la memoria al programa
fuente completo ni la de generar luego en memoria un programa objeto.
• La rapidez de ejecución es la principal desventaja de los intérpretes.
5. Notación T
Todo compilador involucra tres lenguajes de programación:
1. el del programa fuente “F”, que se desea compilar
2. el del programa Objeto “O”, que se desea generar
3. el lenguaje de implantación “I”, que es aquél en el que el propio compilador
fue escrito
Esto resulta convenientemente representado con un esquema denominado Notación T, propuesta por H. Bratman, que
permite representar el vínculo entre los tres lenguajes.
6. Contexto del Compilador
Incluye los diversos recursos necesarios para hacer posible la
generación de programas ejecutables a partir de los correspondientes
programas fuentes. Toman la forma de módulos o herramientas de
desarrollo. La totalidad de los componentes que están incluidos en el
contexto de un compilador forman parte de los ya definidos Ambientes
Integrados de Desarrollo (IDE).
donde a es un símbolo del alfabeto, n ∈ ℕ es un número natural y 𝜆𝜆 denota la cadena sin símbolos (cadena vacía).
Longitud de una palabra
La cantidad de símbolos que conforman una palabra es llamada su longitud o largo y se denota con el nombre de
la cadena entre barras verticales.
Cadena vacía
Se denota con 𝜆𝜆 (lambda) a la palabra vacía, palabra que no tiene símbolos y cuyo largo es cero: |𝜆𝜆| = 0.
La palabra vacía resulta ser así, elemento neutro respecto de la operación de concatenación entre palabras,
cualquiera sea el alfabeto sobre el cual las palabras estén definidas. En símbolos:
∀Σ: ∀α definida sobre Σ: α ° λ = λ ° α = α
λ es la única palabra con estas propiedades (matemáticamente, el conjunto de todas las cadenas de símbolos de Σ
junto a la operación de concatenación, conforman un semigrupo con elemento neutro λ).
La concatenación de una palabra consigo misma permite definir la potencia enésima de una palabra como la
concatenación n veces de la palabra consigo misma; recursivamente, si α es una palabra definida sobre algún alfabeto
Σ y n ∈ ℕ es un número natural, entonces su potencia enésima es:
Si bien la potenciación de palabras está definida para números naturales, se acepta la notación α−1 para denotar a la
palabra refleja de una cadena 𝛂𝛂, obtenida escribiendo los símbolos de α en orden inverso.
Supongamos que una cadena puede escribirse como concatenación de otras tres, digamos 𝛚𝛚 = 𝛂𝛂𝛂𝛂𝛂𝛂; entonces
decimos que 𝛂𝛂 es un prefijo de 𝛚𝛚 (primera parte de omega), que 𝛃𝛃 es un sufijo de 𝛚𝛚 (última parte de omega) y que
𝛘𝛘 es una subpalabra de 𝛚𝛚 (una parte de omega). Aquí, cualquiera de las tres cadenas 𝛂𝛂, 𝛘𝛘 o 𝛃𝛃 pueden ser vacías.
De un sufijo o prefijo de una palabra se dice que es propio si no es la misma palabra en cuestión o la palabra vacía.
Operaciones con alfabetos
Al ser conjuntos, cuentan con las propiedades de:
- Unión → Σ1 ∪ Σ2 = {todos los símbolos comunes y no comunes a ambos alfabetos}
- Intersección → Σ1 ∩ Σ2 = {todos los símbolos comunes a ambos alfabetos}
- Resta → Σ1 − Σ2 = {todos los símbolos del primero que no estén en el segundo}
- ���1 = {se debe definir el universo contra el cual complementar}
Complemento → Σ
- Concatenación → Σ1 ∘ Σ2 = {se concatena cada símbolo de Σ1 con Σ2 en ese orden}
Se define recursivamente la potenciación de un alfabeto (lo que permite obtener conjuntos de palabras de largo n
formadas con los símbolos de este), de la siguiente forma:
Se denomina universo de discurso de un alfabeto 𝚺𝚺 al conjunto de todas las palabras que pueden formarse con
sus símbolos. También se lo llama lenguaje universal de Σ, suele denotarse 𝐖𝐖(𝚺𝚺) y con mayor frecuencia 𝚺𝚺 ∗ , que se
lee estrella de Kleene de sigma.
Está compuesto de todas las cadenas de símbolos de sigma de largo cero, todas las de largo uno, de largo dos y así
sucesivamente (utilizando las potencias sucesivas del alfabeto Σ). Queda entonces:
o resumidamente
La estrella de Kleene de un alfabeto también recibe el nombre de cierre o clausura del alfabeto (reflexiva y transitiva)
del alfabeto; si se quita la unión de la potencia cero, e.d, eliminar la palabra vacía, se obtiene:
Es decir, el conjunto de todas las palabras de símbolos de Σ de largo uno o mayor, denominado cierre positivo del
alfabeto 𝚺𝚺.
3. Lenguajes y Operaciones
Lenguaje
Un lenguaje definido sobre un alfabeto es un conjunto de palabras construidas con los símbolos de ese alfabeto.
En símbolos, si Σ es un alfabeto y L es un lenguaje definido sobre Σ, entonces
∗
𝐋𝐋 ⊆ 𝚺𝚺
Al ser los lenguajes conjuntos de palabras, poseen las siguientes propiedades:
• Un lenguaje 𝐋𝐋𝟏𝟏 definido sobre Σ es subconjunto de otro 𝐋𝐋𝟐𝟐 si toda palabra de 𝐋𝐋𝟏𝟏 es también palabra de 𝐋𝐋𝟐𝟐 :
2) Se llama sencillamente derivación a la operación de aplicar una secuencia finita de producciones a una cadena
δ dada para obtener otra cadena φ, y se simboliza:
𝛅𝛅 →∗ 𝛗𝛗
Si durante el proceso de derivación, cada vez que puede optarse por una producción a aplicar se efectúa el reemplazo
posible más a la derecha en la cadena, se dice que se ha efectuado una derivación por la derecha. Si el reemplazo
que siempre se elige es el de más a la izquierda posible, se dice que se ha hecho una derivación por la izquierda.
En los casos en los que las opciones se toman mezcladas, la derivación puede denominarse mixta.
Equivalencia de Gramáticas
4.2 Jerarquía de Chomsky
Se han llamado lenguajes formales a aquellos que pueden ser generados por gramáticas formales. Chomsky estableció
que todos los lenguajes formales podían clasificarse en cuatro tipos (denominados lenguajes tipo 0, 1, 2 y 3) que solo
se distinguen por el formato de las producciones de las gramáticas que los generan. Mientras más restricciones se le
ponen a las producciones, en cuanto al formato de las cadenas de sus lados derecho e izquierdo, menos lenguajes
pueden describir, por lo que la clasificación es inclusiva.
Tipo 0: Lenguajes Estructurados por frases – Irrestrictos – Recursivamente Enumerables
Son los más generales en la jerarquía. Están descriptos por las reglas de reescritura menos restrictivas.
Las producciones pueden contener cualquier cadena de terminales y no terminales, tanto en el lado izquierdo como
en el lado derecho, con al menos un símbolo no terminal en el lado izquierdo. En símbolos:
El símbolo no terminal A solo puede ser reemplazado por la cadena 𝛾𝛾 de terminales y no terminales si se encuentra
flanqueada por α a la izquierda y β a la derecha, en el contexto alfa-beta.
Debe notarse que la cadena 𝛾𝛾 debe por lo menos tener largo unitario (pertenece a la cerradura positiva de la unión de
alfabetos de terminales y no terminales), por lo cual en estas reglas siempre la cadena del lado izquierdo es de largo
igual o menor que la cadena del lado derecho (reglas no compresoras); sin embargo, el lenguaje podría contener
como palabra a la cadena vacía, por lo cual ésta debe poder ser generada por la gramática. Por esto, se permite la
regla lambda 𝐒𝐒 ∶= 𝛌𝛌, como única regla compresora permitida.
Tipo 2: Lenguajes Independientes del Contexto – De contexto libre
La sintaxis de la gran mayoría de los lenguajes de programación se describe con gramáticas independientes del
contexto. Sus producciones pueden adoptar las siguientes formas:
El símbolo no terminal A, puede ser reemplazado por la cadena α de terminales y no terminales en cualquier lugar
donde aparezca durante el proceso de derivación, sin tener en cuenta el contexto donde se encuentra. Nótese que
estas reglas son también no compresoras, salvo la regla lambda que tiene idéntica justificación que en el tipo 1.
Tipo 3: Lenguajes Regulares o Lineales
Son los lenguajes que tienen producciones más restringidas dentro de la jerarquía de Chomsky.
Las producciones de las gramáticas que generan estos lenguajes tienen un solo símbolo no terminal del lado izquierdo
(como las tipo 2 anteriores), pero su lado derecho está compuesto por un solo símbolo terminal, o por un símbolo
terminal y un símbolo no terminal, aparte de poder tener la regla lambda.
Este formato de reglas de reescritura puede presentarse de dos formas, totalmente equivalentes:
Jerarquía Inclusiva
5. Lenguajes Regulares
Los lenguajes regulares admiten la siguiente definición recursiva:
a) Cualquier lenguaje finito (nro. natural de cadenas) L1 definido sobre algún alfabeto Σ, es regular.
b) Si L1 y L2 son lenguajes regulares, entonces también lo son su unión 𝐋𝐋𝟏𝟏 ∪ 𝐋𝐋𝟐𝟐 y su concatenación 𝐋𝐋𝟏𝟏 °𝐋𝐋𝟐𝟐
c) Si L1 es un lenguaje regular, entonces su estrella de Kleene L1* también es un lenguaje regular.
d) Sólo son lenguajes regulares los construidos con a), b) y c).
Expresiones Regulares
Si esto ocurre, el símbolo x no intervendrá en la derivación de ninguna cadena del lenguaje generado por la
gramática, por lo que, si se lo quita, y junto con él todas las producciones que lo contengan, no se alterará el lenguaje
descripto.
Por otro lado, se sabe que el lenguaje formal generado por una gramática es un conjunto de cadenas de símbolos
terminales derivables desde el axioma; si existiera algún símbolo no terminal en la gramática desde el cual nunca se
pudiese llegar a una cadena de terminales utilizando producciones válidas, ese símbolo no terminal sería inútil. Se
denomina símbolo superfluo a un símbolo no terminal que no permite generar desde él al menos una cadena
vacía o de solo símbolos terminales:
Por esto, debe quitárselos del alfabeto respectivo y eliminar todas las producciones del conjunto P que los contengan,
obteniendo una nueva gramática equivalente a la anterior.
Se dice que una gramática independiente del contexto está limpia si y solo si no tiene reglas innecesarias, ni
símbolos inaccesibles, ni símbolos superfluos.
Gramática Bien Formada
El formato de las reglas de una GIC indica que no pueden existir reglas de reescritura compresoras, esto es,
producciones con lado derecho de menor longitud que el lado izquierdo.
En particular, una regla del tipo 𝐀𝐀: = 𝛌𝛌, no siendo A el axioma de la gramática, es una regla compresora denominada
regla no generativa. Si es el axioma el que produce la cadena vacía, 𝐒𝐒: = λ la regla se permite como excepción y ya
sabemos que se denomina regla lambda.
Si el lenguaje generado por la gramática contiene como elemento la cadena vacía, el lenguaje debe poder derivar
desde el axioma esta cadena, por lo cual una regla lambda no puede quitarse de una gramática sin modificar el
lenguaje generado. Sin embargo, sí resulta factible eliminar las reglas no generativas de una gramática.
Para poder quitar una regla no generativa 𝐀𝐀: = 𝛌𝛌, debe procederse de la siguiente forma:
a) Para cada producción 𝐗𝐗 ≔ 𝛂𝛂𝛂𝛂𝛂𝛂 que contenga el no terminal A en el lado derecho, agregar la regla de reescritura
𝐗𝐗 ≔ 𝛂𝛂𝛂𝛂 que se obtiene de reemplazar A por la cadena vacía.
b) Luego eliminar del conjunto de producciones 𝐀𝐀: = 𝛌𝛌.
Por otro lado:
Si tenemos producciones del tipo 𝐀𝐀: = 𝐁𝐁 donde A y B son símbolos no terminales; esta producción, llamada regla de
redenominación dice que el no terminal A puede ser reescrito como B en cualquier contexto donde se encuentre
Sin embargo, A puede tener otras reglas que indiquen reescritura (y así tener distintas definiciones del mismo símbolo)
y lo mismo puede ocurrir con B, pudiéndose generar sinonimia y polisemia simultáneamente. Además, el par de
producciones A:=B y B:=A podrían confundir a no pocas rutinas de análisis sintáctico que las analicen, generando
posibles lazos infinitos.
Para poder quitarlas (y poder determinar sin lugar a duda la sintaxis y semántica de nuestra gramática) debemos:
a) Por cada regla 𝐁𝐁 ≔ 𝛂𝛂 existente en la gramática, agregar una regla 𝐀𝐀 ≔ 𝛂𝛂, lo cual hace explícita como producción la
posible derivación en dos pasos 𝐀𝐀 → 𝐁𝐁 → 𝛂𝛂
b) Luego puede eliminarse 𝐀𝐀: = 𝐁𝐁 del conjunto de producciones y la gramática obtenida será equivalente a la original.
Se dice que una GIC está bien formada, si y solo si, está limpia y no tiene reglas no generativas ni de
redenominación.
7. Análisis Sintáctico - ¿ 𝛂𝛂 ∈ 𝐋𝐋(𝐆𝐆)?
Es el proceso de derivación el que permite obtener las cadenas del lenguaje L(G) descripto por la gramática y, en ese
sentido, decimos que la gramática genera el lenguaje.
En este sentido, nos interesa determinar si una cadena α dada de símbolos terminales, puede o no puede ser generada
por una gramática. En otras palabras, podemos preguntarnos si la cadena en cuestión está escrita de acuerdo con las
reglas de la gramática. Se concibe de tal manera que:
Si una gramática no tiene recursión (en un paso o en más de un paso), solo podrá generar un número finito de cadenas.
Si en la regla recursiva A:=αAβ la cadena α es vacía, esto es A:=Aβ se dice que la regla es recursiva por la izquierda
y que la gramática tiene recursión izquierda. Si en cambio es β la cadena vacía, esto es A:=αA, se dice que la regla es
recursiva por la derecha y que la gramática tiene recursión derecha.
Eliminación de recursión por izquierda en un paso
Máquina de Moore
Tiene los mismos cinco componentes ya indicados para la máquina de Mealy, diferenciándose únicamente en su
función de salida, puesto que sólo depende del estado actual y no de la entrada en ese instante. Es decir:
𝐌𝐌𝐌𝐌 = (𝚺𝚺𝐄𝐄 , 𝚺𝚺𝐬𝐬 , 𝐐𝐐, 𝐟𝐟, 𝐠𝐠)
donde la función de transición f no cambia y en g hay una relación directa entre el estado en cada intervalo de
tiempo y el símbolo de salida.
𝒇𝒇: 𝐐𝐐 𝐱𝐱 𝚺𝚺𝐄𝐄 → 𝐐𝐐 𝒈𝒈: 𝐐𝐐 → 𝚺𝚺𝐒𝐒
La MO incorpora un retardo entre la entrada y la salida. Si en un instante t el autómata se encuentra en un estado
𝐪𝐪𝐭𝐭 ∈ 𝐐𝐐 la salida será:
st = g(qt )
y como éste estado fue a su vez alcanzado en una transición anterior:
qt = f(qt−1 , et−1 )
se puede apreciar la relación directa entre la salida actual y la entrada en un instante anterior, que es:
st = g(f(qt−1 , et−1 ))
Para toda máquina de Moore hay una máquina de Mealy capaz de tener el mismo desempeño y recíprocamente.
2. Autómatas Finitos Deterministas
2.1 Definición del AFD
Si a la ME se le incorpora un estado inicial y un conjunto de estados de aceptación, estamos en presencia de un
Autómata Finito Determinista (AFD). En su forma más general, el AFD es una séptupla, comienza a operar a partir
de un estado inicial, tiene una conducta traductora ya que transforma las cadenas de entrada en cadenas de salida y
completa su operación al terminar de leer su entrada, arribando a un estado que podrá ser de aceptación o no. E.d:
𝐀𝐀𝐀𝐀𝐀𝐀𝐓𝐓 = (𝚺𝚺𝐄𝐄 , 𝚺𝚺𝐬𝐬 , 𝐐𝐐, 𝐪𝐪𝟎𝟎 , 𝐀𝐀, 𝐟𝐟, 𝐠𝐠)
Donde:
𝚺𝚺𝐄𝐄 → alfabeto de símbolos de entrada.
𝚺𝚺𝐒𝐒 → alfabeto de símbolos de salida.
𝐐𝐐 → conjunto finito y no vacío de estados posibles.
𝐪𝐪𝐨𝐨 → estado inicial de operación, q0 ∈ Q
𝐀𝐀 → conjunto de estados de aceptación, A ⊆ Q
𝐟𝐟 → función de transición, 𝒇𝒇: 𝐐𝐐 𝐱𝐱 𝚺𝚺𝐄𝐄 → 𝐐𝐐
𝐠𝐠 → función de salida, 𝒈𝒈: 𝐐𝐐 𝐱𝐱 𝚺𝚺𝐄𝐄 → 𝚺𝚺𝐒𝐒
Por tener un estado inicial y ser la cadena de entrada finita, el AFDT siempre completa su operación, de la misma
forma, en una cantidad finita de tiempo y, por lo tanto, determina un algoritmo.
Si se limita únicamente a reconocer o validar cadenas, resultan innecesarios el alfabeto de salida y su función de salida,
por lo que ambas se eliminan y se obtiene un Autómata Finito Reconocedor 𝐀𝐀𝐀𝐀𝐀𝐀𝐑𝐑 que queda definido como una
quíntupla. En adelante nos referiremos al AFDR como AFD:
𝐀𝐀𝐀𝐀𝐀𝐀𝐑𝐑 = (𝚺𝚺𝐄𝐄 , 𝐐𝐐, 𝐪𝐪𝟎𝟎 , 𝐀𝐀, 𝐟𝐟)
Comienza a operar a partir del estado inicial 𝐪𝐪𝟎𝟎 y, al completar la lectura de la cadena de entrada, confirma su
aceptación arribando a uno de los estados del conjunto A de estados de aceptación.
Un caso particular de aceptación ocurre cuando la cadena de entrada es la palabra vacía 𝛌𝛌: el AFD la aceptará si su
estado inicial es también un estado de aceptación: 𝐪𝐪𝟎𝟎 ∈ 𝐀𝐀.
El hecho de tener el componente f definido como función es lo que lleva a definir al autómata como determinista.
Esta puede ser total o parcial, y cuando el autómata llega a condiciones en las que no tiene definido el próximo estado,
se detiene (razón por la cual se añade generalmente un estado de error).
A partir de una cierta cadena de entrada 𝛂𝛂, en cada intervalo de tiempo, se conoce tanto el prefijo ya leído por el AFD
como también el sufijo que representa la cadena que resta ser leída. Luego, cuando la cadena ya fue leída
completamente el prefijo leído es igual a 𝛂𝛂 y el sufijo a ser leído es igual a 𝛌𝛌, lo que significa que no hay nada por leer.
La máquina se puede parar por las siguientes razones:
i) la función de transición es parcial, no estando definido un próximo estado (la cadena es, por lo tanto, rechazada).
ii) se completó la lectura de la cadena de entrada.
a) se encuentra en un estado de aceptación (𝐪𝐪 ∈ 𝐀𝐀) y, por eso, la cadena es aceptada o reconocida,
b) se encuentra en cualquier otro estado (𝐪𝐪 ∉ 𝐀𝐀) lo que indica que la cadena es desconocida o rechazada.
Por lo expuesto, se admite en lo sucesivo que todo estado 𝐪𝐪 ∈ 𝐀𝐀 es un estado de aceptación (se dibujará con doble
círculo en el dígrafo) y todo estado 𝐩𝐩 ∈ (𝐐𝐐 − 𝐀𝐀) es un estado de no aceptación o rechazo.
2.2 Configuración o Descripción Instantánea
Se define como configuración o descripción instantánea 𝐊𝐊 𝐭𝐭 de un autómata finito en un intervalo de tiempo t al par
ordenado:
𝐊𝐊 𝐭𝐭 = (𝐪𝐪, 𝛃𝛃) 𝐜𝐜𝐜𝐜𝐜𝐜 𝐪𝐪 ∈ 𝐐𝐐, 𝛃𝛃 ∈ 𝚺𝚺𝐄𝐄 ∗
donde q representa el estado en el que se encuentra y 𝛃𝛃 el sufijo o subcadena de entrada que está pendiente de ser leída.
Con una cadena 𝛂𝛂 de entrada a ser procesada, se reconoce a la configuración inicial como
𝐊𝐊 𝟎𝟎 = (𝐪𝐪𝟎𝟎 , 𝛂𝛂)
A la configuración de aceptación como:
𝐊𝐊 𝐧𝐧 = (𝐪𝐪𝐧𝐧 , 𝛌𝛌) 𝐝𝐝𝐝𝐝𝐝𝐝𝐝𝐝𝐝𝐝 𝐪𝐪𝐧𝐧 ∈ 𝐀𝐀, 𝐧𝐧 = |𝛂𝛂|
El tránsito de una configuración a otra se denomina movimiento; si existe la transición q=f(p,a) el movimiento del
estado p a q leyendo a, puede representarse como:
El comportamiento del autómata ante cierta cadena de entrada queda representado por un árbol de configuraciones o
de descripciones instantáneas, y como alt. puede utilizarse un esquema denominado plano de estados–entradas.
2.3 Extensión al tratamiento de palabras
Nótese que todos los estados inaccesibles desde el estado inicial q0 pueden ser eliminados de un autómata finito ya
que no afectan su comportamiento, en cuanto a reconocimiento de cadenas se refiere.
Autómatas Conexos
Si todos los estados de un autómata son accesibles desde su estado inicial se dice que el mismo es conexo. En
símbolos:
2.5 Equivalencia de Estados y Autómatas
Equivalencia entre estados
Dos estados p,q ∈ Q de un AFD se dice que son equivalentes, lo que es representado por pEq, si desde cualquiera
de ellos se aceptan y rechazan exactamente las mismas cadenas de símbolos de entrada.
Se reconoce entonces que entre dos elementos p y q del conjunto de estados posibles Q, se ha establecido una relación
de equivalencia E, que satisface las propiedades reflexiva, simétrica y transitiva en Q.
Nótese que, según la relación de equivalencia presentada, es imposible distinguir entre dos estados equivalentes, lo
que lleva a denominarlos indistinguibles. Además, si los estados p y q son equivalentes y |A|>1, puede ocurrir que los
estados de aceptación o rechazo alcanzables a partir de cierta cadena α, no sean necesariamente los mismos.
Equivalencia de longitud “k” entre estados
Dos estados p, q ∈ Q de un AFD son equivalentes de longitud k, lo que se representa con pEkq, si son equivalentes
para todas las cadenas de largo menor o igual a k. Esto puede expresarse en símbolos:
Conjunto Cociente
La relación E definida sobre el conjunto de estados posibles Q, induce en el mismo una partición. Todos los elementos
de Q relacionados con cierto estado p∈Q, constituyen un subconjunto de Q que es denominado clase de equivalencia
de p.
Se denomina conjunto cociente a esa partición, conjunto que tiene por elementos a todas las clases de
equivalencia o subconjuntos de estados equivalentes entre sí que puedan distinguirse en el conjunto de
estados Q. Por ser la base de este agrupamiento, la relación de equivalencia entre estados E, el conjunto cociente se
denota Q/E.
Se recurre a un procedimiento práctico incremental que comienza con un particionamiento o conjunto cociente inicial de Q, que es
sucesivamente revisado con cadenas progresivamente más largas, a partir de k=1 y hasta que las clases de equivalencia de Q se
estabilicen en cantidad y contenido, no sufriendo cambios para cadenas de mayor longitud.
2.6 Minimización de Autómatas
El concepto de autómata mínimo se define como aquel que cumple correctamente su función con la menor
cantidad posible de estados.
Todo autómata que sea conexo y opere correctamente con más estados de los necesarios debe tener en su definición
estados equivalentes o indistinguibles.
Esto significa que tal autómata debe ser minimizado y para ello se recurre al concepto de conjunto cociente, es
decir, a la partición del conjunto de estados Q producida por la relación de equivalencia E, que tiene por elementos a
las clases de equivalencia, donde se agrupan todos los estados equivalentes o indistinguibles entre sí.
El autómata mínimo equivalente a uno dado, tendrá como estados a cada una de las partes o clases de estados
equivalentes del autómata original (es decir, su conjunto de estados será Q/E), aquella clase que contenga el
estado inicial original será su estado inicial, las que contengan algún estado de aceptación del autómata original serán
sus estados de aceptación; su función de transición se construirá en base a la del autómata original.
El problema de la parada
Ya fue anticipado que el AFDB puede quedar atrapado en un ciclo cerrado Siendo finitos el conjunto de estados posibles y la
cinta de entrada, aunque con cierto esfuerzo, esta situación puede determinarse entonces por un algoritmo.
Extensión al tratamiento de palabras
Es realizada al igual que en el AFD. Aunque no la explicitaremos aquí, es importante notar que en este caso la extensión debe
incluir también la función de movimiento, ya que esta última es determinante en el comportamiento del AFDB.
Equivalencia entre AFDB y AFD
El movimiento del cabezal en dos sentidos no brinda ninguna capacidad adicional con respecto al AFD, lo que implica que todo
AFDB tiene un AFD equivalente, lo que aquí no es demostrado. El razonamiento inverso ya fue establecido al admitirse que los
AFD son un caso particular del AFDB.
UNIDAD N°4 – Autómatas Finitos No Deterministas
1. No determinismo y Autómatas
La primera forma de no determinismo se manifiesta con la presencia de múltiples opciones posibles en la función
de transición. Los AFND quedan determinados como una quíntupla:
𝐀𝐀𝐀𝐀𝐀𝐀𝐀𝐀 = (𝚺𝚺𝐄𝐄 , 𝐐𝐐, 𝐪𝐪𝟎𝟎 , 𝐀𝐀, 𝐟𝐟)
donde su característica distintiva subyace en la definición de las transiciones, que aquí es una relación de
transición, tomando la forma:
𝒇𝒇: 𝐐𝐐 𝐱𝐱 𝚺𝚺𝐄𝐄 → 𝐏𝐏(𝐐𝐐)
donde P(Q) es el conjunto de todos los subconjuntos que se pueden formar con elementos del conjunto Q
(conjunto potencia de Q). Nótese que aquí la indeterminación implica incertidumbre en cuanto al esfuerzo requerido al
evaluar una cierta cadena. La cantidad de intervalos de tiempo t que le insume a un AFND aceptar o rechazar una
cadena es compleja de acotar, porque la operación del autómata implica una búsqueda exhaustiva en un árbol de
posibilidades, que será más frondoso según sea mayor la cantidad de próximos estados posibles en cada transición.
A lo anterior se lo llama factor de ramificación FR donde 𝐅𝐅𝐑𝐑 = |𝒇𝒇(𝒒𝒒, 𝒆𝒆)|, 𝒒𝒒 ∈ 𝑸𝑸, 𝒆𝒆 ∈ 𝚺𝚺𝐄𝐄 ; crecimiento exponencial.
Finalidad de los AFND → la flexibilidad que ofrece el no determinismo es de gran ayuda en el diseño de autómatas
destinados a reconocer lenguajes complejos.
2. Autómatas Finitos No Deterministas
Acorde a lo anterior, el no determinismo es un recurso conveniente para definir máquinas abstractas.
2.1 Transiciones Lambda
La definición de los AFND puede ampliarse para incluir transiciones de un estado a otro que no dependan de
ninguna entrada, denominadas transiciones λ. Con el símbolo λ, se representa la cadena vacía (|𝛌𝛌| = 𝟎𝟎). Estos
autómatas se llamarán AFND-λ.
Cualquier descripción instantánea de esta máquina se considera de la misma forma que si se tratara de una
transición convencional ante una cierta entrada 𝒆𝒆 ∈ 𝚺𝚺𝐄𝐄 .
Por ello, se incorpora una nueva columna adicional a la relación f a fin de considerar los pares (𝒒𝒒, 𝝀𝝀), asumiendo
que cada estado tiene su propia transición 𝛌𝛌. La expresión f se reescribe como:
𝒇𝒇: 𝐐𝐐 𝐱𝐱 (𝚺𝚺𝐄𝐄 ∪ {𝝀𝝀}) → 𝐏𝐏(𝐐𝐐)
A todos los pares de estados vinculados por una transición 𝝀𝝀 es conveniente reunirlos en el conjunto T denominado
relación de transición 𝝀𝝀. Se incluyen, además, las transiciones de los estados con ellos mismos (reconociendo el
carácter reflexivo de T). En símbolos:
𝐓𝐓 = {(𝐩𝐩, 𝐪𝐪)/𝐪𝐪 ∈ 𝐟𝐟(𝐩𝐩, 𝛌𝛌)} ∪ {(𝐪𝐪, 𝐪𝐪)/𝐪𝐪 ∈ 𝐐𝐐}
que, utilizando notación de relaciones, queda:
Luego se incorporan al conjunto T nuevos pares ordenados, que se originan en la aplicación de la propiedad
transitiva a los pares anteriores. Se obtiene así el cierre transitivo de la relación, de la forma:
𝐓𝐓 ∗ = 𝐓𝐓 ∪ {(𝐩𝐩, 𝐪𝐪)/𝐩𝐩𝐩𝐩𝐩𝐩 ∧ 𝐫𝐫𝐫𝐫𝐫𝐫}
2.2 Extensión al tratamiento de palabras
La relación de transición 𝒇𝒇 define los estados alcanzables a partir de cada uno de los estados y para cada uno de
los símbolos del alfabeto de entrada. Esta relación puede ser extendida para describir lo que ocurre a partir de cada
estado si en lugar de recibir símbolos aislados se recibe una secuencia concatenada de los mismos. La noción de
relación de transición extendida 𝒇𝒇𝒆𝒆 para reconocer cadenas o palabras puede inducirse a partir de un razonamiento
similar al hecho cuando se definió la función de transición extendida para el AFD, considerando además la eventualidad
de las transiciones 𝛌𝛌. Se obtiene una relación que queda definida como:
Teorema 2
Por cada AFND, siempre existe un AFD que acepta el mismo lenguaje, y estos dos autómatas son equivalentes.
Enunciado → sea un AFND definido como 𝐌𝐌 = (𝚺𝚺𝐄𝐄 , 𝐐𝐐, 𝐪𝐪𝟎𝟎 , 𝐀𝐀, 𝐟𝐟) donde
𝒇𝒇: 𝐐𝐐 𝐱𝐱 𝚺𝚺𝐄𝐄 → 𝐏𝐏(𝐐𝐐)
Siempre existirá un AFD 𝐌𝐌′ = (𝚺𝚺𝐄𝐄 , 𝐐𝐐′, 𝐜𝐜𝟎𝟎 , 𝐀𝐀′, 𝐟𝐟′) con 𝒇𝒇′: 𝐐𝐐 ′𝐱𝐱 𝚺𝚺𝐄𝐄 → 𝐐𝐐′ que es equivalente.
Caso 1 – AFND en el que ya han sido eliminadas sus transiciones λ
Debe notarse que, cualquiera sea el procedimiento empleado, es muy probable que el AFD equivalente no sea
conexo e incluya estados indistinguibles, por lo que deba ser minimizado.
3. Gramáticas Regulares y Autómatas Finitos
3.1 Definición de gramáticas regulares a partir de autómatas
Se comienza por el caso en que se quiere definir el conjunto de reglas de producción de una gramática regular
que generará lenguajes que están destinados a ser reconocidos por un cierto AFD. Para ello, el AF debe ser
determinista y la gramática a ser obtenida estará bien formada y será lineal por derecha.
El autómata finito no determinista construido de esta forma conecta en paralelo los autómatas ya existentes para E y
F utilizando transiciones 𝛌𝛌, logrando aceptar todas las cadenas que ambos aceptaban, es decir, la unión de sus
lenguajes.
Cualquier cadena que tenga un prefijo descripto por E, hará que el nuevo AF transite desde su estado inicial hasta
alguno de los antiguos estados finales de AFE y desde allí espontáneamente hasta el antiguo estado inicial de AFF (por
la transición 𝛌𝛌); si la cadena tiene luego un sufijo que sigue el patrón F, entonces hará que el autómata arribe a alguno
de los antiguos estados de aceptación de AFF y desde allí pueda pasar sin leer entradas hasta el nuevo estado de
aceptación qA. Esto acepta entonces, cadenas que sigan el patrón EF.
El método de Thompson termina construyendo un AFND- λ con muchos estados, por lo cual debe ser luego
transformado en determinista (y posiblemente minimizado) para su implementación eficiente en programación, pero su
importancia radica en que es un procedimiento automático que puede ser programado (es lo que hace el generador de
analizadores léxicos lex de UNIX).
UNIDAD N°5 – AUTÓMATA CON PILA
Definición
El AP es un autómata finito al que le fue incorporado una memoria LIFO. La memoria de pila o memoria
LIFO (Last In First Out) incrementa la capacidad de resolver problemas del autómata finito
convencional, al incorporarle la posibilidad de memorizar total o parcialmente la cadena leída y cualquier
otra marca que ayude al procesamiento de la misma.
Un autómata con pila es una máquina abstracta compuesta por una séptupla:
AP = (ΣE, Γ, Q, q0 , #, A, f )
cuyos componentes son:
- ΣE: alfabeto de símbolos de entrada
- Γ: alfabeto de símbolos de pila
- Q: conjunto finito y no vacío de estados posibles
- q0∈Q: estado inicial de operaciones del autómata
- # ∈ Γ ∧ # ∉ Σ: símbolo de pila vacía o de fondo de pila
- A⊆Q: conjunto de estados de aceptación
- f : Q × (ΣE ∪ {λ}) × Γ → P(Q × Γ*) función de transición
Funcionamiento
Iniciando el funcionamiento en el estado inicial q0, y con la pila vacía marcada por #, el autómata:
1. Lee un símbolo de entrada lec=eleido o no lee lec=λ.
2. Saca un símbolo de pila w=sacar().
3. Transita a uno o más estados y almacena cadenas en la pila { (q1 ,β1 ), (q2 ,β2 ), …, (qm,βm) } = f(qactual,
lec, w).
4. Repite los pasos 1-3 en forma no determinística hasta terminar de leer la cadena de entrada.
5. Decide si acepta o rechaza la cadena leída.
Aquí el funcionamiento es no determinista de varias formas:
a) El AP puede leer un símbolo de entrada o no leer, por lo que puede realizar transiciones espontáneas (λ).
b) El rango de la función de transición es P(Q × Γ*), por lo que puede transitar a varios estados y por cada
estado:
c) Podría realizar sobre la pila una de varias acciones:
1. Desapilar: extrae un símbolo y no almacena nada.
2. Apilar: extrae un símbolo y lo devuelve con algo más.
3. Cambiar: extrae un símbolo y almacena algo más.
Acciones posibles sobre la pila durante una transición desde el estado p al estado q, al leer el símbolo a de
la entrada y estando el símbolo w en la cima de la pila:
1. Desapilar: extrae un símbolo w y no almacena nada.
f(p, a, w) = { (q, λ) } no graba nada
2. Apilar: extrae un símbolo w y lo devuelve con algo más wβ.
f(p, a, w) = { (q, wβ) } con β∈Γ+
3. Cambiar: extrae un símbolo w y almacena algo más β.
f(p, a, w) = { (q, β) } con β∈Γ+
Autómata con Pila Determinista
Si bien el autómata con pila definido es claramente no determinista, puede restringirse la función de
transición de tal forma que el APND se comporte como un APD. Se proponen dos formas de hacer esto:
a) Quitar las transiciones espontáneas y el conjunto potencia:
f : Q × ΣE × Γ → Q × Γ*
b) Permitir las transiciones espontáneas en forma restringida y quitar el conjunto potencia:
f : Q × (ΣE ∪ {λ}) × Γ → Q × Γ*
con la condición de que si |f(q, λ, w) = 1| está definida no lo esté f(q, a, w) para ningún s.d.e a.
Representación
Al tener la función de transición de los APD y APND tres argumentos, se imposibilita la representación
mediante tabla. Para casos en los que las cantidades de Q y Γ es poco numerosa, se puede realizar dicha
tabla.
La representación más común es mediante un grafo, cuyos arcos dirigidos están rotulados con una etiqueta
a,b/α donde α ∈ ΣE a, b / α, donde a∈ΣE representa el símbolo de entrada leído, b∈Γ el símbolo leído del
tope de pila y α∈Γ* representa la cadena grabada sobre la pila.
Configuración o Descripción Instantánea
Kt = (q, α, β)
q=estado actual, α=cadena que resta de ser leída, β=contenido de la pila
Configuración Inicial:
K0 = (q0 , α, #)
q0=estado inicial, α=cadena a procesar, #=símbolo de pila vacía
Configuración final:
Kf = (qf , λ, δ)
qf=estado final, λ=no queda cadena por leer, δ=contenido de la pila
Movimiento: Al igual que en los AF, se denomina movimiento al tránsito de una configuración a otra en un
paso:
(q, aα, wβ) Ͱ (p, α, wβx)
Solo posible si f(q, a, w) = { (p, x) }
Movimiento generalizado: Tránsito de una configuración a otra en uno o más pasos:
(q, α, β) Ͱ* (p, µ, δ)
Significa: (q, α, β) Ͱ (q1 , α1 , β1 ) Ͱ (q2 , α2 , β2 ) Ͱ … Ͱ (p, µ, δ)
El árbol de configuraciones de una cadena, muestra adecuadamente el proceso que el AP realiza sobre la
misma.
Los APD y APND no son necesariamente equivalentes; un APND no tiene necesariamente un APD
equivalente que acepte los mismos lenguajes. El no determinismo otorga a los APND mayor poder de
cómputo respecto de los APD. Esto quiere decir que un APND puede reconocer lenguajes que un APD
no puede.
Aceptación de Cadenas
Para los autómatas con pila, pueden definirse tres formas de aceptación o reconocimiento de cadenas:
1. Aceptación por vaciado de pila: al terminar de leer la cadena de entrada, la pila queda vacía, en
cualquier estado. (q0 , α, #) Ͱ* (qf , λ, #), con q0 ,qf∈Q, α∈Σ* , #∈Γ
2. Aceptación por estado de aceptación: al terminar de leer la cadena de entrada, se llega a un estado de
aceptación. (q0 , α, #) Ͱ* (qf , λ, δ), con q0∈Q, qf∈A, α∈Σ* , δ∈Γ*
3. Aceptación por ambos criterios simultáneamente:
(q0 , α, #) Ͱ* (qf , λ, #), con q0∈Q, qf∈A, α∈Σ* , #∈Γ
Lenguaje reconocido por un AP
Las tres formas de aceptación o reconocimiento de cadenas dan tres formas de reconocer un lenguaje:
1. Reconocimiento por vaciado de pila:
L(AP) = {α∈Σ* / (q0 , α, #) Ͱ* (qf , λ, #), con q0 ,qf∈Q, #∈Γ }
2. Reconocimiento por estado de aceptación:
L(AP) = {α∈Σ* / (q0 , α, #) Ͱ*(qf , λ, δ), con q0∈Q, qf∈A, δ∈Γ* }
3. Reconocimiento por ambos criterios simultáneamente:
L(AP) = {α∈Σ* / (q0 , α, #) Ͱ* (qf , λ, #), con q0∈Q, qf∈A, #∈Γ }
Autómatas con Pila Asociados a una Gramática
Isomorfismo entre AP y GIC
Dada una gramática independiente del contexto (GIC): G = (ΣT , ΣN , S, P) el problema de análisis sintáctico
es determinar si una cadena α de símbolos terminales puede ser generada por la gramática: ¿α∈L(GIC)?
Esta pregunta tiene una respuesta afirmativa SI, si puede construirse una derivación S→*α de la cadena α
partiendo desde el axioma S, usando las producciones en P. Otra forma de responderla es construir el árbol
de análisis sintáctico para α.
Hay al menos dos formas generales de construir un autómata con pila, para que durante su
funcionamiento al procesar una cadena de entrada, construya la derivación o el árbol de análisis sintáctico
de la misma.
• Enfoque Descendente: partir desde el axioma S e identificar las producciones de la gramática que
sucesivamente deben aplicarse para construir una derivación por la izquierda de la cadena mientras se
consume la misma. Genera el árbol desde la raíz hacia las hojas.
• Enfoque Ascendente: se parte desde la cadena de entrada y se identifican las reducciones a realizar
para construir una derivación por la derecha de atrás hacia adelante. Genera el árbol desde las hojas
hacia la raíz.
Compiladores y AP
Se emplean en la primera etapa del compilador, llamada etapa de análisis. Particularmente, se emplean
para construir analizadores sintácticos, utilizados en la fase de análisis sintáctico. Pueden agruparse en
descendentes y ascendentes.
Se distinguen familias de analizadores que responden a diferentes criterios, entre ellos las formas normales
en las que deben estar expresadas las producciones de las gramáticas. El determinismo de los analizadores
y la utilización de procedimientos recursivos, son otros criterios de clasificación.
Analizadores Sintácticos Descendentes
El Analizador Sintáctico Descendente (ASD), en inglés Top-Down Parser, comienza a operar a partir del
axioma de la gramática y procura desarrollar por izquierda el árbol de derivación sintáctica a medida que la
sentencia es leída. Si este proceso puede ser continuado hasta completarse la lectura de la cadena significa
que la misma responde a las producciones de la gramática y, por lo tanto, es aceptada.
Dada una gramática GIC G = (ΣT , ΣN , S, P) se debe construir un autómata con pila AP = (ΣT , ΣT∪ΣN∪{#},
{p, q, r}, p, #, {r}, f) de la siguiente forma:
Se los suele llamar LR básicos, porque las cadenas son leídas de izquierda a derecha (Left) y se sigue un
proceso de reducción por izquierda. Puede comprobarse que a una reducción por izquierda le corresponde
una derivación por derecha (Right) y de allí el segundo carácter de la denominación LR.
• En cada intervalo de tiempo, se presenta la opción de desplazar un nuevo símbolo a de la entrada a la
pila, o reducir una cadena α ya almacenada en la pila; por ello se llama a estos analizadores por
reducción y desplazamiento.
• Para poder hacer la reducción se debe reconocer la cadena α en la pila, lo que implica identificar
anticipadamente varios símbolos en la pila; esto plantea una contradicción con la concepción de la
memoria tipo lifo en la que solo se hace visible el símbolo que se encuentra en su tope. El problema se
resuelve apelando al no determinismo del ap, con lo cual se puede asumir en la práctica a la pila como
una estructura híbrida que opera como tal, pero admite la observación de todo su contenido.
• En la reducción de la cadena α, seguramente se presentarán diferentes opciones ya que es probable
que numerosas producciones tengan a α en su segundo miembro. Por su lado, en el desplazamiento
desde la entrada hacia la pila, también se presenta siempre la opción de seguir apilando símbolos de
entrada o efectuar una reducción.
• La cadena será aceptada si a través de su completa lectura pudo conducirse la reducción hasta dejar en
la pila solo el axioma de la gramática.
Analizadores Sintácticos con Preanálisis
Preanálisis: Técnica de programación para hacer que el APND funcione en forma determinista. Implica
conocer anticipadamente los próximos k símbolos a ser leídos por el autómata, pudiendo predecir cuál
de todas las posibles producciones aplicables es la conducirá a la aceptación.
En otras palabras, consiste en “espiar uno o más símbolos de la entrada” sin leerlos (preanalizar), para
decidir cuál de las producciones conviene utilizar frente a alternativas no deterministas que se presente.
Con esta técnica pueden desarrollarse algoritmos de análisis sintáctico que pueden programarse en forma
eficiente los llamados analizadores sintácticos predictivos:
• LL(k): Left to right read and leftmost derivation ASD
• LR(k): Left to right read and rightmost derivation ASA
Donde k es la cantidad de símbolos de entrada a preanalizar.
En el caso de los analizadores LR(k), se mencionan, a continuación, algunos de los más importantes:
• LR(0): No utiliza preanálisis, por lo que es apropiado cuando las producciones de las gramáticas no
generan transiciones alternativas. Es el más fácil de implementar y, a la vez, el que dispone de menor poder
de reconocimiento.
• SLR(1): Utiliza un solo símbolo de preanálisis y su nombre (del inglés) significa Simple LR.
• LR(1): Es un analizador ascendente LR clásico que utiliza un símbolo de preanálisis. La implementación
de su AP conduce a estructuras de datos muy grandes y ha justificado el desarrollo de generadores
automáticos.
• LALR(1): Su nombre proviene del inglés Look-Ahead LR, en el que se combina la potencia del LR(1) con
la simplicidad y eficiencia del SLR (1). Éste es el método que utiliza YACC para la generación de
analizadores sintácticos en C.
UNIDAD N°6 – AUTÓMATA LINEALMENTE ACOTADO Y MÁQUINA DE TURING
Autómata Linealmente Acotado
Al agregarle al AFDB la posibilidad de grabar en su cinta, adquiere una memoria lineal finita de acceso
aleatorio, ya que moviendo su cabezal a derecha y a izquierda puede acceder a cualquier celda de la cinta.
Se obtiene una nueva máquina abstracta llamada Autómata Linealmente Acotado (ALA). La capacidad
de grabar implica la ampliación del alfabeto de cinta Γ con la incorporación de símbolos auxiliares reunidos
en un nuevo alfabeto Ω. Queda definido como:
ALA = ( Σ, Γ, Q, q0 , A, f )
cuyos componentes son:
- Σ = alfabeto de símbolos de entrada
- Γ = Σ ∪ {├, ┤} ∪ Ω = alfabeto de símbolos de cinta
- Q = conjunto finito y no vacío de estados posibles
- q0∈Q = estado inicial de funcionamiento
- A⊆Q = conjunto de estados de aceptación
- f : Q x Γ → Q x Γ x {I, D, N, P} = función de transición
Funcionamiento
Siempre iniciando su operación desde el estado inicial q0 con su cabezal sobre el símbolo de inicio de cinta
(el símbolo de más a la izquierda), el autómata:
1. Lee un símbolo de entrada e.
2. Graba un símbolo de salida s.
3. Transita a un estado q.
4. Mueve el cabezal a Izquierda, Derecha, No lo mueve o Para.
5. Repite 1, 2, 3 y 4 hasta ejecutar una instrucción de Parada.
6. Al detenerse, decide si acepta o no la cadena de entrada.
Durante su funcionamiento, el ALA:
• No puede mover su cabezal a la izquierda si está leyendo BOT, y no puede mover su cabezal a la
derecha, si está leyendo EOT.
• Podría quedar atrapado en un ciclo infinito y no terminar.
• Siempre para aceptar la cadena de entrada, se pedirá que al menos la haya leído una vez. Para eso
pediremos que se detenga en un estado de aceptación con su cabezal en EOT.
Aceptación o Reconocimiento de Cadenas y Lenguajes
Aceptación o reconocimiento de cadenas (1): un ALA acepta o reconoce una cadena de símbolos de
entrada α∈Σ*, si puede detenerse (Parar) en un estado de aceptación qf∈A con su cabezal de lecto-escritura
ubicado sobre el símbolo de fin de cadena EOT ( ┤).
Lenguaje reconocido L(ALA) (1): conjunto de cadenas de símbolos de entrada que son reconocidas por
el ALA.
Si se tiene en cuenta la cadena que quedó en la cinta luego del procesamiento del ALA, puede verse a esta
máquina como Ejecutora de Procedimientos: ALA: Σ* → Γ*
Configuración o Descripción Instantánea
Kt = (qt,├ αt┤, n)
qt ∈ Q → estado actual en el instante t
αt ∈ Γ ∗ → contenido de la cinta en el instante t
n ∈ N → posición del cabezal sobre la cinta, 0 ≤ n ≤ |αt |+1
Configuración Inicial:
K0 = (q0, ├ α0┤, 0)
Configuración Final:
Kn = (qn, ├ αn┤, m) con ALA detenido
Si qn∈A y m=|αn |+1, ésta ES una configuración de aceptación. Como siempre, la configuración es una
foto en t del proceso sobre α.
Movimiento: cambio de una configuración a otra: (qt ,├ αt┤, nt ) Ͱ (qt +1 ,├ αt +1 ┤, nt+1)
Si es posible pasar de una a otra en una transición de f.
Movimiento generalizado entre configuraciones: (qt ,├ αt┤, nt ) Ͱ* (qt +k ,├ αt +k ┤, nt+k) Si es posible
pasar de una a otra en k transiciones de f.
Aceptación o reconocimiento de cadenas (2): un ALA acepta o reconoce una cadena de símbolos de
entrada α∈Σ*, si puede moverse desde una configuración inicial a una configuración final de aceptación y
detenerse (Parar).
(q0 ,├ α ┤, 0) Ͱ* (qf ,├ β ┤, |β|+1) con qf∈A
Si se tiene en cuenta la cadena que quedó en la cinta luego del procesamiento del ALA, puede verse a esta
máquina como Ejecutora de Procedimientos: ALA: Σ* → Γ*
Máquina de Turing
Definición: Una Máquina de Turing, es un modelo matemático (máquina abstracta) denotado por:
MT = ( Σ, Γ, Q, q0 , A, f , ƀ )
cuyos componentes son:
- Σ = alfabeto de símbolos de entrada
- Γ = Σ ∪ {ƀ} ∪ Ω = alfabeto de símbolos de cinta – ƀ=blanco
- Q = conjunto finito y no vacío de estados posibles
- q0∈Q = estado inicial de funcionamiento
- A⊆Q = conjunto de estados de aceptación
- f : Q x Γ → Q x Γ x {I, D, N, P} = función de transición
En otras palabras, se trata de un ALA a cuya cinta se le permite extenderse más allá de la cadena a ser
procesada; por ello, se debe definir un símbolo que, por defecto, ocupará el resto del medio de
entrada/salida y usualmente se utiliza para este fin el b (blanco). La ausencia de límites implica que este
medio se extiende ahora hasta el infinito, conformando una enorme área de trabajo o memoria auxiliar.
Funcionamiento
Siempre iniciando su operación desde el estado inicial q0 con su cabezal sobre el primer símbolo de la
cadena de entrada, la máquina:
1. Lee un símbolo de entrada e.
2. Graba un símbolo de salida s.
3. Transita a un estado q.
4. Mueve el cabezal a Izquierda, Derecha, No lo mueve o Para.
5. Repite 1, 2, 3 y 4 hasta ejecutar una instrucción de Parada.
6. Al detenerse, decide si acepta o no la cadena de entrada.
Durante su funcionamiento, la MT puede
• Modificar nuevas celdas de la cinta infinita llena con espacios en blanco si le es necesario para su tarea
⇒ memoria lineal infinita.
• Quedar atrapada en un ciclo infinito y no terminar
• Aceptar una cadena sin tener que leerla completamente con sólo detenerse en un estado de aceptación.
Aceptación o Reconocimiento de Cadenas y Lenguajes
Aceptación o reconocimiento de cadenas (1): una MT acepta o reconoce una cadena de símbolos de
entrada α∈Σ*, si puede detenerse (Parar) en un estado de aceptación qf∈A.
Lenguaje reconocido L(MT) (1): conjunto de cadenas de símbolos de entrada que son reconocidas por la
MT.
Si se tiene en cuenta la cadena que quedó en la cinta luego del procesamiento de la MT, puede verse a esta
máquina como Ejecutora de Procedimientos: MT: Σ* → Γ*
Configuración o Descripción Instantánea
Configuración o Descripción Instantánea
Kt = (qt, ƀαt ƀ, n)
qt ∈ Q → estado actual en el instante t
αt ∈ Γ ∗ → contenido de la cinta en el instante t
n ∈ N →: posición del cabezal sobre la cinta, -∞ < n < -∞
Configuración Inicial:
K0 = (q0 , ƀα0 ƀ, 1)
Configuración Final:
Kn = (qn , ƀαn ƀ, m) con MT detenida.
Si qn∈A, ésta ES una configuración de aceptación. Como siempre, la configuración es una foto en t del
proceso sobre α.
Movimiento cambio de una configuración a otra: (qt , ƀαt ƀ, nt ) Ͱ (qt +1 , ƀαt +1 ƀ, nt+1)
Si es posible pasar de una a otra en una transición de f.
Movimiento generalizado entre configuraciones: (qt , ƀαt ƀ, nt ) Ͱ* (qt +k , ƀαt +k ƀ, nt+k)
Si es posible pasar de una a otra en k transiciones de f.
Otra forma de mostrar una configuración de un MT es:
Aceptación o reconocimiento de cadenas (2): una MT acepta o reconoce una cadena de símbolos de
entrada α∈Σ*, si puede moverse desde una configuración inicial a una configuración final de aceptación y
detenerse (Parar).
(q0 , ƀ α ƀ, 0) Ͱ* (qf , ƀ β ƀ, m) con qf∈A
Si se tiene en cuenta la cadena que quedó en la cinta luego del procesamiento de la MT, puede verse a esta
máquina como Ejecutora de Procedimientos: MT: Σ* → Γ*
Interpretaciones de ALA y MT
Tanto el ALA como la MT, pueden interpretarse de dos formas:
1. Reconocedora de Lenguajes
ALA → reconoce lenguajes TIPO 1 (LDC)
MT → reconoce lenguaje TIPO 0 (LEF)
Un lenguaje L definido sobre el alfabeto ΣE, es reconocido por un ALA o por una máquina de Turing M si:
Aquí debe tenerse en cuenta que ├─* denota una cantidad finita de movimientos y, por consiguiente, de
intervalos de tiempo, lo que implica que ante cualquiera de las cadenas α∈ L la máquina se detiene en un
estado de aceptación qA∈A. En este caso, se dice que L = L(M), es decir que el lenguaje definido sobre el
alfabeto ΣE es reconocido por la máquina M (en el caso del ALA, k debe indicar el fin de cinta ┤). Por el
contrario, si el estado final alcanzado al detenerse no es de aceptación, es decir que qA ∉ A, significa que
la máquina M ha rechazado la cadena α. Puede también darse el caso que la máquina no se detenga con
α, entonces se dirá que M es indiferente a α ya que ni la acepta ni la rechaza. En esta última condición, la
acción de M no determina un algoritmo.
2. Ejecutora de Procedimientos
Se trata de procedimientos efectivos que, a partir de una cantidad finita de movimientos, convertirán la
cadena inicial α en otra cadena final β que cumplirá ciertas condiciones. Se trata de máquinas que pueden
caracterizarse como traductoras, por establecer una relación entre entrada y salida. Para una MT:
(q0, α, 1) ├─* (qf, β, k), donde q0,qf ∈ Q, α∈ΣE * , β∈Γ
hay situaciones en las que el objetivo es el propio proceso y no una cierta cadena final β, tratándose muchas
veces de casos en que la máquina cumple infinitas veces un mismo ciclo. En estos casos, interesa la
sucesión de estados que recorre reiteradamente el autómata, ya que los mismos suelen estar asociados a
condiciones de control; la salida del autómata no está representada por la cadena final β sino por la sucesión
de los estados alcanzados en un cierto orden. Por ejemplo:
(p, α, 1) ├─∞ … [p, q, r, s, t ], p, q, r, s, t ∈ Q, α ∈ ΣE *
Halting Problem o Problema de la Parada
Tanto el ALA como la MT, pueden no detenerse:
Autómata Linealmente Acotado Si bien al ALA puede no detenerse, al ser su cinta y alfabetos finitos, en
algún momento repetirá una configuración, por lo que se podría detectar que ha entrado en un bucle.
Máquina de Turing La MT también puede no detenerse, pero al ser su cinta infinita, no puede siempre
saberse si entró en un bucle. Se dice que el problema de la detención de la MT es indecidible (en el sentido
de Gödel). Esto es, no existe un algoritmo (o una MT) que decida si otra MT se detiene.
Tesis de Turing-Church. Church había definido qué es una función computable y demostrado que existen
funciones no calculables. Turing conjeturó que su máquina es capaz de computar cualquier función
calculable y logró demostrar que la MT podía calcular cualquiera de las funciones computables de Church.
Hoy se considera que la MT es el modelo formal más general de computación (en cuanto a su poder de
cálculo), por lo que se dice que un problema es computable si y sólo si, puede ser resuelto por una
Máquina de Turing.
Variantes de la Máquina de Turing
Máquina de Turing Modular
Se refiere a la construcción de autómatas mayores a partir de aislar y asignar sus funciones principales a
máquinas individuales específicas, que luego son incorporadas a la principal.
La idea es crear pequeñas máquinas de Turing que realicen funciones sencillas, para luego combinarlas
unas con otras, para “programar” problemas más complejos, de manera más sencilla.
Máquina de Turing Universal
MT que recibe en su cinta una descripción codificada de otra máquina de Turing y produce como resultado
de su ejecución el mismo resultado que produciría la MT descripta en la cinta. Esta máquina recibe el nombre
de universal por ser capaz de simular el comportamiento de cualquier otra máquina de Turing; es decir,
puede leer otra MT convenientemente codificada en su cinta y la entrada de ésta, para emular su
funcionamiento.
Máquina de Turing Generalizada
Se incorpora más “hardware” a su versión original. En particular, se diseña esta nueva máquina con un
número arbitrario (pero finito) de cintas de entrada/salida que, a su vez, pueden tener múltiples cabezales
de lectura/escritura.
Máquina de Turing No Determinista
MT con función f : Q x Γ → P (Q x Γ x {I, D, N, P})
Con esta función podría en cada paso hacer varias cosas distintas en forma simultánea. En todos los casos
siempre se ha encontrado una MT determinista tradicional de una sola cinta, EQUIVALENTE.
COMPLEJIDAD DE LA MÁQUINA DE TURING
La Ciencia de la Computación considera que un problema es computable si y sólo sí puede construirse una
MT que lo resuelva: una solución. Ahora, una vez establecida la computabilidad de un problema, queda
como una cuestión importante: ¿es la mejor solución?
Clases de Problemas
Clase P: problemas que pueden resolverse con una máquina de Turing Determinista en tiempo polinómico
o menor.
Clase NP: problemas que pueden resolverse con una máquina de Turing NO Determinista en tiempo
polinómico o menor.
Clase NP-Completos: subproblemas de la clase NP a los que cualquier otro problema de NP puede
reducirse (conversión) en tiempo polinómico.
Como la MTD es un caso particular de la MTND, es claro que P ⊆ NP. Por definición, también NP-completos
⊆ NP. El primer problema NP-completo, formulado por Cook, es el de satisfactibilidad lógica: SAT
Uno de los problemas más importantes, aún no resuelto, de las matemáticas y la computación es el
determinar si también NP ⊆ P, o sea : ¿ P = NP ?
Esto está en investigación actualmente y se han definido muchas otras clases de complejidad.
Medición de la complejidad
Una vez definidos los indicadores de complejidad, estos deben ser evaluados para cada caso particular.
1. Los indicadores de complejidad temporal y espacial, pueden obtenerse a través de un proceso inductivo
que se apoya en un estudio detallado del algoritmo utilizado, permitiendo definir expresiones generales que
serán válidas para cualquier tamaño del problema estudiado
2. El algoritmo es lo suficientemente enmarañado como para que no sea fácil o posible obtener las
expresiones de complejidad a través de su análisis. En estos casos, se hacen evaluaciones de los
indicadores de complejidad resultantes para ciertas dimensiones del problema, se proponen grados para el
polinomio que representa su complejidad y se calculan algebraicamente los coeficientes del polinomio.
3. Los indicadores de complejidad no dependen únicamente de la dimensión del problema sino también de
la forma en la que se presentan los datos. Se suelen utilizar dos valores de complejidad: a) el que
corresponde a la condición extrema que demanda el máximo esfuerzo y representa una cota superior a la
complejidad del problema y b) el de la condición de trabajo más probable (una situación media).
Las expresiones de complejidad buscadas tienen las finalidades de permitir: i) conocer los órdenes de las
complejidades de los problemas, ii) cuantificar esas complejidades para ciertas dimensiones específicas y
poder hacer previsiones referidas a los recursos necesarios para resolverlos y iii) comparar entre sí
diferentes problemas o distintas formas de abordar un mismo problema.
UNIDAD N°8 – INTRODUCCIÓN A LA SEMÁNTICA DE LOS LENGUAJES
En el estudio de los lenguajes se distinguen la gramática y la semántica. La gramática se ocupa del análisis
de las estructuras de las frases, y dentro de la gramática, la morfología analiza las formas que toman las
palabras, la sintaxis se ocupa de cómo combinar las palabras para formar frases correctas y la fonética trata
al lenguaje hablado. Por su parte, la semántica se ocupa del estudio del significado que es atribuible a
expresiones sintácticamente bien formadas.
En base a lo anterior, se entiende por semántica de un lenguaje, al conjunto de reglas que especifican
el significado de toda sentencia sintácticamente correcta, escrita en el mismo.
Enfoques de la Especificación Semántica de los Lenguajes