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:
- idiomas (conjuntos de cadenas sobre algún alfabeto, que pueden ser finitos);
- lenguajes de árboles (conjuntos de árboles sobre algún alfabeto);
- rastros de ejecución de un sistema no determinista;
- numeros reales;
- conjuntos de enteros;
- conjuntos de funciones de enteros a enteros; ...
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:
Inductive list (A:Set) : Set :=
| nil : list A
| cons : A -> list A -> list A.
Informalmente, el list
tipo es el tipo más pequeño que contiene todos los valores construidos a partir de los constructores nil
y cons
, 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:∀ xy,n i l ≠ c o n sXy
CoInductive colist (A:Set) : Set :=
| conil : colist A
| cocons : A -> colist A -> colist A.
list
es isomorfo a un subconjunto de colist
. Además, colist
contiene infinitas listas: listas con cocons
sobre cocons
.
CoFixpoint flipflop : colist ℕ := cocons 1 (cocons 2 flipflop).
CoFixpoint from (n:ℕ) : colist ℕ := cocons n (from (1 + n)).
flipflop
es la (lista circular) infinita ; es la lista infinita de números naturales 0 : : 1 : : 2 : : ... .1 : : 2 : : 1 : : 2 : : ...from 0
0 : : 1 : : 2 : : ...
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
y from
definiciones anteriores están bien formadas-es que la llamada corecursive es vigilado por una llamada al cocons
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
.
CoInductive Infinite A : colist A -> Prop :=
| Inf : forall x l, Infinite l -> Infinite (cocons x l).
Para demostrar que los colistas de la forma from n
son infinitos, podemos razonar por coinducción. from n
es igual a cocons n (from (1 + n))
. Esto muestra que from n
es mayor que from (1 + n)
, que es infinito por la hipótesis de la coinducción, por from 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 ) ∈ RUNAsiSL→R ⊆ S× S
∀ ( p , q) ∈ R , si p →αpags′ entonces ∃ q′,q→αq′ y ( p′, q′) ∈ R
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.UNAsisiUNAR
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.R1R2R1∪ 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