Somos capaces de demostrar teoremas un parametricity gratis sobre funciones como ? Se supone que indica que f toma una lista y siempre devuelve una permutación de la misma.
Otro ejemplo: probar que la función siempre devolverá una lista permutada con exactamente un elemento copiado.
linear-logic
parametricity
Łukasz Lew
fuente
fuente
Respuestas:
Varias personas están interesadas en probar este tipo de cosas. Neel Krishnaswami mencionó este teorema particular aquí . También he visto a Frank Pfenning dar algunos ejemplos geniales para lógicas ordenadas. Por ejemplo, si tiene , entonces, en un sistema de tipo ordenado, e debe agregar las listas x e y .A,x:[A],y:[A]⊢e:[A] e x y
La respuesta corta es que sí, podemos probar su primer ejemplo. En el contexto de los cálculos lambda, en este artículo se describe un enfoque lógico basado en las relaciones . Probarían tu teorema en dos pasos:
Pero, este tipo de teoremas se vuelven más interesantes cuando miramos un lenguaje con efectos y nuestra capacidad de probarlos para dichos lenguajes es tristemente limitada. Por ejemplo, considere el isomorfismo del Sistema F. En una configuración de llamada por valor, este isomorfismo se rompe cuando agregamos no terminación. Debemos ser capaces de recuperar un isomorfismo similares, sin embargo, con tipos lineales: tau ≅ ∀ A . ( Tau → A ) ⊸ A . Desafortunadamente, no tenemos relaciones lógicas operativas que puedan probar esto.τ≅∀A.(τ→A)→A τ≅∀A.(τ→A)⊸A
Dicho esto, también hay métodos sintácticos que pueden probar tanto este isomorfismo como su teorema. Este parece ser un enfoque particularmente útil en un entorno lineal, y es mucho menos una carga que establecer una relación lógica para probar teoremas simples.
Editar: Dado que usted pidió, he aquí un ejemplo de una prueba sintáctica de un teorema libre para el tipo en un entorno con un término ⊥ que se repite para siempre y está bien escrito en cualquier contexto en cualquier tipo. La idea es encontrar un conjunto de términos canónicos de un tipo y usarlo para determinar cuáles son los posibles valores de retorno para una función. Comenzamos con un teorema de solidez para términos bien escritos.∀A.(A⊗A)⊸A ⊥
Solicitó una referencia para este tipo de prueba, pero no estoy seguro de una buena. Este tipo de razonamiento es bien conocido en ciertos círculos y se remonta quizás hasta Gentzen. Me dicen que recuerda a la búsqueda de pruebas enfocadas para el cálculo posterior, pero no sé exactamente cuál es la conexión.
Dicho esto, no conozco ningún trabajo publicado moderno que explique bien este método relativamente simple. Es cierto que es un poco limitado en su aplicabilidad a idiomas más simples. Por otro lado, creo que ha sido eclipsado por "Theorems for Free!" et al y, como resultado, incluso muchos investigadores senior piensan inmediatamente en relaciones lógicas cuando escuchan la frase "teorema libre", sin darse cuenta de que técnicas como esta pueden ser un enfoque alternativo más simple para tales pruebas (especialmente en el contexto de los sistemas de tipo lineal).
fuente