Ich las bereits Beispiele für Formeln in CTL , aber nicht in LTL und umgekehrt, aber ich habe Probleme , ein mentales Verständnis für LTL Formeln zu gewinnen und wirklich , was im Herzen ist der Unterschied.
Ich las bereits Beispiele für Formeln in CTL , aber nicht in LTL und umgekehrt, aber ich habe Probleme , ein mentales Verständnis für LTL Formeln zu gewinnen und wirklich , was im Herzen ist der Unterschied.
Antworten:
Um den Unterschied zwischen LTL und CTL wirklich zu verstehen, müssen Sie die Semantik beider Sprachen studieren. LTL-Formeln bezeichnen Eigenschaften, die bei jeder Ausführung eines Programms interpretiert werden. Für jede mögliche Ausführung (einen Lauf), die als Folge von Ereignissen oder Zuständen in einer Zeile angezeigt werden kann - und deshalb als "lineare Zeit" bezeichnet wird - wird die Erfüllbarkeit des Laufs überprüft, ohne dass die Möglichkeit besteht, zu einem anderen Lauf zu wechseln während der Überprüfung. Andererseits überprüft die CTL-Semantik eine Formel für alle möglichen Läufe und versucht entweder alle möglichen Läufe ( A- Operator) oder nur einen Lauf ( E- Operator), wenn sie einem Zweig gegenübersteht.
In der Praxis bedeutet dies, dass einige Formeln jeder Sprache nicht in der anderen Sprache angegeben werden können. Beispielsweise besagt die Reset-Eigenschaft (eine wichtige Erreichbarkeitseigenschaft für das Schaltungsdesign), dass immer die Möglichkeit besteht, dass ein Zustand während eines Laufs erreicht werden kann, auch wenn er nie tatsächlich erreicht wird ( AG EF-Reset ). LTL kann nur angeben, dass der Rücksetzstatus tatsächlich erreicht wurde und nicht, dass er erreicht werden kann.
Ich weiß nicht, ob dies Ihre Frage beantwortet, aber ich möchte einige Kommentare hinzufügen.
Es wird viel über die beste Logik diskutiert, um Eigenschaften für die Softwareüberprüfung auszudrücken ... aber die eigentliche Debatte ist woanders. LTL kann wichtige Eigenschaften für die Modellierung von Softwaresystemen (Fairness) ausdrücken, wenn die CTL eine neue Semantik (eine neue Erfüllbarkeitsrelation) haben muss, um sie auszudrücken. CTL-Algorithmen sind jedoch normalerweise effizienter und können BDD-basierte Algorithmen verwenden. Also ... es gibt keine beste Lösung. Bisher nur zwei verschiedene Ansätze.
Einer der Kommentatoren schlägt Vardis Artikel "Branching versus Linear Time: Final Showdown" vor .
Wenn Sie ein Objekt erhalten (z. B. Trace bei LTL), betrachten Sie für jeden Zeitpunkt nur eine Zukunft. In CTL haben Sie eine Vielzahl davon.
Gibt insbesondere next
eine eindeutige Aktion in LTL, aber (möglicherweise) einen ganzen Satz in CTL.