Λογική υπολογιστικού δένδρου

Η λογική υπολογιστικού δένδρου (Computation tree logic, CTL) είναι μια λογική διακλαδιζόμενου χρόνου (branching-time), το οποίο σημαίνει ότι το μοντέλο της για το χρόνο είναι μια δενδρική δομή, στην οποία το μέλλον δεν έχει οριστεί αλλά υπάρχουν διαφορετικά μονοπάτια σε αυτό και κάθε ένα από αυτά τα μονοπάτια μπορεί να είναι ένα μονοπάτι που θα πραγματοποιηθεί. Χρησιμοποιείται στην τυπική επαλήθευση λογισμικού ή υλικού, συνήθως από λογισμικό που ονομάζεται ελεγκτής μοντέλων. Το λογισμικό αυτό προσδιορίζει αν το λογισμικό ή το υλικό που ελέγχεται έχει κάποιες συγκεκριμένες ιδιότητες ασφάλειας (safety) ή ζωτικότητας (liveness). Ανήκει στην κατηγορία των χρονικών λογικών, όπως και η γραμμική χρονική λογική.

 Η γλώσσα ενός καλώς ορισμένου τύπου σε CTL παράγεται από την ακόλουθη γραμματική χωρίς συμφραζόμενα: ϕ ::= ⊥ | ⊤ | p | ( ¬ ϕ ) | ( ϕ ∧ ϕ ) | ( ϕ ∨ ϕ ) | ( ϕ ⇒ ϕ ) | ( ϕ ⇔ ϕ ) | A X ϕ | E X ϕ | A F ϕ | E F ϕ | A G ϕ | E G ϕ | A [ ϕ U ϕ ] | E [ ϕ U ϕ ] {\displaystyle \phi ::=\bot |\top |p|(\neg \phi )|(\phi \land \phi )|(\phi \lor \phi )|(\phi \Rightarrow \phi )|(\phi \Leftrightarrow \phi )|AX\phi |EX\phi |AF\phi |EF\phi |AG\phi |EG\phi |A[\phi U\phi ]|E[\phi U\phi ]} όπου ο p {\displaystyle p} παίρνει τιμές στο σύνολο των ατομικών τύπων (atomic formulas). Δε χρειάζονται όλοι οι σύνδεσμοι - για παράδειγμα οι { ¬ , ∧ , A X , A U , E U } {\displaystyle \{\neg ,\land ,AX,AU,EU\}} αποτελούν πλήρες σύνολο συνδέσμων, με τους υπόλοιπους να μπορούν να οριστούν με βάση αυτούς. A {\displaystyle A} σημαίνει 'σε όλα τα μονοπάτια' ('along All paths') ή Αναπόφευκτα (Inevitably) E {\displaystyle E} σημαίνει 'σε ένα τουλάχιστον μονοπάτι' ('along at least - there Exists - one path') ή Πιθανόν (possibly)Για παράδειγμα, ο εξής τύπος είναι ένας καλώς ορισμένος τύπος της CTL: E F E G p ⇒ A F r {\displaystyle EFEGp\Rightarrow AFr} Ο παρακάτω δεν είναι καλώς ορισμένος τύπος της CTL: E F ( r U q ) {\displaystyle EF{\big (}rUq{\big )}} Το πρόβλημα με αυτόν είναι ότι ο U {\displaystyle U} μπορεί να εμφανίζεται μόνο μαζί με έναν A {\displaystyle A} ή έναν E {\displaystyle E} . Σαν κατασκευαστικά στοιχεία χρησιμοποιεί ατομικές προτάσεις για να δηλώσει ιδιότητες των καταστάσεων ενός συστήματος. Η CTL στη συνέχεια συνδυάζει αυτές τις προτάσεις σε τύπους χρησιμοποιώντας λογικούς τελεστές και χρονικές λογικές. Οι λογικοί τελεστές είναι οι συνήθεις: ¬ , ∨ , ∧ , ⇒ {\displaystyle \neg ,\lor ,\land ,\Rightarrow } και ⇔ {\displaystyle \Leftrightarrow } . Οι τύποι της CTL μπορούν επιπλέον να χρησιμοποιούν με αυτούς τις λογικές σταθερές true (αληθές) και false (ψευδές). Οι χρονικοί τελεστές είναι οι ακόλουθοι: Ποσοδείκτες πάνω σε μονοπάτια A ϕ {\displaystyle \phi } - Όλα (All): η ϕ {\displaystyle \phi } πρέπει να ισχύει σε όλα τα μονοπάτια που αρχίζουν από την τρέχουσα κατάσταση. E ϕ {\displaystyle \phi } - Υπάρχει (Exists): υπάρχει τουλάχιστον ένα μονοπάτι που αρχίζει από την τρέχουσα κατάσταση, στο οποίο να ισχύει η ϕ {\displaystyle \phi } . Ποσοδείκτες σε συγκεκριμένα μονοπάτια X ϕ {\displaystyle \phi } - Επόμενο (Next): η ϕ {\displaystyle \phi } πρέπει να ισχύει στην επόμενη κατάσταση (ο τελεστής αυτός συνήθως συμβολίζεται και σαν N αντί για X). G ϕ {\displaystyle \phi } - Καθολικά (Globally): η ϕ {\displaystyle \phi } πρέπει να ισχύει σε όλο το υπόλοιπο μονοπάτι. F ϕ {\displaystyle \phi } - Τελικά (Finally): η ϕ {\displaystyle \phi } πρέπει να ισχύει τελικά (κάπου στο υπόλοιπο μονοπάτι). ϕ {\displaystyle \phi } U ψ {\displaystyle \psi } - Μέχρι (Until): η ϕ {\displaystyle \phi } πρέπει να ισχύει τουλάχιστον μέχρι κάποια θέση στην οποία να ισχύει η ψ {\displaystyle \psi } . Αυτό σημαίνει ότι η ψ {\displaystyle \psi } θα επαληθευτεί στο μέλλον. ϕ {\displaystyle \phi } W ψ {\displaystyle \psi } - Ασθενές μέχρι (Weak until): η ϕ {\displaystyle \phi } πρέπει να ισχύει μέχρι να ισχύει η ψ {\displaystyle \psi } . Η διαφορά με τον U είναι ότι δεν εξασφαλίζεται ότι η ψ {\displaystyle \psi } θα επαληθευτεί ποτέ. Ο τελεστής W κάποιες φορές αποκαλείται και "εκτός αν" ("unless").Στη CTL*, οι χρονικοί τελεστές μπορούν να αναμιγνύονται ελεύθερα. Στη CTL, ο τελεστής πρέπει πάντα να ομαδοποιείται σε δύο θέσεις: ένας τελεστής μονοπατιού που ακολουθείται από έναν τελεστή κατάστασης. Δείτε τα παραδείγματα παρακάτω. Η CTL* είναι γνήσια πιο εκφραστική από τη CTL. Στη CTL υπάρχει ένα ελάχιστο σύνολο από τελεστές. Όλοι οι τύποι της CTL μπορούν να μετασχηματιστούν ώστε να χρησιμοποιούν μόνο αυτούς τους τελεστές, κάτι που είναι χρήσιμο στον έλεγχο μοντέλων. Ένα ελάχιστο σύνολο από τελεστές είναι: {false, ∨ , ¬ {\displaystyle \lor ,\neg } , EG, EU, EX}. Ακολουθούν μερικοί από τους μετασχηματισμούς χρονικών τελεστών: EF ϕ {\displaystyle \phi } == E[trueU( ϕ {\displaystyle \phi } )] ( επειδή F ϕ {\displaystyle \phi } == [trueU( ϕ {\displaystyle \phi } )] ) AX ϕ {\displaystyle \phi } == ¬ {\displaystyle \neg } EX( ¬ {\displaystyle \neg } ϕ {\displaystyle \phi } ) AG ϕ {\displaystyle \phi } == ¬ {\displaystyle \neg } EF( ¬ {\displaystyle \neg } ϕ {\displaystyle \phi } ) == ¬ {\displaystyle \neg } E[trueU( ¬ {\displaystyle \neg } ϕ {\displaystyle \phi } )] AF ϕ {\displaystyle \phi } == A[trueU ϕ {\displaystyle \phi } ] == ¬ {\displaystyle \neg } EG( ¬ {\displaystyle \neg } ϕ {\displaystyle \phi } ) A[ ϕ {\displaystyle \phi } U ψ {\displaystyle \psi } ] == ¬ {\displaystyle \neg } ( E[( ¬ {\displaystyle \neg } ψ {\displaystyle \psi } )U ¬ {\displaystyle \neg } ( ϕ {\displaystyle \phi } ∨ {\displaystyle \lor } ψ {\displaystyle \psi } )] ∨ {\displaystyle \lor } EG( ¬ {\displaystyle \neg } ψ {\displaystyle \psi } ) ) Οι τύποι της CTL ερμηνεύονται με συστήματα μεταβάσεων (Transition Systems), όπως περιγράφεται τυπικά παρακάτω. Έστω ότι M = ( S , → , L ) {\displaystyle {\mathcal {M}}=(S,\rightarrow ,L)} είναι ένα μοντέλο για τη CTL with s ∈ S , ϕ ∈ F {\displaystyle s\in S,\phi \in F} όπου F είναι το σύνολο των καλώς ορισμένων τύπων στην κανονική γλώσσα M {\displaystyle {\mathcal {M}}} .Τότε η σημασιολογική σχέση ( M , s ⊨ ϕ ) {\displaystyle ({\mathcal {M}},s\models \phi )} ορίζεται από δομική επαγωγή (Structural Induction) στην ϕ {\displaystyle \phi } : ( ( M , s ) ⊨ ⊤ ) ⇔ ( ( M , s ) ⊭ ⊥ ) {\displaystyle {\Big (}({\mathcal {M}},s)\models \top {\Big )}\Leftrightarrow {\Big (}({\mathcal {M}},s)\not \models \bot {\Big )}} ( ( M , s ) ⊨ p ) ⇔ ( p ∈ L ( s ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models p{\Big )}\Leftrightarrow {\Big (}p\in L(s){\Big )}} ( ( M , s ) ⊨ ¬ ϕ ) ⇔ ( ( M , s ) ⊭ ϕ ) {\displaystyle {\Big (}({\mathcal {M}},s)\models \neg \phi {\Big )}\Leftrightarrow {\Big (}({\mathcal {M}},s)\not \models \phi {\Big )}} ( ( M , s ) ⊨ ϕ 1 ∧ ϕ 2 ) ⇔ ( ( ( M , s ) ⊨ ϕ 1 ) ∧ ( ( M , s ) ⊨ ϕ 2 ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models \phi _{1}\land \phi _{2}{\Big )}\Leftrightarrow {\Big (}{\big (}({\mathcal {M}},s)\models \phi _{1}{\big )}\land {\big (}({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}} ( ( M , s ) ⊨ ϕ 1 ∨ ϕ 2 ) ⇔ ( ( ( M , s ) ⊨ ϕ 1 ) ∨ ( ( M , s ) ⊨ ϕ 2 ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models \phi _{1}\lor \phi _{2}{\Big )}\Leftrightarrow {\Big (}{\big (}({\mathcal {M}},s)\models \phi _{1}{\big )}\lor {\big (}({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}} ( ( M , s ) ⊨ ϕ 1 ⇒ ϕ 2 ) ⇔ ( ( ( M , s ) ⊭ ϕ 1 ) ∨ ( ( M , s ) ⊨ ϕ 2 ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models \phi _{1}\Rightarrow \phi _{2}{\Big )}\Leftrightarrow {\Big (}{\big (}({\mathcal {M}},s)\not \models \phi _{1}{\big )}\lor {\big (}({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}} ( ( M , s ) ⊨ ϕ 1 ⇔ ϕ 2 ) ⇔ ( ( ( ( M , s ) ⊨ ϕ 1 ) ∧ ( ( M , s ) ⊨ ϕ 2 ) ) ∨ ( ¬ ( ( M , s ) ⊨ ϕ 1 ) ∧ ¬ ( ( M , s ) ⊨ ϕ 2 ) ) ) {\displaystyle {\bigg (}({\mathcal {M}},s)\models \phi _{1}\Leftrightarrow \phi _{2}{\bigg )}\Leftrightarrow {\bigg (}{\Big (}{\big (}({\mathcal {M}},s)\models \phi _{1}{\big )}\land {\big (}({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}\lor {\Big (}\neg {\big (}({\mathcal {M}},s)\models \phi _{1}{\big )}\land \neg {\big (}({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}{\bigg )}} ( ( M , s ) ⊨ A X ϕ ) ⇔ ( ∀ ⟨ s → s 1 ⟩ ( ( M , s 1 ) ⊨ ϕ ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models AX\phi {\Big )}\Leftrightarrow {\Big (}\forall \langle s\rightarrow s_{1}\rangle {\big (}({\mathcal {M}},s_{1})\models \phi {\big )}{\Big )}} ( ( M , s ) ⊨ E X ϕ ) ⇔ ( ∃ ⟨ s → s 1 ⟩ ( ( M , s 1 ) ⊨ ϕ ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models EX\phi {\Big )}\Leftrightarrow {\Big (}\exists \langle s\rightarrow s_{1}\rangle {\big (}({\mathcal {M}},s_{1})\models \phi {\big )}{\Big )}} ( ( M , s ) ⊨ A G ϕ ) ⇔ ( ∀ ⟨ s 1 → s 2 → … ⟩ ( s = s 1 ) ∀ i ( ( M , s i ) ⊨ ϕ ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models AG\phi {\Big )}\Leftrightarrow {\Big (}\forall \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\forall i{\big (}({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}} ( ( M , s ) ⊨ E G ϕ ) ⇔ ( ∃ ⟨ s 1 → s 2 → … ⟩ ( s = s 1 ) ∀ i ( ( M , s i ) ⊨ ϕ ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models EG\phi {\Big )}\Leftrightarrow {\Big (}\exists \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\forall i{\big (}({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}} ( ( M , s ) ⊨ A F ϕ ) ⇔ ( ∀ ⟨ s 1 → s 2 → … ⟩ ( s = s 1 ) ∃ i ( ( M , s i ) ⊨ ϕ ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models AF\phi {\Big )}\Leftrightarrow {\Big (}\forall \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\big (}({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}} ( ( M , s ) ⊨ E F ϕ ) ⇔ ( ∃ ⟨ s 1 → s 2 → … ⟩ ( s = s 1 ) ∃ i ( ( M , s i ) ⊨ ϕ ) ) {\displaystyle {\Big (}({\mathcal {M}},s)\models EF\phi {\Big )}\Leftrightarrow {\Big (}\exists \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\big (}({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}} ( ( M , s ) ⊨ A [ ϕ 1 U ϕ 2 ] ) ⇔ ( ∀ ⟨ s 1 → s 2 → … ⟩ ( s = s 1 ) ∃ i ( ( ( M , s i ) ⊨ ϕ 2 ) ∧ ( ∀ ( j < i ) ( M , s j ) ⊨ ϕ 1 ) ) ) {\displaystyle {\bigg (}({\mathcal {M}},s)\models A[\phi _{1}U\phi _{2}]{\bigg )}\Leftrightarrow {\bigg (}\forall \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\Big (}{\big (}({\mathcal {M}},s_{i})\models \phi _{2}{\big )}\land {\big (}\forall (j<i)({\mathcal {M}},s_{j})\models \phi _{1}{\big )}{\Big )}{\bigg )}} ( ( M , s ) ⊨ E [ ϕ 1 U ϕ 2 ] ) ⇔ ( ∃ ⟨ s 1 → s 2 → … ⟩ ( s = s 1 ) ∃ i ( ( ( M , s i ) ⊨ ϕ 2 ) ∧ ( ∀ ( j < i ) ( M , s j ) ⊨ ϕ 1 ) ) ) {\displaystyle {\bigg (}({\mathcal {M}},s)\models E[\phi _{1}U\phi _{2}]{\bigg )}\Leftrightarrow {\bigg (}\exists \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\Big (}{\big (}({\mathcal {M}},s_{i})\models \phi _{2}{\big )}\land {\big (}\forall (j<i)({\mathcal {M}},s_{j})\models \phi _{1}{\big )}{\Big )}{\bigg )}} Οι κανόνες 10-15 παραπάνω αναφέρονται σε υπολογιστικά μονοπάτια σε μοντέλα και είναι αυτοί που τελικά χαρακτηρίζουν το "Υπολογιστικό Δένδρο", είναι βεβαιώσεις σχετικά με τη φύση του υπολογιστικού δένδρου με άπειρο βάθος και ρίζα τη δεδομένη κατάσταση s {\displaystyle s} . Οι τύποι της CTL ϕ {\displaystyle \phi } και ψ {\displaystyle \psi } λέγονται σημασιολογικά ισοδύναμοι αν κάθε κατάσταση σε κάθε μοντέλο που ικανοποιεί τον ένα, ικανοποιεί και τον άλλο. Αυτό δηλώνεται ϕ ≡ ψ {\displaystyle \phi \equiv \psi } Φαίνεται ότι οι A και E είναι δυικοί (δηλαδή ο ένας μπορεί να οριστεί με βάση τον άλλο), όπως και οι G και F, εφόσον είναι ο καθολικός και ο υπαρξιακός ποσοδείκτης αντίστοιχα στα υπολογιστικά δένδρα. Οι νόμοι του Ντε Μόργκαν μπορούν να τυποποιηθούν στη CTL όπως στο παρακάτω παράδειγμα: ¬ A F ϕ ≡ E G ¬ ϕ {\displaystyle \neg AF\phi \equiv EG\neg \phi } ¬ E F ϕ ≡ A G ¬ ϕ {\displaystyle \neg EF\phi \equiv AG\neg \phi } ¬ A X ϕ ≡ E X ¬ ϕ {\displaystyle \neg AX\phi \equiv EX\neg \phi } Από αυτά τα δεδομένα προκύπτει ότι: A F ϕ ≡ A [ ⊤ U ϕ ] {\displaystyle AF\phi \equiv A[\top U\phi ]} E F ϕ ≡ E [ ⊤ U ϕ ] {\displaystyle EF\phi \equiv E[\top U\phi ]} Στην πραγματικότητα, μπορεί να δειχθεί, με τη χρήση αυτών των ταυτοτήτων, ότι ένα υποσύνολο των χρονικών συνδέσμων της CTL αρκεί αν περιέχει τον E U {\displaystyle EU} , τουλάχιστον έναν από τους { A X , E X } {\displaystyle \{AX,EX\}} και τουλάχιστον έναν από τους { E G , A F , A U } {\displaystyle \{EG,AF,AU\}} . Κάποιες επιπλέον σημαντικές ταυτότητες: A G ϕ ≡ ϕ ∧ A X A G ϕ {\displaystyle AG\phi \equiv \phi \land AXAG\phi } E G ϕ ≡ ϕ ∧ E X E G ϕ {\displaystyle EG\phi \equiv \phi \land EXEG\phi } A F ϕ ≡ ϕ ∨ A X A F ϕ {\displaystyle AF\phi \equiv \phi \lor AXAF\phi } E F ϕ ≡ ϕ ∨ E X E F ϕ {\displaystyle EF\phi \equiv \phi \lor EXEF\phi } A [ ϕ U ψ ] ≡ ψ ∨ ( ϕ ∧ A X A [ ϕ U ψ ] ) {\displaystyle A[\phi U\psi ]\equiv \psi \lor (\phi \land AXA[\phi U\psi ])} E [ ϕ U ψ ] ≡ ψ ∨ ( ϕ ∧ E X E [ ϕ U ψ ] ) {\displaystyle E[\phi U\psi ]\equiv \psi \lor (\phi \land EXE[\phi U\psi ])} Έστω ότι "P" σημαίνει "μου αρέσει η σοκολάτα" και Q σημαίνει "έχει ζέστη έξω." AG.P"Θα μου αρέσει η σοκολάτα από τώρα, ό,τι και να γίνει."EF.P"Μπορεί να μου αρέσει η σοκολάτα κάποια μέρα, τουλάχιστον για μία μέρα."AF.EG.P"Είναι πάντα πιθανό (AF) ότι ξαφνικά θα αρχίσει να μου αρέσει η σοκολάτα για όλον τον υπόλοιπο χρόνο." (Σημείωση: όχι μόνο για την υπόλοιπη ζωή μου, επειδή αυτή είναι πεπερασμένη, ενώ ο G είναι άπειρος).EG.AF.P"Αυτή είναι μια σημαντική στιγμή στη ζωή μου. Ανάλογα με το τι θα συμβεί στη συνέχεια (E), είναι πιθανό ότι για όλον τον υπόλοιπο χρόνο (G), θα υπάρχει πάντα κάποια στιγμή στο μέλλον (AF) που θα μου αρέσει η σοκολάτα. Όμως, αν συμβεί κάτι λάθος την επόμενη στιγμή, δεν γνωρίζω αν θα μου αρέσει ποτέ η σοκολάτα."A(PUQ)"Από τώρα και μέχρι να έχει ζέστη έξω, θα μου αρέσει η σοκολάτα κάθε μέρα. Τη στιγμή που θα έχει ζέστη έξω, δεν ξέρω αν θα μου αρέσει πια η σοκολάτα. Α, και είναι εγγυημένο ότι τελικά θα έχει ζέστη έξω, ακόμα και αν αυτό είναι μόνο για μία μέρα."E((EX.P)U(AG.Q))"Είναι πιθανό ότι: τελικά θα έρθει κάποια στιγμή που θα έχει ζέστη για πάντα (AG.Q) και πριν από αυτή τη στιγμή θα υπάρχει πάντα κάποιος τρόπος να μου αρέσει η σοκολάτα την επόμενη ημέρα (EX.P)." Η CTL είναι υποσύνολο της CTL*, όπως και του τροπικού μ-λογισμού. Είναι επίσης ενδιαφέρον να επισημανθεί ότι η CTL είναι κομμάτι της Alur, της Χρονικής Λογικής Εναλλασσόμενου Χρόνου (Alternating-time Temporal Logic, ATL) των Henzinger και Kupferman. Η CTL και η γραμμική χρονική λογική (LTL) είναι υποσύνολα της CTL*. Η CTL και η LTL δεν είναι όμως ισοδύναμες και έχουν κοινό υποσύνολο, το οποίο είναι πραγματικό υποσύνολο κάθε μιας από αυτές. Η FG.P υπάρχει στην LTL αλλά όχι στη CTL. Η AG(P ⇒ {\displaystyle \Rightarrow } ((EX.Q) ∧ {\displaystyle \land } (EX¬Q))) υπάρχει στη CTL αλλά όχι στην LTL. Γραμμική χρονική λογική CTL* Michael Huth and Mark Ryan (2004). Logic in Computer Science (Second Edition). Cambridge University Press, σελ. 207. ISBN 0-521-54310-X. https://archive.org/details/logiccomputersci00huth_960. Emerson, E. A.; Halpern, J. Y. (1985). «Decision procedures and expressiveness in the temporal logic of branching time». Journal of Computer and System Sciences 30 (1): 1–24. doi:10.1016/0022-0000(85)90001-7. Clarke, E. M.; Emerson, E. A.; Sistla, A. P. (1986). «Automatic verification of finite-state concurrent systems using temporal logic specifications». ACM Transactions on Programming Languages and Systems 8 (2): 244–263. doi:10.1145/5397.5399. https://archive.org/details/sim_acm-transactions-on-programming-languages-and-systems_1986-04_8_2/page/244. Emerson, E. A. (1990). «Temporal and modal logic». Στο: J. van Leeuwen. Handbook of Theoretical Computer Science, vol. B. MIT Press. σελίδες 955–1072. ISBN 0-262-22039-3. Εκπαιδευτικές διαφάνειες για τη CTL (Αγγλικά)