Cos'è la coinduzione?


68

Ho sentito parlare dell'induzione (strutturale). Ti permette di costruire strutture finite da quelle più piccole e ti dà principi di prova per ragionare su tali strutture. L'idea è abbastanza chiara.

Ma per quanto riguarda la coinduzione? Come funziona? Come si può dire qualcosa di conclusivo su una struttura infinita?

Vi sono (almeno) due angoli da affrontare, vale a dire la coinduzione come modo di definire le cose e come tecnica di prova.

Considerando la coinduzione come una tecnica di prova, qual è la relazione tra coinduzione e bisimulazione?


4
In realtà vorrei sapere la risposta a questo :)
Suresh,

1
Vedi anche cs.cornell.edu/~kozen/papers/Structural.pdf per un tutorial.
sig.

Risposte:


60

In primo luogo, per dissipare una possibile dissonanza cognitiva: il ragionamento su strutture infinite non è un problema, lo facciamo sempre. Finché la struttura è finitamente descrivibile, non è un problema. Ecco alcuni tipi comuni di strutture infinite:

  • lingue (serie di stringhe sopra un po 'di alfabeto, che può essere finito);
  • lingue degli alberi (gruppi di alberi sopra un po 'di alfabeto);
  • tracce di esecuzione di un sistema non deterministico;
  • numeri reali;
  • insiemi di numeri interi;
  • insiemi di funzioni da numeri interi a numeri interi; ...

Coinduttività come il più grande punto fisso

Laddove le definizioni induttive costruiscono una struttura a partire da blocchi elementari, le definizioni coinduttive modellano le strutture da come possono essere decostruite. Ad esempio, il tipo di elenchi i cui elementi sono in un set Aè definito come segue in Coq:

Inductive list (A:Set) : Set :=
  | nil : list A
  | cons : A -> list A -> list A.

Informalmente, il listtipo è il tipo più piccolo che contiene tutti i valori dai costruttori nile cons, con l'assioma che . Al contrario, possiamo definire il tipo più grande che contiene tutti i valori costruiti da questi costruttori, mantenendo l'assioma della discriminazione:xy,nilconsxy

CoInductive colist (A:Set) : Set :=
  | conil : colist A
  | cocons : A -> colist A -> colist A.

listè isomorfo in un sottoinsieme di colist. Inoltre, colistcontiene elenchi infiniti: elenchi con coconssu cocons.

CoFixpoint flipflop : colist ℕ := cocons 1 (cocons 2 flipflop).
CoFixpoint from (n:ℕ) : colist ℕ := cocons n (from (1 + n)).

flipflopè l'infinito (elenco circolare) ; è l'elenco infinito di numeri naturali .1::2::1::2::from 00::1::2::

Una definizione ricorsiva è ben formata se il risultato è costruito da blocchi più piccoli: le chiamate ricorsive devono funzionare su input più piccoli. Una definizione corecursive è ben formata se il risultato crea oggetti più grandi. L'induzione guarda ai costruttori, la coinduzione guarda ai distruttori. Nota come la dualità non solo cambi da più piccola a più grande, ma anche input per output. Ad esempio, il motivo per cui le definizioni flipflope fromsopra sono ben formate è che la chiamata corecursive è protetta da una chiamata al coconscostruttore in entrambi i casi.

Laddove le dichiarazioni sugli oggetti induttivi hanno prove induttive, le dichiarazioni sugli oggetti induttivi hanno prove induttive. Ad esempio, definiamo il predicato infinito sui colisti; intuitivamente, le infinite coliste sono quelle che non finiscono conil.

CoInductive Infinite A : colist A -> Prop :=
  | Inf : forall x l, Infinite l -> Infinite (cocons x l).

Per dimostrare che le coliste della forma from nsono infinite, possiamo ragionare per coinduzione. from nè uguale a cocons n (from (1 + n)). Ciò dimostra che from nè più grande di from (1 + n), che è infinito dall'ipotesi della coinduzione, quindi from nè infinito.

Bisimilarità, una proprietà coinduttiva

La coinduzione come tecnica di prova si applica anche agli oggetti finitari. In termini intuitivi, le prove induttive su un oggetto si basano su come l'oggetto è costruito. Le prove coinduttive si basano su come l'oggetto può essere decomposto.

Quando si studiano i sistemi deterministici, è comune definire l'equivalenza attraverso regole induttive: due sistemi sono equivalenti se si può ottenere l'uno dall'altro mediante una serie di trasformazioni. Tali definizioni tendono a non riuscire a cogliere i diversi modi in cui i sistemi non deterministici possono finire per avere lo stesso comportamento (osservabile) nonostante abbiano una struttura interna diversa. (La coinduzione è anche utile per descrivere i sistemi non terminanti, anche quando sono deterministici, ma questo non è ciò su cui mi concentrerò qui.)

I sistemi non deterministici come i sistemi concorrenti sono spesso modellati da sistemi di transizione etichettati . Un LTS è un grafico diretto in cui i bordi sono etichettati. Ogni fronte rappresenta una possibile transizione del sistema. Una traccia di un LTS è la sequenza delle etichette dei bordi su un percorso nel grafico.

Due LTS possono comportarsi in modo identico, in quanto hanno le stesse possibili tracce, anche se la loro struttura interna è diversa. L'isomorfismo grafico è troppo forte per definirne l'equivalenza. Invece, si dice che un LTS simuli un altro LTS se ogni transizione del secondo LTS ammette una transizione corrispondente nella prima. Formalmente, sia l'unione disgiunta degli stati dei due LTS, l'insieme (comune) di etichette e la relazione di transizione. La relazione è una simulazione if ABSLRS×S

(p,q)R, if pαp then q,qαq and (p,q)R

A simula se esiste una simulazione in cui tutti gli stati di sono correlati a uno stato in . Se è una simulazione in entrambe le direzioni, si chiama bisimulazione . La simulazione è una proprietà coinduttiva: qualsiasi osservazione da una parte deve avere una corrispondenza dall'altra parte.BBAR

Ci sono potenzialmente molte bisimulazioni in un LTS. Bisimulazioni diverse potrebbero identificare stati diversi. Date due bisimulazioni e , la relazione data prendendo l'unione dei grafici di relazione è essa stessa una bisimulazione, poiché gli stati correlati generano stati correlati per entrambe le relazioni. (Ciò vale anche per le unioni infinite. La relazione vuota è una bisimulazione continua, così come la relazione di identità.) In particolare, l'unione di tutte le bisimulazioni è essa stessa una bisimulazione, chiamata bisimilarità. La bisimilarità è il modo più grossolano di osservare un sistema che non distingue tra stati distinti.R1R2R1R2

La bisimilarità è una proprietà coinduttiva. Può essere definito come il più grande punto fisso di un operatore: è la più grande relazione che, se estesa per identificare stati equivalenti, rimane la stessa.

Riferimenti

  • Coq e il calcolo delle costruzioni induttive

    • Yves Bertot e Pierre Castéran. Teorema interattivo Proving e sviluppo di programmi - Coq'Art: il calcolo delle costruzioni induttive . Springer, 2004. Ch. 13. [ sito web ] [ Amazon ]
    • Eduardo Giménez. Un'applicazione di tipi coinduttivi in ​​coq: verifica del protocollo di bit alternato . Nel Workshop sui tipi di prove e programmi , numero 1158 in Appunti di lezione di Informatica , pagine 135–152. Springer-Verlag, 1995. [ Google Libri ]
    • Eduardo Giménez e Pierre Castéran. Un tutorial su [Co-] tipi induttivi in ​​Coq. 2007. [ PDF ]
  • Sistemi di transizione etichettati e bisimulazioni

    • Robin Milner. Comunicazione e concorrenza . Prentice Hall, 1989.
    • Davide Sangiorgi. Sulle origini della bisimulazione e della coinduzione . Transazioni ACM su linguaggi e sistemi di programmazione (TOPLAS), volume 31 numero 4, maggio 2009. [ PDF ] [ ACM ] Diapositive dei corsi associati: [ PDF ] [ CiteSeer ]
    • Davide Sangiorgi. Il Pi-Calculus: una teoria dei processi mobili . Cambridge University Press, 2003. [ Amazon ]

    • Un capitolo in Programmazione certificata con tipi dipendenti di A. Chlipala

    • D. Sangiorgi. "Introduzione alla bisimulazione e alla coinduzione". 2011. [ PDF ]
    • D. Sangiorgi e J. Rutten. Argomenti avanzati in bisimulazione e coinduzione . Cambridge University Press, 2012. [ CUP ]

21

Consideriamo la seguente definizione induttiva:

εTwTawTawTbawT

Che cos'è ? Chiaramente, l'insieme di stringhe senza due successive , cioèTb

T={ε,a,aa,ba,aaa,aba,}=L((baa))Σ.

Giusto? Bene, ciò di cui abbiamo bisogno è la frase innocua "e è il set più piccolo che soddisfa queste condizioni". Abbastanza vero, altrimenti funzionerebbe anche .TT={a,b}

Ma c'è dell'altro. Scrivi sopra la definizione come funzione (monotona) :f:2Σ2Σ

f(T)=T{ε}{awwT}{bawawT}

Ora è il più piccolo punto fisso di . Infatti, poiché è monotona e è un reticolo completo , il teorema di Knaster-Tarski ci dice che esiste un fixpoint così piccolo ed è un linguaggio corretto. Poiché funziona con qualsiasi ragionevole definizione induttiva¹, normalmente non ne parliamo. Si adatta perfettamente alla nostra intuizione: iniziamo con e applichiamo le regole passo dopo passo; nel limite, otteniamo .Tff(2Σ,){ε}T

Ora cambiamo le cose. Invece di dire "se è incluso, quindi è " diciamo "se è incluso, quindi deve essere stato ". Non possiamo girare l'ancora, quindi scompare. Questo ci lascia con un problema: dobbiamo essere in grado di togliere arbitrariamente lunghi prefissi da qualsiasi parola in e rimanere in ! Questo non è possibile con parole finite; buona cosa che ho intrufolato in sopra! Finiamo con l'insieme di parole infinite senza un fattore (sottostringa) , cioè .wawawwTTΣbbT=L((baa)ω)

In termini di , è il suo più grande punto fisso². Questo in realtà è abbastanza intuitivo: non possiamo sperare di colpire dal basso , cioè induttivamente partendo da e aggiungendo cose che soddisfano le regole, quindi andiamo dall'alto , cioè coattivamente iniziando da e rimuovendo le cose che non sono conformi alle regole.fTT{ε}Σ


Notazione:

  • Σ=ΣΣω
  • Σω è l'insieme di tutte le sequenze infinite su .Σ

¹ Non ti è permesso fare cose come ; la funzione corrispondente non sarebbe monotona. ² In qualche modo dobbiamo spazzare sotto il tappeto.wTawT
{ε}


2
Spero che una spiegazione induttiva sia appropriata.
Raffaello

È sufficiente in tutti i casi o è solo un artefatto proveniente dal quadro si sta lavorando? Penso di ricordare di aver visto articoli (e probabilmente del codice agda di M. Escardo) che stabilivano il legame tra la forza di una teoria dei tipi e gli ordinali che si possono costruire in esso. ω
gallais,

@gallais: Quanto sopra riguarda tutto ciò che (credo) a conoscenza di questo argomento, quindi onestamente non lo so. potrebbe essere originariamente un artefatto; se usi qualcos'altro invece di otterrai diversi punti di fissaggio più grandi. ωΣ
Raffaello

Bella spiegazione. Tuttavia, non capisco questa frase We can not turn the anchor around, so it goes away.
hengxin,

@hengxin Ci sono due componenti. 1) Non ci sono implicazioni nell'ancora, quindi non puoi "girare" l'istruzione. Nulla segue (per la variante coinduttiva) da " ". 2) Togliendo le lettere da una stringa infinita, non raggiungi mai la parola vuota, quindi l'ancora non ha nulla a che fare con l'essere lì com'è - ! εTεT
Raffaello
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.