
\chapter*{COMPUTADORAS Y PROCESOS SIMB\'OLICOS}

\setcounter{chapter}{7}
\setcounter{section}{0}


\section{?`Las computadoras pueden pensar?}

   La interrogante acerca de si las computadoras pueden pensar,
constituye uno de los temas m\'as apasionantes de la ciencia cuyo
inter\'es crece en la medida en que se registran mayores avances en el
perfeccionamiento de los instrumentos de la computaci\'on.


\begin{figure}[h] 
\centering 
\begin{picture}(262,220)
\put(0,0){\epsfxsize=262pt \epsffile{foto20.eps}} 
\put(268,3){\setbox\rotbox=\hbox{ M. C. Escher.}\rotl\rotbox\ }
\end{picture}
\end{figure} 



   Existe mucha pol\'emica al respecto, en buena medida la
dificultad para arribar a una conclusi\'on depende del grado de
claridad que se tenga en relaci\'on con los procesos del pensamiento.
En la b\'usqueda de esta claridad, la humanidad desde tiempos
inmemoriales ha destinado no pocos esfuerzos.
\medskip
   
  Con los trabajos de los griegos cl\'asicos, no s\'olo se busca
establecer los fundamentos de la geo\-metr\'{\i}a (Euclides), sino
tambi\'en poner de relieve las formas del pensamiento (Arist\'oteles
y Plat\'on).
\medskip
 
   Las preocupaciones que sobre el pensamiento ocuparon a los
antiguos, se extienden a lo largo de la historia hasta nuestros d\'{\i}as.
\medskip
 

El propio Rene Descartes y Gottfried W. Leibniz mostraron el poder
del \'algebra para simbolizar e incluso mecanizar la geometr\'{\i}a.
\medskip
 
M\'as tarde George Boole y Augustus DeMorgan en sendos trabajos aportaron
nuevos simbolismos algebraicos, ahora aplicables a los procedimientos l\'ogicos.
En particular, Boole estaba convencido de que la simbolizaci\'on del
lenguaje vigorizar\'{\i}a la l\'ogica. 
\medskip
 
    Como contribuci\'on a esta empresa, otros pensadores intentaron
unificar las formas del razonamiento con la l\'ogica y los procesos
computacionales, sin intentar hacer prevalecer a ninguno de
ellos.
\medskip
 
 As\'{\i} tenemos que Bertrand Russell y Alfred North Whithead,
en su obra monumental Principia Mathematica recopilaron y examinaron
exhaustivamente las matem\'aticas en un intento por articularla bajo el
principio del \'algebra de Boole.

     
\begin{figure}[h] 
\centering 
\begin{picture}(210,332)
\put(0,0){\epsfxsize=210pt \epsffile{foto21.eps}} 
\put(214,3){\setbox\rotbox=\hbox{ M. C. Escher.}\rotl\rotbox\ }
\end{picture}
\end{figure} 


\medskip
As\'{\i}, como los griegos cl\'asicos lo hicieron con la geometr\'{\i}a,
Russell y Whitehead intentaron sustentar la matem\'atica sobre principios
matem\'aticos, y de esta manera, imprimirle una estructura de su propia
naturaleza. Aunque hoy sabemos que esto no es posible, sus trabajos
permitieron identificar que una parte considerable de las matem\'aticas
se pueden construir a partir del manejo mec\'anico de los s\'{\i}mbolos.
\medskip
     
   Por su parte, David Hilbert -qui\'en fue el promotor de la idea
de buscar la coherencia de las matem\'aticas- en 1926 establec\'{\i}a que ``en
esencia, el objeto del pensamiento matem\'atico, son los s\'{\i}mbolos en s\'{\i}
mismos. Estos s\'{\i}mbolos no pueden ser considerados m\'as tiempo como
simples idealizaciones de los objetos f\'{\i}sicos''.



\medskip
   El continuo desarrollo de estas ideas permiti\'o a A. Church,
elaborar su teor\'{\i}a de las funciones recursivas, en la que,
reformul\'o el concepto de algoritmo; a E. L. Post por su sistema de 
producciones. En tanto que Alan M. Turing elaboraba sus modelos matem\'aticos recurriendo
a analog\'{\i}as mec\'anicas. Markov formulaba la teor\'{\i}a de los algoritmos
que llevan su nombre, y Kurt G\"{o}del su esquema aritm\'etico acerca del problema
de la coherencia de los sistemas formales.
\medskip
    
   Cada uno de ellos, no obstante haber escogido perspectivas diferentes en
sus an\'alisis, arrib\'o a resultados equivalentes.
\medskip
     
\begin{enumerate}
  \item Definieron el concepto de Algoritmo y produjeron esquemas
descriptivos de su natu\-raleza.
  \item Contribuyeron en el esclarecimiento de la naturaleza de los
procesos computables.
   \item Establecieron que existe la imposibilidad de determinar
por medio de un proceso, la viabilidad de otro. 
   \item Concluyeron que era posible la construcci\'on de procedimientos de
prop\'ositos universales, aplicables a problemas espec\'{\i}ficos con la
sola descripci\'on apropiada.
\end{enumerate}


\begin{figure}[h] 
\centering 
\begin{picture}(170,240)
\put(0,0){\epsfxsize=170pt \epsffile{foto22.eps}} 
\put(177,3){\setbox\rotbox=\hbox{ M. C. Escher.}\rotl\rotbox\ }
\end{picture}
\end{figure} 



\section{La Computadora y los s\'{\i}mbolos}

   Al mismo tiempo que se elaboraban estas construcciones
formales, se desarrollaba tambi\'en la tecnolog\'{\i}a electr\'onica, de
manera que al confluir ambos procesos, se posibilit\'o la cons\-trucci\'on de
las modernas computadoras.
\medskip
  
   Aunque originalmente las primeras computadoras, se construyeron para 
realizar operaciones aritm\'eticas en gran escala, muy pronto fue
evidente que tambi\'en se pod\'{\i}an utilizar para otro tipo de manipulaci\'on
de s\'{\i}mbolos, porque ciertamente, los n\'umeros son tambi\'en s\'{\i}mbolos
pero no son todos los s\'{\i}mbolos; existen otros -quiz\'a m\'as importantes- de diferente naturaleza.
\medskip
  
   En efecto, muy r\'apidamente la computadora comenz\'o a ser
utilizada en el manejo de informaci\'on no num\'erica; principalmente
en el texto escrito y los s\'{\i}mbolos de la matem\'atica no aritm\'etica.
\medskip
  
   Desde las primeras aplicaciones no num\'ericas, fue posible obtener no s\'olo
los resultados inicialmente esperados, sino tambi\'en la consolidaci\'on de
ciertos procedimientos de orden general. Tal es el caso de IPL, un conjunto
de subrutinas elaboradas por Newell, Simon y Shaw en el Instituto Tecnol\'ogico
de Carnegie orientadas a organizar datos con el empleo de estructuras
distintas a las tablas, en las que las relaciones que guardan con los datos entre s\'{\i}, son tan importantes como los datos mismos.
\medskip
  
     De igual forma surge FLPL (Fortran List Processing Language), como una
colecci\'on de subrutinas  -construidas en Fortran- que permitieron organizar
informaci\'on en forma de estructuras ramificadas. Aunque debe decirse que
su \'exito fue limitado.
\medskip
  
   No tardaron en surgir verdaderos lenguajes de programaci\'on,
entre los cuales merecen menci\'on especial COMIT, desarrollado por
V. Yngre y Lisp (List Processor), desarrollado por John McCarty
- y sus alumnos-, en el Instituto Tecnol\'ogico de Massachusetts al
final de los 50's. Lisp se convertir\'{\i}a por antonomasia, en el
lenguaje de las aplicaci\'on en inteligencia artificial.
\medskip
  
   Lisp reuni\'o en su definici\'on pocos conceptos, pero todos ellos
de importancia capital: estructuras ramificadas (\'arboles binarios
o listas), uso de texto escrito, recursividad y el concepto de
m\'aquina universal. Como puede apreciarse, resulta ser un lenguaje compacto,
consistente consigo mismo.
\medskip
  
   Lisp incluy\'o la recursividad, posiblemente porque su autor fue estudiante
de la Universidad de Princeton en donde las ideas de Church, Post y Turing
ten\'{\i}an considerable arraigo y difusi\'on. 
\medskip
  
   Fue tambi\'en el primer lenguaje que comprend\'{\i}a el concepto de
funci\'on universal.
\medskip
  
   No obstante que fue el lenguaje que mejor potenci\'o la
computaci\'on simb\'olica, dado que su dise\~no reuni\'o la elegancia,
la flexibilidad y la sencillez, sufri\'o de algunas deficiencias de
\'{\i}ndole pragm\'atica:
\medskip
  
\begin{enumerate}
  \item La recursividad inevitable en Lisp, ya que forma parte
del lenguaje exige la conservaci\'on de resultados parciales a\'un cuando no
se usen, por ello, los programas en Lisp requieren grandes capacidades de
memoria y tambi\'en prolongados tiempos de ejecuci\'on. No es propiamente una
deficiencia de lenguaje, sino una caracter\'{\i}stica de la naturaleza de los
problemas a los que se aplica.
 
   \item Sus deficiencias para c\'alculo num\'erico fueron tan agudas, porque
carec\'{\i}a de arit\-m\'etica elemental de cualquier tipo. Esta carencia es
m\'as imputable a la pereza de los autores que a una imposibilidad conceptual,
aunque no falt\'o qui\'en intentara -con poco \'exito- subsanarla.
\medskip
     
   La programaci\'on involucrada no es dif\'{\i}cil, pero la definici\'on
misma de un n\'umero es m\'as compleja y profunda que la de un conjunto.
\medskip
  
   Para un manejo adecuado de la aritm\'etica, los lenguajes deben
distinguir a los n\'umeros de entre los otros s\'{\i}mbolos. La compresi\'on
del concepto n\'umero, requiere de s\'olidos fundamentos en el lenguaje y su
acercamiento conceptual, exige elaborados esquemas matem\'aticos para su
construcci\'on formal. Y esto lo deben ofrecer de manera que no importunen al
usuario con formas grotescas para indicar la aritm\'etica.

  

 \item Otras quejas menores, producto de las caracter\'{\i}sticas cosm\'eticos del lenguaje, entre las que se pueden citar el empleo de la
notaci\'on funcional y el abundante uso de par\'entesis.
\end{enumerate}
 
\begin{figure}[h] 
\centering 
\begin{picture}(260,200)
\put(0,0){\epsfxsize=260pt \epsffile{foto23.eps}} 
\put(266,3){\setbox\rotbox=\hbox{ M. C. Escher.}\rotl\rotbox\ }
\end{picture}
\end{figure} 



\section{El lenguaje Convert, la programaci\'on a base de ejemplos. Una
aportaci\'on nacional} 
 
   Durante un curso que imparti\'o el Dr. Harold V. McIntosh en el
CeNaC (Centro Nacional de C\'alculo del IPN) en 1965, defini\'o el
lenguaje de programaci\'on Convert y apoyado por algunos de sus
alumnos escribi\'o en Lisp el primer interpretador para el
lenguaje; se utilizaron para el efecto, las facilidades
disponibles por v\'{\i}a telef\'onica del sistema SDCQ32 (System
Development Corporation) instalado en Santa M\'onica, California.
Las principales descripciones de los primeros resultados sobre
Convert se publicaron en la tesis profesional de Adolfo Guzm\'an y en un
art\'{\i}culo en la revista ACM (Association for Computing Machinery).
\medskip
  
   Desafortunadamente, las consecuencias del doble proceso de
interpretaci\'on involucrados en el uso de Convert (ya que Lisp generalmente
era interpretado) no se hicieron esperar. El tiempo de ejecuci\'on de
las primeras aplicaciones de Convert se vieron multiplicados por
un factor de mil. Para mejorar el rendimiento del lenguaje se
plante\'o la necesidad de compilarlo para evitar el doble proceso e
interpretaci\'on. Uno de estos intentos se esboz\'o y parcialmente desarroll\'o
en la tesis profesional de Raymundo Segovia.
\medskip
  
   Los principios de programaci\'on del lenguaje Convert se pueden
resumir en la programaci\'on descrita con ejemplos, esto es:
``si ves algo de esta naturaleza, identifica los elementos que los conforman
y sustit\'uyelos de esta otra manera''. En su definici\'on concluyeron dos
deseos:
\medskip
  
\begin{enumerate}
   \item Simplificar y sistematizar algunos programas para el reconocimiento de
patrones previamente elaborados en Lisp, entre los que se encontraban aquellos
para el c\'alculo de derivadas simb\'olicas de formas algebraicas.
 
   \item Realizar en una forma adecuada las transformaciones de Post para
simplificar los m\'etodos de reducci\'on y simplificaci\'on de las expresiones
algebraicas.
\end{enumerate}
\medskip
  
   Un programa en Convert es una colecci\'on de reglas que se confrontan
con un texto hasta que alguna de ellas se le puede aplicar. Las reglas pueden
ser terminales o iterativas, estas \'ultimas, reinician la confrontaci\'on del
texto.
\medskip
  
   Con patrones y esqueletos se forman las reglas de transformaci\'on en
Convert. Una regla consiste de un patr\'on y su esqueleto. Al confrontar la
regla con el texto, se intenta el ajuste del patr\'on, si la correspondencia
se verifica, el texto se transforma de acuerdo con el esqueleto.
\medskip
  
   Los patrones se clasifican en simples o compuestos. Los patrones simples
pueden ser constantes o variables. Los primeros son secuencias de s\'{\i}mbolos
que se indican textual\-mente, los variables deben marcarse para distinguirlos
entre los constantes.
\medskip
  
    La manera de marcar los patrones variables, depende del medio en que se
describe el programa. En forma manual se puede emplear letra cursiva, o el
recurso del subrayado. Pero en una computadora es m\'as conveniente el uso de
s\'{\i}mbolos especiales para este prop\'osito. En Convert se emplean
los par\'entesis angulares para distinguir a los patrones variables de los
constantes.
\medskip
  
   Los patrones compuestos se obtienen a partir de otros patrones por medio
de la composici\'on (concatenaci\'on), de las combinaciones l\'ogicas y del
uso de funciones, en este acto, con el empleo de una notaci\'on que
utiliza par\'entesis redondos para indicar el nombre de la funci\'on y sus
argumentos.
\medskip
 

   Un texto corresponde con un patr\'on cuando los elementos de ajuste inclu\'{\i}dos
en el patr\'on permiten establecer la correspondencia del patr\'on con el 
texto. En este proceso, se utiliza la flexibilidad que aportan los elementos
variables del patr\'on, ya que con los elementos constantes, la correspondencia
debe ser literal.
\medskip
   
   Cuando se establece la correspondencia del texto con el patr\'on, los
elementos variables del patr\'on adquieren una definici\'on que se emplea para
transformar el texto original, sustituyendo las definiciones de los elementos
variables del patr\'on en el esqueleto asociado.
\medskip
 
   Un esqueleto puede ser simple o compuesto. Los esqueletos simples son
constantes o variables, en este \'ultimo caso, la referencia es al valor de
la variable. Como en el caso de los patrones, los esqueletos compuestos, se
obtienen a partir de otros por concatenaci\'on y con el uso de funciones
que se denotan en la misma forma con el uso de par\'entesis redondos.
\medskip
  
   En Convert, el usuario puede definir patrones y esqueletos
complejos y referirlos por medio de un identificador para abreviar la
descripci\'on  de las reglas. En realidad, un programa consiste de cuatro elementos, la definici\'on de PATRONES, ESQUELETOS, VARIABLES y REGLAS.
\medskip
 
La forma de notaci\'on para las diferentes instancias del lenguaje, variables,
funciones y combinaciones l\'ogicas son algunos de los elementos que le
imprimen al programa en Convert su aspecto caracter\'{\i}stico.
\medskip
  
   
   Los lenguajes orientados al manejo de s\'{\i}mbolos tradicionalmente han
adolecido de programas para realizar aritm\'etica y para manejar arreglos,
Convert no fue tampoco la excepci\'on. No obstante ofrece algunas ventajas
para la manipulaci\'on de s\'{\i}mbolos. Algunas de sus principales
aplicaciones se citan a continuaci\'on:
 

\begin{enumerate}
 \item Modificaci\'on selectiva de un texto, particularmente en los casos en
que la modificaci\'on es m\'as complicada que una simple sustituci\'on. 
 
  \item B\'usqueda de informaci\'on en archivos. Para la localizaci\'on
de palabras clave y para la elaboraci\'on de \'{\i}ndices por referencias para
las palabras clave.
 
  \item Elaboraci\'on de ensambladores y compiladores. Y no s\'olo para los tipos
convencionales, sino para la traducci\'on de programas de un equipo a otro.
Tambi\'en se ha utilizado con \'exito en la elaboraci\'on de desensambladores y
descompiladores.
 
   \item Generaci\'on de programas complicados (en ensambladores, Fortran u   
otros lenguajes) a partir de protocolos descriptivos. Esta posibilidad ofrece
una nueva dimensi\'on para la elaboraci\'on de programas. Sin con Convert no
se puede realizar un trabajo de manera eficiente, con \'el se pueden construir
programas m\'as eficientes y de esta manera reducir el tiempo que de otra manera
resultar\'{\i}a ser desmedido.
 
   \item C\'alculo simb\'olico, tales como el c\'alculo de derivadas simb\'olicas y
el an\'alisis de conjuntos.
\end{enumerate}
   
\section{REC,  Compilador de Expresiones Regulares}
 
   Este lenguaje, tambi\'en dise\~nado por el Dr. McIntosh, se origin\'o a
partir de una solicitud muy expl\'{\i}cita: elaborar una prueba de aceptaci\'on
para una minicomputadora PDP-8 del Centro de C\'alculo Electr\'onico de la
UNAM.
\medskip
  
   El dise\~no de este lenguaje de programaci\'on fue motivado por el deseo de
incorporar la iteraci\'on en Lisp en una manera axiom\'atica, reformulando el 
lenguaje y rescatando sus caracter\'{\i}sticas m\'as importantes.
\medskip
  
   En la definici\'on de este lenguaje, el autor aprovech\'o las experiencias
adquiridas en los esfuerzos realizados para extender las caracter\'{\i}sticas
del lenguaje Lisp, particularmente los encaminados a dotarle de una
aritm\'etica adecuada y de funciones accesorias para manejo de textos.
\medskip
  
   Para la definici\'on del lenguaje, el autor identific\'o que la
gran mayor\'{\i}a de los procedi\-mientos computacionales consisten de
relativamente pocos elementos: una secuencia de operaciones, la selecci\'on
con base en c\'alculos intermedios y la repetici\'on de los procedi\-mientos
(iteraci\'on); y por ello, redujo los elementos de control a cuatro
s\'{\i}mbolos:
\medskip
  

\[\begin{tabular}{ll}
                   ( & par\'entesis izquierdo \\
                   : & dos puntos\\ 
                   ; & punto y coma\\ 
                   ) & par\'entesis derecho.\\
\end{tabular}\]
\medskip
  

 El lenguaje no incluye transferencias incondicionales
-ni las tendr\'a-, no utiliza etiquetas y por ello, se anticip\'o en una buena
medida al concepto de la programaci\'on estructurada.

\medskip
En REC se destina un s\'{\i}mbolo para denotar cualquier operaci\'on,
y se le atribuye un valor l\'ogico que interviene en el control del
programa. La secuencia de operaciones se indica concatenando los
s\'{\i}mbolos correspondientes. Su sintaxis utiliza par\'entesis redondos
para agrupar los s\'{\i}mbolos.
\medskip
  
    La toma de alternativas en REC, se realiza de acuerdo con el
valor de la operaci\'on, el valor verdad se emplea para continuar la secuencia
y el falso, para romperla y elegir otra opci\'on. Con ``;'' se separan las
secuencias alternativas y con ``:'' se indica la repetici\'on de las
operaciones desde el principio.
\medskip
  
   Adicionalmente, permite la definici\'on y el uso de subrutinas.
El uso de las subrutinas hacen de REC un lenguaje recursivo y su definici\'on
le otorga el car\'acter iterativo.
\medskip
  
Su estructura de control es, como se puede apreciar, fundamental y
econ\'omica.
\medskip
  

\begin{figure}[h] 
\centering 
\begin{picture}(250,205)
\put(0,0){\epsfxsize=250pt \epsffile{foto24.eps}} 
\put(256,3){\setbox\rotbox=\hbox{ M. C. Escher.}\rotl\rotbox\ }
\end{picture}
\end{figure} 

%\medskip
%\epsfysize=210pt  \hspace{0.8in}
%\epsffile{foto24.eps}   \ \ 
%\setbox\rotbox=\hbox{ M. C. Escher.
%}\rotl\rotbox\

\smallskip
Las primeras aplicaciones matizaron el desarrollo del lenguaje
enfil\'andolo en la direcci\'on del manejo de s\'{\i}mbolos, aunque otras
direcciones son tambi\'en posibles. 
\medskip
  
   La versi\'on del lenguaje para la edici\'on de textos tuvo un
amplio uso en diferentes aplicaciones, tanto administrativas como cient\'{\i}ficas y pedag\'ogicas.
Principalmente se utiliza para elaborar programas de servicio inclusive,
sistemas operativos completos - y genera\-dores de programas de aplicaci\'on-.
\medskip
  
Despu\'es de 20 a\~nos de desarrollo del lenguaje, por parte de
su autor y de una gran cantidad de sus alumnos entre los que destaca Gerardo
Cisneros por sus aportaciones, REC encontr\'o una nueva aplicaci\'on, que
consisti\'o en ofrecer una opci\'on para compilar Convert.
\medskip
  
De esta manera, la exasperante lentitud de los programas en
Convert ya no present\'o una barrera infranqueable para utilizarlo en m\'ultiples
aplicaciones no num\'ericas.
\medskip
 
Y con respecto a la pregunta original, podemos concluir que si bien en los
procesos del pensamiento los s\'{\i}mbolos y su manejo juegan un papel
de primer orden y que las computadoras participan del manejo simb\'olico
desde hace tiempo y cada d\'{\i}a lo hacen con mayor intensidad; tambi\'en es
cierto que -como ya lo hab\'{\i}a percibido la legendaria Lady Lovelace- en el
siglo pasado ``s\'olo pueden realizar aquello que se es capaz de describirles como hacerlo''.
\medskip
  
Por lo tanto, cuando las computadoras piensen, -si acaso llegan alg\'un
d\'{\i}a a hacerlo- ser\'a porque el hombre ha desentra\~nado los procesos del
pensamiento y ha sido capaz de describirle a un mecanismo la manera de
realizarlos.
 
