Sistemas Formales

Anuncio
LOS SISTEMAS FORMALES
René A Hernández Toledo
Universidad de Puerto Rico en Cayey
“La siguiente oración es falsa.
La oración anterior es verdadera”
El objetivo del presente artículo es presentar de una manera simple intuitiva
la noción de sistema formal. Dicha noción fue desarrollada en el siglo XX por
lógicos y matemáticos para estudiar los fundamentos de sus disciplinas. Con el
pasar del tiempo, la noción de sistema formal se ha convertido en un paradigma
para la exposición matemática.
1.
Introducción
La comunicación de información necesita de un lenguaje que sirve de mediador entre el productor de la información y el receptor de la misma. Un lenguaje
consiste, básicamente, de algunos símbolos y de reglas para la manipulación dichos símbolos. Los símbolos y las reglas usados dependen de la información que
se desea transmitir.
Una teoría científica consiste de conceptos básicos, definiciones, afirmaciones primitivas y conclusiones lógicas de las anteriores. La comunicación precisa
y fiel de una teoría exige una organización especial del lenguaje que se usará para transmitirla. Los sistemas formales son precisamente la manera organizada de
presentar una teoría.
Distinguimos en un sistema formal dos partes o componentes: la sintaxis y la
teoría del sistema. La sintaxis describe la estructura del lenguaje usado, mientras
que la teoría describe tanto los supuestos básicos de la teoría (axiomas o postulados) como las deducciones posibles (reglas de deducción y consecuencias o
teoremas). Decimos que el sistema es formal cuando, además, se satisfacen una
serie de exigencias que describiremos en este artículo. La mayoría de dichas exigencias provienen de nuestro ideal de una comunicación precisa y fiel. La primera
exigencia es objetividad; donde objetividad quiere decir que toda la información
relevante sobre los símbolos, las manipulaciones aceptables de los símbolos, las
definiciones, los axiomas y las reglas de inferencia deberían aparecer forma explícita en la descripción del sistema. Tal descripción del sistema debería permitirnos
decidir cuando una expresión dada es o no aceptable, cuando una inferencia es
o no válida, etc. sin tener que recurrir a elementos externos al sistema en cuestión; especialmente, a las interpretaciones subjetivas de nociones o procedimientos. Como los sistemas formales fueron inventados para el estudio de la lógica, la
necesidad de eliminar los supuestos implícitos era indispensable.
Discutiremos a continuación un ejemplo con un significado muy especial. Por
una parte nos servirá para ilustrar el tipo de problemas que podemos encontrar
cuando aceptamos de manera no crítica, nociones y procedimientos. Por otra parte,
este ejemplo estuvo presente en los orígenes de la noción, como veremos en la
última sección de este capítulo.
Recordemos que llamamos conjunto a una colección de objetos agrupados por
una propiedad común a todos ellos. Podemos, por ejemplo, considerar el conjunto
formado por todos los adjetivos de un cierto idioma. Los objetos que forman un
conjunto se denominan los elementos de ese conjunto. Consideremos el siguiente
conjunto, al que simbolizaremos por A, y que lo definiremos como formado por
todos los conjuntos que no son elementos de sí mismo. Por ejemplo, nuestro conjunto de todos los adjetivos no es ciertamente un adjetivo y, en consecuencia, no
es un elemento de sí mismo. Por lo tanto, de acuerdo a la definición de A, dicho
conjunto sería un elemento de A. Concentremos ahora nuestra atención en el conjunto A y preguntémosnos si dicho conjunto es o no elemento de sí mismo. De
acuerdo al principio lógico del tercero excluido, (“algo es o no es”) una, y sólo
una, de las siguientes afirmaciones debe ser verdadera:
i) A es elemento de sí mismo, o
ii) A no es elemento de sí mismo.
Examinemos cada una de esas afirmaciones:
1. Si i) fuera cierta se tendría que A satisface la condición dada para los elementos de A; es decir, no ser elemento de sí mismo. En consecuencia, suponer que A es elemento de sí mismo nos lleva a concluir que A no es
elemento de sí mismo; lo cual es una contradicción a nuestra suposición.
2
2. En cambio si ii) fuera cierta, tendríamos que por no ser A elemento de sí
mismo, A satisface la condición para ser elemento de A; o sea, que si A no
es elemento de A, debemos concluir que A es elemento de A. Nuevamente
tenemos una contradicción.
En consecuencia, no importa cual de las dos alternativas tomemos siempre
arribamos a una contradicción. Si examinamos los supuestos hechos en el ejemplo
veremos que son muy simples.
La discusión acerca de cuál supuesto ocasionó el problema, arrojó interesantes luces sobre la manera como debemos organizar nuestra transmisión de información. Entre los resultados de esas investigaciones, tenemos la creación de los
sistemas formales.
2.
La Sintaxis de un Sistema Formal
Todo sistema de comunicación escrita presupone el uso de símbolos. Llamamos los símbolos elementales o primitivos de un sistema, a los símbolos que
usaremos en la especificación o descripción de dicho sistema. Tales símbolos nos
servirán de material básico para construir el lenguaje del sistema. El significado o
la naturaleza de los objetos denotados por esos símbolos no será significativa y no
interesará para la descripción del sistema.
Suponemos que tenemos un conjunto de símbolos elementales al que llamaremos el alfabeto del sistema.
Usamos los símbolos para generar las expresiones del sistema. Las expresiones son, por analogía con los lenguajes ordinarios, las “palabras” del sistema. Con
los símbolos, formaremos las expresiones del sistema. ¿Cómo formamos dichas
expresiones? Siguiendo el uso occidental, escribiremos los símbolos uno detrás
de otro para formar una expresión, es decir que una expresión es simplemente
una secuencia de símbolos escritos unos al lado de otro. En forma más técnica,
decimos que una expresión consiste de símbolos concatenados entre sí.
Ejemplos 2.1.
1. Supongamos que nuestro alfabeto consistiera exactamente de tres símbolos:
a, b, c. (Los símbolos corresponden a las tres primeras letras minúsculas de
nuestro alfabeto latino. Las comas son usadas para separar dichos símbolos).
3
Algunas de las posibles expresiones o palabras sobre ese alfabeto, serían
(como antes, usando comas para separar las expresiones) :
a, b, abbbbc, end, abbccc
2. Sean a, b, c, =, + nuestros símbolos elementales. Algunas de las posibles
expresiones o palabras construidas con esos símbolos serían: a, a = b, + +
+ = a, etc.
Podemos observar que dada una colección de símbolos elementales primitivos
podemos generar una clase infinita de expresiones. Sin embargo, para los efectos
de descripción no todas esas expresiones son igualmente interesantes. Por ejemplo
en un contexto algebraico, expresiones tales como ‘y+++=a’—de nuestro segundo
ejemplo—usualmente son consideradas como carentes de interés. Llamaremos a
las expresiones interesantes, las expresiones bien formadas o las expresiones
aceptables o también las fórmulas del sistema.
En concordancia con nuestra exigencia acerca de la objetividad en la presentación, un sistema formal debería contener reglas claras y precisas para decidir
cuando una expresiones es o no aceptable.
Para claridad de la exposición es costumbre distinguir entre las referencias a
una expresión y el uso de la expresión. Una expresión se usa dentro del sistema.
Hacemos una referencia a una expresión cuando hablamos acerca de ella, desde
fuera del sistema. Para indicar que nos estamos “refiriendo” a la expresión, como
opuesto a usarla, delimitaremos la expresión por comillas simples. Tales comillas
no se considerarán como parte de la expresión. Por ejemplo, podremos decir que
la expresión ‘+++=a’ es una de las expresiones posibles del sistema del ejemplo
2, y que dicha expresión consiste de cinco símbolos elementales concatenados.
Ejemplo 2.2. Sean a, b, = los símbolos elementales.
Supongamos las siguientes reglas de formación o generación para expresiones
bien formadas.
(RF1) ‘a’ es una expresión bien formada;
(RF2) Cuando ‘M’ sea una expresión bien formada, también lo será ‘Mb’.
(RF3) Todas las expresiones bien formadas son aquellas generadas por la aplicación de las reglas (RF1) y (RF2).
4
En palabras, las reglas anteriores nos dicen a) 0 a0 es una expresión bien formada, b) que al colocar o poner una b detrás de una expresión bien formada obtenemos otra expresión bien formada y c) que no hay otras reglas de formación.
¿Cuáles de las siguientes expresiones son bien formadas?
i) a ii) abb iii) ba.
Respuestas:
i) ’a’ es legal, por la regla RF1.
ii) ’abb’ es legal. En efecto, como ‘a’ es una expresión bien formada, aplicando la regla (RF2) con M = a, se concluye que ‘ab’ es legal. Aplicando
nuevamente (RF2), esta vez con M = ab, se obtiene que ‘abb’ es legal.
iii) ‘ba’ no es una expresión legal. En efecto es fácil ver de las reglas dadas,
que solamente expresiones que comiencen con ‘a’ pueden ser expresiones
legales.
El último ejemplo muestra varias cosas. En primer lugar muestra la manera
usual de “definir” las reglas de generación de las expresiones bien formadas de un
sistema. Se empieza declarando algunas de ellas como bien formadas (en nuestro
ejemplo: ‘a’). Luego, se dan reglas para generar a partir de expresiones bien formadas, nuevas expresiones bien formadas. (En nuestro ejemplo la regla (RF2)).
Esto se denomina la generación recursiva del lenguaje del sistema. Finalmente,
se especifica que las únicas expresiones aceptables son aquellas generadas por las
reglas anteriores. En segundo lugar, vemos que no es necesario tener asociado un
significado a las expresiones para decidir si son o no bien formadas en el sistema.
El símbolo ‘M ’ introducido arriba no es un elemento del sistema formal. Es
simplemente un auxilio nuestro para denotar una expresión bien formada cualquiera. En vez de ese símbolo, podríamos usar cualquier otro (siempre que no
hubiera confusión con los símbolos elementales del sistema) o también una alocución como “algo”: cuando “algo” es una expresión bien formada, también lo
será ese “algo” seguido del símbolo elemental ‘b’. Una serie de cuestiones técnicas surge de la descripción del lenguaje dada arriba.
a. ¿Garantizan, las reglas dadas, un proceso objetivo para determinar si una
expresión dada es o no aceptable?
b. ¿Cuáles son los procesos admisibles para tal tipo de verificación?
c. En resumen, ¿qué es un proceso objetivo de verificación?
5
El saber generado para responder a tales preguntas corresponde a la llamada teoría
de lenguajes formales.
2.1.
Las definiciones
El elemento final de la sintaxis o gramática de un sistema formal es la introducción de definiciones. Una definición es básicamente una abreviatura. Cuando
se tiene una expresión larga o engorrosa de escribir y que, además, esperamos que
será repetida muchas veces, resulta conveniente escribirla de forma abreviada.
Ejemplo 2.3. En álgebra, por ejemplo es costumbre abreviar la expresión a+(−b)
mediante la expresión a − b. La especificación formal de lo anterior, se escribe de
la siguiente manera:
Definición de a − b:
a − b := a + (−b).
(Donde leemos ‘:=’ como ‘igual por definición a’.)
Nótese que lo definido es, el reemplazo de seis símbolos por tres símbolos; tal
que uno de ellos es supuestamente nuevo, ‘-’.
RESUMEN
La sintaxis de un sistema consiste de la especificación de:
los símbolos elementales,
las reglas de formación de expresiones bien formadas, y
las definiciones.
3.
La Teoría de un Sistema Formal
La teoría de un sistema formal se refiere, intuitivamente hablando, tanto a
las expresiones que serán consideradas como verdaderas, como a las maneras de
construir y/o reconocer, a partir de ciertas expresiones verdaderas, otras expresiones verdaderas.
Cuando discutimos la teoría del sistema, supondremos que las expresiones a
las que hacemos referencia, son expresiones legales del sistema. Cuando este no
sea el caso, lo indicaremos de forma explícita.
6
La veracidad de una afirmación es posiblemente una de las cosas más subjetivas en la historia del conocimiento. La variedad de escuelas filosóficas es una
muestra de la dificultad de obtener consenso acerca de cierto tipo de afirmaciones. La subjetividad asociada con la noción de verdad es tal vez el escollo más
grande para la construcción de un sistema formal. Por ejemplo, ¿es el principio
del tercero excluido verdadero o no? Aristóteles y muchas otras personas que le
siguen, u otras pensando de manera independiente, responderán en la afirmativa.
Sin embargo, muchos lógicos en el pasado han respondido en la negativa. Pero,
¿no es acaso “obvio” tal principio?
El primer intento histórico de formalización de una disciplina, lo encontramos
en el libro Los Elementos de Euclides. Allí, Euclides parte de unas afirmaciones
sin demostrar, que llama postulados y deduce otras, a partir de las primeras, con
el auxilio de la lógica.
¿Cómo se sabe que los axiomas son verdaderos?
La respuesta de Euclides, y muchos otros, será que son verdades evidentes por
sí mismas. La aparición de geometrías no–euclidianas y otras experiencias históricas, como el ejemplo de la introducción, nos hacen—actualmente—ser más
cuidadosos en cuanto a la “obviedad” de ciertas afirmaciones. La meta básica de
la construcción de los sistemas formales es la objetividad de las construcciones
internas; en particular, de las deducciones. No queremos depender de nociones
“obvias” y, por lo tanto, debiéramos intentar la construcción en otro sentido. La
noción de verdad, siendo una noción subjetiva, no puede ser incluida en la formulación de un sistema formal. Para salvar nuestra objetividad debemos recurrir
a algo más objetivo y preciso de entender. La noción elegida es validez. ¿Qué
es valídez? Es simplemente una cualidad de ciertas expresiones que diremos que
son válidas. ¿Cómo reconoceremos a las expresiones válidas? De manera muy
semejante a la declaración de expresiones bien formadas. Indicaremos que una
expresión será aceptada como válida, mediante el símbolo especial `, que escribiremos delante de la expresión. A semejanza del modelo euclidiano, para generar
las expresiones válidas procedemos de la siguiente manera:
1. Seleccionamos una serie de expresiones, a las que suponemos de partida
que son válidas. A tales expresiones válidas las llamamos los axiomas o
postulados del sistema.
2. Declaramos unas reglas de Deducción, que serán los procedimientos que
nos permitirán construir expresiones válidas a partir de otras expresiones
válidas.
7
Llamaremos a las expresiones válidas de un sistema, los teoremas del sistema.
Nótese que estamos incluyendo a los axiomas dentro de los teoremas.
¿Cómo se seleccionan los axiomas y las reglas de deducción? La respuesta es
muy simple. Siguiendo el único criterio que no puede ser discutido por razones
subjetivas: arbitrariedad. Es decir, la selección de los axiomas no tiene ningún
criterio especial, excepto que el autor del sistema formal desea usarlos como tales.
Si alguien objetará tal “arbitrariedad”, respondemos señalando que criterios tales
como “obviedad”, “sentido común”, etc., son igualmente arbitrarios.
Ejemplo 3.1. Un sistema formal.
Sintaxis.
Símbolos elementales
Reglas de formación
de expresiones
a, b, c.
(RF1) ’a’ es una expresión bien formada;
(RF2) Cuando M sea una expresión bien formada, también lo será M b.
(RF3) Cuando M y N sean expresiones bien
formadas, también lo será M cN .
(RF4) Las únicas expresiones bien formadas
serán aquellas generadas usando las reglas anteriores.
Teoría.
Axioma
Regla de Deducción
` aca.
Sean M , N expresiones bien formadas.
Cuando M cN sea una expresión válida, también lo será M bcN b. Expresaremos la regla
anterior de forma simbólica, por:
` M cN
` M bcN b
8
Deducciones en el sistema
Teorema 1.
` abcab.
Demostración.
(1) ` aca
Axioma
(2) ` abcab Regla de Deducción aplicada la expresión válida en línea (1).
Teorema 2.
` abbcabb.
Demostración.
(1) ` abcab
Teorema 1.
(2) ` abbcabb RD aplicada a la expresión válida en línea (1).
Observemos que podemos probar teoremas del sistema, sin tener asociados
un significado para los mismos. Precisamente, esta característica es la que hace
formales a nuestros sistema.
4.
Terminología
En conexión con los sistemas formales, hay una serie de terminología y nociones auxiliares. Describiremos a continuación, algunas de esas nociones.
Definición 1. Decimos que un sistema formal S es:
1. coherente, cuando haya expresiones bien formadas que no son teoremas.
2. consistente, cuando no haya una expresión bien formada f , tal que ella y
su negación sean teoremas del sistema. En caso contrario, diremos que el
sistema es inconsistente o contradictorio.
3. categórico, cuando para cada fórmula se cumpla que la fórmula o su negación es un teorema del sistema.
4. saturado cuando al agregar a los axiomas una fórmula que no era un teorema, el sistema resultante sea inconsistente.
5. un sistema con axiomas independientes entre sí, cuando la exclusión de
cualquier axioma, hace desaparecer a algunos teoremas.
9
Revisemos nuestro ejemplo de sistema formal respecto a las nociones introducidas. Claramente, el sistema es coherente. Por ejemplo, abcabb es una expresión
bien formada que no es un teorema. También el sistema es trivialmente independiente, pues no contiene más que un axioma.
Las afirmaciones anteriores, obviamente no son “formales”. Son afirmaciones
acerca del sistema, no del sistema. Tales afirmaciones se dirá que son metaafirmaciones.
5.
Interpretaciones y “Realidad”
La manera de describir o presentar a un sistema formal es ciertamente muy
distinta de la manera como el sistema formal se originó. Una serie de eventos
acontecen en la creación o invención de la teoría. La mayoría de ellos son irrelevantes a la teoría misma; especialmente cuando la teoría misma es el objeto
de estudio, como sucede frecuentemente con los sistemas formales. La mística
manzana sobre la cabeza de Newton no tiene significado en la teoría de la mecánica. Del mismo modo, el hecho de que Newton fuera inglés es irrelevante desde
el punto de vista del formalismo; aunque tal hecho pudiera ser interesante en la
sociología de las invenciones.
La necesidad de la objetividad nos llevó a aceptar como único criterio para
seleccionar los axiomas y las reglas de deducción el deseo del autor del sistema. Pero cuando hablamos de la creación del sistema, la situación es diferente.
La creadora o creador o creadores tienen ante sí una serie de hechos que quieren
enlazar entre sí como una serie de principios básicos y deducciones sobre esos hechos. Esto condiciona de manera natural la selección de los elementos del sistema
formal que se construirá. Aceptando lo anterior, es necesario destacar que desde el
punto de vista de la formalidad, lo importante es que una vez construido, el sistema sea un objeto externo de estudio. Las intenciones de los autores desaparecen, o
mejor dicho no aparecen directamente. ¿Cómo podremos juzgar el éxito del autor
en la formalización de los hechos que quería describir? La verificación consistirá
en asociar un “significado” a los objetos del sistema formal; especialmente la que
el, la o los autores tenían en mente. Y entonces, ver como el sistema interpretado
da cuenta de los hechos.
Más formalmente, diremos que una interpretación de un sistema formal consiste en:
la asociación a algunos, eventualmente todas, sus expresiones bien formadas
10
(incluyendo también a los símbolos elementales) de objetos correspondiente
en la “realidad”, y
la asociación de algún significado a la noción de validez, que nos servirá de
interpretación para los axiomas y reglas de deducción.
Llamamos modelo del sistema formal a tal interpretación. Es usual y, a veces
conveniente, tener diferentes modelos para un mismo sistema formal. Esto dice
que nuestra “teoría” es amplia, en el sentido de dar cuenta de diversas “realidades”. Cuando estemos examinando un sistema formal de esta manera, diremos
que hemos adoptado un punto de vista externo al sistema formal. Desde el punto
de vista externo, el sistema formal será declarado exitoso en la manera con que se
adapta a la situación que se quería formalizar. Si por ejemplo nuestra intención era
formalizar la lógica clásica, uno de los teoremas del sistema debería corresponder
al principio del tercer excluido. Si el sistema no lo hiciera, debería ser declarado
incompleto (externamente).
Uno de los problemas centrales—en el estudio de los sistemas formales, es
como efectuar demostraciones acerca del sistema. En particular, si nuestro sistema intenta formalizar la lógica, como “probar” que dicha formalización es “lógicamente correcta”.
El concepto clave es la noción de “demostrabilidad”. ¿Qué significa haber probado algo? ¿Cómo probar que la “Lógica Formal” construida es correcta? ¿Cómo
asegurarse de la consistencia de tal sistema? Un breve recuento de la historia del
tema servirá para finalizar este artículo. El recuento indicará los éxitos y los fracasos(?) alcanzados hasta hoy día.
6.
Algunos aspectos históricos
Las primeras investigaciones se centraron alrededor de la lógica y la teoría
elemental de números. Toda teoría científica interesante necesita de estos dos elementos. Se buscó pues “fundamentar” esas teorías. En 1900 David Hilbert, el matemático más prominente de su tiempo, listó una serie de problemas no–resueltos.
Entre ellos, hallar un método para probar la validez o no de cualquier expresión
en el lenguaje de lógica formal llamado “cálculo de predicados”. Hilbert creía que
era posible hallar tal método. Alrededor de 1901, Bertrand Russell descubrió la
paradoja que lleva su nombre: el ejemplo histórico indicado en la introducción.
La sorpresa y consternación causada por tal paradoja, y otras que le siguieron,
motivó trabajos más intensos en el área de lógica. Sin embargo, la creencia básica
11
continuaba siendo la posibilidad de realizar el programa de Hilbert. Se necesitaría
mayores precauciones al escribir la teoría y era tan sólo eso: materia de cuidados.
En 1931, Kurt Gödel probó su famoso teorema de incompletitud. Tal teorema establece que en cualquier sistema formal, lo suficientemente rico para incluir
la teoría de números, incluye expresiones indecidibles. Es decir expresiones para las cuales no se puede decidir, en el sistema, la validez o invalidez. Lo que
hace interesante el resultado de Gödel, es que algunas de esas expresiones pudieran ser intuitivamente verdaderas, o al menos no producir contradicciones cuando
sean agregadas a los axiomas del sistema. Tendremos pues, necesariamente, que
en cualquier sistema formal lo suficientemente rico para deducir internamente la
aritmética, habrá expresiones cuya validez o invalidez no podrá nunca ser probada en el sistema. El descubrimiento de Gödel, acaba con el programa original de
Hilbert. Hay, sin embargo, una modificación obvia, consistente en preguntarse por
un procedimiento para demostrar aquellas expresiones que pueden teóricamente
ser probadas.
En 1936, Alan Turing introdujo unos artificios mentales, llamados hoy en día
las máquinas de Turing, con la intención de resolver el problema originalmente
planteado por Hilbert. Las máquinas de Turing son modelos muy simple de máquinas, capaces de realizar una serie finita y bien definida de operaciones. Con
la ayuda de estas máquinas se estableció (nuevamente) la imposibilidad de la resolución del problema de Hilbert. Más interesante aún, se definió una serie de
funciones, los productos de las máquinas de Turing, como las funciones efectivamente computables.
Los problemas de lógica se redujeron entonces al problema de computabilidad
en máquinas de Turing. Como dijimos, uno de los primeros resultados, fue hallar
que era imposible desarrollar un procedimiento que determinara la “demostrabilidad” o no, de una expresión, lo cual estaba contenido en los trabajos de Goëdel.
Pero, las investigaciones de Turing produjeron además la respuesta negativa para
el problema de Hilbert reducido; o sea, tampoco es posible hallar un procedimiento para probar las expresiones teóricamente demostrables. Los resultados de las
investigaciones anteriores han ayudado a establecer la noción de algoritmo, como
el paradigma de un procedimiento eficaz. Un procedimiento que se realiza en un
número finito de pasos claramente especificados. Tal noción será central en el estudio teórico de las funciones computables por computadoras. En este contexto
las preguntas básicas cambian su apariencia, pero son esencialmente las mismas.
¿Existe un algoritmo para hacer . . . ?
Nuevos problemas se han agregado a la lista de “indecidibles” o “no–computables”.
12
La recursividad, central en la formulación de reglas de formación y deducción,
también ha sido estudiada por sí misma. Como era de suponer, se ha hallado
íntimas relaciones entre este tema y los anteriores. Llegaremos hasta aquí, con
esta descripción e historia de los sistemas formales. La importancia de los mismos, aparte de las aplicaciones utilitarias, reside teóricamente en la capacidad
para mostrar los límites del conocimiento formal y prácticamente, como una guía
para la exposición de teorías, particularmente las matemáticas. Para finalizar, deseamos indicar una referencia no–técnica. Se trata de un libro escrito por Douglas
Hofstadter. En una exposición excelente, Hofstadter ha desarrollado los temas anteriores y otros afines de manera que cualquier lector interesado pueda apreciar
los temas discutidos. También constituye una magnífica introducción a los temas
“por venir”, a temas que hoy se discuten acerca de las posibilidades de las computadoras.
Bibliografía. Hofstadter, Douglas Gödel, Escher, Bach: An Eternal Golden Braid.
Vintage Books (1980).
RAHT–97 Sistemas Formales
13
Descargar