Sustitución explícita

Un cálculo de sustituciones explícitas es una extensión del cálculo lambda en el que la sustitución se integra en el cálculo de la misma forma que la abstracción o la aplicación, mientras que en el cálculo lambda la sustitución es parte de la metateoría , que es decir, se define fuera de la teoría del cálculo lambda.

Principio

La idea que lleva a explicar las sustituciones surge del deseo de tratar la sustitución como una operación por derecho propio integrándola en la sintaxis y añadiendo un cierto número de reglas que distribuyen y aplican la sustitución y que forman parte de ella. del cálculo al igual que la reducción β es parte del cálculo lambda. El interés de integrar la sustitución en el cálculo es poder hablar de la sustitución tanto en términos de implantación, complejidad, eficiencia o estrategia de evaluación como en su relación con la β-reducción . Esto puede explicar el intercambio , la evaluación retrasada o perezosa o la evaluación inmediata. Una sustitución que aparece en un término se puede evaluar de inmediato o se puede posponer su evaluación, cuando sea necesario. Además, la evaluación de una sustitución se puede utilizar en varios lugares y solo requiere un cálculo ( compartir ).

Sintaxis rica

Para que el sistema formal pueda hablar al mismo tiempo de abstracción y aplicación, así como de sustitución, es necesario enriquecer la sintaxis del cálculo lambda con un operador de sustitución explícito. Hay dos formas de hacer esto, dependiendo de si está trabajando con variables explícitas o con índices de Bruijn .

Propiedades requeridas

Aquí hay algunas propiedades que queremos ver satisfechas por un sistema de sustituciones explícitas. En primer lugar, hay propiedades obligatorias.

También hay propiedades opcionales que uno puede desear.

Variantes

Hay varios cálculos de sustituciones explícitas. Esto se puede explicar de dos formas:

En general, los sistemas que confluyen en términos de meta no conservan una normalización fuerte y viceversa. Aquellos que satisfacen estas dos propiedades no son simples.

El cálculo de λx

El sistema λx usa nombres de variables explícitos y tiene cuatro reglas para el sistema de sustitución, además de una regla para eliminar β-redex y así simular β-reducción.

(b)  : (λx.M) N → M⟨x: = N⟩ (xvI)  : x⟨x: = P⟩ → P (xvK)  : x⟨y: = P⟩ → x (x ≠ y) (xap)  : (MN) ⟨x: = P⟩ → (M⟨x: = P⟩) (N⟨x: = P⟩) (xab)  : (λx.M) ⟨y: = P⟩ → λx. (M⟨y: = P⟩) (x ≠ y)

El sistema λx conserva la fuerte normalización . Podemos agregar la siguiente regla que generaliza y por lo tanto reemplaza la regla (xvK) .

(xgc)  : M⟨x: = P⟩ → M (x∉var (M))

Resumen de reglas

El cálculo λυ

El cálculo λυ utiliza índices de Bruijn. Por lo tanto, no hay más variables, sino solo metavariables. Ya no contiene variables ligadas, λυ es un sistema de reescritura de primer orden . Las adiciones sintácticas son las siguientes.

⇑ (s): 0 ↦ 0 1 ↦ s (0) [ ↑ ] 2 ↦ s (1) [ ↑ ] ⁞ n + 1 ↦ s (n) [ ↑ ] ⁞ (B)  : (λ M) N → M [N /] (Aplicación)  : (MN) [s] → M [s] N [s] (Lambda)  : (λ M) [s] → λ (M [ ⇑ (s)]) (FVar)  : 0 [M /] → M (RVar)  : n + 1 [M /] → n (FVarLift)  : 0 [ ⇑ (s)] → 0 (RVarLift)  : n + 1 [ ⇑ (s)] → n [s] [ ↑ ] (VarShift)  : n [ ↑ ] → n + 1

El cálculo λυ conserva la fuerte normalización .

Resumen de reglas

Las primeras tres reglas corresponden a las reglas equivalentes de lambda-x, por ejemplo, la regla (B) elimina un beta-redex e introduce una sustitución explícita.

El cálculo de λσ

El cálculo de λσ es el cálculo original de Abadi, Cardelli, Curien y Lévy. Además de los operadores del cálculo λυ, este cálculo tiene

No hay operador ⇑, ni sustitución M / .

El cálculo de λσ

(Beta)

(λ M) N → M [N · id]

(Aplicación)

(MN) [s] → M [s] N [s]

(Abdominales)

(λ M) [s] → λ (M [0 · (s ∘ ↑)])

(Cerrado)

M [s] [t] → M [s ∘ t]

(VarId)

0 [Id] → 0

(VarCons)

0 [Sra.] → M

(IdL)

id ∘ s → s

(ShiftId)

↑ ∘ id → ↑

(ShiftCons)

↑ ∘ (M. S) → s

(AssEnv)

(s ∘ t) ∘ u → s ∘ (t ∘ u)

(MapEnv)

(M. S) ∘ t → M [t]. (s ∘ t)

Mientras que las sustituciones de λυ dicen qué asignar al índice 0 y sus avatares cuando se hunde en λ y cómo desplazar los índices distintos de 0, las sustituciones de λσ agrupan en una sola sustitución las asignaciones a todos los índices y para eso incluyen un operador de composición.

Historia

La idea de sustitución explícita se esboza en el prefacio del libro de Curry y Feys sobre lógica combinatoria , pero adquiere el estatus de un sistema real de reescritura de términos en el trabajo realizado por Bruijn en conexión con el sistema Automath . Por el contrario, el concepto y la terminología suelen atribuirse a Martín Abadi , Luca Cardelli , Curien y Lévy . En un artículo que será el primero de una larga lista, los autores introducen el cálculo λσ y muestran que el cálculo lambda debe estudiarse con mucha atención con respecto a la sustitución. Sin mecanismos sofisticados para compartir estructuras, las sustituciones pueden aumentar enormemente.

Notas y referencias

  1. Delia Kesner: Una teoría de sustituciones explícitas con composición segura y completa. Métodos lógicos en informática 5 (3) (2009)
  2. M. Abadi, L. Cardelli, PL. Curien y JJ. Levy, sustituciones explícitas, Journal of Functional Programming 1, 4 (octubre de 1991), 375–416.
  3. (en) Haskell Curry y Robert Feys , Combinatory Logic Volume I , Amsterdam, North-Holland Publishing Company,1958
  4. NG de Bruijn: Un cálculo lambda libre de nombres con facilidades para la definición interna de expresiones y segmentos. Universidad Tecnológica de Eindhoven, Países Bajos, Departamento de Matemáticas, (1978), (Informe TH), Número 78-WSK-03.

Bibliografía

Ver también