TEMARIO COMPLETO AUTOMATAS

Anuncio
UNIDAD I
“LENGUAJES Y GRAMATICAS”
1.1.- TERMINOLOGÍA, NOTACIÓN Y CONCEPTOS ELEMENTALES, ALFABETO,
SÍMBOLOS, CADENA VACÍA, LENGUAJE, GRAMÁTICA.





Alfabeto: Un alfabeto es un conjunto de símbolos finito y no vacío.
Convencionalmente, utilizamos el símbolo  para designar un alfabeto. Entre los
alfabetos más comunes se incluyen los siguientes:
1.  = {0,1}, el alfabeto binario
2.  = {a, b, ……z}, el conjunto de todas las letras minúsculas.
3. El conjunto de todos los caracteres ASCII o el conjunto de todos los ASCII
imprimibles.
Símbolos: Un símbolo es una representación tangible de algo abstracto, por lo
tanto, es perceptible por medio de algunos de los sentidos, por ejemplo, una letra
es un símbolo gráfico que representa un sonido concreto, un dígito es la
representación de un valor numérico; los símbolos también pueden representar un
concepto o una idea, como los que se emplean en arquitectura, electricidad y
matemáticas.
Cadena vacía: Es aquella cadena que presenta cero apariciones de símbolos. Esta
cadena designada por  , es una cadena que puede construirse en cualquier
alfabeto.
Lenguaje: Es simplemente un conjunto de cadenas que incluyen símbolos de un
alfabeto. Esta definición incluye lenguajes familiares, como los lenguajes naturales
y los de programación de alto nivel, así como conjuntos de cadenas no
relacionados.
Gramática: que define los usos correctos de una lengua mediante preceptos.
1.2.- LENGUAJES: PROPIEDADES DE UN ALFABETO CERRADO DE KLEENE,
CERRADURA POSITIVA Y SU RELACIÓN CON EL LENGUAJE.
CERRADURA DE KLEENE
Sea L un lenguaje sobre el alfabeto  , se define a L* como la cerradura de Kleene o
cerradura estrella como la unión infinita de todas las potencias de L, incluyendo la
potencia cero.
Ejemplo:
Sea L1= {0,1}, entonces L1* = L10  L11  L12  ….
= {  }  {0,1}  {00,01,10,11}  {000,001,010,011,…}

= {  ,0,1,00,01,10,11,000,001,010,011,…}
Los lenguajes L1 = {  } y L2 =
, son los únicos cuya cerradura de Kleene es finita, y dado
0

que
= { }, se cumple que * = {  }, y por tanto, para ambos se tiene que: L1* = L2* = { 
}. También es interesante observar que aunque tengamos la igualdad de las cerraduras L1*
= L2*, esto no significa que L1 y L2 tengan que ser iguales.
CERRADURA POSITIVA
De manera similar, se define la cerradura positiva de L, como la unión infinita de todas las
potencias de L a partir de uno.
Ejemplo:
Sea L= {ab}, entonces L+ = {ab, abab, ababab, ababababab, ……}, mientras que L*= {  , ab,
abab, ababab, ababababab, ……}.
PROPIEDADES DE LAS CERRADURAS
Para cualquier lenguaje L, se cumplen las siguientes propiedades:
L* = {  }  L+
L+ = L. L* = L* . L = L* . L+ = L+ . L*
(L+)+ = L+
(L*)* = (L+)* = (L*)+ = L*
Si   L, entonces se sigue necesariamente que: L+ = L*, mientras que si
cumple forzosamente que: L+ = L* - {  }.
1.3.- OPERACIONES
POTENCIACIÓN.
CON
LENGUAJES:
CONCATENACIÓN:
Sean L1 y L2 dos lenguajes, entonces L1
concatenación de L1 con L2.
.
UNIÓN,
L2 = {wx | w

L1, x
  L, se
CONCATENACIÓN,

L2 } es el lenguaje
Ejemplo:
 Sean los lenguajes L1 = {pátz, camé, yuré, cará, zitá} y L2 = {cuaro}, entonces la
concatenación de L1 con L2 es L1. L2 = {pátzcuaro, camécuaro, yurécuaro,
carácuaro, zitácuaro}.
 Sean los lenguajes L1 = {01, 21} y L2 = {a, ba, ca}, entonces la concatenación de L1
con L2 es L1 . L2 ={01a, 01ba, 01ca, 21a, 21ba, 21ca}
 Similarmente se puede obtener L2 . L1 ={a01, ba01, ca01, a21, ba21, ca21}
POTENCIA:
Sea L un lenguaje sobre el alfabeto  , entonces para cualquier n
enésima potencia de L se define recursivamente como sigue:
𝐿𝑛 =

0, se tiene que la
{Ɛ}
para n = 0
𝑛−1
𝐿𝐿
para n > 0
Ejemplo:
 Sea L= { ab } entonces L0 = {  }, L1 = { ab}
 Sea L = {0,1} entonces L0 = {  }, L1 = {0, 1}, L2 = {00, 01, 10, 11}, Etc.
UNIÓN:
Las demás operaciones de conjuntos se aplican igualmente a los lenguajes, es decir: si L1 y
L2 son dos lenguajes cualesquiera, entonces L1  L2 , L1  L2 , L1 - L2 , L2 – L1 y L1  L2
también son lenguajes.
1.4 GRAMÁTICA GENERATIVA Y ÁRBOLES DE DERIVACIÓN: SÍMBOLOS
TERMINALES, SÍMBOLOS NO TERMINALES, SÍMBOLOS INICIALES, REGLAS DE
PRODUCCIÓN, DERIVACIÓN DE PALABRAS.
GRAMATICA GENERATIVA:
Una gramática generativa es la cuarteta G= (N,  , S, P), donde:
 es un alfabeto de símbolos terminales,
N es la colección de símbolos no terminales,
S es el símbolo inicial de una gramática (no terminal, S  N) y
P es la colección de reglas de sustitución, también llamadas producciones.
Ejemplo: G= (N,  , S, P), donde:
N= {S, A, B}
 = {a, b}
P = {SaB, SbA, Aa, AaS, A bAA, Bb, BbS, BaBB}
DERIVACIÓN DE PALABRAS:
El proceso de generar una cadena se llama “derivación”, donde la doble flecha  significa
genera o deriva; parte de un símbolo inicial representado por S. Los símbolos en
minúsculas son los elementos del alfabeto  y se les conoce como símbolos terminales,
mientras que las letras mayúsculas se denominan símbolos no terminales (SNT), debido a
que solamente aparecen durante el proceso de derivación, pero no pueden figurar en una
cadena finalizada, estos son los símbolos que pueden ser reemplazados aplicando alguna
de las reglas de sustitución o producciones.
Ejemplo:
G= (N,  , S, P), donde:
N= {S, A, B, C}
 = {a, b}
P = S  aA
S aB
A aA
A bC
B bB
B bC
C   (por ser un estado de aceptación)
La secuencia de transiciones que genera la cadena w= aaab, es la siguiente:
S
𝑎 𝑎 𝑎 𝑏
A A A C
→ → → →
La primer regla se interpreta como que la transición del estado S al estado A genera el
símbolo a. La flecha  expresa que S “es sustituido por” o “produce” la cadena Aa, de
modo que puede utilizarse esta regla cuando se tiene al símbolo S en una cadena, el cual
puede ser sustituido por la expresión que aparece a la derecha de la flecha.
Por lo tanto la cadena w= aaab se puede generar por medio de las reglas anteriores. De
este modo si se parte del símbolo inicial S y se aplica la primer regla, se obtiene aA, y si
luego se aplica en dos ocasiones la tercera regla, se obtiene aaaA, luego se emplea la
cuarta regla para obtener aaabC y finalmente la última regla para terminar en aaab.
Este proceso se puede describir de manera compacta así:
S aA aaA aaaA  aaabC  aaab
ARBOL DE DERIVACIÓN:
Es un árbol que representa en forma gráfica la manera como una gramática dada genera a
una cadena concreta y tiene las siguientes propiedades:
 La etiqueta de la raíz es S.
 La etiqueta de cualquier vértice que no es hoja es un símbolo no terminal.
 La etiqueta de cualquier vertice hoja es un simbolo terminal o  .
 Para cada producción de la forma A  w, que se aplique en una derivación, deberá
haber un nodo etiquetado con el SNT A, cuyos descendientes correspondan a cada
uno de los símbolos que forman la cadena w, (en el mismo orden).
 La concatenación de los símbolos que haya en cada una de las hojas (leídos de
izquierda a derecha) proporciona la cadena obtenida en la derivación que
representa el árbol.
1.5 JERARQUÍA DE CHOMSKY PARA LAS GRAMÁTICAS
1.5.1 Gramáticas tipo 0 o de estructuras de frase.
Corresponden a las gramáticas no restringidas, también conocidas como las gramáticas
irrestrictas o gramáticas de estructura frase. A los lenguajes generados por estas
gramáticas se les llama lenguajes recursivamente enumerables, o simplemente lenguajes
enumerables y pueden ser aceptados, pero tal vez no decididos, por alguna de Turing.
1.5.2 Gramáticas tipo 1 o sensitiva al contexto.
Gramáticas sensibles al contexto. Los autómatas lineales acotados reconocen lenguajes de
 
este tipo. Las producciones son de la forma:    y deben cumplir que

1.5.3 Gramática tipo 2 o de libre contexto.
Corresponden a las gramáticas independientes del contexto, las cuales generan los
lenguajes independientes del contexto y pueden ser reconocidos por medio de los
autómatas de pila no determinista.
1.5.4 Gramática tipo 3 o regular.
Los lenguajes reconocidos por estas gramáticas se denominan lenguajes regulares, y son
reconocidos por autómatas finitos.
1.6 GRAMÁTICAS Y LENGUAJES.
Informalmente, tal como se entiende en el contexto de los lenguajes naturales, una
gramática es un conjunto de reglas que definen la estructura de algún lenguaje formal.
Esto es, la estructura de las cadenas válidas dentro de dicho lenguaje.
UNIDAD II
“AUTOMATAS DE ESTADO FINITO”
2.1 ESPECIFICACIÓN DE UN AUTÓMATA DE ESTADO FINITO.
Un Autómata finito (AF) es una máquina de estados que determina si una cadena
pertenece o no a un Lenguaje. Para decidir si la cadena pertenece al lenguaje lee los
caracteres que la forman de izquierda a derecha y con esta información decide si debe
permanecer en el estado en el que se encuentre o cambiarse a otro estado. El AF tiene un
solo estado inicial que es el estado en el que se encuentra cundo empieza a leer la entrada
y puede tener varios estado finales. Si cuando termine de leer la entrada se encuentra en
uno de estos estados finales, entonces la entrada es una cadena que pertenece al
Lenguaje. Si cuando termine de leer la entrada no queda el autómata en uno de los
estados finales, entonces la entrada no es una cadena que forme parte del lenguaje.
2.1.1 AUTÓMATA FINITO DETERMINISTA.
Formalmente se define a un autómata finito determinista (AFD) por la quíntupla M= (Q,
 , s, F,  ), donde: Q es un conjunto finito de estados,  es el alfabeto de entrada, s 
Q es el estado inicial, F es el subconjunto de Q de los estados de aceptación (F  Q) y 
es la función de transición definida por  : Q x  Q.
La característica principal de un AFD es que  es una función que está definida para
todos los posibles estados qi  Q y para todos los símbolos    . Es decir, para
cualquier pareja de la forma (qi,
 j ) siempre existe un único estado siguiente.
Ejemplo:
Sea M el AFD donde Q= {q0, q1},  ={a, b}, s= q0, F={ q0} y las siguientes transiciones:  (
q0,a)= q0, ( q0,b) = q1 ,  ( q1,a) = q1 y  ( q1,b) = q0.
Esto se representa por medio de la siguiente tabla de transiciones:
Tabla 2.1
A partir de la tabla se puede construir el diagrama de transiciones correspondiente a este
AFD, el cual se muestra en la siguiente figura:
Figura 2.1
2.1.2 AUTÓMATA FINITO NO DETERMINISTA.
Autómata finito no determinista es aquel que puede tener cero, una o más transiciones
distintas para el mismo símbolo desde un mismo estado y se abrevia AFN.
Todo AFD puede considerarse como un tipo particular de AFN, pero generalmente resulta
mucho más sencillo construir e interpretar a un AFN que a un AFD.
DEFINICION FORMAL DE AFN
Formalmente se define un AFN por la quíntupla M= (Q,  ,  s, F), donde: Q es un
conjunto finito de estados,  es el alfabeto de entrada, s  Q es el estado inicial, F es el
subconjunto de Q de los estados de aceptación (F  Q) y  es la función de transición (
 : Q x  2Q ), donde se puede apreciar que el contra-dominio de la función es el
conjunto potencia de Q, es decir, que esta función devuelve conjuntos de estados en vez
de un solo estado.
Ejemplo:
El siguiente diagrama representa a un AFN que acepta el lenguaje: L= (0  1)* 1(0  1)2,
que es el lenguaje formado por las cadenas de ceros y unos cuyo antepenúltimo símbolo
es un uno. Por tratarse de un autómata no determinista, se puede ver que para el estado
q3, no existen transiciones definidas, mientras que para el estado q0 hay dos transiciones
para el símbolo 1.
Figura 2.2
Compare el diagrama anterior con el correspondiente al AFD que se muestra en la figura
2.3.
Figura 2.3
El AFN de la figura 2.2 está definido por Q= {q0, q1, q2, q3}, s= q0, F={q3},  ={0, 1} y 
contiene a las transiciones siguientes:
 (q0, 0) = {q0}
 (q1, 0) = {q2}
 (q2, 0) = {q3}
 (q0, 1) = {q1, q0}
 (q0, 1) = {q2}
 (q0, 1) = {q3}
O resumiendo, el AFN y todos sus elementos se muestran en la siguiente tabla:
Tabla 2.2
2.1.3 AUTÓMATAS Y EXPRESIONES REGULARES.
Para construir autómatas a partir de expresiones regulares, se puede iniciar con los casos
más sencillos, los cuales se muestran en la figura 2.4. Posteriormente se pueden construir
otros más complejos con base en las operaciones de unión, concatenación y cerradura.
Figura 2.4
Supongamos que M1= (Q1, ∑1, ∆1, q0, F1) y M2= (Q2, ∑2, ∆2, p0, F2), son dos AFN que
aceptan los lenguajes L1 y L2 respectivamente, entonces podemos construir un nuevo AFN
M3= (Q3, ∑3, ∆3, q0’, F3),, que acepte al lenguaje unión L3= L1 U L2, a partir de M1 y M2,
añadiendo un nuevo estado inicial q0 y dos nuevas transiciones Ɛ que vayan de q0 a los
estados iníciales q0 y p0, respectivamente, así como también añadimos un único estado
final qf. Unido desde qf y desde pf por medio de dos transiciones Ɛ.
Figura 2.5
EJEMPLO UNION
Sean M1 y M2, los AFN que aceptan los lenguajes L(M1)=ab* y L(M2)=a*b,
respectivamente, entonces el AFN M3, obtenido a partir de M1 y M2, acepta el lenguaje
L(M3)=ab*Ua*b, tal como se muestra.
Figura 2.6
Figura 2.7
EJEMPLO CONCATENACIÓN
Supongamos que M1= (Q1, ∑1, ∆1, q0, F1) y M2= (Q2, ∑2, ∆2, p0, F2), son dos AFN que
aceptan los lenguajes L1 y L2 respectivamente, entonces podemos construir un nuevo AFN
llamado M3= (Q3, ∑3, ∆, q0, F3),, que acepte al lenguaje L3=L1●L2, colocando primero a M1
con su estado inicial q0 y enseguida se enlaza con M2,añadiendo una transición Ɛ que vaya
del estado de aceptación qf de M1, que dejara de serlo, al estado inicial p0 de M2, que
también deja de serlo .
Figura 2.8
Sean M1 y M2, los cuales aceptan los lenguajes L(M1)=ab* y L(M2)=(ab)*,
respectivamente, entonces el AFN M3, obtenido a partir de M1 y M2, acepta el lenguaje
(M3)=ab*(ab)*, tal como se muestra en la figura 2.9.
Figura 2.9
2.1.4 CONVERSIÓN DE AUTÓMATAS FINITOS NO DETERMINISTA A
DETERMINISTA.
Aunque se puede considerar a un AFD dado como un caso particular de los AFN y que
éstos últimos son más versátiles, esto no significa que los AFN sean más poderosos que los
AFD, esto se confirma demostrando que para cualquier AFN, siempre existe un AFD
equivalente que acepta el mismo lenguaje.
EJEMPLO 1
Encontrar un AFD equivalente al AFN definido por el diagrama de transiciones mostrado
en la figura siguiente:
Figura 2.10
Es necesario, primero, representar al AFN por medio de sus tablas de transiciones
correspondiente, ya que a partir de ella se podrá encontrar el AFD equivalente.
Tabla 2.3
Ahora debemos definir a M’, el AFD equivalente a M, como sigue: cada uno de los posibles
estados de M’ corresponderá a una combinación de estados de M, de tal forma que Q’ ={
[q0], [q1], [q0,q1], [Ø] }, donde el estado inicial es s’ =[q0], y los estados de aceptación son
todos aquellos que contengan a q0, que es el estado de aceptación de M, es decir: F’ = {
[q0], [q0,q1] }. El empleo de los corchetes en esta notación sirve para diferenciar el hecho
de que en un AFN las transiciones pueden referirse a un conjunto de estados, mientras
que la notación con corchetes se refiere a un solo estado y que el conjunto que encierra
deberá ser visto como una unidad y sólo sirve pan señalar la referencia con el conjunto
sobre el que se ha establecido la correspondencia. Esta unicidad es necesaria para
preservar el determinismo.
De esta manera,  queda definido por las transiciones que se obtienen directamente de
la tabla 2.4:
Tabla 2.4
Además, para completar la tabla, hay que agregar las transiciones para los estados
faltantes, por un lado, el estado [Ø] corresponde a un estado no deseado, por lo que sus
transiciones permanecerán en este estado:  ([Ø],0)= [Ø] y  ([Ø],1)= [Ø].
Finalmente, pan determinar las transiciones del estado [q0, q1], tenemos que observar que
se derivan de las siguientes transiciones en M, uniendo las celdas de ambas filas, para
cada estado, directamente de la tabla 2.5:


∆({ q0,q1}, 0)= ∆({ q0}, 0)  ∆({ q1}, 0)= { q0,q1},  Ø= { q0,q1}
∆({ q0,q1}, 1)= ∆({ q0}, 1)  ∆({ q1}, 1)= { q1}  { q0,q1}= { q0,q1}
Dando como resultado que las transiciones para el estado [q0,q1] son:  ([q0,q1], 0)=
[q0,q1] y  ([q0,q1], 0)= [q0,q1], todo lo anterior se resume en la tabla 2.5a, mostrada a
continuación.
Como ultimo paso, se sugiere renombrar a cada uno de los estados de M´ con nombres
más simples, por ejemplo, se puede renombrar así: p0= [q0], p1=[q1], p2= [q0,q1] y p3= [Ø],
tal como se muestra en la tabla 2.5b.
Tabla 2.5 a
Tabla 2.5b
De esta forma, el diagrama de transición del AFD equivalente es el mostrado en la figura
2.11. Haciendo un análisis del mismo, se puede ver que el autómata acepta todas las
cadenas que tengan unos y ceros, con excepción de w= 1 y de todas las cadenas que
inicien con el prefijo 10.
Figura 2.11
2.2 MINIMIZACIÓN DE ESTADOS
Se explican los fundamentos teóricos del algoritmo de minimización, se da dicho algoritmo
y se ve su funcionamiento sobre un ejemplo.
2.2.1 RELACIONES DE EQUIVALENCIAS ENTRE LOS ESTADOS DE UN
AUTÓMATA FINITO.
Sean M1 y M2 dos AFD, entonces se dice que M1 y M2 son equivalentes si se cumple que
L(M1) = L(M2).
Considere a los AFD M1 y M2 sobre el alfabeto ∑= {0,1} que se muestran en la figura 2.12
(a) y 2.12 (b), como se puede verificar, ambos aceptan el mismo lenguaje 0*10*, por lo
tanto, son equivalentes.
Figura 2.12 (a)
Figura 2.12 (b)
A pesar de que pueden existir varios autómatas equivalentes para un lenguaje dado,
solamente existe un único AFD mínimo equivalente (de mínimo numero de estados), que
se considera como la representación óptima para dicho lenguaje, como es el caso del
autómata etiquetado como M2 en este ejemplo.
2.2.2 ALGORITMO DE MINIMIZACIÓN.
Dado M, un AFD cualquiera, se puede obtener M, el AFD con el mínimo numero de
estados que sea equivalente a M, por medio del siguiente algoritmo.
1. Se obtiene el autómata conexo equivalente, eliminando todos los estados que no
son accesibles desde q0.
2. Se realiza una partición de los estados de Q en dos clases:
 En la clase C1 se incluyen a los estados de aceptación, es decir: C1 = F.
 En la clase C2 a los demás estados, esto es: C2 = Q-F.
1. Se analiza cada clase Cm con objeto de ver si para todo qk  Cm se cumple para
cada símbolo  i  ∑ que  (qk,  i)  Cn.
2. En caso de que no se cumpla lo anterior para alguna clase Cm , se realiza una
participación de esa clase, dividiéndola en subclases que estén formadas por los
grupos de estados que satisfagan la condición anterior entre sí.
3. Se repite el paso 3 hasta verificar que todas las clases cumplan la condición
requerida, entonces cada clase de estados equivalentes resultante se representará
por un solo estado en el AFD mínimo.
Ejemplo.
Considérese al AFD de la figura 2.12 (a). Es fácil verificar que se trata de un AFD conexo,
entonces, aplicando el segundo paso del algoritmo, se hace la partición inicial: C1=
{q2,q3,q4} y C2= {q0, q1, q5}. Ahora continuando con el paso 3 del algoritmo, analizamos las
transiciones para los tres estados contenidos en la clase C1:
 (q2, 0)= q4 C1
 (q3, 0)= q4 C1
 (q4, 0)= q4 C1
 (q2, 1)= q5 C2
 (q3, 1)= q5 C2
 (q4, 1)= q5 C2
Para todos los estados de esta clase se cumple la condición de equivalencia requerida en
este paso, por lo que no se requiere realizar ninguna partición.
A continuación se hace el análisis de las transiciones para los tres estados contenidos en la
clase C2:
 (q0, 0)= q1 C2
 (q0, 1)= q2 C1
 (q1, 0)= q0 C2
 (q1, 1)= q3 C1
 (q5, 0)= q5 C2
 (q5, 1)= q5 C2
Se observa que se satisface la condición exigida para todos los casos, entonces hay que
separar los estados de C2 en dos subclases a saber: C3= {q0, q1}, dado que ambos se
comportan de forma equivalente y C4= {q5}.
Ahora se debe repetir el paso 3 para verificar que se cumple la condición requerida para
cada una de las tres clases que ahora se tienen.
Se puede observar que esta partición no afecta los resultados para la clase C 1, puesto que
solamente se remplaza C2 por C4 en las transiciones del símbolo 1.
A continuación se muestra que también se cumple la condición de equivalencia para las
otras dos clases:
Para C3:
 (q0, 0)= q1 C3
 (q1, 0)= q0 C3
 (q0, 1)= q2 C1
 (q1, 1)= q3 C1
Y para C4 la condición se cumple por necesidad, puesto que tiene un solo estado:
 (q5, 0)= q5 C4
 (q5, 1)= q5 C4
Con esto se concluye que el AFD mínimo solamente consta de tres estados, el cual está
representado por la siguiente tabla de transiciones.
Tabla 2.6
Obsérvese que la clase C3 que contiene el estado inicial original q0 se considera el nuevo
estado inicial y que la clase C1, que surgió a partir de los estados de aceptación será el
nuevo estado de aceptación. El diagrama de transiciones correspondiente a este AFD
mínimo es el mismo que fue representado por el autómata M2 en la figura 2.12 (b).
2.3 AUTÓMATAS FINITOS Y GRAMÁTICA REGULAR.
Para construir una gramática regular, a partir de una expresión regular dada, se puede
construir un diagrama de transiciones que represente al AFN que acepta al lenguaje
regular en cuestión y de ahí obtener las producciones respectivas a partir de cada una de
las transiciones y agregando las producciones Epsilon para los estados de aceptación que
hubiere.
2.3.1 OBTENCIÓN DE UNA GRAMÁTICA REGULAR A PARTIR DE UN
AUTÓMATA FINITO.
Para obtener una gramática regular para generar al lenguaje regular: L= a*b  a, primero
se construye el diagrama de transiciones correspondiente al AFN que acepta el lenguaje
referido, de esta manera se obtiene el diagrama mostrado en la figura 2.13.
Figura 2.13
De las transiciones del diagrama anterior y considerando que B es el estado de aceptación,
se obtiene la gramática correspondiente:
S A
A aA
B Ɛ
ab
bB
Podemos encontrar una gramática equivalente al sustituir al SNT B, y queda:
S A
A aA
a
b
2.3.2 OBTENCIÓN DE UNA AUTÓMATA FINITO A PARTIR DE UN GRAMÁTICA
REGULAR.
Si L es un lenguaje generado por la gramática regular G = (ΣN; ΣT; S; P), entonces existe un
AF
M = (Q; Σ; δ; qo; F), tal que L = L(M) = L(G), y lo construimos de la siguiente forma:
Q = ΣN  {z}
Σ = ΣT
qo = S
F = {z}
δ se define usando unas reglas:
Para cada producción A  aB ϵ P se define la transición δ(A; a) = B
Para cada producción A  a ϵ P se define la transición δ(A; a) = z
Para cada producción A  λ ϵ P se define la transición δ(A; λ) = z
2.4 OPERACIONES CON AUTÓMATAS.
COCIENTES.
Dado un conjunto cualquiera C, una partición de C es cualquier colección π de
subconjuntos disjuntos y no vacios de C cuya unión es el propio C. A cada elemento de π
se le denomina bloque. Para cada x ϵ C llamaremos π(x) al bloque que contiene a x. La
partición trivial es aquella en la que cada bloque contiene un solo elemento. Para
simplificar la descripción de una partición, en algunos casos enumeraremos solo aquellos
bloques que contienen más de un elemento.
Dentición Sea A = (Q, Σ, δ, I, F) un autómata finito y sea π una partición de Q. El autómata
finito A/π = (Q/π, Σ, 𝛿 𝜋 , Q/π-2𝑄−1, Q/π-2𝑄−𝐹 ), siendo 𝛿 𝜋 (π(p), a) = {π(q) : δ(π(p), a) 
π(q) ǂ 0}, se denomina autómata cociente de
A por π.
Evidentemente si p ϵ δ(q, x) entonces π(p) ϵ 𝛿 𝜋 (π(q), x) y además p ϵ I  π(p) ϵ Q/π- 2𝑄−𝐼
y p ϵ F  π(p) ϵ Q/π- 2𝑄−𝐹 por lo que en todo caso L(A)  L(A/π).
Definición Autómata finito A es irreducible si L(A/π) = L(A) implica que π es la partición
trivial.
REVERSO.
Definición Se denomina reverso de un autómata finito A = (Q, Σ, δ, I, F) al autómata finito
𝐴𝑅 = (Q, Σ, 𝛿 𝑅 , I, F), donde (p, a, q) ϵ 𝛿 𝑅 ↔ (q, a, p) ϵ δ.
Por inducción sobre |x|, x ϵ Σ*, se demuestra que 𝛿 𝑅 (P1, x) = P2 ↔ δ(P2, 𝑥 𝑅 ) = P1, y de
esto se deduce que L(𝐴𝑅 ) = (L(A))𝑅 .
Evidentemente (𝐴𝑅 )𝑅 = A. Además, si A es aseado también lo es 𝐴𝑅 , si A es irreducible
también lo es 𝐴𝑅 y si A es minimal también lo es 𝐴𝑅
SUBAUTÓMATAS.
Un Subautómatas de un autómata finito A = (Q, Σ, δ, I, F) es cualquier autómata A’ = (Q’, Σ,
δ’, I’, F’) tal que Q’  Q; δ’  δ  (Q’ x Σ x Q’), I’  I  Q’, F’  F  Q’.
Obviamente, si A’ es un subautómatas de A entonces L (A’)  L(A).
Definición Sea A = (Q, Σ, δ, I, F) un autómata finito y sea P un subconjunto de Q.
Denominaremos subautómatas de A inducido por P al autómata AP = (P, Σ, δ  (P x Σ x
P), I  P, F  P). Igualmente, dado I’  I, F’  F o δ’  δ llamaremos AI → I’, AF → F’, Aδ
→ δ’ respectivamente a los subautómatas (Q, Σ, δ, I’, F), (Q, Σ, δ, I, F’), (Q, Σ, δ’, I, F).
Así, A‘ es un subautómatas de A = (Q, Σ, δ, I, F) si y solo si existen I’
P  Q tales que A’ es isomorfo a (((AI → I’) AF → F’) Aδ → δ’)P.

I, F’

F, δ’

y
HOMOMORFISMOS.
Definición Un homomorfismo de un autómata A = (Q, Σ, δ, I, F) sobre un autómata A’ =
(Q’, Σ’, δ’, I’, F’) es cualquier función h : Q → Q’ tal que h(I)  I’, h(F)  F’ Y (p, a, q) ϵ δ
→ (h(p), a, h(q)) ϵ δ’.
Claramente, para todo q ϵ Q, Lq  Lh(q) y Rq  Rh(q) por lo que si existe algún
homomorfismo de A sobre A’ entonces necesariamente L(A)  L(A’).
Así, dados dos autómatas finitos A y A’, existe un homomorfismo de A sobre A’ si y solo si
existe un subautómatas de A’ isomorfo a algún cociente de A.
UNIÓN.
Definición Dados A = (Q, Σ, δ, I, F) y A’ = (Q’, Σ, δ’, I’, F’) autómatas finitos, llamaremos al
autómata A  A’ = (Q  Q’, Σ, δ  δ’, I  I’, F  F’) donde todas las uniones son
disjuntas, unión de A y A’.
Evidentemente L(A  A’) = L(A)  L(A’).
DETERMINIZACIÓN.
Denominaremos Determinización de un autómata finito al método clásico de obtención
de un autómata finito determinista aseado equivalente a un autómata finito dado.
Sea A = (Q, Σ, δ, I, F) un autómata finito. Diremos que un subconjunto P de Q es alcanzable
si existe x ϵ Σ* tal que δ(I, x) = P. Llamaremos Alc(2𝑄 ) al conjunto de partes alcanzables de
Q.
MINIMIZACION.
La minimización es el proceso de obtención del autómata finito determinista mínimo
equivalente a un autómata finito dado.
2.5 LENGUAJES QUE NO SON REGULARES.
Dado que para todo lenguaje regular infinito se cumple el lema de bombeo, si nos dan un
lenguaje infinito y demostramos que para él no se cumple, habremos demostrado que no
es un lenguaje regular. Como el lema de bombeo es una propiedad que se cumple para
todas las cadenas de longitud mayor o igual a cierta n, bastará encontrar una cadena de
ese lenguaje, de longitud mayor o igual a esa n, que no se pueda “bombear” para
demostrar que el lenguaje no es regular. Con esta idea en mente, los pasos a dar para
demostrar que un lenguaje dado no es regular son los siguientes:
1. Elegir una palabra w que pertenezca al lenguaje dado. Podemos elegir cualquier
palabra del lenguaje, pero debe ser una cuya longitud sea mayor o igual que una
constante n que desconocemos (la constante del lema de bombeo). Como
desconocemos n, lo habitual será elegir una palabra en función de un n cualquiera
y cuya longitud sea mayor o igual que n.
2. El lema de bombeo dice que si el lenguaje fuera regular, podríamos encontrar una
forma de partir esa palabra w en tres, cumpliendo ciertas restricciones, y que esa
partición sería bombeable. Como queremos demostrar que el lenguaje no es
regular, tendremos que demostrar que no hay ninguna forma de partir la palabra
en tres cumpliendo las restricciones del lema, y que después se pueda bombear
siempre.
3. Finalmente bastará con encontrar una constante k ≥ 0 que haga que ninguna de las
particiones posibles de w sea bombeable.
UNIDAD 3
AUTÓMATAS DE PILA (STACK)
3.1 ESPECIFICACIÓN DE UN AUTÓMATA DE PILA
Un autómata de pila o Push-Down es un autómata que cuenta con un mecanismo que
permita almacenamiento ilimitado y opera como una pila.
El autómata de pila (se abrevia PDA de sus siglas en inglés Push-Down Autómata) tiene
una cinta de entrada, un control finito y una pila. La pila es una cadena de símbolos de
algún alfabeto. El símbolo que se encuentra más a la izquierda se considera como que está
en la “cima”. El dispositivo será no determinístico y tendrá un número finito de
alternativas de movimiento en cada situación
3.1.1 ACEPTACIÓN POR PILA VACÍA
Cuando se usa esta noción, los autómatas no requieren un conjunto F de estados finales,
solamente los seis restantes componentes: (Q, q0, , , s0,  ).
Definición: Dado un autómata con pila M = (Q, q0, , , s0,  ), ya sea AFPD o AFPN, el
lenguaje aceptado por M por pila vacía se define como N(M) := {w   : existe un cómputo
(q0,w, s0) (p, , )}.
O sea, una cadena es aceptada por pila vacía si se puede ir, en cero, uno o más pasos,
desde la configuración inicial hasta una configuración en la que la pila esté
completamente desocupada. Nótese que, para ser aceptada, la cadena de entrada w debe
ser procesada completamente.
Para AFPN las nociones de aceptación por pila vacía y por estados finales resultan ser
equivalentes, como se establece en los dos siguientes teoremas. Es importante anotar que
para autómatas deterministas AFPD los dos tipos de aceptación no son equivalentes.
Teorema: Si L = L(M) para algún autómata con pila AFPN M, entonces L = N(M0) para algún
AFPN M0. Es decir, M0 acepta por pila vacía lo que M acepta por estado final.
Teorema: Si L = N(M) para algún autómata con pila AFPN M, entonces L = L(M0) para algún
AFPN M0. Es decir, M0 acepta por estado final lo que M acepta por pila vacía.
3.1.2 ACEPTACIÓN POR ESTADO FINAL
La segunda manera es designando algunos estados, es como estados finales y se define el
lenguaje aceptado como el conjunto de todas las entradas para las cuales alguna selección
de movimiento ocasiona que el autómata de pila tenga acceso a un estado final.
Un autómata de pila M es un sistema (Q, S, G, d, q0, Z0, F), en donde:
Q es un conjunto finito de estados.
S es el alfabeto llamado alfabeto de entrada.
G es el alfabeto, conocido como alfabeto de pila.
q0 ϵ Q, es el estado inicial.
Z0 ϵ G, es el símbolo llamado símbolo inicial.
F ϵ Q es el conjunto de estados finales.
d es una transformación de Q x (S È a {e }) x G en los subconjuntos finitos Q x G *.
3.2 FORMAS NORMALES PARA GRAMÁTICA LIBRES DE CONTEXTO
Para cada GLC existen dos formas de normalización, las cuales son:
Forma Normal de Chomsky
Forma Normal de Greinbach
3.2.1 FORMA NORMAL DE CHOMSKY
Diremos que una gramática incontextual G=(N, T, P, S) que no genera la cadena vacía, está
en FNC cuando todas sus reglas son de la forma:
A → BC con A, B, C ∈ N
A → a, con A, B ∈ N y a ∈T
Teorema. Todo lenguaje incontextual L que no incluye la cadena vacía, es generado por
una gramática en FNC.
Ejemplo
Sea la gramática incontextual G definida por las siguientes reglas:
S → bA | aB
A → bAA | aS | a
B → aBB | bS | b
Tras la aplicación del PASO 1 se obtiene la gramática en FNC intermedia G':
S → CbA | CaB
A → CbAA | CaS | a
B → CaBB | CbS | b
Ca → a
Cb → b
A partir de G', tras el PASO 2 se obtiene la gramática en FNC G'':
S → CbA | CaB
A → CbD1 | CaS | a
D1 → AA
B → CaD2 | CbS | b
D2 → BB
Ca → a
Cb → b
3.2.2 FORMAS NORMALES DE GREINBACH
Una gramática es en forma normal de Greinbach (FNG) si



G (es decir, su ∑N) solamente contiene variables útiles
todas las producciones de G (es decir, en su P) son de la forma X → δY donde δ ∈∑T
y Y ∈∑*n, es decir, todas las reglas tienen como primer símbolo en sus partes
derechas un símbolo terminal que es seguido por una palabra de variables.
(porque así no se podría derivar ε) si $ (es decir, el símbolo inicial de G) no aparece
al lado derecho de una producción, también está permitido que $ → ε ∈ P
Obviamente cualquier gramática en forma normal de Greinbach es una gramática libre de
contexto que se verifica directamente analizando la forma de producciones permitidas.
Una interesante propiedad es: para cualquier lenguaje libre de contexto existe una
gramática en forma normal de Greinbach, que genera el lenguaje.
La comprobación de este hecho detallamos con la siguiente construcción, donde a partir
de una gramática libre de contexto dada elaboramos una nueva gramática en forma
normal de Greinbach.
Sea L un lenguaje libre de contexto y G = (∑N, ∑T, P, $) una gramática que genere L (es decir
L = L(G)).
La construcción sigue 4 pasos (asumimos que ε ∉ L, eso remediamos al final):
 Construimos una gramática equivalente en forma normal de Chomsky
 Sustituimos las reglas recursivas a la izquierda, es decir, reglas de tipo X → XY
 Establecemos un orden en las variables, es decir ∑N = {X1, X2,..., Xn} de tal manera
que todas las reglas serán de tipo Xi → XjY con i < j, Y ∈ ∑N.
 Sustituimos las reglas que no tengan un símbolo terminal como primer símbolo en
su parte derecha.
Las gramáticas después de cada paso llamamos G = G0, G1, G2,..., G4 = GFNG
respectivamente.
Usamos la misma gramática inicial como en el apartado anterior
G0 = ({$, A, B, C, D,E, F}, {a, b, c}, P0, $)
Donde P0 contenga las siguientes producciones:
$ → Bdd | Ca | bc
A → B | Acc | baD
B → Cbd | ϵ | AC
C → bD | aBA
D → CD | a | EF
E → Eb
F→a
3.3.1 OBTENCIÓN DE UN AUTÓMATA DE PILA A PARTIR DE UNA
GRAMÁTICA
Para construir un ADP a partir de una gramática G = (N, S, S, P) se hace lo siguiente:
Se define un ADPND con:
Q = {q1, q2, q3}
 = N    {z}
F = {q3}
s = q1
la regla de transición está compuesta por cuatro tipos de transiciones:
D(q1, e, z) = {(q2, Sz)}, la cual se corresponde con la introducción del símbolo inicial en la
pila.
D(q2, e, A) = {(q2, w) | A  w es una producción de P} para cada no terminal A de N.
D(q2, a, a) = {(q2, )} para cada símbolo terminal a de .
D(q2, e, z) = {(q3, z)}.
Obsérvese que si se tiene que (q2, x, Aa)  (q2, x, ba), es posible A * b. Por tanto si w =
a1a2…an es aceptada por el ADP debemos tener:
(q2, a1a2…an, Sz) * (q2, a1a2…an, a1b1z)
 (q2, a2…an, b1z)
* (q2, an, anz)
 (q2, , z)
 (q3, , z)
y por se obtienen las derivaciones siguientes
S * a1b1 * a1a2b1 * … * a1a2…an = w
Por consiguiente, si w es aceptada por el ADPND, entonces w se deriva de la gramática.
Similarmente, si S * a1a2…an, entonces tendremos una derivación de a1a2…an por la
izquierda y de la forma
S * A1a1  a1a1 * a1A2a2  a1a2a2 * a1a2… an
Por tanto, en un ADPND derivado de la gramática, se puede tener la secuencia
(q2, a1a2…an, Sz) * (q2, a1a2…an, a1a1z)
 (q2, a2…an, a1z)
* (q2, , z)
 (q3, , z)
Es decir el ADPND acepta la cadena w = a1a2…an.
TEOREMA
Si L es un lenguaje independiente del contexto, entonces existirá un ADPND para el cual L
= L(M).
UNIDAD 4.
AUTÓMATAS LINEALMENTE ACOTADOS.
4.1 GRAMÁTICA SENSIBLE AL CONTEXTO
Las gramáticas sensibles al contexto o de tipo 1, son las que generan los lenguajes
sensibles al contexto. Los lenguajes sensibles al contexto son aquellos que pueden ser
reconocidos por los Autómatas Linealmente Acotados ALA.
En forma general toda gramática se define mediante una cuádrupla G=(N, T, P, S), siendo




N es un conjunto finito de símbolos no terminales
T es un conjunto finito de símbolos terminales
P es un conjunto finito de reglas de producción
S Símbolo distinguido o Axioma
4.1.1 FORMA NORMAL DE KURODA
En el mundo de la computación dentro de las formas normales más usadas se encuentra
la de Kuroda y a continuación mostramos con un simple ejemplo cuales son las reglas que
sigue esta forma:
AB → CD or
A → BC or
A → B or
A→α
Donde A, B, C and D son elementos no terminales and α is a un elemento terminal.
Todas las gramáticas en la forma normal de Kuroda generan un lenguaje sensible al
contexto, y por consecuencia, todos los lenguajes sensibles al contexto los cuales no
generen cadenas vacías o nulas pueden y serán generados por una gramática en la forma
normal de Kuroda.
4.2 ESPECIFICACIÓN DE UN AUTÓMATA DE DOBLE PILA.
Se define un autómata de doble pila de la siguiente manera
M = (K, Σ, Γ, Δ, s, F)
K es un conjunto finito de estados,
Σ es el alfabeto (los símbolos de entrada),
Γ es un alfabeto (la entrada de la pila),
s ϵ K es el estado inicial,
F ϵ K es el que da el estado final, y
Δ, Es la relación de transición, y está dada por (K x (Σ U {e}) x Γ* x Γ*) x (K x Γ* x Γ*), donde
el tercer parámetro elimina un elemento a la primera pila, el cuarto parámetro elimina un
elemento a la segunda pila, el quinto parámetro pone un símbolo nuevo a la primera pila,
y el sexto parámetro pone un nuevo elemento a la segunda pila.
4.3 ESPECIFICACIÓN DE UN AUTÓMATA LINEALMENTE ACOTADO
Un autómata lineal acotado es una máquina de Turing no determinística que satisface las
siguientes dos condiciones:
El alfabeto de entrada de cinta incluye dos símbolos: < y >, los señaladores de extremo
izquierdo y derecho, respectivamente.
El LBA no tiene movimientos a la izquierda de < o a la derecha de >, ni puede sustituir los
símbolos < y >.
Un autómata linealmente acotado como una máquina de Turing no
determinista M=(Q, Σ , Γ , δ , q0, B, F), en la cual el alfabeto de cinta contenga dos símbolos
especiales < y >. M comienza con la configuración (q1, ≤ w>) (donde q1 es el estado inicial
de M). No se permite que M reemplace los símbolos < o >, ni que mueva su cabeza a la
izquierda de < o a la derecha de >, con lo cual, el LBA tiene que realizar su computación en
las únicas celdas de la cinta que estaban originalmente ocupadas por la cadena de
entrada.
Por ejemplo, consideremos el LBA definido por:
Q = {q1, q2}, Σ = {a, b}, Γ = {a, b, <, >}, F = {q2}, q0 =q1 y δ dado por:
δ (q1, <) = (q1, <, R)
δ (q1, a) = (q1, b, R)
δ (q1, b) = (q1, a, R)
δ (q1, >) = (q1, >, S), donde S significa "permanecer", es decir no mover la cabeza de
lectura/escritura. Este LBA complementa sus cadenas de entrada convirtiendo las a’s en
b’s y viceversa. Obsérvese que, aunque puede reconocer y trabajar sobre los símbolos < y
>, no puede reemplazarlos o moverse más allá de ellos.
UNIDAD 5
MAQUINAS DE TURING
5.1 GRAMÁTICAS DE ESTRUCTURA DE FRASE.
Una gramática con estructura de frase ´ G = (V, T, S, P) consiste de:




Un vocabulario V.
Un subconjunto T de V que son elementos terminales.
Un símbolo inicial S de V − T.
Un conjunto de producciones P (reglas que especifican que podemos reemplazar
una cadena por otra).
El conjunto V − T es denotado por N. los elementos de N son llamados elementos no
terminales.
Cada producción en ´ P debe contener al menos un símbolo no terminal en su lado
izquierdo.
5.1.1 FORMA NORMAL DE UNA GRAMÁTICA TIPO 0.
También llamadas de estructura de frase.
Aquellas que no imponen ninguna restricción a sus producciones.
5.2 ESPECIFICACIONES DE LA MÁQUINA DE TURING.
Es un modelo computacional que realiza una lectura/escritura de manera automática
sobre una entrada llamada cinta, generando una salida en esta misma.
5.2.1 DEFINICIÓN Y NOTACIÓN.
Una máquina de Turing es una séptupla M= (Γ, Σ, •, Q, q0, f, F) donde:
1.
2.
3.
4.
5.
6.
7.
Γ es el alfabeto de símbolos de la cinta
Σ ⊂ Γ es el alfabeto de símbolos de entrada
∈ Γ es el símbolo blanco que no pertenece a Σ
Q es un conjunto finito de estados
q0 ∈ Q es el estado inicial
F ⊆ Q es el conjunto de estados finales
f es una función de transición parcial
f: Q×Γ → Q×Γ×{L,R}
Dispositivo capaz de adoptar un estado determinado (de Q) y que está conectado a una
cabeza lectura/escritura que puede leer y escribir símbolos en una cinta infinita. En cada
acción o movimiento:
1. La máquina lee el símbolo de la cinta en la posición donde se encuentra la cabeza
de lectura/escritura
2. En función del símbolo leído y del estado actual la máquina:
a) pasa a un nuevo estado (de forma determinista)
b) imprime un símbolo en la cinta en la misma posición donde acaba de leer el
símbolo actual
c) mueve la cabeza de lectura/escritura una posición a la izquierda (L), o a la
derecha (R).
Inicialmente, la cinta (infinita a ambos lados) contiene un número finito de símbolos de Σ,
precedidos y seguidos por un número infinito de blancos. La cinta se comporta como un
dispositivo de entrada/salida.
La máquina de Turing posee una cinta dividida en celdas, cada celda es capaz de
almacenar un símbolo. Además posee una cabeza lectora/escritora que lee y escribe un
símbolo en la cinta. Inicialmente la cinta contiene b en todas sus celdas. La función de
q, σ) en ternas de la forma (p, t, X), donde p es el siguiente
estado, t es el símbolo escrito en la cinta y X es el movimiento de la cabeza
lectora/escritora, que puede ser L o R.
5.2.2 CONSTRUCCIÓN DE UN MÁQUINA DE TURING.
La construcción de maquinas de Turing se lleva a cabo mediante los diagramas de
transición y combinarlos de manera parecida a lo que se realiza en la formación de la
unión y concatenación de los autómatas finitos.
Pasos para la construcción de una máquina de Turing
a) Elimine las características de inicio de los estados iniciales de las maquinas, excepto la
de aquel donde iniciara la maquina compuesta.
b) Elimine las características de detención de los estados de parada de todas la maquinas
e introduzca un nuevo estado de parada que nos se encuentre en ninguno de los
diagramas que se combinan.
c) Para cada uno de los antiguos estados de parada p y cada x en y.
5.2.3 MÁQUINA DE TURING
La máquina de Turing es un modelo computacional introducido por Alan Turing en el
trabajo. Turing construyó un modelo formal de computador, la máquina de Turing, y
demostró que existían problemas que una máquina no podía resolver. La máquina de
Turing es un modelo matemático abstracto que formaliza el concepto de algoritmo. Una
máquina de Turing con una sola cinta puede ser definida como una 6-tupla, donde Q es un
conjunto finito de estados, es un conjunto finito de símbolos de cinta, el alfabeto de cinta
Existen en la literatura un abundante número de definiciones alternativas, pero todas ellas
tienen el mismo poder computacional, por ejemplo se puede añadir el símbolo como
símbolo de “no movimiento” en un paso de cómputo.
¿Como funciona una maquina de turing?
Una máquina de Turing es un dispositivo que transforma un INPUT en un OUTPUT
después de algunos pasos. Tanto el INPUT como el OUPUT constan de números en código
binario (ceros y unos). En su versión original la máquina de Turing consiste en una cinta
infinitamente larga con unos y ceros que pasa a través de una caja. La caja es tan fina que
solo el trozo de cinta que ocupa un bit (0 ó 1) está en su interior. La máquina tiene una
serie de estados internos finitos que también se pueden numerar en binario.
Para llevar a cabo algún algoritmo, la máquina se inicializa en algún estado interno
arbitrario. A continuación, se pone en marcha y la máquina lee el bit que se encuentra en
ese momento en su interior y ejecuta alguna operación con ese bit (lo cambia o no,
dependiendo de su estado interno). Después se mueve hacia la derecha o hacia la
izquierda, y vuelve a procesar el siguiente bit de la misma manera. Al final se para,
dejando el resultado al lado izquierdo por ejemplo.
Una instrucción típica podría ser: 0111011i
La traducción es como sigue: si la máquina se encuentra en el estado interno 0 y lee 1 en
la cinta, entonces pasará al estado interno 1101 (13), escribirá 1 y se moverá hacia la
izquierda un paso (la cinta se moverá hacia la derecha).
A continuación es conveniente inventar una notación para la secuencia del INPUT. Esta
notación se llama notación binaria expandida. Consiste en cambiar la secuencia original
binaria por otra construida de la siguiente forma: el 0 se cambia por 0 y el 1 por 10 y se
ponen un cero a la izquierda y/o a la derecha del resultado si empieza o acaba en 1
respectivamente. Así por ejemplo, el número 13 que en binario es 1101 es en binario
expandido 1010010 con un cero delante por esta última regla 01010010. Para volver al
original hay que contraer el binario expandido con la siguiente regla:
Empezamos a leer por la izquierda el binario expandido. Cuando encontremos un 0
tomamos nota de cuántos 1 hay hasta llegar al siguiente 0 y lo escribimos. Si encontramos
que hay dos 0 seguidos, apuntaríamos un 0 porque no habría ningún 1.Veamos con el 13
cómo se haría. El primer 0 se encuentra en la primera posición y el siguiente 0 está en la
posición 3. Entre los dos solo hay un 1. Lo anotamos. Seguidamente hay un 1, y después
un 0, entonces apuntamos 1 porque hay un 1 entre medias de ellos. Esto es lo que se hace
sucesivamente y encontramos: 1101 que es el número original.
Descripción La máquina de Turing consta de un cabezal lector/escritor y una cinta infinita
en la que el cabezal lee el contenido, borra el contenido anterior y escribe un nuevo valor.
Las operaciones que se pueden realizar en esta máquina se limitan a:
Avanzar el cabezal lector/escritor para la derecha; • avanzar el cabezal lector/escritor para
la izquierda. El cómputo es determinado a partir de una tabla de estados de la forma:
(Estado, valor)-→(\nuevo estado, \nuevo valor, dirección)
Definición
Una máquina de Turing con una sola cinta puede ser definida como una 6-tupla
M=(Q,T,s,b,F,S) , donde:
•
•
•
•
•
•
Q es un conjunto finito de estados.
T es un conjunto finito de símbolos de cinta, el alfabeto de cinta.
s E Q es el estado inicial.
b E L es un símbolo denominado blanco, y es el único símbolo que se puede repetir
un número infinito de veces.
F _C Q es el conjunto de estados finales de aceptación.
S : Q x L → Q x L x {L,R} es una función parcial denominada función de transición,
donde L es un movimiento a la izquierda y R es el movimiento a la derecha.
Existen en la literatura un abundante número de definiciones alternativas, pero todas ellas
tienen el mismo poder computacional, por ejemplo se puede añadir el símbolo S como
símbolo de “no movimiento” en un paso de cómputo o el símbolo Σ para indicar el
alfabeto de entrada.
5.2.4 PROBLEMAS DE PARO
El problema de la parada o problema de la detención para Máquinas de Turing consiste en
lo siguiente: dada una Máquina de Turing M y una palabra w, determinar si M terminará
en un número finito de pasos cuando es ejecutada usando w como dato de entrada,
demostró que el problema de la parada de la Máquina de Turing es indecidible, en el
sentido de que ninguna máquina de Turing lo puede resolver.
5.3 DECIDIBILIDAD
Un sistema deductivo completo puede demostrar cualquier conclusión que esté implicada
por las premisas, es decir, tal que 0 C. Pero ¿qué ocurre si 0 / C?
En la teoría de la computación se define un problema de decisión como aquél que tiene
dos respuestas posibles: «sí» o «no». Cualquier problema puede reducirse a un conjunto
de problemas de decisión. Se dice que un problema de decisión es decidirle si existe un
algoritmo (es decir, un procedimiento que acabe en un tiempo finito) que lo resuelva.
Un sistema deductivo es decidible si ante la consulta ¿ 0 C? termina en un tiempo finito
respondiendo «sí» o «no».
Pero las cuestiones de compleción y decidibilidad se pueden plantear en términos más
generales: dados 0 y C,
•
•
el problema de la compleción es: si 0 C, ¿existe algún algoritmo que demuestre
C?;
el problema de la decidibilidad es: ¿existe algún algoritmo que responda «sí» en el
caso de que 0 C y «no» en el caso de que 0 / C?
En lógica de proposiciones ambas cuestiones tienen una respuesta positiva (algoritmos
obvios son los basados en las tablas de verdad).
5.3.1 LA TESIS DE CHURCH-TURING
Tesis Church-Turing
El nombre algoritmo, y los adjetivos computable, mecánico y recursivo se utilizan todos
para denotar el carácter propio de las operaciones que puede realizar una máquina de
Turing. Definamos lo que es un procedimiento mecánico M:
1.- M se expresa mediante un número finito de instrucciones, donde cada instrucción se
construye a partir de un número finito de símbolos.
2.- M producirá, si se ejecuta sin error, el resultado deseado en un número finito de pasos.
3.- Un ser humano puede ejecutar M (en la práctica o en teoría) sin necesidad de utilizar
ninguna máquina o artilugio, sólo provisto de lápiz y papel.
4.- El humano que ejecutase el procedimiento M simplemente tiene que seguir las
instrucciones y los pasos que definen a M, no necesita de intuiciones o comprensión de lo
que se está haciendo.
Para cualquier procedimiento mecánico se puede encontrar una máquina de Turing que lo
represente y ejecute. En este sentido nos preguntamos si el concepto de máquina de
Turing incorpora todo procedimiento M mecánico.
Casi paralelamente al trabajo de Turing, sólo un poco antes Alonzo Church descubrió el
cálculo landa para abordar el mismo problema propuesto por Hilbert en 1900. Un poco
más tarde estos mismos autores demostrarán que el cálculo landa y la máquina de Turing
son equivalentes. Esto vino a conocerse como la tesis de Church-Turing y viene a decir,
que la máquina de Turing (y el cálculo landa) definen lo que se entiende por algoritmo o
proceso mecánico. Esta tesis no era tan evidente hace 70 años, como lo puede ser ahora
gracias a la capacidad computacional de los ordenadores de hoy día.
Turing demostró que hay cierta clase de problemas que no tienen solución algorítmica,
entre ellos el más famoso es “El problema de la parada”. Turing muestra que para cierta
clase de problemas la máquina que lleva su nombre no para; es decir, no decide sobre los
problemas, es lo que llamamos la cuestión de la indecidibilidad. Una demostración
simplificada y divulgativa del problema de la parada. Con la indecidibilildad el problema
propuesto por Hilbert queda resuelto con una respuesta negativa: No puede haber un
algoritmo general que resuelva todo problema matemático. Hay que tener cuidado de no
extender las conclusiones más allá de lo que permite el mismo problema resuelto. Los
algoritmos no dicen, ni pueden decir por sí mismos, nada sobre las verdades de las
sentencias o proposiciones matemáticas. Es indiscutible que la validez de un algoritmo
debe establecerse por medios externos al propio algoritmo.
Menos aún se pueden sacar conclusiones que impliquen a sistemas físicos como el
cerebro. De momento solo se puede decir que existen problemas para los que no existe
una máquina de Turing mientras esos mismos problemas sí se intuyen por la mente
humana. O de otra forma hay procesos que puede realizar la mente humana que no son
algorítmicos en el sentido de existencia de una máquina de Turing.
5.4 COMPUTABILIDAD
Cosas qué pueden ser computadas por un ser humano, que trabajo era el desarrollar
máquinas que computaran, y que pudieran automatizar el tedioso y lleno de errores
trabajo de la computación humana. Es la parte de la computación que estudia los
problemas de decisión que pueden ser resueltos con un algoritmo o equivalentemente
con una máquina de Turing. La teoría de la computabilidad se interesa a cuatro preguntas:
•
•
•
•
¿Qué problemas puede resolver una máquina de Turing?
¿Qué otros formalismos equivalen a las máquinas de Turing?
¿Qué problemas requieren máquinas más poderosas?
¿Qué problemas requieren máquinas menos poderosas?
Los problemas se clasifican en esta teoría de acuerdo a su grado de imposibilidad:
 Los computables son aquellos para los cuales sí existe un algoritmo que siempre
los resuelve cuando hay una solución y además es capaz de distinguir los casos que
no la tienen. También se les conoce como decidible, resolubles o recursivos.
 Los semicomputables son aquellos para los cuales hay un algoritmo que es capaz
encontrar una solución si es que existe, pero ningún algoritmo que determine
cuando la solución no existe (en cuyo caso el algoritmo para encontrar la solución
entraría a un bucle infinito). El ejemplo clásico por excelencia es el problema de la
parada. A estos problemas también se les conoce como listables, recursivamente
enumerables o reconocibles, porque si se enlistan todos los casos posibles del
problema, es posible reconocer a aquellos que sí tienen solución.
 Los incomputables son aquellos para los cuales no hay ningún algoritmo que los
pueda resolver, no importando que tengan o no solución. El ejemplo clásico por
excelencia es el problema de la implicación lógica, que consiste en determinar
cuándo una proposición lógica es un teorema; para este problema no hay ningún
algoritmo que en todos los casos pueda distinguir si una proposición o su negación
es un teorema.
La teoría de la complejidad computacional: es la rama de la teoría de la computación que
estudia, de manera teórica, la complejidad inherente a la resolución de un problema
computable. Los recursos comúnmente estudiados son el tiempo (mediante una
aproximación al número y tipo de pasos de ejecución de un algoritmo para resolver un
problema) y el espacio (mediante una aproximación a la cantidad de memoria utilizada
para resolver un problema). Se pueden estudiar igualmente otros parámetros, tales como
el número de procesadores necesarios para resolver el problema en paralelo. La teoría de
la complejidad difiere de la teoría de la computabilidad en que ésta se ocupa de la
factibilidad de expresar problemas como algoritmos efectivos sin tomar en cuenta los
recursos necesarios para ello.
Los problemas que tienen una solución con orden de complejidad lineal son los problemas
que se resuelven en un tiempo que se relaciona linealmente con su tamaño.
Hoy en día las computadoras resuelven problemas mediante algoritmos que tienen como
máximo una complejidad o coste computacional polinómico, es decir, la relación entre el
tamaño del problema y su tiempo de ejecución es polinómica. Éstos son problemas
agrupados en la clase P. Los problemas que no pueden ser resueltos por nuestras
computadoras (las cuales son Máquinas Determinísticas), que en general poseen costes
factorial o combinatorio pero que podrían ser procesados por una máquina nodeterminista, están agrupados en la clase NP. Estos problemas no tienen una solución
práctica, es decir, una máquina determinística (como una computadora actual) no puede
resolverlos en un tiempo razonable.
5.5 OTROS MODELOS DE MÁQUINA DE TURING.
Maquina con cinta infinita en ambos sentidos
Un lenguaje L es reconocido por una máquina de Turing con cinta infinita si y solo si L es
reconocido por una máquina de Turing con cinta semiinfinita.
Maquina Multicinta
• La máquina dispone de tantos cabezales independientes como cintas
• Una cinta (la primera) contiene la entrada. Las demás están en blanco
• Cada movimiento viene determinado por el estado y por los símbolos leídos por los
distintos cabezales:
- Cambiando de estado
- Sustituyendo los símbolos en las cintas accedidas
- Desplazando (L; R) o no (S) la posición del cabezal de cada cinta (nueva
opción)
Un lenguaje L es reconocido por una máquina de Turing multicinta si y solo si L es
reconocido por una máquina de Turing estándar.
Maquina no determinista
Máquina de Turing con una única cinta y control finito único
Un lenguaje L es reconocido por una máquina de Turing no determinista si y solo si L es
reconocido por una máquina de Turing estándar.
Maquina multicabezal
Un único movimiento permite desplazar independientemente las n cabezas de la máquina
sobre la única cinta.
Maquina multidimensional
Máquina con una matriz de celdas k dimensional infinita como cinta.
En función del estado y el símbolo analizado, la máquina cambia de estado y desplaza el
cabezal de lectura en una de la 2k direcciones.
5.5.1 MAQUINA DE TURING MULTICINTA.
En este modelo, la máquina de Turing tiene k cintas, infinitas en ambos sentidos, y k
cabezales de L/E. La función de transición para maquinas de Turing con n cintas:
δ : Q × 𝛤 𝑛 → Q × 𝛤 𝑛 × {𝐷, 𝑁, 𝐼, }𝑛
Figura 5.1 Diagrama de maquina multicinta
Solo hay una entrada de información, en la primera cinta. Los tres pasos asociados a cada
transición son ahora:
- transición de estado,
- escribir un símbolo en cada una de las celdas sobre las que están los cabezales de
L/E,
- el movimiento de cada cabezal es independiente y será R, L ´o NADA (Z).
Demostración:(Idea Intuitiva)
1. Si L es reconocido por una Máquina de Turing de una sola cinta, L es reconocido por una
Máquina de Turing Multicinta. Basta con hacer funcionar una sola cinta de la Máquina de
Turing multicinta, la que se utiliza para realizar la entrada de información.
2. Si L es reconocido por una Maquina de Turing Multicinta, L es reconocido por una
Maquina de Turing de una sola cinta. Gracias al teorema 7.1 el hecho de que las cintas
sean o no infinitas en ambos sentidos es indiferente. La idea básica, entonces, será pasar
de un Maquina de Turing multicinta con k cintas a una Maquina de Turing de una cinta
pero con 2k sectores. Así, por cada cinta de la Máquina de Turing multicinta se tendrá en
un sector, la información, y en el otro, una marca que indique la posición del cabezal de
L/E de la maquina original.
Figura 5.2 Diagrama de posición del cabezal en la maquina multicinta
La maquinaM2 simula el funcionamiento de la m´aquinaM1 por barridos. Se necesitara un
contador de valor inicial k y, suponiendo que el cabezal de M2 está ajustado sobre la
marca situada más a la izquierda, se comienza un movimiento hacia la derecha.
Cada vez que se detecte una marca de cabezal de L/E, se decrementa el contador y se
almacena el símbolo asociado en el control finito. El barrido acaba cuando el contador
valga 0. Habrá k símbolos almacenados en el CF de M2. Se realizaría la misma transición
que se realizaría en M1. Para poder llevar a cabo los movimientos, habrá que realizar un
nuevo barrido hacia la izquierda, trasladando las marcas hacia donde haya que
trasladarlas (L, R ´o Z) y sobre escribiendo los símbolos que haya que reescribir; una vez
completado el barrido, se cambia de estado.
Nótese que un movimiento de M1 equivale a varios movimientos de M2. Este modelo
tiene el mismo poder computacional, pero suele ser más eficiente que el modelo con una
sola cinta. Ejemplo:
Si se calcula el número de movimientos necesarios para reconocer una cadena del
lenguaje
L = {w𝑤 −1 | w ϵ 𝛴 ∗ }
Con respecto a su longitud, en una máquina con 2 cintas el resultado sería lineal y en una
maquina con una cinta, cuadrático.
Figura 5.3 Maquina lineal
Figura 5.4 Maquina cuadrática
Maquina de Turing con Múltiples Cabezales.
Tiene k cabezales de L/E, como la multicinta, pero con una sola cinta. Los cabezales
operan todos de forma independiente. Como en las Maquinas de Turing multicinta, se
admiten movimientos L, R ´o Z.
Figura 5.5 Maquina múltiples cabezales
Demostración:(Idea Intuitiva)
1. Si L es reconocido por una Maquina de Turing unicabezal, L es reconocido por una
Maquina de Turing multicabezal. Basta con trabajar con un solo cabezal en la de
múltiples cabezales.
2. Si L es reconocido por una Maquina de Turing multicabezal, L es reconocido por
una Maquina de Turing unicabezal. La simulación es similar a la realizada para las
Maquinas de Turing multicinta: se utiliza una cinta con k+1 sectores, k para marcar
las posiciones de los distintos cabezales y uno para la información de la cinta.
Maquina de Turing Offline.
Es un caso particular de las Maquinas de Turing multicinta: tienen una cinta especial de
solo lectura en la que el cabezal, que solo puede moverse hacia la derecha, no puede
moverse de la zona delimitada por un par de símbolos especiales.
Figura 5.6 Maquina Offline
Para simularla, no hace falta más que construir una Maquina de Turing multicinta con una
cinta especial sobre la que se copia la información de entrada. El cabezal de esa cinta solo
lee (sobre escribe siempre el mismo símbolo que lee) y para al encontrar el símbolo $. A
partir de la Máquina de Turing multicinta se puede aplicar el teorema 7.2 para demostrar
que su poder computacional es el mismo que el de una Máquina de Turing estándar.
Maquina de Turing No Determinista.
Es una Maquina de Turing con cinta limitada a la izquierda, que se caracteriza por tener
asociada más de una transición desde algún estado con el mismo símbolo,
f(qi, a) = {(qi, b, L), (qi, a, R), (qj, a, R), (qj, b, R)}
f(qi, b) = {(qi, b, R)}
f(qj, a) = {(qj, b, L), (qj, a, R)}
...
El número de transiciones asociado a cada par estado/símbolo siempre es finito.
Demostración:(Idea Intuitiva)
1. Si L es reconocido por una Máquina de Turing Determinista, L es reconocido por una
Maquina de Turing No Determinista. Las Maquinas de Turing deterministas son Maquinas
de Turing no deterministas en las que solo hay una transición por cada par
estado/símbolo.
2. Si L es reconocido por una Maquina de Turing No Determinista, L es reconocido por una
Maquina de Turing Determinista. La demostración consiste en determinar como una
Maquina de Turing determinista puede simular el comportamiento de una Maquina de
Turing no determinista. Para ello, en primer lugar, y ya que el numero de transiciones
asociadas a cada par estado/símbolo es finito, se determina r, el numero máximo de
opciones asociadas a las transiciones (en el ejemplo anterior, r=4). Además, se necesita
disponer de una Maquina de Turing determinista con 3 cintas, limitadas a la izquierda.
La primera cinta, recoge la información de entrada, la cadena a reconocer. La segunda
cinta sirve para llevar la cuenta de que opciones se van tomando. Para ello, sobre esa
cinta hay que ir generando cadenas del alfabeto {1, 2, .., r} por orden numérico:
- primero, todas las cadenas de longitud 1,
1, 2, 3, ..., r
- segundo, todas las cadenas de longitud 2,
11, 12, 13, ..., 1r, 21, 22, 23, ..., 2r, ..., r1, r2, r3, ..., rr
- tercero, todas las cadenas de longitud 3,
111, 112, 113, ..., 11r, 121, 122, 123 ..., 12r, ..., 1r1, 1r2, ..., 1rr, ..., rr1, rr2,
rr3,
..., rrr
- y, en general, en el paso i-´esimo se generarían todas las cadenas de longitud i,
11..1, 11..2, ..., 11..r, 11..21, 11..22, ..., 11..r1, .. etc.
Sobre la tercera cinta se desarrolla la simulación propiamente dicha. Cada vez que se
genera una secuencia en la cinta 2, se copia la cadena de entrada en la cinta 3.
La secuencia de la cinta 2 indica que transición concreta se elige cada vez. Si, por ejemplo,
en la cinta 2 está la secuencia 11231.. Quiere decir que la primera vez que aplique la
función de transición se aplica la primera transición de entre las posibles. La segunda
también se aplica la primera; la tercera, se debe aplicar la segunda, la cuarta se debe
aplicar la tercera, la quinta se debe aplicar la primera2. . .
Con este “chivato”, la máquina operara sobre la cinta 3. Cada vez que se prueba una
Secuencia y no se llega a un estado de aceptación, se genera la siguiente y se vuelve a
comenzar la simulación. Cuando se encuentra una secuencia que permite aceptar la
cadena, la máquina para y acepta.
Si la cadena es aceptada por la Máquina de Turing no determinista, es porque existe una
secuencia de aplicaciones de la función de transición que conducen a un estado final.
Como en la cinta 2 se van generando todas las posibles secuencias, esta nueva Máquina
de Turing determinista alguna vez tendrá que encontrar la correcta y parar aceptando.
Máquinas de Turing Restringidas.
El objetivo de las subsecciones anteriores era poner de relieve que diferentes mejoras
físicas sobre el modelo de Máquina de Turing, no se traducen en un mayor poder
computacional, sino en una mayor eficiencia en el calculo o en una mayor simplicidad de
diseño.
De la misma forma que podría creerse que introduciendo mejoras físicas en el modelo
tendría que aumentar su poder computacional, puede parecer que si se considera un
modelo más restringido, ´este debe disminuir. Sin embargo, es posible establecer
restricciones sobre el número de estados o el número de símbolos del alfabeto de la
Máquina de Turing, sin que esto ocurra.
En concreto, una Máquina de Turing sin restricciones sobre el alfabeto, con una cinta y
sólo tres estados puede simular el comportamiento de cualquier Máquina de Turing. Si lo
que se restringe es el número de símbolos, se puede probar el siguiente resultado:
5.6.1 FUNCIONES RECURSIVAS PRIMITIVAS
La recursión primitiva permite definir una clase de funciones que forman un importante
paso en la formalización de la noción de computabilidad. Se definen usando como
principales operaciones la recursión y composición de funciones y forman un subconjunto
estricto de las funciones recursivas, que son precisamente las funciones computables. Las
funciones recursivas se definen agregándole a la recursión primitiva el operador de
búsqueda no acotada que permite definir funciones parciales.
Muchas de las funciones normalmente estudiadas en teoría de los números, y las
aproximaciones a las funciones de valor real utilizan la recursión primitiva. Como ejemplo
de ellas se tiene la suma, la división, el factorial, el enésimo primo, etc. De hecho, no es
fácil definir una función que sea recursiva pero que no se pueda definir con recursión
primitiva.
Para definir las funciones recursivas primitivas, se utiliza un conjunto de funciones que por
definición son recursivas, este conjunto inicial de funciones se denomina base de la
recursión. Al aplicar un conjunto de reglas sobre las funciones recursivas primitivas, se
obtienen nuevas funciones recursivas.
La base de la recursión está formada por las funciones siguientes funciones:
- Función "Nula" o "Cero"
- Función "Sucesor"
- Proyección i-ésima de orden n
Las reglas que se aplican sobre estas funciones son las siguientes:
-
Composición
Recursión primitiva
Base de recursión
Como se ha dicho anteriormente, hay tres funciones que forman la base de recursión. A
continuación se explica cada una de ellas.
•
Función "Nula" o "Cero" N(x) = 0
La función que hace corresponder a cualquier número natural el número 0 es una
función recursiva primitiva.

Función sucesor S(x) = x'
Esta función hace corresponder a cada numero natural su sucesor, que denotamos
por x’. Produce el siguiente número entero según los axiomas de Peano. Es una
función recursiva primitiva.

Función proyección 𝐼𝑖𝑛 (𝑥1 , 𝑥2 , … , 𝑥𝑛 ) = 𝑥𝑖
Esta función es una función recursiva primitiva. A cada n-tupla se le hace
corresponder su i-ésima componente, es decir, produce como resultado el
argumento de la posición i.
Reglas
El conjunto de las funciones recursivas primitivas se define según las bases de recursión
anteriores y las siguientes reglas:

Regla de composición
Dadas las funciones gi(x1,x2,...,xn),(i = 1,2,...m) y la función f que depende de las m
funciones anteriores, es decir f = (g1,g2,...,gm), entonces decimos que h(x1,x2,...,xn)
es la función compuesta de las gi mediante f si está definida de la siguiente forma:
h(x1,x2,...,xn) = f(g1(x1,x2,...,xn),g2(x1,x2,...,xn),...,gm(x1,x2,...,xn))

Regla de recursión primitiva
Vamos a diferenciar las reglas de recursión primitivas con parámetros y sin
parámetros.
Regla de recursión primitiva con parámetros
Dadas dos funciones recursivas conocidas: f(x1,x2,...,xn), g(y,x1,x2,...,xn,z),
Que dependen de los parámetros x1,x2,...,xn , se define la función
h(y,x1,x2,...,xn), mediante el siguiente esquema de recursión:
h(0,x1,x2,...,xn) = f(x1,x2,...,xn)
h(y',x1,x2,...,xn) = g(y,x1,x2,...,xn,h(y,x1,x2,...,xn))
Regla de recursión primitiva sin parámetros
Es un caso particular del anterior en el que no aparecerán los parámetros y el
esquema de recursión sería:
h(0) = k
h(y') = g(y,h(y))
donde g(y,z) es una función recursiva conocida y k es una constante (un numero
natural dado).
Las funciones definidas de esta manera son construidas a partir de un conjunto base y
mediante procedimientos de cálculo sencillos y pasos sucesivos; por lo tanto, se pueden
calcular efectivamente. Esta clase de funciones es la misma que la que se define utilizando
las Máquinas de Turing.
La función de Ackermann
La función de Ackermann es una función recursiva que toma dos números naturales como
argumentos y devuelve un único número natural. Como norma general se define como
sigue:
A(m, n) =
n+1,
si m = 0;
A(m-1, 1),
si m > 0 y n= 0;
A(m-1, A(m, n – 1)),
si m > 0 y n > 0
Propiedades




Sea k ϵ N, fk ϵ FRP
Sea a > b, fk(a) > fk(b)
Sea x, k ϵ N, fk(x) > x
Sea k ϵ N, fk+1(x) > fk(x)
Además la función de Ackerman (ACK(x) = fx(x)) no es FRP (función recursiva primitiva). La
demostración de este teorema se lleva a cabo por reducción al absurdo y utilizando el
lema de que toda función recursiva primitiva está mayorada por una función Ackermann.
Comenzamos suponiendo que ACK(x) ϵ FRP, por tanto ACK(x) + 1 ϵ FRP
Usando el lema de la mayoración, debe existir un k tal que ACK(x) + 1 ≤ fk(x)
Pero entonces, como esto vale para todo x, también valdrá para x=k
ACK(k) + 1 ≤ fk(k), usando la definición, llegamos a que: ACK(k) + 1 ≤ ACK(k)
Lo cual es absurdo.
Esta función crece extremadamente rápido: el valor A(4,2) ya tiene 19.729 dígitos. Este
crecimiento desmesurado se puede utilizar para demostrar que la función computable f(n)
= A(n, n) crece más rápido que cualquier función recursiva primitiva, y por ello no es
recursiva primitiva.
Algunos Ejemplos. Las siguientes funciones son (primitivas) recursivas:
 La función identidad /N : N → N
 Las funciones constantes : 𝐶𝑎𝑛 ∶ 𝑁 𝑛 → 𝑁, 𝐶𝑎𝑛 (𝑥⃗) = 𝑎
 La función predecesor :pr : N → N
Pr(x)=

o
x-1
La función diferencia reducida : −̇ : 𝑁 2 → N
si x = 0
si x > 0
x –̇ y =

0
x-1
si x = 0
si x > 0
La función signo : sg : N → N
Sg(x) =
0
1
si x = 0
e.c.o.c.
5.6.2 FUNCIONES RECURSIVAS PARCIALES.
Fueron definidas por Herbrand y Gödel (1932-1933) su construcción a partir de: funciones
básicas y operaciones:
• Composición
• Recursión
• Minimización
Coinciden con las funciones while-computables y con las funciones Turing-computables,
subconjunto importante: funciones primitivas recursivas.
Definición de la suma:
– suma(0,x)=x
– suma(n+1, x)=succ(suma(n,x))
Definición de la multiplicación:
–mult(0,x)=0
– mult(n+1,x)=suma(mult(n,x),x)
Definición de la potencia
– pot(x,0)=1
– pot(x,n+1)=mult(pot(x,n),x)
5.6.3 MÁQUINA DE ACCESO ALEATORIO.
La Máquina de Acceso Aleatorio (RAM) también conocida como RAM (Random Access
Machine) es la consecuencia de dos máquinas de estados finitos es decir está basada
como si usáramos dos máquinas estados finitos. Esta máquina está formada por:

Unidad Central de Procesamiento (CPU) la cual se encarga de las funciones y
procesos de la máquina y contiene a la Unidad Aritmética Lógica (ALU).

Memoria de Acceso Aleatorio (RAM) que tiene como función almacenar y guardar
los resultados de las operaciones realizadas con la máquina.
La máquina de acceso aleatorio cuenta con los siguientes funciones o comandos Read
(lectura) Write (Escritura) y NO-OP (Sin operar o rechazo). Además también cuenta con
ciertas instrucciones: LOAD, STORE, ADD, SUB, MULT, DIV, READ, WRITE, JUMP, JNZ, JZ y
HALT, algunas igualmente parecidas a las instrucciones que se utilizan hoy en día en el
lenguaje ensamblador.
Figura 5.7
Una maquina de Turing de acceso aleatorio tiene un número fijo de registros y una cinta
limitada en un sentido
Figura 5.8
Cada registro y casa celda de la cinta es capaz de contener un numero natural. La maquina
actúa sobre las celdas de su cinta y sus registros siguiendo las instrucciones de un
programa inalterable (este programa es análogo a la función de transición del modelo
convencional).
La Máquina de Turing formada por una cinta no acotada formada por casillas que contaba
con un mecanismo de control, que pasaba por un conjunto de estados que empezaban a
leerse a través de una cabeza de entrada con la que se examinaba casilla por casilla la
cinta hasta terminar de leer es decir hasta obtener elementos nulos en la cinta.
5.6.4 AUTÓMATAS CELULARES.
Este tipo de autómatas proviene del estudio de la estructura de las neuronas humanas y
sus conexiones, los autómatas de células están constituidos por un conjunto de células
interconectadas entre sí. Las células presentan las siguientes propiedades:
 Pueden estar en dos estados: activo (1) o inactivo (0).
 Pueden recibir dos tipos de señales a partir de otras células o como entrada del
autómata: positivas (1) o negativas (0).
 Pueden tener una o varias entradas (ei) de dos tipos: excitadoras () o inhibidoras
(--o)
 Tienen una salida o respuesta, r (t)
 Su salida puede ir a una o varias células (incluida ella misma)
 Su estado en el tiempo t+1 depende solo de la entrada que reciban en el tiempo t,
pero no del estado en el tiempo t.
 Disponen de una función de transición, g, que permite transitar entre estados a
partir de las entradas a una célula
 Tiene un umbral u ϵ Z, que, permite definir las diferentes funciones de transición.
Representación.
Como se muestra en la figura donde: e(t) = [e1(t), e2(t), …, en(t)] es el ventor de las
entradas de la célula, y r (t) es la salida en el instante t. Al estado en el que se encuentra
en un determinado instante, se le denominará q (t).
𝑒1
𝑒2
r
u
c
…
𝑒𝑛
Figura 5.9 Diagrama de una Célula
Se cumple, además:
1. r(t) = q(t), con lo que la salida en una determinado instante t depende solo del
estado en ese instante.
2. q(t+1) = g(e(t)), con lo que el estado en el instante t+1 solo es función de la entrada
en el instante t y es calculado por la función de transición g a partir de la entrada
en el instante previo t; y
1
2
q(t+1) g(e(t)), con lo que la salida en el instante t+1 solo depende del
=
=
estado al que transicione la célula a partir de las entradas en el instante previo t.
3. r(t+1)
De acuerdo a todo esto, su comportamiento es análogo al de una maquina secuencial de
Moore. Variando la función de transición g, se obtiene diferentes tipos de células. Se
puede definir g de la siguiente manera:
g(t) = 1
0
si ∑𝑛𝑖=0 𝑒𝑖 (𝑡) ≥ 𝑢
en otro caso
donde n es el número de entradas de una célula, y
𝑒𝑖 (𝑡) =
1
-1
0
si la entrada es excitadora y la señal es 1
si la entrada es inhibidora y la señal es 1
en otro caso
Es decir las células se activaran si la suma de las señales que recibe en entradas es mayor
o igual que el umbral.
Ejemplo: Dado el autómata de celas siguiente, la tabla de la figura refleja las transiciones
definidas por la anterior función de transición g (t).
Figura 5.10
Por ejemplo, en el caso de la entrada 101, la salida será 0, ya que la entrada en e1 es
inhibidora y por ser su valor 1, cuenta como -1 para la función g.
Construcción de un autómata de células equivalente a un AF.
Para cada AF hay un autómata de células; si el AF = (Σ, Q, f, q0, F), se construye el
autómata de células de la siguiente forma:
Cada símbolo de entrada a ϵ Σ será una entrada del autómata de células
Para cada estado q ϵ Q y símbolo de entrada a ϵ Σ, se crea una célula de nombre qa con
umbral u=2, que recibirá una entrada excitadora desde la entrada α.
Para cada transición f(p,a) = q y símbolo b ϵ Σ se crea un arco excitador desde la célula pa a
cada célula qb.
Se crea una célula de nombre α con umbral u=1, que recibe como entrada en símbolo
inicial de la cadena Ⱶ. Este símbolo servirá para comenzar el proceso.
Para cada a ϵ Σ, se crea un arco excitador desde la célula α a todas las células.
Se crea una célula F con umbral u=2 que recibe una entrada excitadora del símbolo final
de cadena ˧.
Para cada transición f(p, a) = q tal que q ϵ F, se crea un arco excitador desde pa a la célula
F.
Bibliografía
•
Pedro Isasi, Paloma Martínez, Daniel Borrose, Lenguajes, gramáticas y autómatas
un enfoque practico, Editorial Adisson Wesley
•
Dean Kelley, Teoría de autómatas Lenguajes y Formales,Editorial Prentice Hall
•
Forma normal de Kuroda S-Y. Kuroda, Classes of languages and linear-bounded
automata, Information and Control 7(2): 207–223, June 1964.
•
Teoría de Autómatas y Lenguajes Formales, Alvaro E. Campos Ponticia Universidad
Católica de Chile Escuela de Ingenieria, Departamento de Ciencia de la
Computación
•
Universidad de Oviedo TEORÍA DE AUTÓMATA; Escuela Universitaria de Ingeniería
Técnica en Informática de Oviedo (E.U.I.T.I.O); Alberto Suárez López
•
HOPCROFT,John E. and Ullman Jefrey D.; Introducción a la Teoría de Autómatas,
Lenguajes y Computación; Edit. Addison-Wesley, U.S.A, Edic. 2002
•
Lenguajes gramáticas y autómatas, Juan Manuel Cueva Lovalle, departamento de
informática universidad de Oviedo, segunda edición 2001
•
Teoría de la computación, Carrión Viramontes, Tecnológico de monterrey, editorial
limusa, primera edición.
•
Lenguajes, Gramáticas y Autómatas, cuarto cuatrimestre (primavera) de Ingeniería
en Informática, Rubén Béjar Hernández, Pedro Javier Álvarez, Dpto. Informática e
Ingeniería de Sistemas, Universidad de Zaragoza
•
LENGUAJES Y GRAMATICAS, Orlando Arboleda Molina, Escuela de Ingeniería de
Sistemas y Computación de La Universidad del Valle
•
Teoría de Autómatas y Lenguajes Formales, Profesor: Jose Ignacio Gómez Espínola
•
Autómatas finitos: Irreductibilidad e Inferencia, UNIVERSIDAD POLITECNICA DE
VALENCIA DEPARTAMENTO DE SISTEMAS INFORMATICOS Y COMPUTACION,
Vázquez de Parga Andrade y Pedro García Gómez
Descargar