{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introducción al pensamiento lógico con Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Esta notebook fue creada originalmente como un blog post por [Raúl E. López Briega](https://relopezbriega.com.ar/) en [Matemáticas, Analisis de datos y Python](https://relopezbriega.github.io). El contenido esta bajo la licencia BSD.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"Introducción" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> \"No, no estás pensando...solo estás siendo lógico\"\n", "\n", "**[Niels Bohr](https://es.wikipedia.org/wiki/Niels_Bohr)**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introducción\n", "\n", "Cuando pensamos, estamos realizando un complejo proceso que se inicia con la creación de imágenes mentales en nuestro cerebro. Estas imágenes las integramos, emparejamos, proyectamos o asociamos con nuestros conceptos o esquemas mentales que representan nuestra realidad en un proceso simbólico que necesitamos estructurar en secuencias que sigan un orden racionalmente definido. Gracias a este proceso, podemos prever lo que sucederá, evaluar las consecuencias de nuestros actos; y anticiparnos para evitar episodios desfavorables. Naturalmente, al ser seres humanos, este proceso de pensamiento puede verse afectado por nuestras emociones y otros factores físicos o sociales que prejuzgan nuestra manera de representar las cosas. Una de las herramientas que tenemos para evitar errores en nuestro pensamiento es la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica).\n", "\n", "\n", "## ¿Qué es la Lógica?\n", "\n", "Una de las principales herramientas que poseemos para intentar comprender la realidad que nos rodea es la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica). Más formalmente la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica) es un arte en la ciencia de la comprensión o el razonamiento. Se trata de avanzar en nuestra comprensión de una manera ordenada y correcta y que nos brinde facilidad. Se centra en el estudio de los procedimientos válidos y no válidos de pensamiento, es decir, en procesos como la [demostración](https://es.wikipedia.org/wiki/Demostraci%C3%B3n_matem%C3%A1tica), la [inferencia](https://es.wikipedia.org/wiki/Inferencia) o la deducción, así como en conceptos como las [falacias](https://es.wikipedia.org/wiki/Falacia), las [paradojas](https://es.wikipedia.org/wiki/Paradoja) y la verdad. El propósito de la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica) es guiar de manera precisa los pensamientos que, de no ser exactos, fallarían.\n", "\n", "### Lógica y argumentación\n", "\n", "Los seres humanos tenemos la capacidad para establecer y verificar *hechos*, cambiar o justificar *opiniones*, y en general, dar sentido a las cosas. Hacemos esto a través de la *razón*; si bien todos somos capaces de *razonar*, alarmantemente solo un porcentaje pequeño de nosotros lo hace realmente bien. \n", "\n", "La [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica) es la ciencia que se usa para evaluar un [argumento](https://es.wikipedia.org/wiki/Argumento). Un [argumento](https://es.wikipedia.org/wiki/Argumento) es un intento de persuadir a alguién de algo a través de darle razones para aceptar una conclusión dada. Utilizamos y escuchamos [argumentos](https://es.wikipedia.org/wiki/Argumento) todos los días e incluso muchas veces sin darnos cuenta de ello. Si queremos reconocer un buen [argumento](https://es.wikipedia.org/wiki/Argumento) de uno malo y ganar argumentaciones, entonces debemos dominar los mecanismos de la racionalidad pura, es decir, las leyes de la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica). \n", "\n", "Un [argumento](https://es.wikipedia.org/wiki/Argumento) esta hecho de *premisas* y una *conclusión*. Las *premisas* suelen ser referidas también como *razones* o *evidencias*; en esencia, son simples proposiciones o declaraciones que se presentan para ser aceptadas como válidas. La *conclusión* no se más que la proposición final del [argumento](https://es.wikipedia.org/wiki/Argumento). Si el [argumento](https://es.wikipedia.org/wiki/Argumento) es válido, las *premisas* implican la *conclusión*.\n", "\n", "\n", "### Lógica inductiva y deductiva\n", "\n", "En general, usamos dos tipos de [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica), [deductiva](https://es.wikipedia.org/wiki/Razonamiento_deductivo) e [inductiva](https://es.wikipedia.org/wiki/Razonamiento_inductivo).\n", "Las [inferencias deductivas](https://es.wikipedia.org/wiki/Razonamiento_deductivo) empiezan con un conocimiento general y predicen una observación específica; es decir que, en esta forma de razonamiento, la *conclusión* sigue necesariamente a las *premisas*. El ejemplo clásico es:\n", "\n", " premisa 1: Todos los humanos son mortales.\n", " premisa 2: Socrates es humano.\n", " conclusión: Socrates es mortal.\n", "\n", "Las [inferencias inductivas](https://es.wikipedia.org/wiki/Razonamiento_inductivo) hacen lo contrario. Comienzan con observaciones de una experiencia particular y llegan a conclusiones generales. En la [inducción](https://es.wikipedia.org/wiki/Razonamiento_inductivo), la *conclusión* se basa simplemente en una [probabilidad](https://relopezbriega.github.io/tag/probabilidad.html). El ejemplo clásico es:\n", "\n", " premisa 1: El sol ha salido todos los días hasta ahora.\n", " conclusión: Por lo tanto, el sol saldrá mañana.\n", "\n", "La solución de problemas demasiado complicados para ser resueltos por medio del sentido común se logra mediante largas series de inferencias mezcladas, tanto [inductivas](https://es.wikipedia.org/wiki/Razonamiento_inductivo) como [deductivas](https://es.wikipedia.org/wiki/Razonamiento_deductivo), que se entrelazan entre la experiencia observada y se formalizan como el [método científico](https://es.wikipedia.org/wiki/M%C3%A9todo_cient%C3%ADfico). \n", "El propósito real del [método científico](https://es.wikipedia.org/wiki/M%C3%A9todo_cient%C3%ADfico) es asegurarnos de que la Naturaleza no nos ha inducido a pensar que sabemos algo que en realidad ignoramos. Un solo desliz [lógico](https://es.wikipedia.org/wiki/L%C3%B3gica) y se derrumba todo un edificio científico.\n", "\n", "\n", "## Falacias\n", "\n", "La importancia de conocer los mecanismos de la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica) radica en tratar de comprender si un [argumento](https://es.wikipedia.org/wiki/Argumento) que alguien dice es *lógicamente* consistente; ya que si es inconsistente, implica que no deberíamos creer lo que esa persona nos dice. Lo más importante a tener en cuenta es la *verdad* de sus *premisas*; es decir, si éstas *premisas* se sustentan en evidencias y observaciones de la realidad.\n", "\n", "Una [falacia](https://es.wikipedia.org/wiki/Falacia) es un error de razonamiento que invalida un argumento. Una de las características básicas del pensamiento lógico es la capacidad para detectar errores en las *conclusiones* o en las *premisas* de un determinado [argumento](https://es.wikipedia.org/wiki/Argumento) para poder evitar los razonamientos falaces, ya que éstos nos dificultan llegar a conocer la verdad de los hechos y nos hacen más susceptibles a la manipulación y la tergiversación. Las [falacia](https://es.wikipedia.org/wiki/Falacia) son, en definitiva, afirmaciones sin fundamento que a menudo se proclaman con una convicción que las hace sonar como si fueran hechos probados. Basta dedicar cinco minutos a escuchar las noticias o a leer la sección de política para encontrar cientos de ejemplos de [falacias](https://es.wikipedia.org/wiki/Falacia)! Veamos algunas de las más comunes:\n", "\n", "1. **Falacia “ad hominem”:** Los ataques personales son contrarios a los argumentos racionales. En lógica y retórica, un ataque personal se llama “ad hominem”, que en latín significa “contra el hombre”. En lugar de avanzar en un buen razonamiento, una falacia ad hominem reemplaza la argumentación lógica con un lenguaje ofensivo no relacionado con la verdad del asunto. (Muy común en la política argentina).\n", "\n", "2. **Falacia de la apelación a la autoridad:** Esta falacia argumentativa, también denominada “ad verecundiam”, ocurre cuando hacemos mal uso de una autoridad. Este mal uso de la autoridad puede ocurrir de varias maneras; por ejemplo: podemos citar solo a las autoridades, alejándonos convenientemente de otras pruebas comprobables y concretas como si la opinión de los expertos fuera siempre correcta; o podemos citar autoridades irrelevantes, autoridades pobres o autoridades falsas.\n", "\n", "3. **Falacia populista:** Esta falacia, también denominada argumento “ad populum”, supone que algo es cierto (o correcto o bueno) porque otras personas están de acuerdo con la persona que lo afirma; esto es, se acepta algo que se dice porque es popular.\n", "\n", "4. **Falacia de la generalización apresurada:** Una generalización apresurada es una declaración general sin evidencia suficiente para respaldarla. Ésta se produce a partir de la prisa por llegar a una conclusión, lo que lleva a la persona que argumenta a cometer algún tipo de suposición ilógica o a emitir estereotipos, conclusiones injustificadas o exageraciones.\n", "\n", "5. **Falacia del falso dilema:** Esta falacia argumentativa ocurre cuando fallamos al limitar las opciones a únicamente dos, cuando de hecho hay más opciones para elegir. A veces las opciones son entre una cosa, la otra, o ambas cosas juntas (no se excluyen entre sí). Y a veces hay una amplia gama de opciones.\n", "\n", "Obviamente, esta es una muestra muy pequeña de las trampas en las que puede caer nuestro pensamiento. Hay cientos de ellas!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Juegos de lógica\n", "\n", "A mí mamá le gustan las revistas de pasatiempos, esas revistas que traen cientos de juegos entre los que se incluyen sopas de letras, palabras cruzadas, autodefinidos, etc. Si bien ella tiene una habilidad increíble para resolver todos los juegos relacionados con palabras...siempre tuvo muuuchas dificultades con los del tipo Quién es Quién; en esos juegos, nos presentan un número de afirmaciones y en base a ellas debemos aplicar lógica deductiva para obtener la información faltante. Aquí va un ejemplo:\n", "\n", "Tenemos la siguiente información sobre cuatro personas:\n", "\n", "* Esteban tiene un auto azul\n", "* La persona que tiene un gato vive en España. Matías vive en Argentina\n", "* La persona con el auto negro vive en Brasil.\n", "* Juan tiene un gato.\n", "* Alex vive en Brasil\n", "* La persona que tiene un perro vive en Colombia.\n", "* ¿Quién tiene un conejo?\n", "\n", "El objetivo entonces es, a partir de estas afirmaciones, deducir quién es el dueño del conejo.\n", "\n", "Aquellos lo suficientemente valientes para intentar resolver el enigma con sus propios medios, pueden dejar de leer y recurrir al viejo método de papel y lápiz para arribar a la solución...los que prefieren aplicar la ley del menor esfuerzo (como es mi caso) pueden continuar leyendo para ver como con la ayuda de [Python](https://www.python.org/) y la librería [kanren](https://github.com/logpy/logpy), una librería que nos ayuda a implementar el paradigma de la [programación lógica](https://es.wikipedia.org/wiki/Programaci%C3%B3n_l%C3%B3gica); podemos resolver este enigma lógico y encontrar su solución." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# \n", "# Importando las librerías que vamos a utilizar\n", "from kanren import run, var, eq, membero\n", "from kanren.core import lall" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Enigma de Lógica\n", "# Declaro la variable gente\n", "gente = var()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Defino las reglas\n", "reglas = lall(\n", " # hay 4 personas\n", " (eq, (var(), var(), var(), var()), gente),\n", " # Esteban tiene un auto azul\n", " (membero, ('Esteban', var(), 'azul', var()), gente),\n", " # La persona que tiene un gato vive en España.\n", " (membero, (var(), 'gato', var(), 'España'), gente),\n", " # Matías vive en Argentina\n", " (membero, ('Matías', var(), var(), 'Argentina'), gente),\n", " # La persona con el auto negro vive en Brasil.\n", " (membero, (var(), var(), 'Negro', 'Brasil'), gente),\n", " # Juan tiene un gato.\n", " (membero, ('Juan', 'gato', var(), var()), gente),\n", " # Alex vive en Brasil\n", " (membero, ('Alex', var(), var(), 'Brasil'), gente),\n", " # La persona que tiene un perro vive en Colombia.\n", " (membero, (var(), 'perro', var(), 'Colombia'), gente),\n", " # ¿Quién tiene un conejo?\n", " (membero, (var(), 'conejo', var(), var()), gente)\n", ")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Ejecuto la solución\n", "soluciones = run(0, gente, reglas)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# Extraigo la respuesta\n", "dueño = [nombre for nombre in soluciones[0] if 'conejo' in nombre][0][0]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Matías es el dueño del conejo\n", "\n", " Detalle del enigma:\n", "\n", "Nombre\t\tMascota\t\tColor de auto\t\tPaís\n", "============================================================\n", "\n", "Esteban\t\tperro\t\tazul\t\tColombia\n", "\n", "Juan\t\tgato\t\t~_9\t\tEspaña\n", "\n", "Matías\t\tconejo\t\t~_11\t\tArgentina\n", "\n", "Alex\t\t~_13\t\tNegro\t\tBrasil\n" ] } ], "source": [ "# Imprimo los resultados.\n", "print('\\n' + dueño + ' es el dueño del conejo')\n", "print('\\n Detalle del enigma:')\n", "atributos = ['Nombre', 'Mascota', 'Color de auto', 'País']\n", "print('\\n' + '\\t\\t'.join(atributos))\n", "print('=' * 60)\n", "for item in soluciones[0]:\n", " print('')\n", " print('\\t\\t'.join([str(x) for x in item]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como podemos ver en el detalle del enigma, con la información proporcionada todavía hay datos que no podemos deducir, pero a pesar de la información incompleta, el programa sí pudo deducir la pregunta que estábamos buscando. Matías, que vive en Argentina, es el dueño del conejo.\n", "\n", "Aquí finaliza este artículo. Si bien la [lógica](https://es.wikipedia.org/wiki/L%C3%B3gica) es una herramienta muy útil dentro de la compleja maquinaria de nuestro pensamiento, y nos ayuda a pensar con más claridad y menos errores; no por ello debemos confiar ciegamente en ella y dejar de seguir nuestros instintos. Obviamente este artículo va dedicado a una de las personas que más amo en el mundo, mi mamá! y su constante lucha con los juegos de lógica. Tal vez con algún día los pueda resolver... 😆\n", "\n", "Saludos!\n", "\n", "*Este post fue escrito por [Raúl e. López Briega](https://relopezbriega.github.io/) utilizando [Jupyter notebook](https://jupyter.org/). Pueden descargar este [notebook](https://github.com/relopezbriega/relopezbriega.github.io/blob/master/downloads/CausalPY.ipynb) o ver su version estática en [nbviewer](https://nbviewer.ipython.org/github/relopezbriega/relopezbriega.github.io/blob/master/downloads/logicaPy.ipynb).*" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }