Ho già letto esempi di formule in CTL ma non in LTL e viceversa, ma ho difficoltà a ottenere una comprensione mentale delle formule LTL e in realtà qual è la differenza.
Ho già letto esempi di formule in CTL ma non in LTL e viceversa, ma ho difficoltà a ottenere una comprensione mentale delle formule LTL e in realtà qual è la differenza.
Risposte:
Per capire veramente la differenza tra LTL e CTL devi studiare la semantica di entrambe le lingue. Le formule LTL indicano proprietà che verranno interpretate ad ogni esecuzione di un programma. Per ogni possibile esecuzione (una corsa), che può essere vista come una sequenza di eventi o stati su una linea - e questo è il motivo per cui è chiamata "tempo lineare" - la verificabilità della verifica viene eseguita sulla corsa senza possibilità di passare a un'altra corsa durante il controllo. D'altra parte, la semantica CTL controlla una formula su tutte le corse possibili e proverà tutte le corse possibili ( operatore A ) o solo una corsa ( operatore E ) quando si trova di fronte a un ramo.
In pratica ciò significa che alcune formule di ciascuna lingua non possono essere dichiarate nell'altra lingua. Ad esempio, la proprietà reset (un'importante proprietà di raggiungibilità per la progettazione di circuiti) afferma che esiste sempre la possibilità che uno stato possa essere raggiunto durante una corsa, anche se non viene mai effettivamente raggiunto ( ripristino EF EF ). LTL può solo dichiarare che lo stato di reset è effettivamente raggiunto e non che può essere raggiunto.
Non so se questo risponda alla tua domanda, ma vorrei aggiungere alcuni commenti.
C'è molta discussione sulla migliore logica per esprimere le proprietà per la verifica del software ... ma il vero dibattito è altrove. LTL può esprimere importanti proprietà per la modellizzazione del sistema software (correttezza) quando il CTL deve avere una nuova semantica (una nuova relazione di soddisfacibilità) per esprimerle. Ma gli algoritmi CTL sono generalmente più efficienti e possono utilizzare algoritmi basati su BDD. Quindi ... non esiste una soluzione migliore. Solo due approcci diversi, finora.
Uno dei commentatori suggerisce l'articolo di Vardi "Branching versus Linear Time: Final Showdown" .
Se ti viene dato un oggetto (es. Traccia in caso di LTL), consideri solo un futuro per ogni momento, in CTL ne hai una pletora.
In particolare, next
fornisce un'azione unica in LTL ma (potenzialmente) un intero set in CTL.