€•­NŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ2/translations/zh_CN/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/zh_TW/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/it_IT/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/ja_JP/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/ko_KR/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/pt_BR/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/sp_SP/trace/rv/linear_temporal_logic”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒLinear temporal logic”h]”hŒLinear temporal logic”…””}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/trace/rv/linear_temporal_logic.rst”h´Kubh¶)”}”(hhh]”(h»)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)”}”(hŒûRuntime verification monitor is a verification technique which checks that the kernel follows a specification. It does so by using tracepoints to monitor the kernel's execution trace, and verifying that the execution trace sastifies the specification.”h]”hŒýRuntime verification monitor is a verification technique which checks that the kernel follows a specification. It does so by using tracepoints to monitor the kernel’s execution trace, and verifying that the execution trace sastifies the specification.”…””}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hXIInitially, the specification can only be written in the form of deterministic automaton (DA). However, while attempting to implement DA monitors for some complex specifications, deterministic automaton is found to be inappropriate as the specification language. The automaton is complicated, hard to understand, and error-prone.”h]”hXIInitially, the specification can only be written in the form of deterministic automaton (DA). However, while attempting to implement DA monitors for some complex specifications, deterministic automaton is found to be inappropriate as the specification language. The automaton is complicated, hard to understand, and error-prone.”…””}”(hhìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubhÝ)”}”(hŒÔThus, RV monitors based on linear temporal logic (LTL) are introduced. This type of monitor uses LTL as specification instead of DA. For some cases, writing the specification as LTL is more concise and intuitive.”h]”hŒÔThus, RV monitors based on linear temporal logic (LTL) are introduced. This type of monitor uses LTL as specification instead of DA. For some cases, writing the specification as LTL is more concise and intuitive.”…””}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhÝ)”}”(hŒ4Many materials explain LTL in details. One book is::”h]”hŒ3Many materials explain LTL in details. One book is:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KhhËh²hubhŒ literal_block”“”)”}”(hŒZChristel Baier and Joost-Pieter Katoen: Principles of Model Checking, The MIT Press, 2008.”h]”hŒZChristel Baier and Joost-Pieter Katoen: Principles of Model Checking, The MIT Press, 2008.”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jh³hÊh´KhhËh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒGrammar”h]”hŒGrammar”…””}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj0h²hh³hÊh´KubhÝ)”}”(hŒ¼Unlike some existing syntax, kernel's implementation of LTL is more verbose. This is motivated by considering that the people who read the LTL specifications may not be well-versed in LTL.”h]”hŒ¾Unlike some existing syntax, kernel’s implementation of LTL is more verbose. This is motivated by considering that the people who read the LTL specifications may not be well-versed in LTL.”…””}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Khj0h²hubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hŒ:Grammar: ltl ::= opd | ( ltl ) | ltl binop ltl | unop ltl ”h]”(hŒterm”“”)”}”(hŒGrammar:”h]”hŒGrammar:”…””}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³hÊh´K#hjVubhŒ definition”“”)”}”(hhh]”hÝ)”}”(hŒ0ltl ::= opd | ( ltl ) | ltl binop ltl | unop ltl”h]”hŒ0ltl ::= opd | ( ltl ) | ltl binop ltl | unop ltl”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K#hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jTh³hÊh´K#hjQubjU)”}”(hŒmOperands (opd): true, false, user-defined names consisting of upper-case characters, digits, and underscore. ”h]”(j[)”}”(hŒOperands (opd):”h]”hŒOperands (opd):”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³hÊh´K'hj‰ubjk)”}”(hhh]”hÝ)”}”(hŒ\true, false, user-defined names consisting of upper-case characters, digits, and underscore.”h]”hŒ\true, false, user-defined names consisting of upper-case characters, digits, and underscore.”…””}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K&hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jTh³hÊh´K'hjQh²hubjU)”}”(hŒ3Unary Operators (unop): always eventually next not ”h]”(j[)”}”(hŒUnary Operators (unop):”h]”hŒUnary Operators (unop):”…””}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³hÊh´K-hj¸ubjk)”}”(hhh]”hÝ)”}”(hŒalways eventually next not”h]”hŒalways eventually next not”…””}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K*hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jTh³hÊh´K-hjQh²hubjU)”}”(hŒ8Binary Operators (binop): until and or imply equivalent ”h]”(j[)”}”(hŒBinary Operators (binop):”h]”hŒBinary Operators (binop):”…””}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jZh³hÊh´K4hjçubjk)”}”(hhh]”hÝ)”}”(hŒuntil and or imply equivalent”h]”hŒuntil and or imply equivalent”…””}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K0hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jjhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jTh³hÊh´K4hjQh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jOhj0h²hh³hÊh´NubhÝ)”}”(hŒXThis grammar is ambiguous: operator precedence is not defined. Parentheses must be used.”h]”hŒXThis grammar is ambiguous: operator precedence is not defined. Parentheses must be used.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K6hj0h²hubeh}”(h]”Œgrammar”ah ]”h"]”Œgrammar”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)”}”(hhh]”(h»)”}”(hŒExample linear temporal logic”h]”hŒExample linear temporal logic”…””}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj2h²hh³hÊh´K:ubj)”}”(hŒ+RAIN imply (GO_OUTSIDE imply HAVE_UMBRELLA)”h]”hŒ+RAIN imply (GO_OUTSIDE imply HAVE_UMBRELLA)”…””}”hjCsbah}”(h]”h ]”h"]”h$]”h&]”j&j'Œforce”‰Œlanguage”Œnone”Œhighlight_args”}”uh1jh³hÊh´K;hj2h²hubhÝ)”}”(hŒ@means: if it is raining, going outside means having an umbrella.”h]”hŒ@means: if it is raining, going outside means having an umbrella.”…””}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K?hj2h²hubj)”}”(hŒRAIN imply (WET until not RAIN)”h]”hŒRAIN imply (WET until not RAIN)”…””}”hjdsbah}”(h]”h ]”h"]”h$]”h&]”j&j'jQ‰jRjSjT}”uh1jh³hÊh´KAhj2h²hubhÝ)”}”(hŒDmeans: if it is raining, it is going to be wet until the rain stops.”h]”hŒDmeans: if it is raining, it is going to be wet until the rain stops.”…””}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KEhj2h²hubj)”}”(hŒRAIN imply eventually not RAIN”h]”hŒRAIN imply eventually not RAIN”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”j&j'jQ‰jRjSjT}”uh1jh³hÊh´KGhj2h²hubhÝ)”}”(hŒ3means: if it is raining, rain will eventually stop.”h]”hŒ3means: if it is raining, rain will eventually stop.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KKhj2h²hubhÝ)”}”(hŒâThe above examples are referring to the current time instance only. For kernel verification, the `always` operator is usually desirable, to specify that something is always true at the present and for all future. For example::”h]”(hŒaThe above examples are referring to the current time instance only. For kernel verification, the ”…””}”(hjžh²hh³Nh´NubhŒtitle_reference”“”)”}”(hŒ`always`”h]”hŒalways”…””}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjžubhŒx operator is usually desirable, to specify that something is always true at the present and for all future. For example:”…””}”(hjžh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KMhj2h²hubj)”}”(hŒ'always (RAIN imply eventually not RAIN)”h]”hŒ'always (RAIN imply eventually not RAIN)”…””}”hjÀsbah}”(h]”h ]”h"]”h$]”h&]”j&j'uh1jh³hÊh´KQhj2h²hubhÝ)”}”(hŒ#means: *all* rain eventually stops.”h]”(hŒmeans: ”…””}”(hjÎh²hh³Nh´NubhŒemphasis”“”)”}”(hŒ*all*”h]”hŒall”…””}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖhjÎubhŒ rain eventually stops.”…””}”(hjÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KShj2h²hubhÝ)”}”(hŒeIn the above examples, `RAIN`, `GO_OUTSIDE`, `HAVE_UMBRELLA` and `WET` are the "atomic propositions".”h]”(hŒIn the above examples, ”…””}”(hjðh²hh³Nh´Nubj§)”}”(hŒ`RAIN`”h]”hŒRAIN”…””}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjðubhŒ, ”…””}”(hjðh²hh³Nh´Nubj§)”}”(hŒ `GO_OUTSIDE`”h]”hŒ GO_OUTSIDE”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjðubhŒ, ”…””}”hjðsbj§)”}”(hŒ`HAVE_UMBRELLA`”h]”hŒ HAVE_UMBRELLA”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjðubhŒ and ”…””}”(hjðh²hh³Nh´Nubj§)”}”(hŒ`WET`”h]”hŒWET”…””}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjðubhŒ# are the “atomic propositionsâ€.”…””}”(hjðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KUhj2h²hubeh}”(h]”Œexample-linear-temporal-logic”ah ]”h"]”Œexample linear temporal logic”ah$]”h&]”uh1hµhh·h²hh³hÊh´K:ubh¶)”}”(hhh]”(h»)”}”(hŒMonitor synthesis”h]”hŒMonitor synthesis”…””}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjNh²hh³hÊh´KYubhÝ)”}”(hŒÑTo synthesize an LTL into a kernel monitor, the `rvgen` tool can be used: `tools/verification/rvgen`. The specification needs to be provided as a file, and it must have a "RULE = LTL" assignment. For example::”h]”(hŒ0To synthesize an LTL into a kernel monitor, the ”…””}”(hj_h²hh³Nh´Nubj§)”}”(hŒ`rvgen`”h]”hŒrvgen”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hj_ubhŒ tool can be used: ”…””}”(hj_h²hh³Nh´Nubj§)”}”(hŒ`tools/verification/rvgen`”h]”hŒtools/verification/rvgen”…””}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hj_ubhŒp. The specification needs to be provided as a file, and it must have a “RULE = LTL†assignment. For example:”…””}”(hj_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K[hjNh²hubj)”}”(hŒJRULE = always (ACQUIRE imply ((not KILLED and not CRASHED) until RELEASE))”h]”hŒJRULE = always (ACQUIRE imply ((not KILLED and not CRASHED) until RELEASE))”…””}”hj‘sbah}”(h]”h ]”h"]”h$]”h&]”j&j'uh1jh³hÊh´K_hjNh²hubhÝ)”}”(hŒRwhich says: if `ACQUIRE`, then `RELEASE` must happen before `KILLED` or `CRASHED`.”h]”(hŒwhich says: if ”…””}”(hjŸh²hh³Nh´Nubj§)”}”(hŒ `ACQUIRE`”h]”hŒACQUIRE”…””}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjŸubhŒ, then ”…””}”(hjŸh²hh³Nh´Nubj§)”}”(hŒ `RELEASE`”h]”hŒRELEASE”…””}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjŸubhŒ must happen before ”…””}”(hjŸh²hh³Nh´Nubj§)”}”(hŒ`KILLED`”h]”hŒKILLED”…””}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjŸubhŒ or ”…””}”(hjŸh²hh³Nh´Nubj§)”}”(hŒ `CRASHED`”h]”hŒCRASHED”…””}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjŸubhŒ.”…””}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KahjNh²hubhÝ)”}”(hŒMThe LTL can be broken down using sub-expressions. The above is equivalent to:”h]”hŒMThe LTL can be broken down using sub-expressions. The above is equivalent to:”…””}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KdhjNh²hubhŒ block_quote”“”)”}”(hŒj.. code-block:: RULE = always (ACQUIRE imply (ALIVE until RELEASE)) ALIVE = not KILLED and not CRASHED ”h]”j)”}”(hŒVRULE = always (ACQUIRE imply (ALIVE until RELEASE)) ALIVE = not KILLED and not CRASHED”h]”hŒVRULE = always (ACQUIRE imply (ALIVE until RELEASE)) ALIVE = not KILLED and not CRASHED”…””}”hj sbah}”(h]”h ]”h"]”h$]”h&]”j&j'jQ‰jRjSjT}”uh1jh³hÊh´Kfhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÊh´KfhjNh²hubhÝ)”}”(hŒóFrom this specification, `rvgen` generates the C implementation of a Buchi automaton - a non-deterministic state machine which checks the satisfiability of the LTL. See Documentation/trace/rv/monitor_synthesis.rst for details on using `rvgen`.”h]”(hŒFrom this specification, ”…””}”(hjh²hh³Nh´Nubj§)”}”(hŒ`rvgen`”h]”hŒrvgen”…””}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjubhŒË generates the C implementation of a Buchi automaton - a non-deterministic state machine which checks the satisfiability of the LTL. See Documentation/trace/rv/monitor_synthesis.rst for details on using ”…””}”(hjh²hh³Nh´Nubj§)”}”(hŒ`rvgen`”h]”hŒrvgen”…””}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¦hjubhŒ.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KkhjNh²hubeh}”(h]”Œmonitor-synthesis”ah ]”h"]”Œmonitor synthesis”ah$]”h&]”uh1hµhh·h²hh³hÊh´KYubh¶)”}”(hhh]”(h»)”}”(hŒ References”h]”hŒ References”…””}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjXh²hh³hÊh´KqubhÝ)”}”(hŒ?One book covering model checking and linear temporal logic is::”h]”hŒ>One book covering model checking and linear temporal logic is:”…””}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KshjXh²hubj)”}”(hŒZChristel Baier and Joost-Pieter Katoen: Principles of Model Checking, The MIT Press, 2008.”h]”hŒZChristel Baier and Joost-Pieter Katoen: Principles of Model Checking, The MIT Press, 2008.”…””}”hjwsbah}”(h]”h ]”h"]”h$]”h&]”j&j'uh1jh³hÊh´KuhjXh²hubhÝ)”}”(hŒHFor an example of using linear temporal logic in software testing, see::”h]”hŒGFor an example of using linear temporal logic in software testing, see:”…””}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KxhjXh²hubj)”}”(hXLRuijie Meng, Zhen Dong, Jialin Li, Ivan Beschastnikh, and Abhik Roychoudhury. 2022. Linear-time temporal logic guided greybox fuzzing. In Proceedings of the 44th International Conference on Software Engineering (ICSE '22). Association for Computing Machinery, New York, NY, USA, 1343–1355. https://doi.org/10.1145/3510003.3510082”h]”hXLRuijie Meng, Zhen Dong, Jialin Li, Ivan Beschastnikh, and Abhik Roychoudhury. 2022. Linear-time temporal logic guided greybox fuzzing. In Proceedings of the 44th International Conference on Software Engineering (ICSE '22). Association for Computing Machinery, New York, NY, USA, 1343–1355. https://doi.org/10.1145/3510003.3510082”…””}”hj“sbah}”(h]”h ]”h"]”h$]”h&]”j&j'uh1jh³hÊh´KzhjXh²hubhÝ)”}”(hŒ5The kernel's LTL monitor implementation is based on::”h]”hŒ6The kernel’s LTL monitor implementation is based on:”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K€hjXh²hubj)”}”(hX^Gerth, R., Peled, D., Vardi, M.Y., Wolper, P. (1996). Simple On-the-fly Automatic Verification of Linear Temporal Logic. In: DembiÅ„ski, P., Åšredniawa, M. (eds) Protocol Specification, Testing and Verification XV. PSTV 1995. IFIP Advances in Information and Communication Technology. Springer, Boston, MA. https://doi.org/10.1007/978-0-387-34892-6_1”h]”hX^Gerth, R., Peled, D., Vardi, M.Y., Wolper, P. (1996). Simple On-the-fly Automatic Verification of Linear Temporal Logic. In: DembiÅ„ski, P., Åšredniawa, M. (eds) Protocol Specification, Testing and Verification XV. PSTV 1995. IFIP Advances in Information and Communication Technology. Springer, Boston, MA. https://doi.org/10.1007/978-0-387-34892-6_1”…””}”hj¯sbah}”(h]”h ]”h"]”h$]”h&]”j&j'uh1jh³hÊh´K‚hjXh²hubeh}”(h]”Œ references”ah ]”h"]”Œ references”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kqubeh}”(h]”Œlinear-temporal-logic”ah ]”h"]”Œlinear temporal logic”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jðŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÊjÇj-j*j/j,jKjHjUjRjÂj¿uŒ nametypes”}”(jʉj-‰j/‰jK‰jU‰j‰uh}”(jÇh·j*hËj,j0jHj2jRjNj¿jXuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.