viernes, 11 de diciembre de 2009

Lógica computacional

El gran filósofo y matemático Gottfried Wilhelm Leibniz fue el primero en afirmar la posible existencia de algo equivalente a una lógica formal completa para describir el razonamiento. Leibniz no estaba satisfecho con la lógica aristotélica y desarrolló sus propias ideas para mejorarla. Estaba convencido de que podría desarrollar un lenguaje para, y un cálculo de, los razonamientos que sería tan importante como el cálculo desarrollado por él mismo y Newton para las derivadas y las integrales. Llamó “lingua characteristica” a este nuevo lenguaje y “calculus ratiocinator” al esperado calculo, con el cual, la mente sería liberada de tener que pensar en las cosas en sí mismas, y aún así todo funcionaría perfectamente.

Leibniz esperaba que estas nuevas ideas expandieran la capacidad de razonamiento mediante la reducción a un cálculo simbólico de mucha de la labor necesaria para descubrir cómo obtener determinada conclusión a partir de unas premisas dadas, y cómo comprobar la corrección de una deducción. Dicho de otro modo, esperaba la existencia de un cálculo análogo al cálculo infinitesimal, pero un cálculo de razonamientos para tratar las deducciones con proposiciones. Pese al sueño de Leibniz, la lógica matemática se iba gestando más lentamente; el desarrollo de las ideas, notación y formalismos adecuados para la obtención de conceptos similares al cálculo diferencial, en cuanto a potencia, para la lógica necesitó varios siglos más. Se puede hacer un símil con la división habitual de periodos históricos, aunque es preciso notar que no coinciden temporalmente con los periodos homónimos de la Historia Universal, y así dividir el desarrollo de la lógica en una Edad Antigua, que se corresponde con la Lógica Tradicional (500 a.C–1847); una Edad Media, con el desarrollo de la Lógica Simbólica (1847–1880); una Edad Moderna, en la que se introduce la Lógica Matemática de manera formal (1880–1960); y una Edad Contemporánea, en la que surge la Lógica Computacional (desde 1960 a la actualidad).

Con el surgimiento cada vez más acelerado de nuevas tendencias y tecnologías informáticas, tales como la programación orientada a objetos, sistemas en paralelo y distribuidos, lenguajes de cuarta generación, bases de datos, multimedia, etc., y por la necesidad impuesta por “la moda” de estar constantemente actualizados, se ha descuidado notablemente, por buena parte de las personas que manejan la actualidad informática, el aspecto teórico y formal de la misma. La Importancia de una teoría formal está sustentada en la capacidad para establecer criterios de veracidad científica, sobre los resultados arrojados por la teoría, basados en la construcción axiomática de la misma, para otorgarle a la teoría el carácter de ser consistente. Este poder de la formalización se proyecta directamente a los objetos y fenómenos que se estudian a la luz de la teoría. El estudio de cualquier fenómeno mediante la formalización, requiere bases teóricas sólidas que soporten las descripciones y comportamientos del objeto de estudio, siendo la formalización una nueva alternativa para el estudio de diferentes fenómenos. De esta forma este curso contribuirá a acercar al estudiante a saber de dónde salen las cosas que él, inclusive, ya está trabajando.

La lógica computacional es una disciplina que estudia la aplicación de la lógica clásica formal para la representación computacional de argumentos, las técnicas de deducción automática y asistida por computadora; sus fundamentos relacionados con validez y completes de sistemas de proposiciones; y las aplicaciones de esas técnicas a las diferentes áreas de las ciencias computacionales en todas las etapas de desarrollo de software, es decir, en la especificación, diseño, construcción y verificación formal de programas. En este objetivo concurre junto con la teoría de la computación y el análisis de algoritmos.

La lógica matemática es un subcampo de la lógica y las matemáticas. Consiste en el estudio matemático de la lógica y en la aplicación de este estudio a otras áreas de las matemáticas. La lógica matemática guarda estrechas conexiones con las ciencias de la computación y la lógica filosófica. La lógica matemática estudia los sistemas formales en relación con el modo en el que codifican conceptos intuitivos de objetos matemáticos como conjuntos, números, demostraciones y computación. Esta lógica suele dividirse en cuatro subcampos: teoría de modelos, teoría de la demostración, teoría de conjuntos y teoría de la recursión. La investigación en lógica matemática ha jugado un papel fundamental en el estudio de los fundamentos de las matemáticas. La lógica matemática fue también llamada lógica simbólica. El primer término todavía se utiliza como sinónimo suyo, pero el segundo se refiere ahora a ciertos aspectos de la teoría de la demostración. La lógica matemática no es la “lógica de las matemáticas” sino la “matemática de la lógica”, incluye aquellas partes de la lógica que pueden ser modeladas y estudiadas matemáticamente.

El nivel menos abstracto dentro de una computadora está constituido por circuitos electrónicos que responden a diferentes señales eléctricas, siguiendo los patrones de la lógica booleana; esto es, compuertas lógicas que devuelven un valor dependiendo de las entradas que se le dan al sistema. Existen ocho compuertas lógicas básicas con las cuales se pueden formar sistemas muy complejos. Todas ellas son representadas mediante un símbolo y una tabla de valores de verdad, que es simplemente un cuadro donde se ubican todas las posibles entradas y los valores que devolvería la compuerta dados dichos valores. Todo sistema computacional, por muy complejo que sea, no está compuesto por más que circuitos electrónicos que únicamente entienden un lenguaje binario. La lógica computacional se encarga de modelar y optimizar tales sistemas a este nivel.

A lo largo de muchos años las computadoras han ido adquiriendo una gran importancia en la vida de los seres humanos, y han surgido nuevos y más complejos lenguajes de programación. Un algoritmo se define como una serie de pasos que deben realizarse, dadas ciertas entradas, para producir un resultado. Los lenguajes de programación pueden ser tan básicos o tan complejos como el “lenguaje ensamblador” en que se le indican las instrucciones a la computadora casi en el lenguaje máquina, que entre otras cosas es el único lenguaje que entiende la computadora, es decir en código binario. De hecho, cualquier programa en lenguaje ensamblador puede ser fácilmente transformado a código binario, siguiendo una serie de reglas.

Pero cuando se habla de la programación de alto nivel, la complejidad se torna en otro sentido. Lo complicado entonces, es estructurar los algoritmos de manera tal, que se puedan lograr cosas bastante complejas y de gran utilidad en la computación. La lógica aquí es muy importante, ya que determina la manera en que se aplicaran los pasos del algoritmo para resolver el problema. Sin la lógica matemática los programas simplemente serían instrucciones aleatorias, donde la computadora podría elegir cuál realizar primero. Lo que es más, instrucciones como las de decisión, en las que se sigue un sub-algoritmo si se cumple dicha instrucción y otro si no se cumple, no tendrían ningún sentido y no podrían ser resueltas sin la ayuda de la lógica. La lógica, entonces, es importante a este nivel de abstracción, ya que sin ella no es posible estructurar un programa o algoritmo que resuelva lo que se espera obtener. De todas formas, es muy importante tener un claro conocimiento de lógica matemática para llegar a crear programas interesantes. Sin este conocimiento, la programación se vuelve una herramienta sumamente complicada, tanto que sería imposible crear las maravillas que existen en el dominio de las computadoras.

Algunos tópicos de interés de la lógica computacional son: (1) Creación de nuevas lógicas y métodos formales. Conforme la Informática ha ido evolucionando, en paralelo ha ido creciendo la necesidad de considerar lógicas no clásicas que permitan modelar distintos aspectos del razonamiento humano o distintas aplicaciones; por ejemplo, el control de procesos involucra modalidades como tiempo, conocimiento y creencia, es hoy una de las líneas de mayor interés y que reclama mayores esfuerzos de investigación. (2) Lenguajes lógicos de programación. En este punto se incluye el estudio de las relaciones entre la lógica y los lenguajes de programación, incluyendo los fundamentos lógico- matemáticos de los lenguajes de programación, como el uso de la lógica como base para definir un lenguaje de programación, o para proporcionar la semántica de los programas, y la lógica como herramienta matemática para expresar características de los programas, como en el paradigma de programación lógica con restricciones. (3) Lógica para el procesamiento de información. En esta área se pueden destacar varias ramas en las que interviene la lógica, por ejemplo el desarrollo de sistemas de conocimiento y bases de datos, los sistemas multiagente, y el procesamiento del lenguaje natural.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Septiembre 21 de 2009

No hay comentarios: