Está en la página 1de 23

6

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

Entonces nos preguntamos cosas como:


Para qu problemas no podemos escribir un programa ?
Podremos resolver algunos de estos problemas con otro lenguaje de programacin y/o con
otros computadores ?.
Adems, para los problemas que si tienen un programa asociado,
Se podr ejecutar el programa en un ordenador actual en un tiempo razonable ? (p.e., antes
de que llegue nuestra jubilacin).
Los ordenadores futuros podrn hacerlo ?
Trataremos de dar respuestas a algunas de estas cuestiones, a lo largo del desarrollo de la
asignatura.

1.1. Introduccin Histrica


Uno de los principales factores determinantes de la profunda revolucin experimentada en
el mbito de la ciencia, la tcnica y la cultura de nuestros das es el desarrollo de la informtica.
La palabra informtica (Informacin automtica), es un nombre colectivo que designa un
vasto conjunto de teoras y tcnicas cientficas -desde la matemtica abstracta hasta la ingeniera y la gestin administrativa- cuyo objeto es el diseo y el uso de los ordenadores. Pero
el ncleo terico ms slido y fundamental de todo ese conjunto de doctrinas y prcticas es la
llamada Teora de la Computabilidad, formalmente elaborada en los aos 30 y 40 gracias a los
descubrimientos de lgicos matemticos como Gdel, Turing, Post, Church, y Kleene, aunque
sus orgenes ms remotos datan de antiguo, con el planteamiento de la cuestin de saber si, al
cabo de cierto esfuerzo, el hombre podra llegar a un extremo en la investigacin en que, eventualmente, toda clase de problemas pudiera ser atacado por un procedimiento general de forma
que no requiriera el ms leve esfuerzo de imaginacin creadora para llevarlo a cabo. Si todo
queda determinado as en detalle, entonces sera obviamente posible abandonar la ejecucin del
mtodo a una mquina, mxime si la mquina en cuestin es totalmente automtica. Esta dea,
ambiciosa sin duda, ha influido poderosamente en diferentes pocas el desarrollo de la ciencia.
El propsito inicial es hacer precisa la nocin intuitiva de funcin calculable; esto es, una
funcin cuyos valores pueden ser calculados de forma automtica o efectiva mediante un algoritmo, y construir modelos tericos para ello (de computacin). As podemos obtener una
comprensin ms clara de esta idea intuitiva; y solo de esta forma podemos explorar matemticamente el concepto de computabilidad y los conceptos relacionadas con ella, tales como
decibilidad, etc...
La teora de la computabilidad puede caracterizarse, desde el punto de vista de las C.C.,
como la bsqueda de respuestas para las siguientes preguntas:
1)Qu pueden hacer los ordenadores (sin restricciones de ningn tipo )?
2) Cuales son las limitaciones inherentes a los mtodos automticos de clculo?.

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)).

1.2. Diferentes Modelos de Computacin


Consideraremos las Ciencias de la Computacin como un cuerpo de conocimiento cuyo
principal objetivo es la resolucin de problemas por medio de un ordenador. Podemos citar las
siguientes definiciones:
a) La ACM (Asociation Computing Machinering):
la disciplina Ciencias de la Computacin es el estudio sistemtico de los procesos algortmicos que describen y transforman informacin: teora, anlisis, diseo, eficiencia, implementacin, y aplicacin.
b) Norman E. Gibbs y Allen B. Tucker (1986)indican que: no debemos entender que el objetivo
de las Ciencias de la Computacin sea la construccin de programas sino el estudio sistemtico
de los algoritmos y estructura de datos, especficamente de sus propiedades formales.
Para ser ms concretos (A. Berztiss 1987), vamos a considerar a las C.C. como un cuerpo de
conocimiento cuyo objetivo es obtener respuestas para las siguientes cuestiones:

12

Modelos de Computacin I

A) Qu problemas se pueden resolver mediante un ordenador?.


B) Cmo puede construirse un programa para resolver un problema?.
C) Resuelve realmente nuestro programa el problema?.
D) Cuanto tiempo y espacio consume nuestro problema?.
Analizando en profundidad los 4 puntos anteriores llegaremos a descubrir explcitamente los
diferentes contenidos abarcados por las C.C.
El planteamiento de la primera cuestin nos conduce a precisar el concepto de problema y
de lo que un ordenador es capaz de realizar.
Durante muchos aos se crey que si un problema poda enunciarse de manera precisa,
entonces con suficiente esfuerzo y tiempo sera posible encontrar un algoritmo o mtodo para
encontrar una solucin (o tal vez podra proporcionarse una prueba de que tal solucin no existe).
En otras palabras, se crea que no haba problema que fuera tan intrnsecamente difcil que en
principio nunca pudiera resolverse.
Uno de los grandes promotores de esta creencia fu el matemtico David Hilbert (18621943), quien en un congreso mundial afirm:
"Todo problema matemtico bien definido debe ser necesariamente susceptible de un planteamiento exacto, ya sea en forma de una respuesta real a la pregunta planteada o debido a la
constatacin de la imposibilidad de resolverlo, a lo que se debera el necesario fallo de todos los
intentos... "
El principal obstculo que los matemticos de principios de siglo encontraban al plantearse
estas cuestiones era concretar con exactitud lo que significa la palabra algoritmo como sinnimo
de mtodo para encontrar una solucin. La nocin de algoritmo era intuitiva y no matemticamente precisa.
Las descripciones dadas por los primeros investigadores tomaron diferentes formas, que pueden clasificarse ampliamente del siguiente modo:
(a) mquinas computadoras abstractas (definidas de modo preciso),
(b) construcciones formales de procedimientos de cmputo, y
(c) construcciones formales productoras de clases de funciones.
Las dos primeras caracterizaciones se refieren a la propia nocin de algoritmo (en principio no hay gran diferencia entre ambas ). La ltima d descripciones de la clase de funciones
computables mediante un algoritmo.
Ejemplos de (a) son los Autmatas y las mquinas de Turing, (diseadas por Turing en los
aos 30). Un ejemplo de (b) son los sistemas de Thue. Por ltimo, las funciones recursivas
constituyen el ejemplo clsico de (c).
El resultado crucial es que las diversas caracterizaciones de las funciones (parciales) computables mediante un algoritmo condujeron todas a una misma clase, a saber, la clase de las
funciones parciales recursivas. Esto es algo suceptible de demostracin, y que ha sido demostrado. Lo que no es suceptible de demostracin es que la clase de las funciones parciales recursivas
coincida con la clase de las funciones computables mediante un algoritmo. No obstante, a la luz

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

Alcanzado este punto, ya tenemos un programa que en principio es solucin de un problema.


Se plantea entonces la duda de que hacer en caso de que para el mismo problema seamos capaces
de construir otro programa que tambin lo resuelva. Cmo decidirnos por una u otra solucin?
o ms an, qu ocurre si el programa an siendo correcto consume demasiados recursos y es
inaceptable?. La respuesta viene dada a travs del punto D) en nuestro recorrido: el anlisis del
tiempo y espacio que necesita una solucin concreta; en definitiva, el estudio de la eficiencia de
los programas, midiendo la complejidad en espacio, por el nmero de variables y el nmero y
tamao de las estructuras de datos que se usan, y la complejidad en tiempo por el nmero de
acciones elementales llevadas a cabo en la ejecucin del programa.
Los problemas computables fueron entonces clasificados en dos tipos: problemas eficientemente computables, para los que exista un algoritmo eficiente; y problemas intratables, para los
que no existen algoritmos eficientes. La existencia de problemas intratables no ha sido probada,
si bin se han encontrado muchas evidencias a su favor.
Otra clase de problemas a considerar es la clase NP de los problemas para los que existia un algoritmo no determinstico en tiempo polinomial, y dentro de ella, los problemas NPcompletos.
Los intentos (desde los aos 40) de construir mquinas para modelizar algunas de las funciones del cerebro biolgico, ha permitido desarrollar mquinas capaces de aprender (y reproducir) funciones (o sistemas) cuya forma (o comportamiento) se desconoce, pero s conocemos una
serie de ejemplos que reflejan esta forma (o comportamiento). Estas mquinas llamadas Redes
Neuronales Artificiales tambin aportan su granito de arena al desarrollo de la computacin.
A menudo se utiliza la tcnica de reducir un problema a otro para comprobar si tiene o no
solucin efectiva. La estratgia en el caso de la respuesta negativa es la siguiente, si se reduce de
forma efectiva un problema sin solucin efectiva a otro problema (mediante una funcin calculable), entonces este nuevo problema tampoco tendr solucin efectiva. La razn es muy simple,
si tuviese solucin efectiva, componiendo el algoritmo solucin con el algoritmo de transformacin obtendramos una solucin para el problema efectivamente irresoluble. En sentido inverso,
si se reduce un problema a otro para el que se conoce una solucin efectiva, entonces componiendo se obtiene una solucin para el primer problema. Esta tcnica es muy til y se utiliza
a menudo. Por otro lado, esta msma tcnica es muy empleada en el campo de la complejidad
algortmica.
La Complejidad Algortmica trata de estudiar la relativa dificultad computacional de las
funciones computables. Rabin (1960) fu de los primeros en plantear la cuestin Qu quiere
decir que f sea ms difcil de computar que g?
J. Hartmanis and R.E. Stearns, en On the computational complexity of algorithms (1965)
introducen la nocin fundamental de medida de complejidad definida como el tiempo de computacin sobre una mquina de Turing multicinta.
Despus surge la definicin de funciones computables en tiempo polinomial, y se establece
una jerarqua de complejidad, los problemas NP, NP-duros y NP-completos. De todas formas, el

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.

1.2.1. Autmatas y Lenguajes


El desarrollo de los ordenadores en la dcada de los 40, con la introduccin de los programas en la memoria principal, y posteriormente con los lenguajes de programacin de alto nivel,
propician la distincin entre lenguajes formales, con reglas sintcticas y semnticas rgidas, concretas y bin definidas, de los lenguajes naturales como el ingls, donde la sintaxis y la semntica
no se pueden controlar fcilmente. Los intentos de formalizar los lenguajes naturales, lleva a la
construccin de gramticas, como una forma de describir estos lenguajes, utilizando para ello
reglas de produccin para construir las frases del lenguaje. Se puede entonces caracterizar un
Lenguaje, mediante las reglas de una gramtica adecuada.
Los trabajos de McCulloch y Pitts (1943) describen los clculos lgicos inmersos en un
dispositivo (neurona artificial) que haban diseado para simular la actividad de una neurona
biolgica. El dispositivo reciba o no, una serie de impulsos elctricos por sus entradas que se
ponderaban, y produca una salida binaria (existe pulso elctrico o no). Las entradas y salidas se
podan considerar como cadenas de 0 y 1, indicando entonces la forma de combinar la cadena de
entrada para producir la salida. La notacin utilizada es la base para el desarrollo de expresiones
regulares en la descripcin de conjuntos de cadenas de caracteres.
C. Shannon (1948) define los fundamentos de la teora de la informacin, y utiliza esquemas
para poder definir sistemas discretos, parecidos a los autmatas finitos, relacionndoloss con
cadenas de Markov, para realizar aproximaciones a los lenguajes naturales.
J. Von Neumann (1948) introduce el termino de teora de autmatas, y dice sobre los trabajos de McCulloch-Pitts: .. el resultado ms importante de McCulloch-Pitts, es que cualquier
funcionamiento en este sentido, que pueda ser definido en todo, lgicamente, estrctamente y
sin ambiguedad, en un nmero finito de palabras, puede ser realizado tambin por una tal red
neuronal formal
La necesidad de traducir los algortmos escritos en lenguajes de alto nivel al lenguaje mquina, propicia la utilizacin de mquinas como los autmatas de estados finitos, para reconocer
si una cadena determinada pertenece (es una frase de) a un lenguaje concreto, usando para ello
la funcin de transicin de estados, mediante un diagrama de transicin o una tabla adecuada.
Tenemos as otra forma de caracterizar los lenguajes, de acuerdo con mquinas automticas que
permitan reconocer sus frases.
S.C. Kleene, en 1951, realiza un informe (solicitado por la RAND Corporation) sobre los
trabajos de McCulloch-Pitts, que se publica en 1956. En este informe, Kleene demuestra la
equivalencia entre lo que l llama "dos formas de definir una misma cosa", que son los sucesos
regulares (que se pueden describir a partir de sucesos bases y los operadores unin, concatenacin e iteracin (*) ), es decir, expresiones regulares, y sucesos especificados por un autmata

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

puede ser analizado mediante alguna mquina de las citadas anteriormente.


Los temas sobre autmatas, computabilidad, e incluso la complejidad algortmica fueron
incorporndose a los curriculum de ciencias de la computacin de diferentes universidades, mediada la dcada de los 60. Esta incorporacin puso de manifiesto que las ciencias de la computacin haban usado gran cantidad de ideas de muy diferentes campos para su desarrollo, y que la
investigacin sobre aspectos bsicos poda cooperar y aumentar los avances de la computacin.

1.3. Lenguajes y Gramticas. Aspectos de su traduccin


Una idea bsica en programacin es la enorme diferencia entre los lenguajes naturales (LN)
y los lenguajes de programacin (LP), fundamentalmente porque los LP tienen unas reglas de
sintxis y de semntica mucho ms rgidas, lo que les hace manejables en los computadores.
En los LN, las reglas gramaticales se desarrollan para reglamentar"de alguna forma la propia
evolucin del lenguaje. Se trata pues de "explicar"la estructura del lenguaje, y no delimitarla.
Esto obliga a reglas muy complejas y que se quedan obsoletas rpidamente.
Los lenguajes ms formalizados (LF) como los lengujaes de progrmacin o el lenguaje matemtico, tienen unas estructuras claramente definidas y determinadas por sus reglas gramaticales
(sintcticas y semnticas). Esto ha posibilitado y propiciado la construccin de traductores automticos para estos lenguajes.
En el proceso de traduccin que realizan los compiladores, la primera tarea que se realiza, es
la identificacin de tokens como bloques u objetos individuales contenidos en el "diccionario"del
lenguaje (p.e., identificadores, palabras claves, operadores, .... ). Esto lo realiza un mdulo del
compilador que es el analizador de lxico, que transforma el programa fuente, en una secuencia
de tokens representando cada uno un solo objeto.
El siguiente paso, realizado por el analizador sintctico, es identificar los tokens que forman
parte de cada instruccin y ver que estas estn correctamente escritas. El tercer paso es generar
el cdigo con el generador de cdigo.
Los dos primeros pasos requieren imperiosamente unas reglas gramaticaleslaramente definidas, en las que apoyarse para la automatizacin del proceso de traduccin. Generalmente
se utilizan en estas tares, mquinas (o algoritmos) como los autmatas, que estudiaremos ms
adelante.
Vamos a precisar previamente, los conceptos bsicos relativos a Lenguajes y Gramticas
formales.

1.3.1. Alfabetos y Palabras


Los dispositivos que vamos a estudiar trabajan con smbolos y cadenas (o palabras) fundamentalmente. En este apartado vamos a definir de forma precisa estos conceptos.

18

Modelos de Computacin I

Definicin 1 Un alfabeto es un conjunto finito A. Sus elementos se llamarn smbolos o letras.


Para notar los alfabetos, en general, usaremos siempre que sea posible las primeras letras en
maysculas: A, B,C, . . .. Para los smbolos trataremos de emplear las primeras letras en minsculas: a, b, c, . . . o nmeros.
Las siguientes son algunas normas de notacin que respetaremos en lo posible a lo largo del
curso. En casos particulares en los que sea imposible seguirlas lo indicaremos explicitamente.
Ejemplo 1 A = {0, 1} es un alfabeto con smbolos 0 y 1.
Tambin es un alfabeto B = {< 0, 0 >, < 0, 1 >, < 1, 0 >, < 1, 1 >} con smbolos < 0, 0 >
, < 0, 1 >, < 1, 0 > y < 1, 1 >. En este caso no hay que confundir los smbolos del alfabeto
B con los simbolos del lenguaje (o ms precisamente meta-lenguaje) que usamos para expresarnos todos los das. Son dos cosas totalmente distintas. Nosotros para comunicarnos usamos
un lenguaje que tiene unos smbolos que son las letras del alfabeto latino, los nmeros, las letras del alfabeto griego, y una serie de smbolos especiales propios del lenguaje matemtico
(el meta-lenguaje). Con este lenguaje tambin definimos los conceptos de alfabeto y smbolo.
Ahora bin, los smbolos de un lenguaje no tienen que ser algunos de los usados en el metalenguaje, sino que cada uno puede estar formado por 0, 1 o ms smbolos del metalenguaje. De
hecho como en este ltimo caso (lenguaje B), un smbolo del alfabeto definido est formado por
varios smbolos del metalenguaje. Para que esto no de lugar a confusin, siempre que ocurra
una situacin similar, encerraremos los smbolos entre ngulos < . . . >. Esto indicar que todo
lo que aparece es un nico smbolo.
Definicin 2 Una palabra sobre el alfabeto A es una sucesin finita de elementos de A. Es decir
u es una palabra sobre A, si y solo si U = a1 . . . an donde ai A, i = 1, . . ., n.
Por ejemplo, si A = {0, 1} entonces 0111 es una palabra sobre este alfabeto.
El conjunto de todas las palabras sobre un alfabeto A se nota como A .
Para las palabras usaremos, en lo posible, las ltimas letras del alfabeto latino en minsculas:
u, v, x, y, z, . . ..
Definicin 3 Si u A , entonces la logitud de la palabra u es el nmero de smbolos de A que
contiene. La longitud de u se nota como |u|. Es decir si u = a1 . . . an , entonce |u| = n.
Definicin 4 La palabra vaca es la palabra de longitud cero. Es la misma para todos los alfabetos, y se nota como .
El conjunto de cadenas sobre un alfabeto A excluyendo la cadena vaca se nota como A + .
Usaremos indistintamente palabra o cadena. Si no hay confusin, la palabra formada por un
solo smbolo se representa por el propio smbolo.
La operacin fundamental en el conjunto de las cadenas A es la concatenacin.

Cap. 1

Introduccin

19

Definicin 5 Si u, v A , u = a1 . . . an , v = b1 . . . bn , se llama concatenacin de u y v a la cadena


u.v (o simplemente uv) dada por a1 . . . an b1 . . . bm .
La concatenacin tiene las siguientes propiedades:
1. |u.v| = |u| + |v|, u, v A
2. Asociativa.- u.(v.w) = (u.v).w, u, v, w A
3. Elemento Neutro.- u. = .u = u, u A
Los propiedades asociativa y elemento neutro dotan al conjunto de las cadenas con la operacin de concatenacin de la estructura de monoide. La propiedad conmutativa no se verifica.
Consideramos la iteracin n-sima de una cadena como la concatenacin con ella misma n
veces, y se define de forma recursiva:
Definicin 6 Si u A entonce
u0 =
ui+1 = ui .u, i 0
Definicin 7 Si u = a1 . . . an A , entonces la cadena inversa de u
es la cadena u1 = an . . . a1 A .

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

Definicin 12 Si L es un lenguaje sobre el alfabeto A, entoces L+ es el lenguaje dado por:


L+ =

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.

1.3.3. Gramticas Generativas


Desde un punto de vista matemtico una gramtica se define de la siguiente forma:
Definicin 16 Una gramtica generativa es un cuadrupla (V, T, P, S) en la que
V es un alfabeto, llamado de variables o smbolos no terminales. Sus elementos se suelen
representar con letras maysculas.
T es un alfabeto, llamado de smbolos terminales. Sus elementos se suelen representar
con letras minsculas.
P es un conjunto de pares (, ), llamados reglas de produccin, donde , (V T ) y
contiene, al menos un smbolo de V .
El par (, ) se suele representar como .
S es un elemento de V , llamado smbolo de partida.
La razn de notar los elementos del alfabeto V con letras maysculas es para no confundirlos
con los smbolos terminales. Las cadenas del alfabeto (V T ) se notan con letras griegas para
no confundirlas con las cadenas del alfabeto T , que seguirn notndose como de costumbre:
u, v, x . . ..
Ejemplo 8 Sea la gramtica (V, T, P, S) dada por los siguientes elementos,
V = {E}
T = {+, , (, ), a, b, c}

Cap. 1

Introduccin

23

P est compuesto por las siguientes reglas de produccin


E E + E, E E E, E (E),
E a,
E b,
E c
S=E
Una gramtica se usa para generar las distintas palabras de un determinado lenguaje. Esta
generacin se hace mediante una aplicacin sucesiva de reglas de produccin comenzando por
el smbolo de partida S. Las siguientes definiciones expresan esta idea de forma ms rigurosa.
Definicin 17 Dada una gramtica G = (V, T, P, S) y dos palabras , (V T ) , decimos que
es derivable a partir de en un paso ( = ) si y solo si existe una produccin tal
que
es una subcadena de .
se puede obtener a partir de , cambiando la subcadena for .
Ejemplo 9 Haciendo referencia a la gramtica del ejemplo anterior, tenemos las siguientes
derivaciones,
E = E + E = (E) + E = (E) + (E) = (E E) + (E) = (E E) + (E E)
Definicin 18 Dada una gramtica G = (V, T, P, S) y dos palabras , (V T ) , decimos que

es derivable de ( = ), si y solo si existe una sucesin de palabras 1 , . . ., n (n 1)


tales que
= 1 = 2 = . . . = n =
Ejemplo 10 En el caso anterior podemos decir que (E E) + (E E) es derivable a partir de
E:

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.

As, escribiremos = , en lugar de = .


Ejemplo 12 Sea G = (V, T, P, S) una gramtica, donde V = {S, A, B}, T = {a, b}, las reglas de
produccin son
S aB,
A bAA,

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

Cuando se empieza a generar una palabra, comenzamos con S y tenemos la igualdad


Na+A (S) = Nb+B (S) = 0.
Tambin se puede comprobar que si 0 se obtiene de en un paso de derivacin y
Na+A () = Nb+B (), entonces Na+A (0 ) = Nb+B (0 )
Si la condicin de igualdad de Na+A y Nb+B se verifica al principio y, si se verifica antes
de un paso, entonces se verifica despus de aplicarlo, necesariamente se verifica al final
de la derivacin. Si hemos derivado u, entonces Na+A (u) = Nb+B (u).
Como u no tiene variables, entonces Na+A (u) = Na (u) y Nb+B (u) = Nb (u), por lo tanto,
Na (u) = Nb (u), es decir si u es generada contiene el mismo nmero de a que de b.
Para demostrar que todas las palabras del lenguaje son generadas por la gramtica, damos
el siguiente algoritmo que en n pasos es capaz de generar una palabra de n smbolos. El algoritmo genera las palabras por la izquierda obteniendo, en cada paso, un nuevo smbolo de la
palabra a generar.

Para generar una a


Si a ltimo smbolo de la palabra, aplicar A a
Si no es el ltimo smbolo
Si la primera variable es S aplicar S aB
Si la primera variable es B aplicar B aBB
Si la primera variable es A
 Si haya ms variables aplicar A a
 Si no hay ms, aplicar A aS
Para generar una b
Si b ltimo smbolo de la palabra, aplicar B b
Si no es el ltimo smbolo
Si la primera variable es S aplicar S bA
Si la primera variable es A aplicar A bAA
Si la primera variable es B
 Si haya ms variables aplicar B b
 Si no hay ms, aplicar B bS

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

Esta gramtica genera el lenguaje: {an bn cn | n = 1, 2, . . .}.


Para ver esto observemos que S en un paso, puede generar abc aX bc. As que abc L(G).
A partir de aX bc solo se puede relizar la siguiente sucesin de derivaciones,
aX bc = abX c = abY bcc = aY bbcc
En este momento podemos aplicar dos reglas:
aY aa, en cuyo caso producimos aabbcc = a2 b2 c2 L(G)
aY aaX , en cuyo caso producimos aaX bbcc
A partir de aaX bbcc, se puede comprobar que necesariamente llegamos a a 2Y b3 c3 . Aqu
podemos aplicar otra vez las dos reglas de antes, produciendo a 3 b3 c3 a3 X b3 c3 . As, mediante
un proceso de induccin, se puede llegar a demostrar que las nicas palabras de smbolos
terminales que se pueden llegar a demostrar son an bn cn , n 1.

Cap. 1

Introduccin

27

1.3.4. Jerarqua de Chomsky


De acuerdo con lo que hemos visto, toda gramtica genera un nico lenguaje, pero distintas
gramticas pueden generar el mismo lenguaje. Podramos pensar en clasificar las gramticas por
el lenguaje que generan, por este motivo hacemos la siguiente definicin.
Definicin 20 Dos gramticas se dicen debilmente equivalentes si generan el mismo lenguaje.
Sin embargo, al hacer esta clasificacin nos encontramos con que el problema de saber si dos
gramticas generan el mismo lenguaje es indecidible. No existe ningn algoritmo que acepte
como entrada dos gramticas y nos diga (la salida del algoritmo) si generan o no el mismo
lenguaje.
De esta forma, tenemos que pensar en clasificaciones basadas en la forma de la gramtica,
ms que en la naturaleza del lenguaje que generan. La siguiente clasificacin se conoce como
jerarqua de Chomsky y sigue esta direccin.
Definicin 21 Una gramtica se dice que es de
Tipo 0 Cualquier gramtica. Sin restricciones.
Tipo 1 Si todas las producciones tienen la forma
1 A2 1 2
donde 1 , 2 , (V T ) , A V, y 6= , excepto posiblemente la regla S , en cuyo
caso S no aparece a la derecha de las reglas.
Tipo 2 Si cualquier produccin tiene la forma
A
dode A V, (V T ) .
Tipo 3 Si toda regla tiene la forma
A uB A u
donde u T y A, B V
Definicin 22 Un lenguaje se dice que es de tipo i(i = 0, 1, 2, 3) si y solo si es generado por una
gramtica de tipo i. La clase o familia de lenguajes de tipo i se denota por L i .

28

Modelos de Computacin I

L3 L2 L1 L0

Figura 1.1: Estructura de las clases de lenguajes


Se puede demostar que L3 L2 L1 L0 .
Las gramticas de tipo 0 se llaman tambin gramticas con estructura de frase, por su origen lingustico. Los lenguajes aceptados por las gramticas de tipo 0 son los recursivamente
enumerables.
Las gramticas de tipo 1 se denominan dependientes del contexto. Los lenguajes aceptados
por estas gramticas son los lenguajes dependientes del contexto.
Las gramticas de tipo 2, as como los lenguajes generados, se llaman independientes del
contexto.
Las gramticas de tipo 3 se denominan regulares o de estado finito. Los lenguajes aceptados
por estas gramticas se denominan conjuntos regulares.
Los homorfismos son tiles para demostrar teoremas.
Teorema 1 Para toda gramtica G = (V, T, P, S) podemos dar otra gramtica G 0 = (V 0 , T, P0 , S)
que genere el mismo lenguaje y tal que en la parte izquierda de las reglas solo aparezcan variables.
Demostracin
Si la gramtica es de tipo 3 2 no hay nada que demostrar.
Si la gramtica es de tipo 0 1, entonces para cada ai T introducimos una variable Ai 6 V .
Entonces hacemos V 0 = V {A1 , . . . , Ak }, donde k es el nmero de smbolos terminales.
Ahora P0 estar formado por las reglas de P donde, en todas ellas, se cambia a i por Ai . Aparte
de ello aadimos una regla Ai ai para cada ai T.
Podemos ver que L(G) L(G0 ). En efecto, si derivamos u = ai1 . . . ain L(G), entonces
usando las reglas correspondientes, podemos derivar Ai1 . . . Ain en G0 . Como en G0 tenemos las
reglas Ai ai , entonces podemos derivar u L(G0 ).
Para demostrar la inclusin inversa: L(G0 ) L(G), definimos un homomorfismo h de (V 0
T ) en (V T ) de la siguiente forma,

También podría gustarte