Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modelos de Computacin I
Hoy en da parece que no existe ningn lmite a lo que un ordenador puede llegar a hacer, y
da la impresin de que cada vez se pueden resolver nuevos y ms difciles problemas.
Casi desde que aparece sobre La Tierra, el hombre ha tratado de buscar procedimientos y mquinas que le facilitasen la realizacin de clculos (aritmticos primero, y otros ms complejos
posteriormente).
El avance tecnolgico para representar datos y/o informacin por un lado, y el diseo de
nuevas formas de manejarlos, propicia el desarrollo de dispositivos y mquinas de calcular.
Un aspecto importante en el desarrollo de los ordenadores, es sin duda, su aplicacin para
resolver problemas cientficos y empresariales. Esta aplicacin hubiese resultado muy difcil sin
la utilizacin de procedimientos que permiten resolver estos problemas mediante una sucesin
de pasos claros, concretos y sencillos, es decir algortmos. El avance de las matemticas permite
la utilizacin de nuevas metodologas para la representacin y manejo de la informacin.
Por otro lado, aparece el intento de los matemticos y cientficos para obtener un procedimiento general para poder resolver cualquier problema (matemtico) claramente formulado. Es
lo que podramos llamar El problema de la computacin terica. El avance de la tecnologa y de las matemticas, y ms en concreto de la teora de conjuntos y de la lgica, permiten
plantearse aspectos de la computacin en 3 caminos.
a) Computacin terica. Autmatas, Funciones Recursivas, ...
b) Ordenadores digitales. Nuevas tecnologas, nuevos lenguajes, ....
c) Intentos de modelizar el cerebro biolgico
1. Redes Neuronales (intentan modelizar el "procesador")
2. Conjuntos y Lgica Difusa (representar y manejar la informacin)
En este texto veremos aspectos relativos a a) y c.1).
Considermos el problema general, bajo un planteamiento de Programacin.
Desde un punto de vista global, un programa (traducido a lenguaje mquina) se puede ver
como una sucesin de ceros y unos, cuya ejecucin produce una salida, que es otra serie de
ceros y unos. Si aadimos un 1 al inicio de cada cadena binaria (programa y salida), podemos
entender los programas como aplicaciones concretas de una funcin entre nmeros naturales en
binario. El argumento (variable independiente) sera el programa y la funcin (var. dependiente)
la salida del programa.
Obviamente, el nmero de funciones posibles de N en N es nonumerable, mientras que el
nmero de posibles programas que podemos escribir con un Lenguaje de Programacin, que
tiene un nmero finito de smbolos, es numerable.
Esto significa (cada programa puede calcular una sola funcin como las indicadas antes) que
existen muchas funciones para las que no podemos escribir un programa en nuestro L. de Alto
Nivel, aunque seguramente estamos interesados en resolver el problema asociado a la funcin.
Cap. 1
Introduccin
Modelos de Computacin I
El primer paso en la bsqueda de las respuestas a estas preguntas est en el estudio de los
modelos de computacin.
Los comienzos de la Teora. La Tesis de Church-Turing
Los modelos abstractos de computacin tienen su origen en los aos 30, bastante antes de
que existieran los ordenadores modernos, en el trabajo de los lgicos Church, Gdel, Kleene,
Post, y Turing. Estos primeros trabajos han tenido una profunda influencia no solo en el desarrollo terico de las C.C., sino que muchos aspectos de la prctica de la computacin que son
ahora lugar comn de los informticos, fueron presagiados por ellos; incluyendo la existencia
de ordenadores de propsito general, la posibilidad de interpretar programas, la dualidad entre
software y hardware, y la representacin de lenguajes por estructuras formales basados en reglas
de produccin.
El punto de partida de estos primeros trabajos fueron las cuestiones fundamentales que D.
Hilbert formul en 1928, durante el transcurso de un congreso internacional:
1.- Son completas las matemticas, en el sentido de que pueda probarse o no cada aseveracin
matemtica?
2.- Son las matemticas consistentes, en el sentido de que no pueda probarse simultaneamente
una aseveracin y su negacin ?
3.- Son las matemticas decidibles, en el sentido de que exista un mtodo definido que se pueda
aplicar a cualquier aseveracin matemtica, y que determine si dicha aseveracin es cierta?.
La meta de Hilbert era crear un sistema matemtico formal ompleto onsistente", en el que
todas las aseveraciones pudieran plantearse con precisin. Su idea era encontrar un algoritmo que
determinara la verdad o falsedad de cualquier proposicin en el sistema formal. A este problema
le llam el Entscheidungsproblem.
Por desgracia para Hilbert, en la dcada de 1930 se produjeron una serie de investigaciones
que mostraron que esto no era posible. Las primeras noticias en contra surgen en 1931 con K.
Gdel y su Teorema de Incompletitud: "Todo sistema de primer orden consistente que contenga
los teoremas de la aritmtica y cuyo conjunto de (nmeros de Gdel de) axiomas sea recursivo
no es completo."
Como consecuencia no ser posible encontrar el sistema formal deseado por Hilbert en el
marco de la lgica de primer orden, a no ser que se tome un conjunto no recursivo de axiomas,
hecho que escapaba a la mente de los matemticos. Una versin posterior y ms general del
teorema de Gdel elimina la posibilidad de considerar sistemas deductivos ms potentes que los
sistemas de primer orden, demostrando que no pueden ser consistentes y completos a la vez.
Un aspecto a destacar dentro del teorema de incompletitud de Gdel, fu la idea de codificacin. Se indica un mtodo (numeracin de Gdel) mediante el cual se asigna un nmero de
cdigo (entero positivo) a cada frmula bien formada del sistema (fbf) y a cada sucesin finita
de frmulas bien formadas, de tal modo que la fbf o sucesin finita de fbf se recupera fcilmente
a partir de su nmero de cdigo. A travs de este cdigo, los enunciados referentes a enteros positivos, pueden considerarse como enunciados referentes a nmeros de cdigo de expresiones, o
2
Cap. 1
Introduccin
incluso referentes a las propias expresiones. Esta misma idea fu posteriormente utilizada para
codificar algoritmos como enteros positivos, y as poder considerar un algoritmo, cuyas entradas
fuesen enteros positivos, como un algoritmo cuyas entradas fuesen algoritmos.
El siguiente paso importante lo constituye la aparicin casi simultanea en 1936 de varias caracterizaciones independientes de la nocin de calculabilidad efectiva, en los trabajos de Church,
Kleene, Turing y Post. Los tres primeros mostraban problemas que eran efectivamente indecidibles; Church y Turing probaron adems que el Entscheidungsproblem era un problema indecidible.
Church propuso la nocin de funcin -definible como funcin efectivamente calculable. La
demostracin de teoremas se convierte en una transformacin de una cadena de smbolos en otra,
en clculo lambda, segn un conjunto de reglas formales. Este sistema result ser inconsistente,
pero la capacidad para expresar-calcular funciones numricas como trminos del sistema llam
pronto la atencin de l y sus colaboradores.
Gdel habia recogido la idea de Herbrand de que una funcin f podra definirse por un
conjunto de ecuaciones entre trminos que incluian a la funcin f y a smbolos para funciones
previamente definidas, y precis esta idea requiriendo que cada valor de f se obtenga de las
ecuaciones por sustitucin de las variables por nmeros y los trminos libres de variables por
los valores que ya se habian probado que designaban. Esto define la clase de las funciones
recursivas de Herbrand-Gdel.
En 1936, Church hace un esquema de la demostracin de la equivalencia entre las funciones -definibles y las funciones recursivas de Herbrand-Gdel (esta equivalencia tambin haba
sido probada por Kleene ); y aventura que estas iban a ser las nicas funciones calculables por
medio de un algoritmo a travs de la tesis que lleva su nombre, y utilizando la nocin de funcin
-definible, di ejemplos de problemas de decisin irresolubles, y demostr que el Entscheidungsproblem era uno de esos problemas.
Por otra parte Kleene, pocos meses despues, demuestra formalmente la equivalencia entre
funciones -definible y funciones recursivas de Herbrand-Gdel, y d ejemplos de problemas
irresolubles utilizando la nocin de funcin recursiva.
La tercera nocin de funcin calculable proviene del matemtico ingls A. Turing, quin
argument que la tercera cuestin de Hilbert (el Entscheidungsproblem) poda atacarse con la
ayuda de una mquina, al menos con el concepto abstracto de mquina.
Turing seal que haba tenido xito en caracterizar de un modo matemticamente preciso,
por medio de sus mquinas, la clase de las funciones calculables mediante un algoritmo, lo que
se conoce hoy como Tesis de Turing.
Aunque no se puede dar ninguna prueba formal de que una mquina pueda tener esa propiedad, Turing di un elevado nmero de argumentos a su favor, en base a lo cual present la
tesis como un teorema demostrado. Adems, utiliz su concepto de mquina para demostrar
que existen funciones que no son calculables por un mtodo definido y en particular, que el
Entscheidungsproblem era uno de esos problemas.
10
Modelos de Computacin I
Cuando Turing conoci los trabajos de Church-Kleene, demostr que los conceptos de funcin -definible y funcin calculable por medio de una mquina de Turing coinciden. Naturalmente a la luz de esto la Tesis de Turing resulta ser equivalente a la de Church.
Finalmente, cabe resear el trabajo de E. Post. Este estaba interesado en marcar la frontera
entre lo que se puede hacer en matemticas simplemente por procedimientos formales y lo que
depende de la comprensin y el entendimiento. De esta forma, Post formula un modelo de procedimiento efectivo a travs de los llamados sistemas deductivos normales. Estos son sistemas
puramente formales en los que puede deducirse sucesiones finitas de smbolos como consecuencia de otras sucesiones finitas de smbolos por medio de un tipo normalizado de reglas y a
partir de un conjunto de axiomas. As pues, dada una sucesin finita de smbolos como entrada,
las reglas permiten convertirla en una sucesin finita de salida. En su artculo, Post demostr
resultados de incompletitud e indecibilidad en estos sistemas.
Los resultados hasta ahora citados, se refieren a funciones totales. La existencia de algoritmos que con determinadas entradas nunca terminan, condujo de forma natural a considerar
funciones parciales. Kleene fu el primero en hacer tal consideracin en 1938. El estudio de
estas funciones ha mostrado la posibilidad de generalizar todos los resultados anteriores a funciones parciales. Por otro lado, el estudio de las funciones parciales calculables ha resultado
esencial para el posterior desarrollo de la materia.
Posteriormente, se demostr la equivalencia entre lo que se poda calcular mediante una
mquina de Turing y lo que se poda calcular mediante un sistema formal en general.
A la vista de estos resultados, la Tesis de Church-Turing es aceptada como un axioma en la
teora de la computacin, y ha servido como punto de partida en la investigacin de los problemas que se pueden resolver mediante un algoritmo.
Problemas no computables
Usando la codificacin de Gdel, se demostr que era posible construir una mquina de
propsito general, es decir, capaz de resolver cualquier problema que se pudiese resolver mediante un algoritmo. Dicha mquina tendra como entrada el entero que codificara el algoritmo
solucin del problema y la propia entrada del problema, de tal forma, que la mquina aplicara
el algoritmo codificado a la entrada del problema. Esta hipottica mquina puede considerarse
como el padre de los actuales ordenadores de proposito general.
Una de las cuestiones ms estudiadas en la teora de la computabilidad ha sido la posibilidad de construir algoritmos que nos determinen si un determinado algoritmo posee o no una
determinada propiedad. As, sera interesante responder de forma automtica a cuestiones como:
- Calculan los algoritmos A y B la misma funcin? (Problema de la equivalencia)
- Parar el algoritmo A para una de sus entradas? (Problema de la parada)
- Parar el algoritmo A para todas sus entradas? (Problema de la totalidad)
- Calcula el algoritmo A la funcin f? (Problema de la verificacin?)
etc . . .
En un principio se fueron obteniendo demostraciones individuales de la no computabilidad
Cap. 1
Introduccin
11
de cada una de estas cuestiones, de forma que se tena la sensacin de que casi cualquier pregunta
interesante acerca de algoritmos era no computable.
A pesar de esto, y como consecuencia de la existencia de un programa universal hay otras
muchas cuestiones interesantes que se han demostrado computables.
El identificar los problemas que son computables y los que no lo son tiene un considerable
inters, pues indica el alcance y los lmites de la computabilidad, y as demuestra los lmites
tericos de los ordenadores. Adems de las cuestiones sobre algoritmos, se han encontrado numerosos problemas menos "generales"que han resultado ser no computables. Como ejemplo
citamos:
- Dcimo problema de Hilbert. Una ecuacin diofntica es la ecuacin de los ceros enteros de un
polinomio con coeficientes enteros. Se pregunta si hay un procedimiento efectivo que determine
si una ecuacin diofntica tiene o no solucin.
Por otro lado, son muchos los problemas interesantes que se han demostrado computables.
Todas las funciones construidas por recursividad primitiva o minimalizacin a partir de funciones calculables resultan ser calculables como consecuencia de los trabajos de Church y Turing.
Pero adems, otras funciones ms complejamente definidas tambin son computables. Como
ejemplo ms interesante de aplicacin de este tipo de recursin tenemos la funcin de Ackermann :
(0, y) = y + 1;
(x + 1, 0) = (x, 1);
(x + 1, y + 1) = (x, (x + 1, y)).
12
Modelos de Computacin I
Cap. 1
Introduccin
13
de las evidencias a favor y de la falta de evidencias en contra, aceptamos la Tesis de Church que
afirma la equivalencia de ambas clases.
Se clasifican los problemas segn que siempre sea posible encontrar la solucin por medio
de un algoritmo (problemas computables) que no existan algoritmos que siempre produzcan
una solucin (problemas no computables).
Surge de modo inmediato la cuestin B) de como disear un programa (algoritmo especificado para poder ser ejecutado por un ordenador) que resuelva un problema dado. En la primera
poca del desarrollo informtico los programas dependan intrnsecamente del ordenador utilizado, pues se expresaban en lenguaje mquina, directamente interpretable por el ordenador.
Surgi entonces la necesidad de idear otros mecanismos para construir y expresar los programas. El hilo conductor de tales mecanismos fu la abstraccin: separar el programa del ordenador y acercarlo cada vez ms al problema.
Los subprogramas empezaron ya a usarse a principios de los 50, dando lugar posteriormente
al primer tipo de abstraccin, la procedimental. A principios de los 60, se empezaron a entender
los conceptos abstractos asociados a estructuras de datos bsicas pero an no se separaban los
conceptos de las implementaciones. Con el nacimiento en esta poca de los primeros lenguajes
de alto nivel, Fortran p.ej., se lleg a la abstraccin sintctica, al abstraerse la semntica de las
expresiones matemticas y encapsular el acceso a ellas a travs de la sintaxis propia del lenguaje.
En cualquier caso con el desarrollo de estos lenguajes de alto nivel se solventaron los problemas
de flexibilidad en la comunicacin con el ordenador, y se empezaron a estudiar los algoritmos
de forma independiente del ordenador concreto en que se probaran y del lenguaje concreto en
que se expresaran.
Aparece la necesidad de traducir los programas escritos en lenguajes de alto nivel al lenguaje
mquina, de forma automtica, y se buscan mquinas o procedimientos que puedan reconer el
lxico y la sintxis de dichos lenguajes.
Hay que comentar que no hay un algoritmo para ensear a disear algoritmos, y que muchas
veces el proceso de construccin puede llegar a ser muy poco disciplinado. No obstante, existen
tcnicas de diseo de algoritmos, que vienen a ser modelos abstractos de los mismos aplicables
a gran variedad de problemas reales.
Una vez construido un programa para un problema, surge la cuestin C) de si lo resuelve
realmente. Normalmente los programadores prueban sus programas sobre una gran cantidad de
datos de entrada para descubrir la mayoria de los errores lgicos presentes, aunque con este
mtodo (al que suele denominarse de prueba y depuracin) no se puede estar completamente seguro de que el programa no contiene errores. Necesitaramos para realizar la verificacin
formal, reglas que describan de forma precisa el efecto que cada instruccin tiene en el estado
actual del programa, para, aplicando dichas reglas demostrar rigurosamente que lo que hace el
programa coincide con sus especificaciones. En cualquier caso y cuando la prueba formal resulte
muy complicada, podemos aumentar la confianza en nuestro programa realizando en el mismo
los "testuidadosos de que hablbamos al principio.
14
Modelos de Computacin I
Cap. 1
Introduccin
15
perfil de la plaza no se ocupa directamente de este problema que adems se estudia ampliamente
en otras materias y asignaturas del curriculum de Informtica.
16
Modelos de Computacin I
finito.
Rabin y Scott (1960) obtienen un modelo de computador con una cantidad finita de memoria,
al que llamaron autmata de estados finitos. Demostraron que su comportamiento posible, era
bsicamente el mismo que el descrito mediante expresiones regulares, desarrolladas a partir de
los trabajos de McCulloch y Pitts.
No obstante lo dicho, para un alfabeto concreto, no todos los lenguajes que se pueden construir son regulares. Ni siquiera todos los interesantes desde el punto de vista de la construccin
de algortmos para resolver problemas. Hay entonces muchos problemas que no son calculables con estos lenguajes. Esto pone de manifiesto las limitaciones de los autmatas finitos y
las gramticas regulares, y propicia el desarrollo de mquinas reconocedoras de otros tipos de
lenguajes y de las gramticas correspondientes, asociadas a los mismos.
En 1956, la Princenton Univ. Press publica el libro Automata Studies, editado por C. Shannon
y J. McCarthy, donde se recogen una serie de trabajos sobre autmatas y lenguajes formales. D.
A. Huffman (1954) ya utiliza conceptos como estado de un autmata y tabla de transiciones.
N. Chomsky (1956) propone tres modelos para la descripcin de lenguajes, que son la base
de su futura jerarqua de los tipos de lenguajes, que ayud tambin en el desarrollo de los lenguajes de programacin. Para ello intent utilizar autmatas para extraer estructuras sintcticas (...
el ingls no es un lenguaje de estados finitos) y dirige sus estudios a las gramticas, indicando
que la diferencia esencial entre autmatas y gramticas es que la lgica asociada a los autmatas
(p.e., para ver la equivalencia entre dos de ellos) es Decidible, mientras que la asociada a las
gramticas no lo es.
Desarrolla el concepto de gramtica libre del contexto, en el transcurso de sus investigaciones
sobre la sintxis de los lenguajes naturales.
Backus y Naur desarrollaron una notacin formal para describir la sintxis de algunos lenguajes de programacin, que bsicamente se sigue utilizando todava, y que poda considerarse
equivalente a las gramticas libres del contexto.
Consideramos entonces los lenguajes libres (independientes) del contexto, y las gramticas
libres del contexto y los autmatas con pila, como forma de caracterizarlos y manejarlos. Los
distintos lenguajes formales que se pueden construir sobre un alfabeto concreto pueden clasificarse en clases cada vez ms amplias que incluyen como subconjunto a las anteriores, de acuerdo
con la jerarqua establecida por Chomsky en los aos 50.
Se puede llegar as, de una forma casi natural a considerar las mquinas de Turing, establecidas casi 20 aos antes, como mquinas reconocedoras de los lenguajes formales dependientes
del contexto o estructurados por frases, e incluso a interpretar la Tesis de Turing como que n
sistema computacional nunca podr efectuar un anlisis sintctico de aquellos lenguajes que
estn por encima de los lenguajes estructurados por frases, segn la jerarqua de Chomsky".
En consecuencia, podemos utilizar la teora de autmatas y los conceptos relativos a gramticas sobre distintos tipos de lenguajes, para decidir (si se puede) si una funcin (o problema)
es calculable, en base a que podamos construir un algoritmo solucin mediante un lenguaje que
Cap. 1
Introduccin
17
18
Modelos de Computacin I
Cap. 1
Introduccin
19
1.3.2. Lenguajes
Definicin 8 Un lenguaje sobre el alfabeto A es un subconjunto del conjunto de las cadenas
sobre A: L A .
Los lenguajes los notaremos con las letras intermedias del alfabeto latino en maysculas.
Ejemplo 2 Los siguientes son lenguajes sobre un alfabeto A, cuyo contenido asumimos conocer
claramente:
L1 = {a, b, }, smbolos a, b y la cadena vaca
L2 = {ai bi | i = 0, 1, 2, . . .}, palabras formadas de una sucesin de smbolos a, seguida de
la misma cantidad de smbolos b.
L3 = {uu1 | u A }, palabras formadas con smbolos del alfabeto A y que consisten de
una palabra, seguida de la misma palabra escrita en orden inverso.
20
Modelos de Computacin I
2
L4 = {an | n = 1, 2, 3, . . .}, palabras que tienen un nmero de smbolos a que sea cuadrado
perfecto, pero nunca nulo.
Aparte de las operaciones de unin e interseccin de lenguajes, dada su condicin de conjuntos existe la operacin de concatenacin.
Definicin 9 If L1 , L2 son dos lenguajes sobre el alfabeto A, la concatenacin de estos dos
lenguajes es el que se obtiene de acuerdo con la siguiente expresin,
L1 L2 = {u1 u2 | u1 L1 , u2 L2 }
Ejemplo 3 Si L1 = {0i 1i : i 0},
L2 = {1i 0i : i 0} entonces,
L1 L2 = {0i 1i 1 j 0 j : i, j 0}
Propiedades:
/ = 0/ (0/ es el Lenguaje que contiene 0 palabras)
L0/ = 0L
Elemento Neutro.- {}L = L{} = L
Asociativa.- L1 (L2 L3 ) = (L1 L2 )L3
La iteracin de lenguajes se define como en las palabras, de forma recursiva:
Definicin 10 Si L es un lenguaje sobre el alfabeto A, entonces la iteracin de este lenguaje se
define de acuerdo con las siguientes expresiones recursivas,
L0 = {}
Li+1 = Li L
Definicin 11 Si L es un lenguaje sobre el alfabeto A, la clausura de Kleene de L es el lenguaje
obtenido de acuerdo con la siguiente expresin:
L =
Li
i0
i1
Li
Cap. 1
Introduccin
21
Propiedades:
L+ = L si L
L+ = L {} si 6 L
Ejemplo 4 Si L = {0, 01}, entonces, L = Conjunto de palabras sobre {0, 1} en las que un uno
va siempre precedido de un cero.
Por otra parte, L+ = Conjunto de palabras sobre {0, 1} en las que un uno va siempre precedido de un cero y distintas de la palabra vaca.
Definicin 13 Si L es un lenguaje, el lenguaje inverso de L es el lenguaje dado por:
L1 = {u | u1 L}
Definicin 14 Si L es un lenguaje sobre el alfabeto A, entonces la cabecera de L es el lenguaje
dado por
CAB(L) = {u | u A y v A tal que uv L}
Es decir, la CAB(L) contiene todas las palabras del lenguaje y aquellas otras que tengan
como primeros caracteres, alguna palabra del mismo.
Ejemplo 5 Si L = {0i 1i : i 0}, entonces CAB(L) = {0i 1 j : i j 0} .
Definicin 15 Si A1 y A2 son dos alfabetos, una aplicacin
h : A1 A2
se dice que es un homomorfismo si y solo si
h(uv) = h(u)h(v)
Consecuencias:
h() =
h(a1 . . . an ) = h(a1 ) . . . h(an )
Ejemplo 6 Si A1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, A2 = {0, 1}
la siguiente aplicacin es un homorfismo
22
Modelos de Computacin I
h(0) = 0000,
h(4) = 0100,
h(8) = 1000
h(1) = 0001,
h(5) = 0101,
h(9) = 1001
h(2) = 0010,
h(6) = 0110,
h(3) = 0011
h(7) = 0111
Ejemplo 7
Si A es un afabeto, la aplicacin que transforma cada palabra u A en su
inversa no es un homomorfismo de A en A , ya que la transformacin no se hace smbolo
a smbolo.
La transformacin que a cada palabra sobre {0, 1} le aade 00 al principio y 11 al
final no es un homomorfismo. Si 0 se transforma en 00011, entonces 00 se debera de
transformar en 0001100011 si fuese un homomorfismo, y en realidad se transforma en
000011.
Cap. 1
Introduccin
23
E = (E E) + (E E)
.
Definicin 19 Se llama lenguaje generado por una gramtica G = (V, T, P, S) al conjunto de
cadenas formadas por smbolos terminales y que son derivables a partir del smbolo de partida.
Es decir,
L(G) = {u T | S = u}
24
Modelos de Computacin I
Ejemplo 11 En el caso de la gramtica de los ejemplos anteriores (E E) + (E E) no pertenece al lenguaje generado por G, ya que hay smbolos que no son terminales. Sin embargo,
(a + c) (a + b) si pertenece a L(G), ya que se puede comprobar que es derivable a partir de E
(smbolo de partida) y solo tiene smbolos terminales.
Si en una gramtica comenzamos a hacer derivaciones a partir del smbolo original S, dicha
derivacin acabar cuando solo queden smbolos terminales, en cuyo caso la palabra resultante
pertenece a L(G), o cuando queden variables pero no se pueda aplicar ninguna regla de produccin, en cuyo caso dicha derivacin no puede llevar a ninguna palabra de L(G). En general,
cuando estemos haciendo una derivacin puede haber ms de una regla de produccin aplicable
en cada momento.
Cuando no sea importante distinguir si la derivacin de una palabra en una gramtica se
haya realizado en uno o varios pasos, entonces eliminaremos la del smbolo de derivacin.
S bA,
B b,
A a,
B bS,
A aS,
B aBB
y el smbolo de partida es S.
Esta gramtica genera el lenguaje
L(G) = {u | u {a, b}+ y Na (u) = Nb (u)}
donde Na (u) y Nb (u) son el nmero de apariciones de smbolos a y b, en u, respectivamente.
Esto es fcil de ver interpretando que,
S genera (o produce) palabras con igual nmero de a que de b.
A genera palabras con una a de ms.
B produce palabras con una b de ms.
S genera palabras con igual nmero de a que de b.
Hay que demostrar que todas las palabras del lenguaje tienen el mismo nmero de a que
de b, hay que probar que todas las palabras generadas cumplen esta condicin y que todas las
palabras que cumplen esta condicin son generadas.
Para lo primero basta con considerar el siguiente razonamiento. Supongamos Na+A () y
Nb+B () que son el nmero de a + el nmero de A en y el nmero de b + el nmero de B en
, respectivamente. Entonces,
Cap. 1
Introduccin
25
26
Modelos de Computacin I
Las condiciones que garantizan que todas las palabras son generadas mediante este algoritmo son las siguientes:
Las palabras generadas tienen primero smbolos terminales y despus variables.
Se genera un smbolo de la palabra en cada paso de derivacin
Las variables que aparecen en la palabra pueden ser:
Una cadena de A (si hemos generado ms b que a)
Una cadena de B (si hemos generado ms a que b)
Una S si hemos generado las mismas a que b
Antes de generar el ltimo smbolo tendremos como variables:
Una A si tenemos que generar a
Una B si tenemos que generar b
Entonces aplicamos la primera opcin para generar los smbolos y la palabra queda
generada.
Ejemplo 13 Sea G = ({S, X ,Y }, {a, b, c}, P, S) donde P tiene las reglas,
S abc
bY Y b
S aX bc
aY aaX
X b bX
aY aa
X c Y bcc
Cap. 1
Introduccin
27
28
Modelos de Computacin I
L3 L2 L1 L0