Articulo de referencia

Coinducción

En informática , la coinducción es una técnica para definir y demostrar propiedades de sistemas de objetos concurrentes que interactúan entre sí . La coinducción es el dual mate...

En informática , la coinducción es una técnica para definir y demostrar propiedades de sistemas de objetos concurrentes que interactúan entre sí .

La coinducción es el dual matemático de la inducción estructural . Los tipos de datos definidos coinductivamente se conocen como codata y suelen ser estructuras de datos infinitas , como los flujos .

Como definición o especificación , la coinducción describe cómo un objeto puede ser "observado", "descompuesto" o "destruido" en objetos más simples. Como técnica de demostración , puede utilizarse para mostrar que una ecuación se satisface con todas las posibles implementaciones de dicha especificación.

Para generar y manipular datos de codificación, normalmente se utilizan funciones corecursivas , junto con la evaluación perezosa . De manera informal, en lugar de definir una función mediante la coincidencia de patrones en cada uno de los constructores inductivos, se definen cada uno de los "destructores" u "observadores" sobre el resultado de la función.

En programación, la programación co-lógica (co-LP para abreviar) "es una generalización natural de la programación lógica y la programación lógica coinductiva, que a su vez generaliza otras extensiones de la programación lógica, como árboles infinitos, predicados perezosos y predicados comunicantes concurrentes. La co-LP tiene aplicaciones a árboles racionales, verificación de propiedades infinitas, evaluación perezosa, programación lógica concurrente , verificación de modelos , pruebas de bisimilitud , etc." [ 1 ] Hay implementaciones experimentales de co-LP disponibles en la Universidad de Texas en Dallas [ 2 ] y en el lenguaje Logtalk (para ejemplos, véase [ 3 ] ) y SWI-Prolog .

Descripción

En su libro Types and Programming Languages , [ 4 ] Benjamin C. Pierce ofrece una formulación concisa tanto del principio de inducción como del principio de coinducción . Si bien este artículo no se centra principalmente en la inducción , resulta útil considerar de inmediato sus formas algo generalizadas. Para enunciar los principios, se requieren algunos preliminares.

Preliminares

DejarU{\displaystyle U}ser un conjunto yF{\displaystyle F}ser una función monótona2U2U{\displaystyle 2^{U}\rightarrow 2^{U}}, eso es:

incógnitaYF(incógnita)F(Y){\displaystyle X\subseteq Y\Rightarrow F(X)\subseteq F(Y)}

Salvo que se indique lo contrario,F{\displaystyle F}Se asumirá que es monótono.

  • X es F-cerrado siF(incógnita)incógnita{\displaystyle F(X)\subseteq X}
  • X es F-consistente siincógnitaF(incógnita){\displaystyle X\subsetequ F(X)}
  • X es un punto fijo siincógnita=F(incógnita){\displaystyle X=F(X)}

Estos términos pueden entenderse intuitivamente de la siguiente manera. Supongamos queincógnita{\displaystyle X}es un conjunto de afirmaciones, yF(incógnita){\displaystyle F(X)}es la operación que produce las consecuencias deincógnita{\displaystyle X}. Entoncesincógnita{\displaystyle X}es F-cerrado cuando no se puede concluir nada más de lo que ya se ha afirmado, mientras queincógnita{\displaystyle X}es F-consistente cuando todas las afirmaciones están respaldadas por otras afirmaciones (es decir, no hay "suposiciones no F -lógicas").

El teorema de Knaster-Tarski nos dice que el punto fijo más pequeño deF{\displaystyle F}(denotadoμF{\displaystyle \mu F}) viene dado por la intersección de todos los conjuntos F-cerrados , mientras que el mayor punto fijo (denotadoνF{\displaystyle \nu F}) viene dado por la unión de todos los conjuntos F-consistentes . Ahora podemos enunciar los principios de inducción y coinducción.

Definición

  • Principio de inducción : Siincógnita{\displaystyle X}es F-cerrado , entoncesμFincógnita{\displaystyle \mu F\subsetequ X}
  • Principio de coinducción : Siincógnita{\displaystyle X}es F-consistente , entoncesincógnitaνF{\displaystyle X\subsetequ \nu F}

Discusión

Los principios, tal como se han enunciado, son algo opacos, pero pueden pensarse útilmente de la siguiente manera. Supongamos que desea probar una propiedad deμF{\displaystyle \mu F}Por el principio de inducción , basta con exhibir un conjunto F-cerrado.incógnita{\displaystyle X}para lo cual la propiedad se posee. De manera similar, supongamos que desea demostrar queincógnitaνF{\displaystyle x\in \nu F}. Entonces basta con exhibir un conjunto F-consistente queincógnita{\displaystyle x}Se sabe que es miembro de.

Ejemplos

Definir un conjunto de tipos de datos

Consideremos la siguiente gramática de tipos de datos:

T=||T×T{\displaystyle T=\bot \;|\;\top \;|\;T\times T}

Es decir, el conjunto de tipos incluye el "tipo inferior".{\displaystyle \bot }, el "tipo superior"{\displaystyle \top }y tipos de productos. Estos tipos se pueden identificar con cadenas sobre el alfabeto.Σ={,,×}{\displaystyle \Sigma =\{\bot ,\top ,\times \}}. DejarΣω{\displaystyle \Sigma ^{\leq \omega }}denotan todas las cadenas (posiblemente infinitas) sobreΣ{\displaystyle \Sigma }. Consideremos la funciónF:2Σω2Σω{\displaystyle F:2^{\Sigma ^{\leq \omega }}\rightarrow 2^{\Sigma ^{\leq \omega }}}:

F(incógnita)={,}{incógnita×y:incógnita,yincógnita}{\displaystyle F(X)=\{\bot ,\top \}\cup \{x\times y:x,y\in X\}}

En este contexto,incógnita×y{\displaystyle x\times y}significa "la concatenación de cadena"incógnita{\displaystyle x}, el símbolo×{\displaystyle \times }y cuerday{\displaystyle y}." Ahora deberíamos definir nuestro conjunto de tipos de datos como un punto fijo deF{\displaystyle F}, pero importa si tomamos el punto fijo menor o el mayor .

Supongamos que tomamosμF{\displaystyle \mu F}como nuestro conjunto de tipos de datos. Utilizando el principio de inducción , podemos demostrar la siguiente afirmación:

Todos los tipos de datos enμF{\displaystyle \mu F}son finitos

Para llegar a esta conclusión, consideremos el conjunto de todas las cadenas finitas sobreΣ{\displaystyle \Sigma }. ClaramenteF{\displaystyle F}no puede producir una cadena infinita, por lo que resulta que este conjunto es F-cerrado y la conclusión se deduce.

Ahora supongamos que tomamosνF{\displaystyle \nu F}como nuestro conjunto de tipos de datos. Nos gustaría utilizar el principio de coinducción para demostrar la siguiente afirmación:

El tipo××νF{\displaystyle \bot \times \bot \times \cdots \in \nu F}

Aquí××{\displaystyle \bot \times \bot \times \cdots }denota la cadena infinita(,×,,×,){\displaystyle (\bot ,\times ,\bot ,\times ,\ldots )}Para utilizar el principio de coinducción , consideremos el siguiente conjunto:

S={,××}{\displaystyle S=\{\bot ,\;\bot \times \bot \times \cdots \}}

Este conjunto es F-consistente . Primero,{,}F(S){\displaystyle \bot \in \{\bot ,\top \}\subseteq F(S)}Segundo, puesto queS{\displaystyle \bot \in S}y××S{\displaystyle \bot \times \bot \times \cdots \in S}, tenemos×(××)F(S){\displaystyle \bot \times (\bot \times \bot \times \cdots )\in F(S)}. Interpretación de cadenas como secuencias (funciones denorteΣ{\displaystyle \mathbb {N} \rightarrow \Sigma }), anteponiendo el prefijo finito×{\displaystyle \bot \times }a la cadena infinita××{\displaystyle \bot \times \bot \times \cdots }rendimientos××{\displaystyle \bot \times \bot \times \cdots }sí mismo, así que××F(S){\displaystyle \bot \times \bot \times \cdots \in F(S)}. Por lo tantoSF(S){\displaystyle S\subseteq F(S)}y por el principio de coinducción ,××νF{\displaystyle \bot \times \bot \times \cdots \in \nu F}.

Nota. La representación de tipos como cadenas sobreΣ{\displaystyle \Sigma }no es fiel a la estructura de árbol subyacente. Cadenas finitas como××{\displaystyle \bot \times \top \times \bot }son ambiguos sin corchetes, y para cualquier cadena infinitas{\displaystyle s}la concatenacións×t=s{\displaystyle s\times t=s}a pesar det{\displaystyle t}, de modo que se pueden identificar árboles distintos. Esto no afecta al argumento anterior, que solo ilustra el principio de coinducción a través de la consistencia F , pero importaría en entornos donde se debe preservar la estructura del constructor. Un tratamiento estructural estándar representa los tipos a través del isomorfismoT1+1+(T×T){\displaystyle T\cong 1+1+(T\times T)}; consulte F-coalgebra para obtener más detalles.

Tipos de datos coinductivos en lenguajes de programación

Consideremos la siguiente definición de un flujo en Haskell : [ 5 ]

Flujo de datos a = S a ( Flujo a )-- Destructores de flujo cabeza :: Flujo a -> a cabeza ( S a flujo a ) = a cola :: Flujo a -> Flujo a cola ( S a flujo a ) = a flujo

La primera línea indica que un flujo se compone de un elemento seguido de otro flujo (S es un constructor de elementos, y a denota un tipo arbitrario para los elementos). Dado que no existe un caso base , esta definición parecería poco fundamentada , pero no obstante resulta útil en programación y se puede razonar sobre ella. En cualquier caso, un flujo es una lista infinita de elementos de la que se puede observar el primer elemento o colocar un elemento delante para obtener otro flujo.

Relación con las F -coalgebras

Consideremos el endofunctorF{\displaystyle F}en la categoría de conjuntos :

F(incógnita)=A×incógnitaF(F)=idA,F{\displaystyle {\begin{aligned}F(x)&=A\times x\\F(f)&=\langle \mathrm {id} _{A},f\rangle \end{aligned}}}

La F-coalgebra finalνF{\displaystyle \nu F}tiene asociado el siguiente morfismo:

ot:νFF(νF)=A×νF{\displaystyle \mathrm {out} :\nu F\rightarrow F(\nu F)=A\times \nu F}

Esto induce otra coalgebraF(νF){\displaystyle F(\nu F)}con morfismo asociadoF(ot){\displaystyle F(\mathrm {out} )}. PorqueνF{\displaystyle \nu F}es final , hay un morfismo único

F(ot)¯:F(νF)νF{\displaystyle {\overline {F(\mathrm {out} )}}:F(\nu F)\rightarrow \nu F}

de tal manera que

otF(ot)¯=F(F(ot)¯)F(ot)=F(F(ot)¯ot){\displaystyle \mathrm {out} \circ {\overline {F(\mathrm {out} )}}=F\left({\overline {F(\mathrm {out} )}}\right)\circ F(\mathrm {out} )=F\left({\overline {F(\mathrm {out} )}}\circ \mathrm {out} \right)}

La composiciónF(ot)¯ot{\displaystyle {\overline {F(\mathrm {out} )}}\circ \mathrm {out} }induce otro homomorfismo de F -coalgebraνFνF{\displaystyle \nu F\rightarrow \nu F}. DesdeνF{\displaystyle \nu F}es final, este homomorfismo es único y por lo tantoidνF{\displaystyle \mathrm {id} _ {\nu F}}En total tenemos:

F(ot)¯ot=idνFotF(ot)¯=F(F(ot)¯ot)=idF(νF){\displaystyle {\begin{aligned}{\overline {F(\mathrm {out} )}}\circ \mathrm {out} &=\mathrm {id} _{\nu F}\\[0.5ex]\mathrm {out} \circ {\overline {F(\mathrm {out} )}}=F{\bigl (}{\overline {F(\mathrm {out} )}}\circ \mathrm {fuera} {\bigr )}&=\mathrm {id} _ {F(\nu F)}\end{aligned}}}

Esto evidencia el isomorfismoνFF(νF){\displaystyle \nu F\simeq F(\nu F)}, lo cual en términos categóricos indica queνF{\displaystyle \nu F}es un punto fijo deF{\displaystyle F}y justifica la notación. [ 6 ]

Transmisión como una coalgebra final

Demostraremos que Stream Aes la coálgebra final del functorF(incógnita)=A×incógnita{\displaystyle F(x)=A\times x}Consideremos las siguientes implementaciones:

salida astream = ( cabeza astream , cola astream ) salida' ( a , astream ) = S a astream

Es fácil observar que son inversamente proporcionales, lo que evidencia el isomorfismo. Consulte la referencia para obtener más detalles.

Relación con la inducción matemática

Demostraremos cómo el principio de inducción engloba la inducción matemática. SeaPAG{\displaystyle P}Sea alguna propiedad de los números naturales . Tomaremos la siguiente definición de inducción matemática:

0PAG(nortePAGnorte+1PAG)nortePAG{\displaystyle 0\in P\land (n\in P\Rightarrow n+1\in P)\Rightarrow \mathbb {N} \subseteq P}

Ahora consideremos la funciónF:2norte2norte{\displaystyle F:2^{\mathbb {N} }\rightarrow 2^{\mathbb {N} }}:

F(incógnita)={0}{incógnita+1:incógnitaincógnita}{\displaystyle F(X)=\{0\}\cup \{x+1:x\in X\}}

No debería ser difícil ver queμF=norte{\displaystyle \mu F=\mathbb {N} }Por lo tanto, por el principio de inducción , si deseamos demostrar alguna propiedadPAG{\displaystyle P}denorte{\displaystyle \mathbb {N} }, basta con demostrar quePAG{\displaystyle P}es F-cerrado . En detalle, requerimos:

F(PAG)PAG{\displaystyle F(P)\subseteq P}

Eso es,

{0}{incógnita+1:incógnitaPAG}PAG{\displaystyle \{0\}\cup \{x+1:x\in P\}\subseteq P}

Esto es precisamente inducción matemática, tal como se ha dicho.

Véase también

Referencias

  1. "Co-Logic Programming | Lambda the Ultimate" .
  2. "Página principal de Gopal Gupta" .
  3. "Logtalk3/Ejemplos/Coinducción en master · LogtalkDotOrg/Logtalk3" . GitHub .
  4. Pierce, Benjamin C. Tipos y lenguajes de programación . MIT Press.
  5. ^ Kozen, Dexter ; Silva, Alejandra . "Coinducción práctica". CiteSeerX 10.1.1.252.3961 . 
  6. Hinze, Ralf (2012). "Programación genérica con adjunciones" . Programación genérica e indexada . Notas de clase en informática. Vol. 7470. Springer. pp. 47–129 . doi : 10.1007/978-3-642-32202-0_2 . ISBN   978-3-642-32201-3.

Lecturas adicionales

Libros de texto
  • Davide Sangiorgi (2012). Introducción a la bisimulación y la coinducción . Cambridge University Press.
  • Davide Sangiorgi y Jan Rutten (2011). Temas avanzados en bisimulación y coinducción . Cambridge University Press.
Textos introductorios
  • Andrew D. Gordon (1994). "Un tutorial sobre coinducción y programación funcional". 1994. pp. 78– 95. CiteSeerX 10.1.1.37.3914 .   descripción con orientación matemática
  • Bart Jacobs y Jan Rutten (1997). Un tutorial sobre (co)álgebras e (co)inducción ( enlace alternativo ) describe la inducción y la coinducción simultáneamente
  • Eduardo Giménez y Pierre Castéran (2007). "Un tutorial sobre tipos [co-] inductivos en Coq"
  • Coinducción : breve introducción
Historia
Misceláneas
  • Programación co-lógica: Ampliando la programación lógica con coinducción describe el paradigma de programación co-lógica