¿Los 'teoremas de Wadler son gratuitos' como generales como el diseño por contrato para establecer corrección?

cs.stackexchange https://cs.stackexchange.com/questions/19135

  •  30-10-2019
  •  | 
  •  

Pregunta

Philip Wadler ha escrito un papel brillante llamado 'Teoremas gratis'. La gran idea es que puede usar tipos para razonar sobre su programa e incluso probar teoremas simples sobre su programa.

Vemos estas ideas sobre los tipos aplicados en el idioma Haskell.

En muy aproximadamente el mismo período de tiempo: tenemos un Idea de Betrand Meyer llamada 'Diseño por contrato'- que se implementa notablemente en el Lenguaje eiffel. Esto tiene las siguientes características:

  • condiciones previas rutinarias
  • Posteniciones de rutina
  • invariantes de clase
  • Verifique las instrucciones (como afirmar)
  • invariantes de bucle

La idea detrás del diseño por contrato es Los diseñadores de software deben definir especificaciones de interfaz formales, precisas y verificables para componentes de software, que extienden la definición ordinaria de tipos de datos abstractos con condiciones previas, poscondiciones e invariantes.

Ahora muchos afirman que usar 'tipos' en sus programas conduce a 'programas más correctos' (a través del Correspondencia de Howard Curry). Por lo que puedo ver, incluso el uso más avanzado de Tipo de escritura dependiente en Idris y Scala se limita a los tipos de suma y las longitudes de la lista (corrígeme si me equivoco).

Por el contrario, el poder del 'diseño por contrato' para establecer la corrección de mi programa es más general y más poderoso. (Aunque no necesariamente en el tiempo de compilación, sino en el momento de la prueba). Puedo establecer en mi programa bancario, por ejemplo, que todos los depósitos son positivos, y todos los saldos de cuenta informados son positivos.

El punto es que los tipos tienen un futuro fascinante de posibilidades, y son enormemente potentes y compilan el tiempo, pero en este momento su aplicación práctica parece limitada.

Mi pregunta es: ¿Es el diseño por contrato de aplicación más general que el uso de teoremas de tipos para razonar sobre la corrección de mi programa en la actualidad? (O solo estamos hablando de dos cosas diferentes)

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top