Template:Short description In logic, temporal logic is any system of rules and symbolism for representing, and reasoning about, propositions qualified in terms of time (for example, "I am always hungry", "I will eventually be hungry", or "I will be hungry until I eat something"). It is sometimes also used to refer to tense logic, a modal logic-based system of temporal logic introduced by Arthur Prior in the late 1950s, with important contributions by Hans Kamp. It has been further developed by computer scientists, notably Amir Pnueli, and logicians.
Temporal logic has found an important application in formal verification, where it is used to state requirements of hardware or software systems. For instance, one may wish to say that whenever a request is made, access to a resource is eventually granted, but it is never granted to two requestors simultaneously. Such a statement can conveniently be expressed in a temporal logic.
MotivationEdit
Consider the statement "I am hungry". Though its meaning is constant in time, the statement's truth value can vary in time. Sometimes it is true, and sometimes false, but never simultaneously true and false. In a temporal logic, a statement can have a truth value that varies in time—in contrast with an atemporal logic, which applies only to statements whose truth values are constant in time. This treatment of truth-value over time differentiates temporal logic from computational verb logic.
Temporal logic always has the ability to reason about a timeline. So-called "linear-time" logics are restricted to this type of reasoning. Branching-time logics, however, can reason about multiple timelines. This permits in particular treatment of environments that may act unpredictably. To continue the example, in a branching-time logic we may state that "there is a possibility that I will stay hungry forever", and that "there is a possibility that eventually I am no longer hungry". If we do not know whether or not I will ever be fed, these statements can both be true.
HistoryEdit
Although Aristotle's logic is almost entirely concerned with the theory of the categorical syllogism, there are passages in his work that are now seen as anticipations of temporal logic, and may imply an early, partially developed form of first-order temporal modal bivalent logic. Aristotle was particularly concerned with the problem of future contingents, where he could not accept that the principle of bivalence applies to statements about future events, i.e. that we can presently decide if a statement about a future event is true or false, such as "there will be a sea battle tomorrow".<ref>Vardi 2008, p. 153</ref>
There was little development for millennia, Charles Sanders Peirce noted in the 19th century:<ref name=v154>Vardi 2008, p. 154</ref> Template:Cquote
Surprisingly for Peirce, the first system of temporal logic was constructed, as far as we know, in the first half of 20th century. Although Arthur Prior is widely known as a founder of temporal logic, the first formalization of such logic was provided in 1947 by Polish logician, Jerzy Łoś.<ref name=":0">Template:Cite journal</ref> In his work Podstawy Analizy Metodologicznej Kanonów Milla (The Foundations of a Methodological Analysis of Mill’s Methods) he presented a formalization of Mill's canons. In Łoś' approach, emphasis was placed on the time factor. Thus, to reach his goal, he had to create a logic that could provide means for formalization of temporal functions. The logic could be seen as a byproduct of Łoś' main aim,<ref name=":1">Template:Cite journal</ref> albeit it was the first positional logic that, as a framework, was used later for Łoś' inventions in epistemic logic. The logic itself has syntax very different than Prior's tense logic, which uses modal operators. The language of Łoś' logic rather uses a realization operator, specific to positional logic, which binds the expression with the specific context in which its truth-value is considered. In Łoś' work this considered context was only temporal, thus expressions were bound with specific moments or intervals of time.
In the following years, research of temporal logic by Arthur Prior began.<ref name=":1" /> He was concerned with the philosophical implications of free will and predestination. According to his wife, he first considered formalizing temporal logic in 1953. Results of his research were first presented at the conference in Wellington in 1954.<ref name=":1" /> The system Prior presented, was similar syntactically to Łoś' logic, although not until 1955 did he explicitly refer to Łoś' work, in the last section of Appendix 1 in Prior’s Formal Logic.<ref name=":1" />
Prior gave lectures on the topic at the University of Oxford in 1955–6, and in 1957 published a book, Time and Modality, in which he introduced a propositional modal logic with two temporal connectives (modal operators), F and P, corresponding to "sometime in the future" and "sometime in the past". In this early work, Prior considered time to be linear. In 1958 however, he received a letter from Saul Kripke, who pointed out that this assumption is perhaps unwarranted. In a development that foreshadowed a similar one in computer science, Prior took this under advisement, and developed two theories of branching time, which he called "Ockhamist" and "Peircean".<ref name="v154" />Template:Clarify Between 1958 and 1965 Prior also corresponded with Charles Leonard Hamblin, and a number of early developments in the field can be traced to this correspondence, for example Hamblin implications. Prior published his most mature work on the topic, the book Past, Present, and Future in 1967. He died two years later.<ref>Template:Cite book pp. 176–178, 210</ref>
Along with tense logic, Prior constructed a few systems of positional logic, which inherited their main ideas from Łoś.<ref name=":2">Template:Cite journal</ref> Work in positional temporal logics was continued by Nicholas Rescher in the 60s and 70s. In such works as Note on Chronological Logic (1966), On the Logic of Chronological Propositions (1968), Topological Logic (1968), and Temporal Logic (1971) he researched connections between Łoś' and Prior's systems. Moreover, he proved that Prior's tense operators could be defined using a realization operator in specific positional logics.<ref name=":2" /> Rescher, in his work, also created more general systems of positional logics. Although the first ones were constructed for purely temporal uses, he proposed the term topological logics for logics that were meant to contain a realization operator but had no specific temporal axioms—like the clock axiom.
The binary temporal operators Since and Until were introduced by Hans Kamp in his 1968 Ph.D. thesis,<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> which also contains an important result relating temporal logic to first-order logic—a result now known as Kamp's theorem.<ref name="CarnielliPizzi2008">Template:Cite book</ref><ref name=v154>Vardi 2008, p. 154</ref><ref name="TessarisFranconi2009">Template:Cite book</ref>
Two early contenders in formal verifications were linear temporal logic, a linear-time logic by Amir Pnueli, and computation tree logic (CTL), a branching-time logic by Mordechai Ben-Ari, Zohar Manna and Amir Pnueli. An almost equivalent formalism to CTL was suggested around the same time by E. M. Clarke and E. A. Emerson. The fact that the second logic can be decided more efficiently than the first does not reflect on branching- and linear-time logics in general, as has sometimes been argued. Rather, Emerson and Lei show that any linear-time logic can be extended to a branching-time logic that can be decided with the same complexity.
Łoś's positional logicEdit
Łoś’s logic was published as his 1947 master’s thesis Podstawy Analizy Metodologicznej Kanonów Milla (The Foundations of a Methodological Analysis of Mill’s Methods).<ref name="Tkaczyk 2019 259–276">Template:Cite journal</ref> His philosophical and formal concepts could be seen as continuations of those of the Lviv–Warsaw School of Logic, as his supervisor was Jerzy Słupecki, disciple of Jan Łukasiewicz. The paper was not translated into English until 1977, although Henryk Hiż presented in 1951 a brief, but informative, review in the Journal of Symbolic Logic. This review contained core concepts of Łoś’s work and was enough to popularize his results among the logical community. The main aim of this work was to present Mill's canons in the framework of formal logic. To achieve this goal the author researched the importance of temporal functions in the structure of Mill's concept. Having that, he provided his axiomatic system of logic that would fit as a framework for Mill's canons along with their temporal aspects.
SyntaxEdit
The language of the logic first published in Podstawy Analizy Metodologicznej Kanonów Milla (The Foundations of a Methodological Analysis of Mill’s Methods) consisted of:<ref name=":0" />
- first-order logic operators ‘¬’, ‘∧’, ‘∨’, ‘→’, ‘≡’, ‘∀’ and ‘∃’
- realization operator U
- functional symbol δ
- propositional variables p1,p2,p3,...
- variables denoting time moments t1,t2,t3,...
- variables denoting time intervals n1,n2,n3,...
The set of terms (denoted by S) is constructed as follows:
- variables denoting time moments or intervals are terms
- if <math>\tau \in S</math> and <math>\epsilon</math> is a time interval variable, then <math>\delta(\tau, \epsilon) \in S</math>
The set of formulas (denoted by For) is constructed as follows:<ref name="Tkaczyk 2019 259–276"/>
- all first-order logic formulas are in <math>For</math>
- if <math>\tau \in S</math> and <math>\phi</math> is a propositional variable, then <math>U_{\tau}(\phi) \in For</math>
- if <math>\phi \in For</math>, then <math>\neg \phi \in For</math>
- if <math>\phi, \psi \in For</math> and <math>\circ \in \{\wedge, \vee, \rightarrow, \equiv\}</math>, then <math>\phi \circ \psi \in For</math>
- if <math>\phi \in For</math> and <math>Q \in \{\forall, \exists\}</math> and υ is a propositional, moment or interval variable, then <math>Q_{\upsilon}\phi \in For</math>
Original Axiomatic SystemEdit
- <math>U_{t_{1}}\neg p_{1} \equiv \neg U_{t_{1}} p_{1}</math>
- <math>U_{t_{1}}(p_{1} \rightarrow p_{2}) \rightarrow (U_{t_{1}} p_{1} \rightarrow U_{t_{1}} p_{2})</math>
- <math>U_{t_{1}}((p_{1} \rightarrow p_{2}) \rightarrow ((p_{2} \rightarrow p_{3}) \rightarrow (p_{1} \rightarrow p_{3})))</math>
- <math>U_{t_{1}}(p_{1} \rightarrow (\neg p_{1} \rightarrow p_{2}))</math>
- <math>U_{t_{1}}((\neg p_{1} \rightarrow p_{1}) \rightarrow p_{1})</math>
- <math>\forall_{t_{1}}U_{t_{1}}p_{1} \rightarrow p_{1}</math>
- <math>\forall_{t_{1}}\forall_{n_{1}}\exists_{t_{2}}\forall_{p_{1}}(U_{\delta(t_{1},n_{1})} p_{1} \equiv U_{t_{2}}p_{1})</math>
- <math>\forall_{t_{1}}\forall_{n_{1}}\exists_{t_{2}}\forall_{p_{1}}(U_{\delta(t_{2},n_{1})} p_{1} \equiv U_{t_{1}}p_{1})</math>
- <math>\forall_{t_{1}}\exists_{p_{1}}\forall_{t_{2}}(U_{t_{2}} p_{1}
\equiv \forall_{p_{2}}(U_{t_{1}}p_{2} \equiv U_{t_{2}}p_{2}))</math>
Prior's tense logic (TL)Edit
The sentential tense logic introduced in Time and Modality has four (non-truth-functional) modal operators (in addition to all usual truth-functional operators in first-order propositional logic).<ref>Template:Cite book</ref>
- P: "It was the case that..." (P stands for "past")
- F: "It will be the case that..." (F stands for "future")
- G: "It always will be the case that..."
- H: "It always was the case that..."
These can be combined if we let π be an infinite path:<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>
- <math>\pi \vDash F G \phi</math>: "At a certain point, <math>\phi</math> is true at all future states of the path"
- <math>\pi \vDash G F \phi</math>: "<math>\phi</math> is true at infinitely many states on the path"
From P and F one can define G and H, and vice versa:
- <math>\begin{align}
F &\equiv \lnot G\lnot \\ P &\equiv \lnot H\lnot
\end{align}</math>
Syntax and semanticsEdit
A minimal syntax for TL is specified with the following BNF grammar:
- <math>\phi ::= a \;|\; \bot \;|\; \lnot\phi \;|\; \phi\lor\phi \;|\; G\phi \;|\; H\phi</math>
where a is some atomic formula.<ref>Template:Cite book</ref>
Kripke models are used to evaluate the truth of sentences in TL. A pair (Template:Var, <) of a set Template:Var and a binary relation < on Template:Var (called "precedence") is called a frame. A model is given by triple (Template:Var, <, Template:Var) of a frame and a function Template:Var called a valuation that assigns to each pair (Template:Var, Template:Var) of an atomic formula and a time value some truth value. The notion "Template:Var is true in a model Template:Var=(Template:Var, <, Template:Var) at time Template:Var" is abbreviated Template:Var⊨Template:Var[[[:Template:Var]]]. With this notation,<ref>Template:Cite book</ref>
Statement | ... is true just when |
---|---|
Template:Var⊨Template:Var[[[:Template:Var]]] | Template:Var(Template:Var,Template:Var)=true |
Template:Var⊨¬Template:Var[[[:Template:Var]]] | not Template:Var⊨Template:Var[[[:Template:Var]]] |
Template:Var⊨(Template:Var∧Template:Var)[[[:Template:Var]]] | Template:Var⊨Template:Var[[[:Template:Var]]] and Template:Var⊨Template:Var[[[:Template:Var]]] |
Template:Var⊨(Template:Var∨Template:Var)[[[:Template:Var]]] | Template:Var⊨Template:Var[[[:Template:Var]]] or Template:Var⊨Template:Var[[[:Template:Var]]] |
Template:Var⊨(Template:Var→Template:Var)[[[:Template:Var]]] | Template:Var⊨Template:Var[[[:Template:Var]]] if Template:Var⊨Template:Var[[[:Template:Var]]] |
Template:Var⊨GTemplate:Var[[[:Template:Var]]] | Template:Var⊨Template:Var[[[:Template:Var]]] for all Template:Var with Template:Var<Template:Var |
Template:Var⊨HTemplate:Var[[[:Template:Var]]] | Template:Var⊨Template:Var[[[:Template:Var]]] for all Template:Var with Template:Var<Template:Var |
Given a class Template:Var of frames, a sentence Template:Var of TL is
- valid with respect to Template:Var if for every model Template:Var=(Template:Var,<,Template:Var) with (Template:Var,<) in Template:Var and for every Template:Var in Template:Var, Template:Var⊨Template:Var[[[:Template:Var]]]
- satisfiable with respect to Template:Var if there is a model Template:Var=(Template:Var,<,Template:Var) with (Template:Var,<) in Template:Var such that for some Template:Var in Template:Var, Template:Var⊨Template:Var[[[:Template:Var]]]
- a consequence of a sentence Template:Var with respect to Template:Var if for every model Template:Var=(Template:Var,<,Template:Var) with (Template:Var,<) in Template:Var and for every Template:Var in Template:Var, if Template:Var⊨Template:Var[[[:Template:Var]]], then Template:Var⊨Template:Var[[[:Template:Var]]]
Many sentences are only valid for a limited class of frames. It is common to restrict the class of frames to those with a relation < that is transitive, antisymmetric, reflexive, trichotomic, irreflexive, total, dense, or some combination of these.
A minimal axiomatic logicEdit
Burgess outlines a logic that makes no assumptions on the relation <, but allows for meaningful deductions, based on the following axiom schema:<ref>Template:Cite book</ref>
- Template:Var where Template:Var is a tautology of first-order logic
- G(Template:Var→Template:Var)→(GTemplate:Var→GTemplate:Var)
- H(Template:Var→Template:Var)→(HTemplate:Var→HTemplate:Var)
- Template:Var→GPTemplate:Var
- Template:Var→HFTemplate:Var
with the following rules of deduction:
- given Template:Var→Template:Var and Template:Var, deduce Template:Var (modus ponens)
- given a tautology Template:Var, infer GTemplate:Var
- given a tautology Template:Var, infer HTemplate:Var
One can derive the following rules:
- Becker's rule: given Template:Var→Template:Var, deduce TTemplate:Var→TTemplate:Var where T is a tense, any sequence made of G, H, F, and P.
- Mirroring: given a theorem Template:Var, deduce its mirror statement Template:Var§, which is obtained by replacing G by H (and so F by P) and vice versa.
- Duality: given a theorem Template:Var, deduce its dual statement Template:Var*, which is obtained by interchanging ∧ with ∨, G with F, and H with P.
Translation to predicate logicEdit
Burgess gives a Meredith translation from statements in TL into statements in first-order logic with one free variable Template:Var0 (representing the present moment). This translation Template:Var is defined recursively as follows:<ref>Template:Cite book</ref>
- <math>\begin{align}
& M(a) &&= a^*x_0 \\ & M(\lnot \phi) &&= \lnot M(\phi) \\ & M(\phi\land\psi) &&= M(\phi)\land M(\psi) \\ & M(\mathsf{G}\phi) &&= \forall x_1 (x_0<x_1\rightarrow M(A^+)) \\ & M(\mathsf{H}\phi) &&= \forall x_1 (x_1<x_0\rightarrow M(A^+))
\end{align}</math>
where <math>A^+</math> is the sentence Template:Mvar with all variable indices incremented by 1 and <math>a^*</math> is a one-place predicate defined by <math>x \mapsto V(a, x)</math>.
Temporal operatorsEdit
Temporal logic has two kinds of operators: logical operators and modal operators.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> Logical operators are usual truth-functional operators (<math>\neg,\lor,\land,\rightarrow</math>). The modal operators used in linear temporal logic and computation tree logic are defined as follows.
Textual | Symbolic | Definition | Explanation | Diagram |
---|---|---|---|---|
Binary operators | ||||
Template:Mvar U Template:Mvar | <math>\phi ~\mathcal{U}~ \psi</math> | <math>(B\,\mathcal{U}\,C)(\phi)= \ (\exists i:C(\phi_i)\land(\forall j<i:B(\phi_j)))</math> | Until: Template:Mvar holds at the current or a future position, and Template:Mvar has to hold until that position. At that position Template:Mvar does not have to hold any more. | <timeline>
ImageSize = width:240 height:94 PlotArea = left:30 bottom:30 top:0 right:20 DateFormat = x.y Period = from:0 till:6 TimeAxis = orientation:horizontal AlignBars = justify ScaleMajor = gridcolor:black increment:1 start:0 ScaleMinor = gridcolor:black increment:1 start:0 PlotData= bar:p color:red width:10 align:left fontsize:S from:1 till:3 bar:q color:red width:10 align:left fontsize:S from:3 till:5 bar:pUq color:red width:10 align:left fontsize:S from:1 till:5 </timeline> |
Template:Mvar R Template:Mvar | <math>\phi ~\mathcal{R}~ \psi</math> | <math>(B\,\mathcal{R}\,C)(\phi)= \ (\forall i:C(\phi_i)\lor(\exists j<i:B(\phi_j)))</math> | Release: Template:Mvar releases Template:Mvar if Template:Mvar is true up until and including the first position in which Template:Mvar is true (or forever if such a position does not exist). | <timeline>
ImageSize = width:240 height:100 PlotArea = left:30 bottom:30 top:0 right:20 DateFormat = x.y Period = from:0 till:8 TimeAxis = orientation:horizontal AlignBars = justify ScaleMajor = gridcolor:black increment:1 start:0 ScaleMinor = gridcolor:black increment:1 start:0 PlotData= bar:p color:red width:10 align:left fontsize:S from:2 till:4 from:6 till:8 bar:q color:red width:10 align:left fontsize:S from:1 till:3 from:5 till:6 from:7 till:8 bar:pRq color:red width:10 align:left fontsize:S from:1 till:3 from:7 till:8 </timeline> |
Unary operators | ||||
N Template:Mvar | <math>\bigcirc \phi</math> | <math>\mathcal{N}B(\phi_i)=B(\phi_{i+1})</math> | Next: Template:Mvar has to hold at the next state. (X is used synonymously.) | <timeline>
ImageSize = width:240 height:60 PlotArea = left:30 bottom:30 top:0 right:20 DateFormat = x.y Period = from:0 till:6 TimeAxis = orientation:horizontal AlignBars = justify ScaleMajor = gridcolor:black increment:1 start:0 ScaleMinor = gridcolor:black increment:1 start:0 PlotData= bar:p color:red width:10 align:left fontsize:S from:2 till:3 from:5 till:6 bar:Np color:red width:10 align:left fontsize:S from:1 till:2 from:4 till:5 </timeline> |
F Template:Mvar | <math>\Diamond \phi</math> | <math>\mathcal{F}B(\phi)=(true\,\mathcal{U}\,B)(\phi)</math> | Future: Template:Mvar eventually has to hold (somewhere on the subsequent path). | <timeline>
ImageSize = width:240 height:60 PlotArea = left:30 bottom:30 top:0 right:20 DateFormat = x.y Period = from:0 till:6 TimeAxis = orientation:horizontal AlignBars = justify ScaleMajor = gridcolor:black increment:1 start:0 ScaleMinor = gridcolor:black increment:1 start:0 PlotData= bar:p color:red width:10 align:left fontsize:S from:2 till:3 from:4 till:5 bar:Fp color:red width:10 align:left fontsize:S from:0 till:5 </timeline> |
G Template:Mvar | <math>\Box \phi</math> | <math>\mathcal{G}B(\phi)=\neg\mathcal{F}\neg B(\phi)</math> | Globally: Template:Mvar has to hold on the entire subsequent path. | <timeline>
ImageSize = width:240 height:60 PlotArea = left:30 bottom:30 top:0 right:20 DateFormat = x.y Period = from:0 till:6 TimeAxis = orientation:horizontal AlignBars = justify ScaleMajor = gridcolor:black increment:1 start:0 ScaleMinor = gridcolor:black increment:1 start:0 PlotData= bar:p color:red width:10 align:left fontsize:S from:1 till:3 from:4 till:6 bar:Gp color:red width:10 align:left fontsize:S from:4 till:6 </timeline> |
A Template:Mvar | <math>\forall \phi</math> | <math>(\mathcal{A}B)(\psi)= \ (\forall \phi:\phi_0=\psi\to B(\phi))</math> | All: Template:Mvar has to hold on all paths starting from the current state. | |
E Template:Mvar | <math>\exists \phi</math> | <math>(\mathcal{E}B)(\psi)= \ (\exists \phi:\phi_0=\psi\land B(\phi))</math> | Exists: there exists at least one path starting from the current state where Template:Mvar holds. |
Alternate symbols:
- operator R is sometimes denoted by V
- The operator W is the weak until operator: <math>f \mathbf W g</math> is equivalent to <math>f \mathbf U g \lor \mathbf G f</math>
Unary operators are well-formed formulas whenever Template:Math is well-formed. Binary operators are well-formed formulas whenever Template:Math and Template:Math are well-formed.
In some logics, some operators cannot be expressed. For example, N operator cannot be expressed in temporal logic of actions.
Temporal logicsEdit
Temporal logics include:
- Some systems of positional logic
- Linear temporal logic (LTL) temporal logic without branching timelines
- Computation tree logic (CTL) temporal logic with branching timelines
- Interval temporal logic (ITL)
- Temporal logic of actions (TLA)
- Signal temporal logic (STL)<ref name="autogenerated2004"/>
- Timestamp temporal logic (TTL)<ref>Template:Cite journal</ref>
- Property specification language (PSL)
- CTL*, which generalizes LTL and CTL
- Hennessy–Milner logic (HML)
- Modal μ-calculus, which includes as a subset HML and CTL*
- Metric temporal logic (MTL)<ref>Koymans, R. (1990). "Specifying real-time properties with metric temporal logic", Real-Time Systems 2(4): 255–299. {{#invoke:doi|main}}.</ref>
- Metric interval temporal logic (MITL)<ref name="autogenerated2004">Maler, O.; Nickovic, D. (2004). "Monitoring temporal properties of continuous signals". {{#invoke:doi|main}}.</ref>
- Timed propositional temporal logic (TPTL)
- Truncated Linear Temporal Logic (TLTL)<ref>Li, Xiao, Cristian-Ioan Vasile, and Calin Belta. "Reinforcement learning with temporal logic rewards." {{#invoke:doi|main}}</ref>
- Hyper temporal logic (HyperLTL) <ref>Template:Cite book</ref>
A variation, closely related to temporal or chronological or tense logics, are modal logics based upon "topology", "place", or "spatial position".<ref>Template:Cite book</ref><ref>Template:Cite book</ref>
See alsoEdit
- HPO formalism
- Kripke structure
- Automata theory
- Chomsky grammar
- State transition system
- Duration calculus (DC)
- Hybrid logic
- Modal logic
- Temporal logic in finite-state verification
- Reo Coordination Language
- Research Materials: Max Planck Society Archive
NotesEdit
ReferencesEdit
- Mordechai Ben-Ari, Zohar Manna, Amir Pnueli: The Temporal Logic of Branching Time. POPL 1981: 164–176
- Amir Pnueli: The Temporal Logic of Programs FOCS 1977: 46–57
- Venema, Yde, 2001, "Temporal Logic," in Goble, Lou, ed., The Blackwell Guide to Philosophical Logic. Blackwell.
- E. A. Emerson and Chin-Laung Lei, "Modalities for model checking: branching time logic strikes back", in Science of Computer Programming 8, pp. 275–306, 1987.
- E. A. Emerson, "Temporal and modal logic", Handbook of Theoretical Computer Science, Chapter 16, the MIT Press, 1990
- A Practical Introduction to PSL, Cindy Eisner, Dana Fisman
- Template:Cite book preprint. Historical perspective on how seemingly disparate ideas came together in computer science and engineering. (The mention of Church in the title of this paper is a reference to a little-known 1957 paper, in which Church proposed a way to perform hardware verification.)
Further readingEdit
External linksEdit
- Stanford Encyclopedia of Philosophy: "Temporal Logic"—by Anthony Galton.
- Temporal Logic by Yde Venema, formal description of syntax and semantics, questions of axiomatization. Treating also Kamp's dyadic temporal operators (since, until)
- Notes on games in temporal logic by Ian Hodkinson, including a formal description of first-order temporal logic
- CADP – provides generic model checkers for various temporal logic
- PAT is a powerful free model checker, LTL checker, simulator and refinement checker for CSP and its extensions (with shared variable, arrays, wide range of fairness).