He oído hablar de inducción (estructural). Le permite construir estructuras finitas a partir de otras más pequeñas y le ofrece principios de prueba para razonar sobre tales estructuras. La idea es lo suficientemente clara.
¿Pero qué pasa con la coinducción? ¿Como funciona? ¿Cómo se puede decir algo concluyente sobre una estructura infinita?
Hay (al menos) dos ángulos para abordar, a saber, la coinducción como una forma de definir las cosas y como una técnica de prueba.
Con respecto a la coinducción como una técnica de prueba, ¿cuál es la relación entre la coinducción y la bisimulación?
terminology
logic
proof-techniques
formal-methods
coinduction
Dave Clarke
fuente
fuente
Respuestas:
Primero, para disipar una posible disonancia cognitiva: el razonamiento sobre estructuras infinitas no es un problema, lo hacemos todo el tiempo. Mientras la estructura sea finitamente describible, eso no es un problema. Aquí hay algunos tipos comunes de estructuras infinitas:
Coinductividad como el punto de fijación más grande
Donde las definiciones inductivas construyen una estructura a partir de bloques de construcción elementales, las definiciones coinductivas dan forma a las estructuras de cómo pueden ser deconstruidas. Por ejemplo, el tipo de listas cuyos elementos están en un conjunto
A
se define de la siguiente manera en Coq:Informalmente, el∀ xy,n i l ≠ c o n sXy
list
tipo es el tipo más pequeño que contiene todos los valores construidos a partir de los constructoresnil
ycons
, con el axioma que . Por el contrario, podemos definir el tipo más grande que contiene todos los valores construidos a partir de estos constructores, manteniendo el axioma de discriminación:list
es isomorfo a un subconjunto decolist
. Además,colist
contiene infinitas listas: listas concocons
sobrecocons
.flipflop
es la (lista circular) infinita ; es la lista infinita de números naturales 0 : : 1 : : 2 : : ... .from 0
Una definición recursiva está bien formada si el resultado se construye a partir de bloques más pequeños: las llamadas recursivas deben funcionar en entradas más pequeñas. Una definición corecursive está bien formada si el resultado crea objetos más grandes. La inducción mira a los constructores, la coinducción mira a los destructores. Observe cómo la dualidad no solo cambia de menor a mayor, sino también de entradas a salidas. Por ejemplo, la razón de la
flipflop
yfrom
definiciones anteriores están bien formadas-es que la llamada corecursive es vigilado por una llamada alcocons
constructor en ambos casos.Cuando las declaraciones sobre objetos inductivos tienen pruebas inductivas, las declaraciones sobre objetos coinductores tienen pruebas coinductivas. Por ejemplo, definamos el predicado infinito en colistas; intuitivamente, los colistas infinitos son los que no terminan con
conil
.Para demostrar que los colistas de la forma
from n
son infinitos, podemos razonar por coinducción.from n
es igual acocons n (from (1 + n))
. Esto muestra quefrom n
es mayor quefrom (1 + n)
, que es infinito por la hipótesis de la coinducción, porfrom n
lo tanto, es infinito.Bisimilaridad, una propiedad coinductora
La coinducción como técnica de prueba también se aplica a objetos finitarios. Intuitivamente hablando, las pruebas inductivas sobre un objeto se basan en cómo se construye el objeto. Las pruebas coductivas se basan en cómo se puede descomponer el objeto.
Cuando se estudian sistemas deterministas, es común definir la equivalencia a través de reglas inductivas: dos sistemas son equivalentes si puede pasar de uno a otro mediante una serie de transformaciones. Dichas definiciones tienden a no capturar las diferentes formas en que los sistemas no deterministas pueden terminar teniendo el mismo comportamiento (observable) a pesar de tener una estructura interna diferente. (La coinducción también es útil para describir sistemas no terminales, incluso cuando son deterministas, pero esto no es en lo que me centraré aquí).
Los sistemas no deterministas como los sistemas concurrentes a menudo se modelan mediante sistemas de transición etiquetados . Un LTS es un gráfico dirigido en el que se etiquetan los bordes. Cada borde representa una posible transición del sistema. Una traza de un LTS es la secuencia de etiquetas de borde sobre una ruta en el gráfico.
Dos LTS pueden comportarse de manera idéntica, ya que tienen los mismos rastros posibles, incluso si su estructura interna es diferente. El isomorfismo gráfico es demasiado fuerte para definir su equivalencia. En cambio, se dice que un LTS simula otro LTS B si cada transición del segundo LTS admite una transición correspondiente en el primero. Formalmente, dejemos que S sea la unión disjunta de los estados de los dos LTS, L el conjunto (común) de etiquetas y → la relación de transición. La relación R ⊆ S × S es una simulación si ∀ ( p , q ) ∈ RUNA si S L → R ⊆ S× S
simula B si existe una simulación en la que todos los estados de B están relacionados con un estado en A . Si R es una simulación en ambas direcciones, se llamabisimulación. La simulación es una propiedad coinductora: cualquier observación en un lado debe tener una coincidencia en el otro lado.UNA si si UNA R
Hay potencialmente muchas bisimulaciones en un LTS. Diferentes bisimulaciones pueden identificar diferentes estados. Dadas dos bisimulaciones y R 2 , la relación dada al tomar la unión de los gráficos de relaciones R 1 ∪ R 2 es en sí misma una bisimulación, ya que los estados relacionados dan lugar a estados relacionados para ambas relaciones. (Esto también es válido para las uniones infinitas. La relación vacía es una bisimulación sin intromisión, como lo es la relación de identidad). En particular, la unión de todas las bisimulaciones es en sí misma una bisimulación, llamada bisimilaridad. La bisimilaridad es la forma más grosera de observar un sistema que no distingue entre estados distintos.R1 R2 R1∪ R2
La bisimilaridad es una propiedad coinductora. Se puede definir como el punto de fijación más grande de un operador: es la relación más grande que, cuando se extiende para identificar estados equivalentes, permanece igual.
Referencias
Coq y el cálculo de construcciones inductivas
Sistemas de transición etiquetados y bisimulaciones
Davide Sangiorgi. El cálculo pi: una teoría de procesos móviles . Cambridge University Press, 2003. [ Amazon ]
Un capítulo en Programación certificada con tipos dependientes por A. Chlipala
fuente
Consideremos la siguiente definición inductiva:
Notación:
fuente
We can not turn the anchor around, so it goes away
.