Articulo de referencia

Cálculo de construcciones

En lógica matemática e informática , el cálculo de construcciones ( CdC ) es una teoría de tipos creada por Thierry Coquand . Puede servir tanto como lenguaje de programación ti...

En lógica matemática e informática , el cálculo de construcciones ( CdC ) es una teoría de tipos creada por Thierry Coquand . Puede servir tanto como lenguaje de programación tipado como fundamento constructivo para las matemáticas . Por esta segunda razón, el CdC y sus variantes han sido la base de Rocq y otros asistentes de demostración .

Algunas de sus variantes incluyen el cálculo de construcciones inductivas (que añade tipos inductivos), el cálculo de construcciones (co)inductivas (que añade coinducción) y el cálculo predicativo de construcciones inductivas (que elimina cierta impredicatividad).

Características generales

El CoC es un cálculo lambda tipado de orden superior , desarrollado inicialmente por Thierry Coquand . Es conocido por estar en la cúspide del cubo lambda de Barendregt . Dentro del CoC es posible definir funciones de términos a términos, de términos a tipos, de tipos a tipos y de tipos a términos.

El CoC es fuertemente normalizador y, por lo tanto, consistente . [ 1 ]

Uso

El código de conducta se ha desarrollado junto con el asistente de pruebas Rocq . A medida que se añadían características (o se eliminaban posibles limitaciones) a la teoría, estas se integraban en Rocq.

En otros asistentes de demostración, como Matita y Lean , se utilizan variantes del código de conducta (CoC).

Los fundamentos del cálculo de construcciones

El cálculo de construcciones puede considerarse una extensión del isomorfismo de Curry-Howard . Este isomorfismo asocia un término del cálculo lambda simplemente tipado con cada prueba de deducción natural en la lógica proposicional intuicionista . El cálculo de construcciones extiende este isomorfismo a las pruebas del cálculo de predicados intuicionista completo , que incluye las pruebas de enunciados cuantificados (a los que también llamaremos "proposiciones").

Términos

Un término en el cálculo de construcciones se construye utilizando las siguientes reglas:

  • T{\displaystyle \mathbf {T} }es un término (también llamado tipo );
  • PAG{\displaystyle \mathbf {P} }es un término (también llamado prop , el tipo de todas las proposiciones);
  • Variables (incógnita,y,{\displaystyle x,y,\ldots }) son términos;
  • SiA{\displaystyle A}yB{\displaystyle B}son términos, entonces también lo es(AB){\displaystyle (AB)};
  • SiA{\displaystyle A}yB{\displaystyle B}son términos yincógnita{\displaystyle x}Si es una variable, entonces los siguientes también son términos:
    • (λincógnita:A.B){\displaystyle (\lambda x:A.B)},
    • (incógnita:A.B){\displaystyle (\forall x:A.B)}.

En otras palabras, el término sintaxis, en la forma de Backus-Naur , es entonces:

mi::=TPAGincógnitamimiλincógnita:mi.miincógnita:mi.mi{\displaystyle e::=\mathbf {T} \mid \mathbf {P} \mid x\mid e\,e\mid \lambda x{\mathbin {:}}e.e\mid \forall x{\mathbin {:}}e.e}

El cálculo de construcciones tiene cinco tipos de objetos:

  1. pruebas , que son términos cuyos tipos son proposiciones ;
  2. proposiciones , que también se conocen como tipos pequeños ;
  3. predicados , que son funciones que devuelven proposiciones;
  4. tipos grandes , que son los tipos de predicados (PAG{\displaystyle \mathbf {P} }es un ejemplo de un tipo grande);
  5. T{\displaystyle \mathbf {T} }sí mismo, que es el tipo de tipos grandes.

β-equivalencia

Al igual que el cálculo lambda sin tipos, el cálculo de construcciones utiliza una noción básica de equivalencia de términos, conocida comoβ{\displaystyle \beta }-equivalencia. Esto captura el significado deλ{\displaystyle \lambda }-abstracción:

  • (λincógnita:A.B)norte=βB(incógnita:=norte){\displaystyle (\lambda x:A.B)N=_{\beta }B(x:=N)}

β{\displaystyle \beta }-equivalencia es una relación de congruencia para el cálculo de construcciones, en el sentido de que

  • SiA=βB{\displaystyle A=_{\beta }B}yMETRO=βnorte{\displaystyle M=_{\beta }N}, entoncesAMETRO=βBnorte{\displaystyle AM=_{\beta }BN}.

Sentencias

El cálculo de construcciones permite demostrar juicios de tipificación :

incógnita1:A1,incógnita2:A2,t:B{\displaystyle x_{1}:A_{1},x_{2}:A_{2},\ldots \vdash t:B},

lo cual puede leerse como la implicación

Si las variablesincógnita1,incógnita2,{\displaystyle x_{1},x_{2},\ldots }tienen, respectivamente, tiposA1,A2,{\displaystyle A_{1},A_{2},\ldots }, entonces términot{\displaystyle t}tiene tipoB{\displaystyle B}.

Los juicios válidos para el cálculo de construcciones se derivan de un conjunto de reglas de inferencia . A continuación, utilizamosΓ{\displaystyle \Gamma }significa una secuencia de asignaciones de tipo incógnita1:A1,incógnita2:A2,{\displaystyle x_{1}:A_{1},x_{2}:A_{2},\ldots };A,B,do,D{\displaystyle A,B,C,D}para significar términos; yK,L{\displaystyle K,L}para significar cualquieraPAG{\displaystyle \mathbf {P} }oT{\displaystyle \mathbf {T} }Escribiremos.B[incógnita:=norte]{\displaystyle B[x:=N]}significar el resultado de sustituir el términonorte{\displaystyle N}para la variable libreincógnita{\displaystyle x}en el términoB{\displaystyle B}.

Una regla de inferencia se escribe en la forma

ΓA:BΓdo:D{\displaystyle {\frac {\Gamma \vdash A:B}{\Gamma '\vdash C:D}}},

lo que significa

siΓA:B{\displaystyle \Gamma \vdash A:B}Si es un juicio válido, entonces también lo es.Γdo:D{\displaystyle \Gamma '\vdash C:D}.

Reglas de inferencia para el cálculo de construcciones

1 .ΓPAG:T{\displaystyle {{} \over \Gamma \vdash \mathbf {P} :\mathbf {T} }}

2 .ΓA:KΓ,incógnita:A,Γincógnita:A{\displaystyle {{\Gamma \vdash A:K} \over {\Gamma ,x:A,\Gamma '\vdash x:A}}}

3 .ΓA:KΓ,incógnita:AB:LΓ(incógnita:A.B):L{\displaystyle {\Gamma \vdash A:K\qquad \qquad \Gamma ,x:A\vdash B:L \over {\Gamma \vdash (\forall x:A.B):L}}}

4 .ΓA:KΓ,incógnita:Anorte:BΓ(λincógnita:A.norte):(incógnita:A.B){\displaystyle {\Gamma \vdash A:K\qquad \qquad \Gamma ,x:A\vdash N:B \over {\Gamma \vdash (\lambda x:A.N):(\forall x:A.B)}}}

5 .ΓMETRO:(incógnita:A.B)Γnorte:AΓMETROnorte:B[incógnita:=norte]{\displaystyle {\Gamma \vdash M:(\forall x:A.B)\qquad \qquad \Gamma \vdash N:A \over {\Gamma \vdash MN:B[x:=N]}}}

6 . ΓMETRO:AA=βBΓB:KΓMETRO:B{\displaystyle {\Gamma \vdash M:A\qquad \qquad A=_{\beta }B\qquad \qquad \Gamma \vdash B:K \over {\Gamma \vdash M:B}}}

Definición de operadores lógicos

El cálculo de construcciones tiene muy pocos operadores básicos: el único operador lógico para formar proposiciones es{\displaystyle \forall }Sin embargo, este único operador es suficiente para definir todos los demás operadores lógicos:

ABincógnita:A.B(incógnitaB)ABdo:PAG.(ABdo)doABdo:PAG.(Ado)(Bdo)do¬Ado:PAG.(Ado)incógnita:A.Bdo:PAG.(incógnita:A.(Bdo))do{\displaystyle {\begin{array}{ccll}A\Rightarrow B&\equiv &\forall x:A.B&(x\notin B)\\A\wedge B&\equiv &\forall C:\mathbf {P} .(A\Rightarrow B\Rightarrow C)\Rightarrow C&\\A\vee B&\equiv &\forall C:\mathbf {P} .(A\Rightarrow C)\Rightarrow (B\Rightarrow C)\Rightarrow C&\\\neg A&\equiv &\forall C:\mathbf {P} .(A\Rightarrow C)&\\\exists x:A.B&\equiv &\forall C:\mathbf {P} .(\forall x:A.(B\Rightarrow C))\Rightarrow C&\end{array}}}

Definición de tipos de datos

Los tipos de datos básicos utilizados en informática se pueden definir dentro del cálculo de construcciones:

Booleanos
A:PAG.AAA{\displaystyle \forall A:\mathbf {P} .A\Rightarrow A\Rightarrow A}
Naturales
A:PAG.(AA)AA{\displaystyle \forall A:\mathbf {P} .(A\Rightarrow A)\Rightarrow A\Rightarrow A}
ProductoA×B{\displaystyle A\times B}
AB{\displaystyle A\wedge B}
Unión disjuntaA+B{\displaystyle A+B}
AB{\displaystyle A\vee B}

Los booleanos y los naturales se definen de la misma manera que en la codificación de Church . Sin embargo, surgen problemas adicionales debido a la extensionalidad proposicional y la irrelevancia de la prueba. [ 2 ]

Véase también

Referencias

  1. Coquand, Thierry ; Gallier, Jean H. (julio de 1990). "Una prueba de normalización fuerte para la teoría de construcciones usando una interpretación tipo Kripke" . Informes técnicos (Cis) (568): 14.
  2. "Biblioteca estándar – El asistente de pruebas de Coq" . coq.inria.fr . Consultado el 17 de enero de 2026 .

Fuentes

  • Coquand, Thierry ; Huet, Gérard (1988). "El cálculo de construcciones" (PDF) . Información y computación . 76 ( 2–3 ): 95–120 . doi : 10.1016/0890-5401(88)90005-3 .
    • También disponible en libre acceso en línea: Coquand, Thierry ; Huet, Gerard (1986). El cálculo de las construcciones (Informe técnico). INRIA , Centro de Rocquencourt. 530.La terminología es bastante diferente. Por ejemplo, (incógnita:A.B{\displaystyle \forall x:A.B}) se escribe [ x  : A ] B .
  • Bunder, MW; Seldin, Jonathan P. (2004). Variantes del cálculo básico de construcciones (Informe). CiteSeerX 10.1.1.88.9497 . 
  • Frade, Maria João (2009). "Cálculo de construcciones inductivas" (PDF) . Archivado del original (discusión) el 29 de mayo de 2014. Recuperado el 3 de marzo de 2013 .
  • Huet, Gérard (1988). «Principios de inducción formalizados en el cálculo de construcciones» (PDF) . En Fuchi, K.; Nivat, M. (eds.). Programación de computadoras de próxima generación . North-Holland . pp. 205–216 . ISBN  0444704108Archivado del original (PDF) el 1 de julio de 2015.– Una aplicación del Código de Conducta