stringtranslate.com

Índice de Bruijn

En lógica matemática , el índice de De Bruijn es una herramienta inventada por el matemático holandés Nicolaas Govert de Bruijn para representar términos de cálculo lambda sin nombrar las variables ligadas. [1] Los términos escritos utilizando estos índices son invariantes con respecto a la conversión α , por lo que la comprobación de equivalencia α es la misma que la de la igualdad sintáctica. Cada índice de De Bruijn es un número natural que representa una ocurrencia de una variable en un término λ y denota el número de ligaduras que están en el alcance entre esa ocurrencia y su ligadura correspondiente. Los siguientes son algunos ejemplos:

Representación gráfica del ejemplo

Los índices de De Bruijn se utilizan comúnmente en sistemas de razonamiento de orden superior, como demostradores de teoremas automatizados y sistemas de programación lógica . [2]

Definición formal

Formalmente, los términos λ ( M , N , ...) escritos utilizando índices de De Bruijn tienen la siguiente sintaxis (los paréntesis se permiten libremente):

M , N , ... ::= n | M N | λ M

donde n —números naturales mayores que 0— son las variables. Una variable n está ligada si está en el ámbito de al menos n ligantes (λ); de lo contrario, es libre . El sitio de enlace para una variable n es el n -ésimo ligante en cuyo ámbito está , comenzando por el ligante más interno.

La operación más primitiva sobre términos λ es la sustitución : reemplazar variables libres en un término por otros términos. En la β-reducciónM ) N , por ejemplo, debemos

  1. Encuentra las instancias de las variables n 1 , n 2 , ..., n k en M que están limitadas por λ en λ M ,
  2. decrementar las variables libres de M para que coincidan con la eliminación del ligante λ externo, y
  3. reemplazar n 1 , n 2 , ..., n k con N , incrementando adecuadamente las variables libres que aparecen en N cada vez, para que coincidan con el número de enlazadores λ, bajo el cual aparece la variable correspondiente cuando N sustituye a uno de los n i .

Para ilustrarlo, consideremos la aplicación

(λ λ 4 2 (λ 1 3)) (λ 5 1)

que podría corresponder al siguiente término escrito en la notación habitual

x . λ y . z xu . u x )) (λ x . w x ).

Después del paso 1, obtenemos el término λ 4 □ (λ 1 □), donde las variables destinadas a la sustitución se reemplazan con cajas. El paso 2 decrementa las variables libres, dando λ 3 □ (λ 1 □). Finalmente, en el paso 3, reemplazamos las cajas con el argumento, es decir, λ 5 1; la primera caja está debajo de un binder, por lo que la reemplazamos con λ 6 1 (que es λ 5 1 con las variables libres aumentadas en 1); la segunda está debajo de dos binders, por lo que la reemplazamos con λ 7 1. El resultado final es λ 3 (λ 6 1) (λ 1 (λ 7 1)).

Formalmente, una sustitución es una lista ilimitada de términos, escrita M 1 . M 2 ..., donde M i es el reemplazo de la i ésima variable libre. La operación de incremento en el paso 3 a veces se denomina desplazamiento y se escribe ↑ k donde k es un número natural que indica la cantidad a incrementar en las variables, y se define por

Por ejemplo, ↑ 0 es la sustitución de identidad, que deja un término sin cambios. Una lista finita de términos M 1 . M 2 ... M n abrevia la sustitución M 1 . M 2 ... M n .(n+1).(n+2)... dejando todas las variables mayores que n sin cambios. La aplicación de una sustitución s a un término M se escribe M [ s ]. La composición de dos sustituciones s 1 y s 2 se escribe s 1 s 2 y se define por

( M 1 . M 2 ...) s = M 1 [ s ]. M 2 [ s ]...

satisfacer la propiedad

M [ s1s2 ] = ( M [ s1 ] ) [ s2 ] ,

y la sustitución se define en los términos siguientes:

Los pasos descritos anteriormente para la β-reducción se expresan de forma más concisa como:

( λM ) NβM [ N ] .

Alternativas a los índices de Bruijn

Cuando se utiliza la representación estándar "con nombre" de los términos λ, donde las variables se tratan como etiquetas o cadenas, se debe manejar explícitamente la conversión α al definir cualquier operación sobre los términos. En la práctica, esto es complicado, ineficiente y, a menudo, propenso a errores. Por lo tanto, ha llevado a la búsqueda de diferentes representaciones de dichos términos. Por otro lado, la representación con nombre de los términos λ es más generalizada y puede ser más inmediatamente comprensible para otros porque las variables pueden recibir nombres descriptivos. Por lo tanto, incluso si un sistema utiliza índices de De Bruijn internamente, presentará una interfaz de usuario con nombres.

Una forma alternativa de ver los índices de De Bruijn es como niveles de De Bruijn, que indexan las variables desde la parte inferior de la pila en lugar de desde la parte superior. Esto elimina la necesidad de reindexar las variables libres, por ejemplo, cuando se debilita el contexto, mientras que los índices de De Bruijn eliminan la necesidad de reindexar las variables ligadas, por ejemplo, cuando se sustituye una expresión cerrada en otro contexto. [3]

Los índices de De Bruijn no son la única representación de términos λ que evita el problema de la conversión α. Entre las representaciones nombradas, las técnicas nominales de Pitts y Gabbay son un enfoque, donde la representación de un término λ se trata como una clase de equivalencia de todos los términos reescribibles en él utilizando permutaciones de variables. [4] Este enfoque es adoptado por el paquete de tipos de datos nominales de Isabelle/HOL . [5]

Otra alternativa común es recurrir a representaciones de orden superior en las que el λ-ligante se trata como una función verdadera. En tales representaciones, las cuestiones de α-equivalencia, sustitución, etc. se identifican con las mismas operaciones en una metalógica .

Al razonar sobre las propiedades metateóricas de un sistema deductivo en un asistente de pruebas , a veces es deseable limitarse a representaciones de primer orden y tener la capacidad de nombrar o renombrar supuestos. El enfoque sin nombre local utiliza una representación mixta de variables (índices de De Bruijn para variables ligadas y nombres para variables libres) que puede beneficiarse de la forma α-canónica de los términos indexados de De Bruijn cuando sea apropiado. [6] [7]

Convención de variables de Barendregt

La convención de variables de Barendregt [8] es una convención comúnmente utilizada en pruebas y definiciones donde se supone que:

En el contexto general de una definición inductiva, no es posible aplicar la conversión α necesaria para convertir una definición inductiva que utiliza la convención en una en la que no se utiliza la convención, porque una variable puede aparecer tanto en una posición vinculante como en una posición no vinculante en la regla. El principio de inducción se cumple si cada regla satisface las dos condiciones siguientes: [9]

Véase también

Referencias

  1. ^ de Bruijn, Nicolaas Govert (1972). "Notación de cálculo lambda con variables ficticias sin nombre: una herramienta para la manipulación automática de fórmulas, con aplicación al teorema de Church-Rosser" (PDF) . Indagationes Mathematicae . 34 : 381–392. ISSN  0019-3577. Archivado (PDF) desde el original el 20 de mayo de 2011.
  2. ^ Gabbay, Murdoch J.; Pitts, Andy M. (1999). "Un nuevo enfoque de la sintaxis abstracta que implica enlazadores" (PDF) . 14.º Simposio anual IEEE sobre lógica en informática . págs. 214-224. doi :10.1109/LICS.1999.782617. Archivado (PDF) desde el original el 27 de julio de 2004.
  3. ^ Bauer, Andrej. «Cómo implementar la teoría de tipos dependientes III». Matemáticas y computación . Archivado desde el original el 7 de agosto de 2016. Consultado el 20 de octubre de 2021 .
  4. ^ Pitts, Andy M. (2003). "Lógica nominal: una teoría de primer orden de nombres y enlaces". Información y computación . 186 (2): 165–193. doi : 10.1016/S0890-5401(03)00138-X . ISSN  0890-5401.
  5. ^ "Sitio web de Nominal Isabelle". Archivado desde el original el 14 de diciembre de 2014. Consultado el 28 de marzo de 2007 .
  6. ^ McBride, Conor ; McKinna, James (2004). Functional Pearl: I am not a Number—I am a Free Variable (PDF) . Nueva York, Nueva York, EE. UU.: ACM Press. doi :10.1145/1017472.1017477. Archivado desde el original (PDF) el 28 de septiembre de 2013.
  7. ^ Aydemir, Brian; Charguéraud, Arthur; Pierce, Benjamin Crawford ; Pollack, Randy; Weirich, Stephanie (2008). "Metateoría formal de ingeniería" (PDF) . Actas del 35.º simposio anual ACM SIGPLAN-SIGACT sobre principios de lenguajes de programación. Nueva York, Nueva York, EE. UU.: ACM Press. pp. 3–15. doi :10.1145/1328438.1328443. ISBN . 9781595936899. Archivado desde el original el 27 de julio de 2010.
  8. ^ Barendregt, Hendrik Pieter (1984). El cálculo Lambda: su sintaxis y semántica . Holanda del Norte . pag. 26.ISBN 978-0-444-87508-2.
  9. ^ Urban, Christian; Berghofer, Stefan; Norrish, Michael (2007). "Convención de variables de Barendregt en inducciones de reglas" (PDF) . Deducción automatizada – CADE-21 . Apuntes de clase en informática. Vol. 4603. págs. 35–50. doi :10.1007/978-3-540-73595-3_4. ISBN 978-3-540-73594-6. Archivado (PDF) del original el 6 de julio de 2017.