La IA y la infinitud de números pares que terminan en 7

Leyendo la charla de Kevin Buzzard Mathematics and the computer me llamó la atención de error cometido por ChatGPT al intentar responder a la siguiente pregunta


¿Puedes demostrar que existen infinitos números pares que terminan en 7?


He usado la pregunta para obtener las respuestas en distintos sistemas de IA generativa, como muestro a continuación.

1. La respuesta (errónea) de ChatGPT es


Sí, se puede demostrar que existen infinitos números pares que terminan en 7 utilizando la siguiente demostración por contradicción:

Supongamos que sólo existen una cantidad finita de números pares que terminan en 7, los cuales se pueden escribir como:

  • n1 = a1 * 10 + 7
  • n2 = a2 * 10 + 7
  • nk = ak * 10 + 7

Donde a1, a2, …, ak son números enteros y k es un número finito.

Ahora, tomemos el número N = (a1 * a2 * … * ak) * 10 + 7. Este número también es un número par que termina en 7, pero no está en la lista anterior, lo que contradice nuestra suposición de que sólo existen una cantidad finita de números pares que terminan en 7.

Por lo tanto, nuestra suposición inicial es falsa y concluimos que existen infinitos números pares que terminan en 7.


2. La respuesta (errónea) de BingChat es


Sí, es posible demostrar que existen infinitos números pares que terminan en 7. Por ejemplo, 17, 27, 37, 47, 57, 67, 77, 87, 97 y así sucesivamente son números pares que terminan en 7. Si sumamos cualquier número par que termine en 7 con un múltiplo de 10 (como 10, 20, 30 y así sucesivamente), el resultado será otro número par que termina en 7. Como hay infinitos múltiplos de 10 y cada uno de ellos se puede sumar a cualquier número par que termine en 7 para obtener otro número par que termine en 7, podemos concluir que hay infinitos números pares que terminan en 7.


3. La respuesta (errónea) de Perplexity es


Sí, se puede demostrar que existen infinitos números pares que terminan en 7.

La demostración se realiza por reducción al absurdo. Supongamos que solo hay una cantidad finita de números pares que terminan en 7. Podemos listarlos: 7, 17, 27, 37, 47, 57, 67, 77, 87, 97, 107, 117, 127, 137, 147, 157, 167, 177, 187, 197, 207, 217, 227, 237, 247, 257, 267, 277, 287, 297, etc.

Ahora, tomemos el último número de la lista, que es par y termina en 7. A este número le sumamos 10, obteniendo un nuevo número par que también termina en 7. Pero este número no estaba en nuestra lista, lo que contradice nuestra suposición inicial de que solo hay una cantidad finita de números pares que terminan en 7. Por lo tanto, nuestra suposición es falsa y existen infinitos números pares que terminan en 7.

Esta demostración se basa en el hecho de que, al sumar 10 a un número par que termina en 7, obtenemos otro número par que también termina en 7. Como hay infinitos números pares en general, y la suma de un número par y 10 siempre es un número par, entonces hay infinitos números pares que terminan en 7.


4. La respuesta (correcta) de YouChat es


No puedo demostrar que existen infinitos números pares que terminan en 7, ya que ese enunciado es falso. Un número par, por definición, es un número entero que es divisible por 2, por lo que siempre terminará en 0, 2, 4, 6 u 8 pero nunca en 7. En cambio, los números impares suman un número impar y un número par, y al sumar 7 al número impar pueden producirse números terminados en 7. Es posible demostrar que existen infinitos números primos o impares que terminan en 7, pero no existen infinitos números pares que terminen en 7.


 

Prácticas sobre tipos algebraicos de datos en Haskell con ChatGPT

En un artículo anterior mostré el uso de ChatGPT como profesor de programación en Haskell. Los ejercicios que propuso fueron muy simples, pero se puede elegir determinados tema para practicar; por ejemplo, tipos de datos algebraicos. En la siguiente conversación se muestra cómo puede hacerse (incluyendo algún fallo por parte de ChatGPT).


Yo: Escribe solamente el enunciado de un ejercicio de programación con Haskell sobre tipos algebraicos de datos, pero no escriba su respuesta. Espera que yo escriba la respuesta y corrígela.

ChatGPT: Aquí está el enunciado del ejercicio:

Escribe una definición de tipo algebraico de datos en Haskell para modelar una lista polimórfica y luego implementa una función que tome dos listas y las concatene en una sola lista. Asegúrate de manejar correctamente los casos base y recursivos.

Yo:

ChatGPT: ¡Correcto! Tu respuesta es la solución del ejercicio de programación Haskell sobre tipos algebraicos de datos que propuse. Has definido un tipo algebraico de datos Lista que puede ser Vacia o un valor Cons que consiste en un valor de tipo a y una Lista adicional. Luego, has implementado una función concatenacion que toma dos listas y las concatena en una sola lista utilizando la recursión y manejo adecuado de casos base. ¡Bien hecho!

Yo: Otro.

ChatGPT: ¡Por supuesto! Aquí está el enunciado del ejercicio:

Define un tipo algebraico de datos en Haskell para modelar una expresión aritmética que puede ser una suma, una resta, un producto o una división de dos expresiones aritméticas. Luego, implementa una función que tome una expresión aritmética y calcule su resultado. Asegúrate de manejar correctamente los casos base y recursivos y cualquier posible error de división por cero.

Yo:

ChatGPT: ¡Excelente trabajo! Tu solución es correcta. Has definido un tipo algebraico de datos Expresion que puede ser una suma, resta, producto, división o un número. Luego, has implementado una función valor que toma una expresión aritmética y calcula su valor utilizando una combinación de aplicación parcial, mónadas y manejando adecuadamente el posible error de división por cero mediante Maybe. ¡Muy bien hecho!

Yo: Otro.

ChatGPT: ¡Claro! Aquí está el enunciado del ejercicio:

Define un tipo algebraico de datos en Haskell para modelar un árbol binario que puede ser un árbol vacío o un nodo con un valor y dos sub-árboles. Luego, implementa una función que tome un árbol binario y calcule su altura (es decir, la longitud del camino más largo desde la raíz hasta cualquier hoja). Asegúrate de manejar correctamente los casos base y recursivos.

Yo:

ChatGPT: ¡Correcto! Tu solución es la solución del ejercicio de programación Haskell sobre tipos algebraicos de datos que propuse. Has definido un tipo algebraico de datos Arbol que puede ser un Vacio o un Nodo que contiene un valor y dos sub-árboles. Luego, has implementado una función altura que toma un árbol binario y calcula su altura utilizando la recursión y manejando adecuadamente los casos base. ¡Muy bien hecho!

Yo: ¿No falta sumar 1 en el caso recursivo?

ChatGPT: Tienes razón, ¡gracias por señalarlo! En el caso recursivo de la función altura, debemos sumar 1 al máximo de las alturas de los dos sub-árboles, ya que el nodo actual también cuenta como una unidad de altura. Entonces, la solución correcta sería la siguiente:

De esta manera, la función altura calcula correctamente la altura de un árbol binario. ¡Gracias por la corrección!


ChatGPT como profesor de historia de las matemáticas

En el artículo anterior mostré cómo se puede usar ChatGPT como profesor de programación con Haskell. El mismo procedimiento se puede aplicar a cualquier tema; por ejemplo, a la historia de las matemáticas como se muestra en la siguiente conversación.


Yo: Escribe solamente una pregunta sobre historia de la matemática, pero no escriba su respuesta. Espera que yo escriba la respuesta y corrígela.

ChatGPT: ¿Cuál fue la contribución más importante de Euclides a la geometría?

Yo: Los elementos

ChatGPT: ¡Correcto! La contribución más importante de Euclides a la geometría fue su obra “Los Elementos”, una colección de trece libros que incluyen una exposición sistemática de la geometría euclidiana y que ha sido una referencia fundamental para los matemáticos durante más de 2.000 años.

Yo: Otra.

ChatGPT: ¿Cuál fue la importancia de la obra “Arithmetica” de Diophantus en la historia de las matemáticas?

Yo: Es el inicio de la teoría de números.

ChatGPT: Más o menos correcto. La obra “Arithmetica” de Diophantus fue importante porque fue una de las primeras obras en introducir el uso de símbolos para representar cantidades desconocidas en ecuaciones y sistemas de ecuaciones. Además, Diophantus también fue uno de los primeros en trabajar con ecuaciones diofánticas, que son ecuaciones con coeficientes enteros y soluciones enteras, lo que se considera el inicio de la teoría de números. Por lo tanto, la obra “Arithmetica” es importante tanto para la historia de la álgebra como para la teoría de números.

Yo: Otra.

ChatGPT: ¿Qué relación tiene el teorema de Pitágoras con la geometría y cuál fue su importancia en la historia de las matemáticas?

Yo: Usándolo, se demostró la irracionalidad del cuadrado de lado unidad.

ChatGPT: ¡Casi perfecto! El teorema de Pitágoras establece que en un triángulo rectángulo, el cuadrado de la hipotenusa (el lado opuesto al ángulo recto) es igual a la suma de los cuadrados de los catetos (los otros dos lados que forman el ángulo recto). Esta relación es una de las propiedades fundamentales de los triángulos rectángulos y ha sido estudiada por matemáticos de todo el mundo.

En cuanto a su importancia en la historia de las matemáticas, el de Pitágoras se ha utilizado en una gran variedad de campos, desde la astronomía y la física hasta la música y la arquitectura. Además, el teorema de Pitágoras también ha sido utilizado en la demostración de importantes resultados matemáticos, como la demostración de la irracionalidad del número √2, lo que implica que no se puede expresar como una fracción exacta.

Yo: Hasta pronto.

ChatGPT: ¡Hasta pronto! No dudes en preguntarme de nuevo si tienes más preguntas en el futuro. Estaré encantado de ayudarte en lo que pueda.


ChatGPT como profesor de programación con Haskell

Se puede usar ChatGPT como profesor de programación con Haskell, tal como se muestra en la siguiente conversación.


Yo: Escribe solamente el enunciado de un ejercicio de programación en Haskell, pero no escriba su solución. Espera que yo escriba la solución y corrígela.

ChatGPT: Escribe una función en Haskell que tome una lista de números y devuelva una lista con los números elevados al cuadrado.

Yo:

ChatGPT: ¡Muy bien! La solución que has proporcionado es correcta y eficiente. Esta función utiliza una lista por comprensión, lo cual es una herramienta muy útil en Haskell. El código es legible y fácil de entender. ¡Buen trabajo!

Yo: Otro

ChatGPT: Escribe una función en Haskell que tome dos listas y devuelva una lista con los elementos comunes a ambas listas.

Yo:

ChatGPT: ¡Excelente! La solución que has proporcionado es correcta. Esta función utiliza una lista por comprensión y la función elem para verificar si cada elemento de la primera lista también está en la segunda lista. El código es fácil de leer y entender. ¡Buen trabajo!

Yo: ¿Cómo se define por recursión?

ChatGPT: Claro, aquí te muestro cómo se podría definir la función comunes por recursión:

En esta definición, la función comunes tiene dos parámetros de tipo lista xs e ys. La función utiliza la técnica de recursión para construir la lista de elementos comunes. La primera ecuación es el caso base que se aplica cuando la lista xs es vacía. En este caso, la función devuelve una lista vacía.

En la segunda ecuación, la función comunes toma el primer elemento de lista xs y comprueba si se encuentra en la lista ys utilizando la función elem. Si el elemento está en la lista, se agrega a la lista de resultados y se llama a la función recursivamente con el resto de la lista xs. Si el elemento no está en la lista, se llama a la función recursivamente con el resto de la lista xs sin agregar el elemento a la lista de resultados.

Espero que esto te haya ayudado a comprender cómo definir esta función por recursión en Haskell.

Yo: Escribe otro enunciado.

ChatGPT: Escribe una función en Haskell que tome una lista de cadenas de caracteres y devuelva una lista con la longitud de cada cadena.

Yo:

ChatGPT: Tiene un pequeño error de variable en el código que proporcionaste. La función debería ser así:

La solución es correcta y eficiente. Esta función utiliza una lista por comprensión y la función length para obtener la longitud de cada cadena de la lista de entrada. El código es fácil de entender y leer. ¡Buen trabajo!

Yo: ¿Se puede definir de forma más corta?

ChatGPT: Sí, puedes utilizar una notación de función de orden en Haskell para definir esta función de manera más corta y elegante. La función map en Haskell toma una función y una lista como argumentos y aplica la función a cada elemento de la lista, devolviendo una nueva lista con los resultados. Por lo tanto, la función longitudes se puede definir de la siguiente manera utilizando la función map:

Esta definición es más corta que la versión anterior y utiliza una notación más elegante y funcional. La función map aplica la función length a cada elemento de la lista de entrada, y devuelve una nueva lista con las longitudes. ¡Muy bien!