Erstens, um eine mögliche kognitive Dissonanz zu beseitigen: Das Denken über unendliche Strukturen ist kein Problem, wir tun es die ganze Zeit. Solange die Struktur endlich beschreibbar ist, ist das kein Problem. Hier sind einige gebräuchliche Arten von unendlichen Strukturen:
- Sprachen (Sätze von Zeichenketten über einem Alphabet, die endlich sein können);
- Baumsprachen (Baumgruppen über einem Alphabet);
- Ausführungsspuren eines nicht deterministischen Systems;
- reale Nummern;
- Mengen von ganzen Zahlen;
- Mengen von Funktionen von ganzen Zahlen zu ganzen Zahlen; …
Koinduktivität als größter Fixpunkt
Wo induktive Definitionen eine Struktur aus elementaren Bausteinen bilden, formen koin- duktive Definitionen Strukturen, aus denen sie dekonstruiert werden können. Der Listentyp, dessen Elemente sich in einer Menge befinden, A
ist beispielsweise in Coq wie folgt definiert:
Inductive list (A:Set) : Set :=
| nil : list A
| cons : A -> list A -> list A.
Informell ist der list
Typ der kleinste Typ, der alle aus den Konstruktoren nil
und gebildeten Werte enthält cons
, mit dem Axiom . Umgekehrt können wir den größten Typ definieren, der alle Werte enthält, die aus diesen Konstruktoren erstellt wurden, wobei das Unterscheidungsaxiom beibehalten wird:∀xy,nil≠consxy
CoInductive colist (A:Set) : Set :=
| conil : colist A
| cocons : A -> colist A -> colist A.
list
ist isomorph zu einer Teilmenge von colist
. Darüber hinaus colist
enthält unendliche Listen: Listen mit cocons
auf cocons
.
CoFixpoint flipflop : colist ℕ := cocons 1 (cocons 2 flipflop).
CoFixpoint from (n:ℕ) : colist ℕ := cocons n (from (1 + n)).
flipflop
ist die unendliche (zirkuläre Liste) ; ist die unendliche Liste natürlicher Zahlen .1::2::1::2::…from 0
0::1::2::…
Eine rekursive Definition ist wohlgeformt, wenn das Ergebnis aus kleineren Blöcken besteht: Rekursive Aufrufe müssen bei kleineren Eingaben funktionieren. Eine kernkursive Definition ist wohlgeformt, wenn das Ergebnis größere Objekte erzeugt. Induktion befasst sich mit Konstruktoren, Koinduktion befasst sich mit Destruktoren. Beachten Sie, wie sich die Dualität nicht nur von kleiner zu größer ändert, sondern auch von Eingängen zu Ausgängen. Beispielsweise ist der Grund, warum die obigen Definitionen flipflop
und from
wohlgeformt sind, dass der kerncursive Aufruf cocons
in beiden Fällen durch einen Aufruf an den Konstruktor geschützt wird.
Wo Aussagen über induktive Objekte induktive Beweise haben, haben Aussagen über koinduktive Objekte koinduktive Beweise. Definieren wir beispielsweise das unendliche Prädikat für Colists. intuitiv sind es die unendlichen Kolisten, die nicht enden conil
.
CoInductive Infinite A : colist A -> Prop :=
| Inf : forall x l, Infinite l -> Infinite (cocons x l).
Um zu beweisen, dass Kolisten der Form from n
unendlich sind, können wir durch Coinduktion argumentieren. from n
ist gleich cocons n (from (1 + n))
. Dies zeigt, dass from n
größer als from (1 + n)
, was nach der Coinduktionshypothese from n
unendlich ist , also unendlich ist.
Bisimilarität, eine coinduktive Eigenschaft
Die Coinduktion als Beweismethode gilt auch für Gegenstände im Haushalt. Intuitiv ausgedrückt basieren induktive Beweise über ein Objekt darauf, wie das Objekt aufgebaut ist. Coinductive Proofs basieren darauf, wie das Objekt zerlegt werden kann.
Beim Studium deterministischer Systeme ist es üblich, Äquivalenz durch induktive Regeln zu definieren: Zwei Systeme sind äquivalent, wenn Sie durch eine Reihe von Transformationen von einem zum anderen gelangen können. Solche Definitionen erfassen in der Regel nicht, auf welche Weise nicht deterministische Systeme trotz unterschiedlicher interner Struktur dasselbe (beobachtbare) Verhalten aufweisen können. (Coinduction ist auch nützlich, um nicht terminierende Systeme zu beschreiben, auch wenn sie deterministisch sind, aber darauf werde ich mich hier nicht konzentrieren.)
Nichtdeterministische Systeme wie gleichzeitige Systeme werden häufig durch markierte Übergangssysteme modelliert . Ein LTS ist ein gerichteter Graph, in dem die Kanten beschriftet sind. Jede Kante repräsentiert einen möglichen Übergang des Systems. Eine Spur eines LTS ist die Folge von Kantenbeschriftungen über einem Pfad im Diagramm.
Zwei LTS können sich identisch verhalten, indem sie die gleichen möglichen Spuren haben, auch wenn ihre interne Struktur unterschiedlich ist. Der Graphisomorphismus ist zu stark, um seine Äquivalenz zu definieren. Stattdessen wird eine LTS soll simulieren andere LTS , wenn jeder Übergang des zweiten LTS einen entsprechenden Übergang in dem ersten zugibt. Formal sei die disjunkte Vereinigung der Zustände der beiden LTS, die (gemeinsame) Menge von Bezeichnungen und die Übergangsrelation. Die Beziehung ist eine Simulation, wenn
ABSL→R⊆S×S
∀(p,q)∈R, if p→αp′ then ∃q′,q→αq′ and (p′,q′)∈R
A simuliert wenn es eine Simulation gibt, bei der alle Zustände von mit einem Zustand in . Wenn eine Simulation in beide Richtungen ist, spricht man von einer Bisimulation . Simulation ist eine koinduktive Eigenschaft: Jede Beobachtung auf einer Seite muss auf der anderen Seite übereinstimmen.BBAR
Es gibt möglicherweise viele Bisimulationen in einem LTS. Unterschiedliche Bisimulationen können unterschiedliche Zustände identifizieren. Bei zwei Bisimulationen und ist die durch Vereinigung der Beziehungsgraphen gegebene Beziehung selbst eine Bisimulation, da verwandte Zustände verwandte Zustände für beide Beziehungen hervorrufen. (Dies gilt auch für unendliche Vereinigungen. Die leere Beziehung ist eine uninteressante Bisimulation, ebenso wie die Identitätsbeziehung.) Insbesondere ist die Vereinigung aller Bisimulationen selbst eine Bisimulation, die als Bisimilarität bezeichnet wird. Bisimilarität ist die gröbste Art, ein System zu beobachten, das nicht zwischen verschiedenen Zuständen unterscheidet.R1R2R1∪R2
Bisimilarität ist eine coinduktive Eigenschaft. Es kann als der größte Fixpunkt eines Operators definiert werden: Es ist die größte Beziehung, die, wenn sie erweitert wird, um äquivalente Zustände zu identifizieren, dieselbe bleibt.
Verweise