Cómo derribar tus pruebas


59

¿Cuáles son las pautas generales para verificar sus pruebas? Creo que esto es importante para los estudiantes graduados como yo. Ya sé lo que tenemos que hacer para probar algo, pero siempre debes verificar todo antes de enviarlo. Incluso a tu propio asesor.

Desarrollé algunas estrategias por prueba y error, y recibí muchos consejos de mi asesor. Pero este es siempre un trabajo muy tedioso. Normalmente, cuando terminas con algo, solo quieres pasar al siguiente problema, pero aún tienes que seguir con el problema actual hasta que todo esté perfecto. Aquí presento un ejemplo de mi propia lista de trucos:

  1. Completa los detalles. Hay muchos errores en los lugares donde escribe "está claro que ...", "sin pérdida de generalidad ...", etc.
  2. Prueba algunos números. Pruebe casos extremos, como "lo que sucede cuando configuro o ".norte=1norte=1000
  3. Mantenga un cuaderno limpio. Escriba todos los días en él y compárelo con sus notas generales. Intento escribir también en látex, he encontrado muchos errores de esta manera.

¿Cuáles son las estrategias generales que aplica para verificar sus pruebas?

El objetivo de esta pregunta es convertirlo en un wiki comunitario.


Si la pregunta parece subjetiva, ayúdame a mejorarla.
Marcos Villagra

¿Cómo hago esta comunidad-wiki?
Marcos Villagra

1
Hey genial Estoy realmente interesado en las respuestas a esta pregunta. Además, puedo apreciar tu # 3. (Cuando lo pienso, en realidad tengo montones de papel esparcidos por todas partes cuando estoy trabajando intensamente en un problema, que luego se reubica al azar. ¡Qué asco!) Me he encontrado con un error antes de este mismo problema y terminé desperdiciando una buena parte del tiempo
Daniel Apon

@Daniel: ¡Tuve el mismo problema! Es por eso que después de terminar con una prueba, inmediatamente escribo la versión de látex. Es bueno saber que no soy el único tipo desordenado que guarda todo en todas partes :-)
Marcos Villagra

1
lo marca para la atención del moderador.
Suresh Venkat

Respuestas:


39

Los ingenieros de software tienen una noción que llaman " olores de código ". Estos son síntomas en el código que pueden indicar un problema más profundo. Los ingenieros de software recopilan listas mentales de olores para tener en cuenta (es decir, métodos excesivamente largos o demasiados parámetros). No significa necesariamente que haya un problema, sino que simplemente indica que el escritor puede querer verificar dos veces.

Propongo que también deberíamos considerar los "olores a prueba" . Esto no le dará un algoritmo para verificar sus pruebas, pero le dará un lenguaje y una metáfora para reconocer posibles problemas en las pruebas. Algunos ejemplos de olores de pruebas:

  1. Los adverbios "Claramente", "Obviamente", etc.
  2. Referencia a la prueba de un resultado anterior en lugar de una referencia al resultado en sí.
  3. Uso rotativo de un resultado con muchas condiciones técnicas previas.

También hay olores más sutiles. Por ejemplo, si una prueba usa el teorema binomial para expandir una expresión y luego usa el teorema binomial para volver a una forma cerrada, entonces tal vez haya una manipulación directa en la forma cerrada que dé el mismo resultado.

Mi sugerencia es recopilar una lista (mental o escrita) de tales olores y verificarlos a medida que lee su trabajo. El buen efecto secundario de este enfoque es que también te hará un mejor lector.

Nota: Mi esperanza en esta respuesta fue dar un lado intuitivo a la respuesta rigurosa proporcionada por Cómo escribir una prueba de Lamport a la que se hace referencia en la respuesta de M. Alaggan.


44
Digo esto todo el tiempo a mis alumnos y piensan que estoy loco. Por supuesto, afirmo que puedo oler un error, que podría ser parte del problema;)
Suresh Venkat

77
@Suresh: Este estudiante piensa que estás loco por diferentes razones. ;-)
John Moeller

44
En la nota de olfato del código, las cosas que siempre trato de analizar en las pruebas de otros incluyen cadenas de desigualdad. A menudo, los errores realmente básicos tienen la costumbre de arrastrarse entre las derivaciones más difíciles.
John Moeller

23

Hay un muy buen trabajo de Leslie Lamport ( Cómo escribir una prueba ). En realidad, es una propuesta suya sobre un estilo de escritura de pruebas detalladas de tal manera que:

(1) Permite detectar errores de forma directa

(2) Deja en claro qué suposiciones y teoremas se usan en qué partes, lo que hace que sea bastante fácil ver qué sucede si quieres (por ejemplo) usar suposiciones más débiles

También hay algo de experiencia comunitaria y comentarios inspiradores sobre esta técnica en MO que muestra una experiencia positiva en general (y también algunos otros recursos).

Actualización: hay una nueva versión Cómo escribir una prueba del siglo XXI .


55
Estas pruebas son muy similares a las que se escribirían en un trabajo de investigación de PL. La cadena de la lógica es muy explícita. Después de aprender a leer y apreciar las pruebas de estilo PL, me ha resultado difícil entender las pruebas matemáticas "normales". Tales pruebas a menudo requieren que el lector piense de la misma manera que el autor, y cuando se haya acostumbrado a un estilo de prueba diferente, este simplemente no es el caso (¡para mí, al menos!)
Christopher Monsanto

2
@ Christopher Monsanto: PL significa lenguajes de programación? Le agradecería que mencione un ejemplo de este tipo (uno de esos documentos) para consultar :)
M. Alaggan

55
Siempre tuve la sensación de que lo que sugiere Lamport no es compatible con "A Mathematician's Lament" de Paul Lockhart ( maa.org/devlin/LockhartsLament.pdf ).
Marcos Villagra


14

Me parece recordar haber leído un relato popular hace mucho tiempo sobre cómo los físicos tratan un problema análogo. Quién sabe cuán precisa es la siguiente versión; Las correcciones son bienvenidas. Pero encontré la estrategia subyacente bastante notable.

Explicaron cómo llegaron a creer en los agujeros negros. Los agujeros negros fueron inicialmente construcciones puramente matemáticas, como otros objetos extraños en física como agujeros de gusano. Su estrategia fue sorprendente: matemáticamente arrojarían otros objetos al objeto a probar. Los agujeros de gusano fallaron sus pruebas porque encontraron que el agujero de gusano colapsaría incluso en presencia de un objeto físico normal, tal vez un asteroide. Pero los agujeros negros pasaron esta prueba: el agujero negro sobreviviría si le lanzaran un asteroide. Entonces intentaron lanzarle una estrella. Mismo resultado. Finalmente, arrojaron otro agujero negro al agujero negro y sobrevivió. Como resultado de esto, se volvieron lo suficientemente seguros de la existencia de agujeros negros para comenzar a buscarlos en el universo real.

Entonces, la relevancia y la aplicación de la estrategia anterior es comenzar a arrojar cosas a su prueba. ¿Sobrevive a los controles de cordura ? Si elimina una suposición necesaria, ¿se derrumba como debería? ¿Colapsa como debería cuando se aplica a casos fuera de su alcance? ¿Soporta generalizaciones y especializaciones razonables? Eche un vistazo a la lista de heurísticas en Cómo resolverlo de Polya . Intente mutar su prueba con estas heurísticas y vea si se para y cae como debería.


La mayor parte de su respuesta se centra en verificar las pruebas verificando que se vuelvan falsas en situaciones en las que deberían ser falsas. ¡Eso no funciona porque no verifica que el teorema fuera verdadero donde se suponía que era cierto! Por ejemplo, supongamos que he "probado" que cada número impar es divisible por tres. Verifico que mi prueba falla si me extiendo a números pares también: lo hace, ya que cuatro no es divisible por tres. ¡Hurra, mi prueba debe ser correcta!
David Richerby

12

Creo que uno de los enfoques más seguros es crear múltiples pruebas independientes. Entonces puede estar seguro de que su resultado principal es correcto, incluso si tiene un error en algunos detalles de una prueba.


9

Una técnica que he encontrado útil es pensar en qué otros resultados podría probar la estrategia de prueba. Si puedo adaptar fácilmente la estrategia de prueba para probar un gran problema abierto o incluso un problema que no está abierto pero que tiene una solución demasiado complicada en comparación con la complejidad de la estrategia de prueba, entonces esa es una gran razón para dudar la prueba.


55
PAGSnortePAGS

6

Siempre reviso mis pruebas con un verificador de pruebas como COQ o ISABELLE . Si puede probar su prueba en cualquiera de estos lenguajes de programación, puede estar seguro de que su prueba es correcta. Tan simple como un término lambda;).


Nunca he usado Coq, pero debería intentarlo. De hecho, estoy tratando de probar algunos límites inferiores con Mathica, pero no he encontrado el camino correcto. Quizás necesito algunos paquetes especiales o algo así.
Marcos Villagra

1
Tal vez sea una posibilidad remota, pero si desea probar algunos límites inferiores con reales, puede consultar estas bibliotecas: coqtail.sourceforge.net/?home/en
Gopi

De acuerdo, pero cualquier lenguaje de programación funciona. Muy a menudo hago esto a la inversa. Formule el dominio del problema en un lenguaje de programación (generalmente Ruby), luego use esto como plantilla para mi prueba.
Chad Brewbaker
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.