Parametricidad de la lógica lineal


9

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.f:A.[A][A]f

Otro ejemplo: probar que la función siempre devolverá una lista permutada con exactamente un elemento copiado.f:A.(A(A,A))[A][A]


1
Si, eso es posible. Hemos explorado este tema en un entorno ligeramente diferente (el cálculo π lineal polimórficoπ ).
Martin Berger

Respuestas:


7

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]exy

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:

  1. Defina una interpretación relacional de los tipos y úsela para probar un teorema libre convencional que ignore completamente la linealidad, es decir, esencialmente usando el mismo razonamiento que ve en, por ejemplo, "¡Teoremas gratis!". Dada , el teorema libre habitual nos dice que f devuelve una lista que contiene solo elementos que estaban presentes en la lista que se le dio. Dada una lista de variables lineales libres distintos x 1 ... x n , se deduce que f [ x 1 , . . . ,f:A.[A][A]fx1xn evalúa a alguna lista [ y 1 , . . . , Y m ] donde { y 1 , ... , y m } { x 1 , . . . , x n } .f[x1,...,xn][y1,...,ym]{y1,,ym}{x1,...,xn}
  2. Tenga en cuenta que las variables lineales libres deben conservarse bajo evaluación. Esto nos permite aprovechar la linealidad. Si no fuera una permutación de [ x 1 , . . . , x n ] , entonces implicaría que algunos x i se perdieron o duplicaron durante la evaluación, lo que no puede suceder.[y1,,ym][x1,...,xn]xi

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.(AA)A

Δ;Γe:τ

  • evΔ;Γv:τ
  • enΓΔ;Γn:τ
  • e

Δx

f:A.(AA)Afλx.eA;x:(AA)e:A

  • eA;x:(AA)(v1,v2):Av1v2AA
  • ex
  • efλx.

e let(x1,x2)=x in eA;x1:A,x2:Ae:Afλx.let (x1,x2)=x in eeAexi

A.(AA)Aλx.λx.let (x1,x2)=x in 

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).

AfA.(B.B(B,B))[A][A]B.B(B,B) existe ya que tendría que duplicar su entrada.


¿Puedes dar una referencia para este método sintáctico del que hablas?
Łukasz Lew

No estoy seguro de una buena referencia, pero agregué un ejemplo a la publicación. Avísame si algo no está claro.
Nick Rioux

1
No es lineal, pero aquí hay un blog sobre el uso del análisis teórico de prueba para obtener teoremas similares a la paramtricidad
Max New

Además del artículo de Zhao et al vinculado en la publicación, Lars Birkedal y sus coautores extendieron también el modelo paramétrico de Reynolds al caso lineal en su artículo Linear Abadi y Plotkin Logic .
Neel Krishnaswami

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.